diff --git a/src/p_setup.c b/src/p_setup.c
index cd9185484..5309705f6 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -3009,7 +3009,7 @@ static inline void P_LoadSubsectors(UINT8 *data)
 	for (i = 0; i < numsubsectors; i++, ss++, ms++)
 	{
 		ss->numlines = SHORT(ms->numsegs);
-		ss->firstline = SHORT(ms->firstseg);
+		ss->firstline = (UINT16)SHORT(ms->firstseg);
 		P_InitializeSubsector(ss);
 	}
 }
diff --git a/src/r_defs.h b/src/r_defs.h
index dbede806e..3746643c6 100644
--- a/src/r_defs.h
+++ b/src/r_defs.h
@@ -587,7 +587,7 @@ typedef struct subsector_s
 {
 	sector_t *sector;
 	INT16 numlines;
-	UINT16 firstline;
+	UINT32 firstline;
 	struct polyobj_s *polyList; // haleyjd 02/19/06: list of polyobjects
 	size_t validcount;
 } subsector_t;