diff --git a/src/p_lights.c b/src/p_lights.c
index aae26ecc49faf57136fea502562c03cf8f56cf84..e8da48e9ae0e73a50f3f6cf1afdf3f7a9bc785d5 100644
--- a/src/p_lights.c
+++ b/src/p_lights.c
@@ -54,9 +54,9 @@ void T_FireFlicker(fireflicker_t *flick)
 	amount = (INT16)((UINT8)(P_RandomByte() & 3) * 16);
 
 	if (flick->sector->lightlevel - amount < flick->minlight)
-		flick->sector->lightlevel = (INT16)flick->minlight;
+		flick->sector->lightlevel = flick->minlight;
 	else
-		flick->sector->lightlevel = (INT16)((INT16)flick->maxlight - amount);
+		flick->sector->lightlevel = flick->maxlight - amount;
 
 	flick->count = flick->resetcount;
 }
@@ -97,7 +97,7 @@ fireflicker_t *P_SpawnAdjustableFireFlicker(sector_t *sector, INT16 lighta, INT1
 	}
 
 	// Make sure the starting light level is in range.
-	sector->lightlevel = max((INT16)flick->minlight, min((INT16)flick->maxlight, sector->lightlevel));
+	sector->lightlevel = max(flick->minlight, min(flick->maxlight, sector->lightlevel));
 
 	return flick;
 }
@@ -178,12 +178,12 @@ void T_StrobeFlash(strobe_t *flash)
 
 	if (flash->sector->lightlevel == flash->minlight)
 	{
-		flash->sector->lightlevel = (INT16)flash->maxlight;
+		flash->sector->lightlevel = flash->maxlight;
 		flash->count = flash->brighttime;
 	}
 	else
 	{
-		flash->sector->lightlevel = (INT16)flash->minlight;
+		flash->sector->lightlevel = flash->minlight;
 		flash->count = flash->darktime;
 	}
 }
@@ -228,7 +228,7 @@ strobe_t *P_SpawnAdjustableStrobeFlash(sector_t *sector, INT16 lighta, INT16 lig
 		flash->count = 1;
 
 	// Make sure the starting light level is in range.
-	sector->lightlevel = max((INT16)flash->minlight, min((INT16)flash->maxlight, sector->lightlevel));
+	sector->lightlevel = max(flash->minlight, min(flash->maxlight, sector->lightlevel));
 
 	sector->lightingdata = flash;
 	return flash;
@@ -245,20 +245,20 @@ void T_Glow(glow_t *g)
 	{
 		case -1:
 			// DOWN
-			g->sector->lightlevel = (INT16)(g->sector->lightlevel - (INT16)g->speed);
+			g->sector->lightlevel -= g->speed;
 			if (g->sector->lightlevel <= g->minlight)
 			{
-				g->sector->lightlevel = (INT16)(g->sector->lightlevel + (INT16)g->speed);
+				g->sector->lightlevel += g->speed;
 				g->direction = 1;
 			}
 			break;
 
 		case 1:
 			// UP
-			g->sector->lightlevel = (INT16)(g->sector->lightlevel + (INT16)g->speed);
+			g->sector->lightlevel += g->speed;
 			if (g->sector->lightlevel >= g->maxlight)
 			{
-				g->sector->lightlevel = (INT16)(g->sector->lightlevel - (INT16)g->speed);
+				g->sector->lightlevel -= g->speed;
 				g->direction = -1;
 			}
 			break;
@@ -287,7 +287,7 @@ glow_t *P_SpawnAdjustableGlowingLight(sector_t *sector, INT16 lighta, INT16 ligh
 	g->maxlight = max(lighta, lightb);
 	g->thinker.function.acp1 = (actionf_p1)T_Glow;
 	g->direction = 1;
-	g->speed = length/4;
+	g->speed = (INT16)(length/4);
 	if (g->speed > (g->maxlight - g->minlight)/2) // don't make it ridiculous speed
 		g->speed = (g->maxlight - g->minlight)/2;
 
@@ -302,7 +302,7 @@ glow_t *P_SpawnAdjustableGlowingLight(sector_t *sector, INT16 lighta, INT16 ligh
 	}
 
 	// Make sure the starting light level is in range.
-	sector->lightlevel = max((INT16)g->minlight, min((INT16)g->maxlight, sector->lightlevel));
+	sector->lightlevel = max(g->minlight, min(g->maxlight, sector->lightlevel));
 
 	sector->lightingdata = g;
 
diff --git a/src/p_saveg.c b/src/p_saveg.c
index ed849418ae949bb9dbc7619d4b7dc7ab97a6a001..b170118377d59a28107917f65573b18e5088c092 100644
--- a/src/p_saveg.c
+++ b/src/p_saveg.c
@@ -2083,8 +2083,8 @@ static void SaveStrobeThinker(const thinker_t *th, const UINT8 type)
 	WRITEUINT8(save_p, type);
 	WRITEUINT32(save_p, SaveSector(ht->sector));
 	WRITEINT32(save_p, ht->count);
-	WRITEINT32(save_p, ht->minlight);
-	WRITEINT32(save_p, ht->maxlight);
+	WRITEINT16(save_p, ht->minlight);
+	WRITEINT16(save_p, ht->maxlight);
 	WRITEINT32(save_p, ht->darktime);
 	WRITEINT32(save_p, ht->brighttime);
 }
@@ -2094,10 +2094,10 @@ static void SaveGlowThinker(const thinker_t *th, const UINT8 type)
 	const glow_t *ht = (const void *)th;
 	WRITEUINT8(save_p, type);
 	WRITEUINT32(save_p, SaveSector(ht->sector));
-	WRITEINT32(save_p, ht->minlight);
-	WRITEINT32(save_p, ht->maxlight);
-	WRITEINT32(save_p, ht->direction);
-	WRITEINT32(save_p, ht->speed);
+	WRITEINT16(save_p, ht->minlight);
+	WRITEINT16(save_p, ht->maxlight);
+	WRITEINT16(save_p, ht->direction);
+	WRITEINT16(save_p, ht->speed);
 }
 
 static inline void SaveFireflickerThinker(const thinker_t *th, const UINT8 type)
@@ -2107,8 +2107,8 @@ static inline void SaveFireflickerThinker(const thinker_t *th, const UINT8 type)
 	WRITEUINT32(save_p, SaveSector(ht->sector));
 	WRITEINT32(save_p, ht->count);
 	WRITEINT32(save_p, ht->resetcount);
-	WRITEINT32(save_p, ht->maxlight);
-	WRITEINT32(save_p, ht->minlight);
+	WRITEINT16(save_p, ht->maxlight);
+	WRITEINT16(save_p, ht->minlight);
 }
 
 static void SaveElevatorThinker(const thinker_t *th, const UINT8 type)
@@ -3212,8 +3212,8 @@ static thinker_t* LoadStrobeThinker(actionf_p1 thinker)
 	ht->thinker.function.acp1 = thinker;
 	ht->sector = LoadSector(READUINT32(save_p));
 	ht->count = READINT32(save_p);
-	ht->minlight = READINT32(save_p);
-	ht->maxlight = READINT32(save_p);
+	ht->minlight = READINT16(save_p);
+	ht->maxlight = READINT16(save_p);
 	ht->darktime = READINT32(save_p);
 	ht->brighttime = READINT32(save_p);
 	if (ht->sector)
@@ -3226,10 +3226,10 @@ static thinker_t* LoadGlowThinker(actionf_p1 thinker)
 	glow_t *ht = Z_Malloc(sizeof (*ht), PU_LEVSPEC, NULL);
 	ht->thinker.function.acp1 = thinker;
 	ht->sector = LoadSector(READUINT32(save_p));
-	ht->minlight = READINT32(save_p);
-	ht->maxlight = READINT32(save_p);
-	ht->direction = READINT32(save_p);
-	ht->speed = READINT32(save_p);
+	ht->minlight = READINT16(save_p);
+	ht->maxlight = READINT16(save_p);
+	ht->direction = READINT16(save_p);
+	ht->speed = READINT16(save_p);
 	if (ht->sector)
 		ht->sector->lightingdata = ht;
 	return &ht->thinker;
@@ -3242,8 +3242,8 @@ static thinker_t* LoadFireflickerThinker(actionf_p1 thinker)
 	ht->sector = LoadSector(READUINT32(save_p));
 	ht->count = READINT32(save_p);
 	ht->resetcount = READINT32(save_p);
-	ht->maxlight = READINT32(save_p);
-	ht->minlight = READINT32(save_p);
+	ht->maxlight = READINT16(save_p);
+	ht->minlight = READINT16(save_p);
 	if (ht->sector)
 		ht->sector->lightingdata = ht;
 	return &ht->thinker;
diff --git a/src/p_spec.h b/src/p_spec.h
index 95005882b546e3989832e5854b6e6e7de6c1c780..17e10d75bfa241fd43c77b1c005f90a471f281c5 100644
--- a/src/p_spec.h
+++ b/src/p_spec.h
@@ -216,8 +216,8 @@ typedef struct
 	sector_t *sector;  ///< The sector where action is taking place.
 	INT32 count;
 	INT32 resetcount;
-	INT32 maxlight;    ///< The brightest light level to use.
-	INT32 minlight;    ///< The darkest light level to use.
+	INT16 maxlight;    ///< The brightest light level to use.
+	INT16 minlight;    ///< The darkest light level to use.
 } fireflicker_t;
 
 typedef struct
@@ -245,8 +245,8 @@ typedef struct
 	thinker_t thinker; ///< The thinker in use for the effect.
 	sector_t *sector;  ///< The sector where the action is taking place.
 	INT32 count;
-	INT32 minlight;    ///< The minimum light level to use.
-	INT32 maxlight;    ///< The maximum light level to use.
+	INT16 minlight;    ///< The minimum light level to use.
+	INT16 maxlight;    ///< The maximum light level to use.
 	INT32 darktime;    ///< How INT32 to use minlight.
 	INT32 brighttime;  ///< How INT32 to use maxlight.
 } strobe_t;
@@ -255,10 +255,10 @@ typedef struct
 {
 	thinker_t thinker;
 	sector_t *sector;
-	INT32 minlight;
-	INT32 maxlight;
-	INT32 direction;
-	INT32 speed;
+	INT16 minlight;
+	INT16 maxlight;
+	INT16 direction;
+	INT16 speed;
 } glow_t;
 
 /** Thinker struct for fading lights.