diff --git a/src/p_saveg.c b/src/p_saveg.c
index 7ee41dffdfd88417a1cc3a3591aaafd664bc7172..710c24821833a6b94b678953e5ab567130d95479 100644
--- a/src/p_saveg.c
+++ b/src/p_saveg.c
@@ -662,15 +662,6 @@ static void P_NetArchiveWorld(void)
 				WRITEUINT8(put, ss->extra_colormap->fadeend);
 				WRITEUINT8(put, (UINT8)ss->extra_colormap->fog);
 
-				WRITEUINT8(put, ss->extra_colormap->cr);
-				WRITEUINT8(put, ss->extra_colormap->cg);
-				WRITEUINT8(put, ss->extra_colormap->cb);
-				WRITEUINT8(put, ss->extra_colormap->ca);
-				WRITEUINT8(put, ss->extra_colormap->cfr);
-				WRITEUINT8(put, ss->extra_colormap->cfg);
-				WRITEUINT8(put, ss->extra_colormap->cfb);
-				WRITEUINT8(put, ss->extra_colormap->cfa);
-
 				WRITEINT32(put, ss->extra_colormap->rgba);
 				WRITEINT32(put, ss->extra_colormap->fadergba);
 
@@ -883,15 +874,6 @@ static void P_NetUnArchiveWorld(void)
 
 			boolean fog = (boolean)READUINT8(get);
 
-			UINT8 cr = READUINT8(get),
-				cg = READUINT8(get),
-				cb = READUINT8(get),
-				ca = READUINT8(get),
-				cfr = READUINT8(get),
-				cfg = READUINT8(get),
-				cfb = READUINT8(get),
-				cfa = READUINT8(get);
-
 			INT32 rgba = READINT32(get),
 				fadergba = READINT32(get);
 
@@ -905,20 +887,6 @@ static void P_NetUnArchiveWorld(void)
 			{
 #endif
 
-			for (exc = extra_colormaps; exc; exc = exc->next)
-			{
-#ifdef EXTRACOLORMAPLUMPS
-				if (exc->lump != LUMPERROR)
-					continue;
-#endif
-				if (cr == exc->cr && cg == exc->cg && cb == exc->cb && ca == exc->ca
-					&& cfr == exc->cfr && cfg == exc->cfg && cfb == exc->cfb && cfa == exc->cfa
-					&& fadestart == exc->fadestart
-					&& fadeend == exc->fadeend
-					&& fog == exc->fog)
-					break;
-			}
-
 			for (exc = extra_colormaps; exc; exc = exc->next)
 			{
 #ifdef EXTRACOLORMAPLUMPS
@@ -928,14 +896,15 @@ static void P_NetUnArchiveWorld(void)
 					continue;
 				}
 #endif
-				if (cr == exc->cr && cg == exc->cg && cb == exc->cb && ca == exc->ca
-					&& cfr == exc->cfr && cfg == exc->cfg && cfb == exc->cfb && cfa == exc->cfa
+				if (rgba == exc->rgba
+					&& fadergba == exc->fadergba
 					&& fadestart == exc->fadestart
 					&& fadeend == exc->fadeend
 					&& fog == exc->fog)
 				{
 					// CONS_Debug(DBG_RENDER, "P_NetUnArchiveWorld: Found map %d: rgba(%d,%d,%d,%d) fadergba(%d,%d,%d,%d)\n",
-					// 	dbg_i, cr, cg, cb, ca, cfr, cfg, cfb, cfa);
+					// 	dbg_i, (rgba)&0xFF, (rgba>>8)&0xFF, (rgba>>16)&0xFF, (rgba>>24)&0xFF,
+					//	(fadergba)&0xFF, (fadergba>>8)&0xFF, (fadergba>>16)&0xFF, (fadergba>>24)&0xFF);
 					break;
 				}
 				//dbg_i++;
@@ -944,7 +913,8 @@ static void P_NetUnArchiveWorld(void)
 			if (!exc)
 			{
 				// CONS_Debug(DBG_RENDER, "P_NetUnArchiveWorld: Creating map %d: rgba(%d,%d,%d,%d) fadergba(%d,%d,%d,%d)\n",
-				// 	dbg_i, cr, cg, cb, ca, cfr, cfg, cfb, cfa);
+				// 	dbg_i, (rgba)&0xFF, (rgba>>8)&0xFF, (rgba>>16)&0xFF, (rgba>>24)&0xFF,
+				//	(fadergba)&0xFF, (fadergba>>8)&0xFF, (fadergba>>16)&0xFF, (fadergba>>24)&0xFF);
 
 				exc = Z_Calloc(sizeof (*exc), PU_LEVEL, NULL);
 
@@ -952,15 +922,6 @@ static void P_NetUnArchiveWorld(void)
 				exc->fadeend = fadeend;
 				exc->fog = fog;
 
-				exc->cr = cr;
-				exc->cg = cg;
-				exc->cb = cb;
-				exc->ca = ca;
-				exc->cfr = cfr;
-				exc->cfg = cfg;
-				exc->cfb = cfb;
-				exc->cfa = cfa;
-
 				exc->rgba = rgba;
 				exc->fadergba = fadergba;
 
diff --git a/src/r_data.c b/src/r_data.c
index ffc6cc7fdc6ca7a8f811a74f79c3458f896bd6dc..005056ec0a00b98fc589746f82c34957d31c5ff9 100644
--- a/src/r_data.c
+++ b/src/r_data.c
@@ -1332,10 +1332,6 @@ void R_ClearColormaps(void)
 
 	// make a default extra_colormap
 	exc = Z_Calloc(sizeof (*exc), PU_LEVEL, NULL);
-	exc->cr = exc->cg = exc->cb = 0xff;
-	exc->ca = 0;
-	exc->cfr = exc->cfg = exc->cfb = 0;
-	exc->cfa = 18;
 	exc->fadestart = 0;
 	exc->fadeend = 31;
 	exc->fog = 0;
@@ -1411,10 +1407,6 @@ extracolormap_t *R_ColormapForName(char *name)
 
 	// We set all params of the colormap to normal because there
 	// is no real way to tell how GL should handle a colormap lump anyway..
-	exc->cr = exc->cg = exc->cb = 0xff;
-	exc->ca = 0;
-	exc->cfr = exc->cfg = exc->cfb = 0;
-	exc->cfa = 18;
 	exc->fadestart = 0;
 	exc->fadeend = 31;
 	exc->fog = 0;
@@ -1445,14 +1437,14 @@ lighttable_t *R_CreateLightTable(extracolormap_t *extra_colormap)
 	double cmaskr, cmaskg, cmaskb, cdestr, cdestg, cdestb;
 	double maskamt = 0, othermask = 0;
 
-	UINT8 cr = extra_colormap->cr,
-		cg = extra_colormap->cg,
-		cb = extra_colormap->cb,
-		ca = extra_colormap->ca,
-		cfr = extra_colormap->cfr,
-		cfg = extra_colormap->cfg,
-		cfb = extra_colormap->cfb;
-//		cfa = extra_colormap->cfa; // unused in software
+	UINT8 cr = (extra_colormap->rgba) & 0xFF,
+		cg = (extra_colormap->rgba >> 8) & 0xFF,
+		cb = (extra_colormap->rgba >> 16) & 0xFF,
+		ca = (extra_colormap->rgba >> 24) & 0xFF,
+		cfr = (extra_colormap->fadergba) & 0xFF,
+		cfg = (extra_colormap->fadergba >> 8) & 0xFF,
+		cfb = (extra_colormap->fadergba >> 16) & 0xFF;
+//		cfa = (extra_colormap->fadergba >> 24) & 0xFF; // unused in software
 
 	UINT8 fadestart = extra_colormap->fadestart,
 		fadedist = extra_colormap->fadeend - extra_colormap->fadestart;
@@ -1594,22 +1586,13 @@ extracolormap_t *R_CreateColormap(char *p1, char *p2, char *p3)
 		else if (p1[7] >= 'A' && p1[7] <= 'Z')
 			ca = (p1[7] - 'A');
 		else
-			ca = 24;
+			ca = 25;
 
-		// for opengl; generate on software too for netsync
-		rgba = (HEX2INT(p1[1]) << 4) + (HEX2INT(p1[2]) << 0) +
-			(HEX2INT(p1[3]) << 12) + (HEX2INT(p1[4]) << 8) +
-			(HEX2INT(p1[5]) << 20) + (HEX2INT(p1[6]) << 16);
-
-		if ((p1[7] >= 'a' && p1[7] <= 'z') || (p1[7] >= 'A' && p1[7] <= 'Z'))
-			rgba += (ALPHA2INT(p1[7]) << 24);
-		else
-			rgba += (25 << 24);
+		rgba = cr + (cg << 8) + (cb << 16) + (ca << 24);
 	}
 	else
 	{
-		cr = cg = cb = 0xff;
-		ca = 0;
+		cr = cg = cb = ca = 0;
 		rgba = 0;
 	}
 
@@ -1638,22 +1621,14 @@ extracolormap_t *R_CreateColormap(char *p1, char *p2, char *p3)
 		else if (p1[7] >= 'A' && p1[7] <= 'Z')
 			cfa = (p1[7] - 'A');
 		else
-			cfa = 18;
-
-		// for opengl; generate on software too for netsync
-		fadergba = (HEX2INT(p3[1]) << 4) + (HEX2INT(p3[2]) << 0) +
-			(HEX2INT(p3[3]) << 12) + (HEX2INT(p3[4]) << 8) +
-			(HEX2INT(p3[5]) << 20) + (HEX2INT(p3[6]) << 16);
+			cfa = 25;
 
-		if ((p3[7] >= 'a' && p3[7] <= 'z') || (p3[7] >= 'A' && p3[7] <= 'Z'))
-			fadergba += (ALPHA2INT(p3[7]) << 24);
-		else
-			fadergba += (25 << 24);
+		fadergba = cfr + (cfg << 8) + (cfb << 16) + (cfa << 24);
 	}
 	else
 	{
 		cfr = cfg = cfb = 0;
-		cfa = 18;
+		cfa = 25;
 		fadergba = 0x19000000; // default alpha for fade, (25 << 24)
 	}
 #undef ALPHA2INT
@@ -1668,8 +1643,8 @@ extracolormap_t *R_CreateColormap(char *p1, char *p2, char *p3)
 			continue;
 		}
 #endif
-		if (cr == exc->cr && cg == exc->cg && cb == exc->cb && ca == exc->ca
-			&& cfr == exc->cfr && cfg == exc->cfg && cfb == exc->cfb && cfa == exc->cfa
+		if (rgba == exc->rgba
+			&& fadergba == exc->fadergba
 			&& fadestart == exc->fadestart
 			&& fadeend == exc->fadeend
 			&& fog == exc->fog)
@@ -1690,15 +1665,6 @@ extracolormap_t *R_CreateColormap(char *p1, char *p2, char *p3)
 	extra_colormap->fadeend = (UINT16)fadeend;
 	extra_colormap->fog = fog;
 
-	extra_colormap->cr = cr;
-	extra_colormap->cg = cg;
-	extra_colormap->cb = cb;
-	extra_colormap->ca = ca;
-	extra_colormap->cfr = cfr;
-	extra_colormap->cfg = cfg;
-	extra_colormap->cfb = cfb;
-	extra_colormap->cfa = cfa;
-
 	extra_colormap->rgba = rgba;
 	extra_colormap->fadergba = fadergba;
 
diff --git a/src/r_defs.h b/src/r_defs.h
index 22d4fdf14af813ea4b11586e78acc73eb7cfca38..99fad2b44acdffcd74b7fdea264f09656350425c 100644
--- a/src/r_defs.h
+++ b/src/r_defs.h
@@ -55,10 +55,8 @@ typedef struct extracolormap_s
 	UINT8 fadestart, fadeend;
 	boolean fog;
 
-	// rgba for colormap table generation
-	UINT8 cr, cg, cb, ca, cfr, cfg, cfb, cfa;
-
-	// rgba is used in hw mode for colored sector lighting
+	// store rgba values in combined bitwise
+	// also used in OpenGL instead lighttables
 	INT32 rgba; // similar to maskcolor in sw mode
 	INT32 fadergba; // The colour the colourmaps fade to