diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index 6d9705b40d74a8891b505137741b962719d04e5b..3a80519efb973bc919b52a197fbf8beb7c77616c 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -612,6 +612,7 @@ void D_RegisterClientCommands(void)
 
 	CV_RegisterVar(&cv_screenshot_option);
 	CV_RegisterVar(&cv_screenshot_folder);
+	CV_RegisterVar(&cv_screenshot_colorprofile);
 	CV_RegisterVar(&cv_moviemode);
 	// PNG variables
 	CV_RegisterVar(&cv_zlib_level);
diff --git a/src/m_anigif.c b/src/m_anigif.c
index 2540665ad57e8f901f315238ad74d9c352e01878..2c1ceb86b6fc8871cd51c809b1f00f663f8e9881 100644
--- a/src/m_anigif.c
+++ b/src/m_anigif.c
@@ -18,6 +18,7 @@
 #include "z_zone.h"
 #include "v_video.h"
 #include "i_video.h"
+#include "m_misc.h"
 
 // GIFs are always little-endian
 #include "byteptr.h"
@@ -396,7 +397,6 @@ static void GIF_headwrite(void)
 {
 	UINT8 *gifhead = Z_Malloc(800, PU_STATIC, NULL);
 	UINT8 *p = gifhead;
-	RGBA_t *c;
 	INT32 i;
 	UINT16 rwidth, rheight;
 
@@ -427,12 +427,24 @@ static void GIF_headwrite(void)
 	WRITEUINT8(p, 0x00);
 
 	// write color table
-	for (i = 0; i < 256; ++i)
+	if (cv_screenshot_colorprofile.value)
 	{
-		c = &pLocalPalette[i];
-		WRITEUINT8(p, c->s.red);
-		WRITEUINT8(p, c->s.green);
-		WRITEUINT8(p, c->s.blue);
+		for (i = 0; i < 256; i++)
+		{
+			WRITEUINT8(p, pLocalPalette[i].s.red);
+			WRITEUINT8(p, pLocalPalette[i].s.green);
+			WRITEUINT8(p, pLocalPalette[i].s.blue);
+		}
+	}
+	else
+	{
+		const UINT8 *pal = (UINT8 *)W_CacheLumpName(GetPalette(), PU_CACHE);
+		for (i = 0; i < 256; i++)
+		{
+			WRITEUINT8(p, *pal); pal++;
+			WRITEUINT8(p, *pal); pal++;
+			WRITEUINT8(p, *pal); pal++;
+		}
 	}
 
 	// write extension block
diff --git a/src/m_menu.c b/src/m_menu.c
index 8dfc2ee0aa9eb636278a05c603c42fb6d651c413..d52895289681f971749dbbb7e3edd7b7b8ec9270 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -1314,35 +1314,36 @@ static menuitem_t OP_DataOptionsMenu[] =
 
 static menuitem_t OP_ScreenshotOptionsMenu[] =
 {
-	{IT_STRING|IT_CVAR, NULL, "Storage Location", &cv_screenshot_option, 10},
-	{IT_STRING|IT_CVAR|IT_CV_STRING, NULL, "Custom Folder", &cv_screenshot_folder, 20},
-
-	{IT_HEADER, NULL, "Screenshots (F8)", NULL, 48},
-	{IT_STRING|IT_CVAR, NULL, "Memory Level",      &cv_zlib_memory,      60},
-	{IT_STRING|IT_CVAR, NULL, "Compression Level", &cv_zlib_level,       70},
-	{IT_STRING|IT_CVAR, NULL, "Strategy",          &cv_zlib_strategy,    80},
-	{IT_STRING|IT_CVAR, NULL, "Window Size",       &cv_zlib_window_bits, 90},
-
-	{IT_HEADER, NULL, "Movie Mode (F9)", NULL, 103},
-	{IT_STRING|IT_CVAR, NULL, "Capture Mode", &cv_moviemode, 115},
-
-	{IT_STRING|IT_CVAR, NULL, "Region Optimizing", &cv_gif_optimize,  125},
-	{IT_STRING|IT_CVAR, NULL, "Downscaling",       &cv_gif_downscale, 135},
-
-	{IT_STRING|IT_CVAR, NULL, "Memory Level",      &cv_zlib_memorya,      125},
-	{IT_STRING|IT_CVAR, NULL, "Compression Level", &cv_zlib_levela,       135},
-	{IT_STRING|IT_CVAR, NULL, "Strategy",          &cv_zlib_strategya,    145},
-	{IT_STRING|IT_CVAR, NULL, "Window Size",       &cv_zlib_window_bitsa, 155},
+	{IT_STRING|IT_CVAR, NULL, "Use color profile", &cv_screenshot_colorprofile,     0},
+	{IT_STRING|IT_CVAR, NULL, "Storage Location",  &cv_screenshot_option,           5},
+	{IT_STRING|IT_CVAR|IT_CV_STRING, NULL, "Custom Folder", &cv_screenshot_folder, 10},
+
+	{IT_HEADER, NULL, "Screenshots (F8)", NULL, 24},
+	{IT_STRING|IT_CVAR, NULL, "Memory Level",      &cv_zlib_memory,                30},
+	{IT_STRING|IT_CVAR, NULL, "Compression Level", &cv_zlib_level,                 35},
+	{IT_STRING|IT_CVAR, NULL, "Strategy",          &cv_zlib_strategy,              40},
+	{IT_STRING|IT_CVAR, NULL, "Window Size",       &cv_zlib_window_bits,           45},
+
+	{IT_HEADER, NULL, "Movie Mode (F9)", NULL, 54},
+	{IT_STRING|IT_CVAR, NULL, "Capture Mode",      &cv_moviemode,                  60},
+
+	{IT_STRING|IT_CVAR, NULL, "Region Optimizing", &cv_gif_optimize,               65},
+	{IT_STRING|IT_CVAR, NULL, "Downscaling",       &cv_gif_downscale,              70},
+
+	{IT_STRING|IT_CVAR, NULL, "Memory Level",      &cv_zlib_memorya,               65},
+	{IT_STRING|IT_CVAR, NULL, "Compression Level", &cv_zlib_levela,                70},
+	{IT_STRING|IT_CVAR, NULL, "Strategy",          &cv_zlib_strategya,             75},
+	{IT_STRING|IT_CVAR, NULL, "Window Size",       &cv_zlib_window_bitsa,          80},
 };
 
 enum
 {
-	op_screenshot_folder = 1,
-	op_screenshot_capture = 8,
-	op_screenshot_gif_start = 9,
-	op_screenshot_gif_end = 10,
-	op_screenshot_apng_start = 11,
-	op_screenshot_apng_end = 14,
+	op_screenshot_folder = 2,
+	op_screenshot_capture = 9,
+	op_screenshot_gif_start = 10,
+	op_screenshot_gif_end = 11,
+	op_screenshot_apng_start = 12,
+	op_screenshot_apng_end = 15,
 };
 
 static menuitem_t OP_EraseDataMenu[] =
@@ -1841,7 +1842,19 @@ menu_t OP_OpenGLColorDef =
 };
 #endif
 menu_t OP_DataOptionsDef = DEFAULTMENUSTYLE("M_DATA", OP_DataOptionsMenu, &OP_MainDef, 30, 30);
-menu_t OP_ScreenshotOptionsDef = DEFAULTMENUSTYLE("M_DATA", OP_ScreenshotOptionsMenu, &OP_DataOptionsDef, 30, 30);
+
+menu_t OP_ScreenshotOptionsDef =
+{
+	"M_DATA",
+	sizeof (OP_ScreenshotOptionsMenu)/sizeof (menuitem_t),
+	&OP_DataOptionsDef,
+	OP_ScreenshotOptionsMenu,
+	M_DrawGenericScrollMenu,
+	30, 30,
+	0,
+	NULL
+};
+
 menu_t OP_EraseDataDef = DEFAULTMENUSTYLE("M_DATA", OP_EraseDataMenu, &OP_DataOptionsDef, 60, 30);
 
 // ==========================================================================
@@ -3279,7 +3292,7 @@ static void M_DrawGenericScrollMenu(void)
 
 	for (max = currentMenu->numitems; max > 0; max--)
 	{
-		if (currentMenu->menuitems[max-1].status != IT_DISABLED && currentMenu->menuitems[max-1].alphaKey*2 + tempcentery <= (currentMenu->y + 2*scrollareaheight))
+		if (currentMenu->menuitems[max-1].alphaKey*2 + tempcentery <= (currentMenu->y + 2*scrollareaheight))
 			break;
 	}
 
diff --git a/src/m_misc.c b/src/m_misc.c
index 851352a7ec74556a3e7f9153729274206d962143..d94df468e350da2708673fa4f39fbf013db7341a 100644
--- a/src/m_misc.c
+++ b/src/m_misc.c
@@ -100,6 +100,8 @@ static CV_PossibleValue_t screenshot_cons_t[] = {{0, "Default"}, {1, "HOME"}, {2
 consvar_t cv_screenshot_option = {"screenshot_option", "Default", CV_SAVE|CV_CALL, screenshot_cons_t, Screenshot_option_Onchange, 0, NULL, NULL, 0, 0, NULL};
 consvar_t cv_screenshot_folder = {"screenshot_folder", "", CV_SAVE, NULL, NULL, 0, NULL, NULL, 0, 0, NULL};
 
+consvar_t cv_screenshot_colorprofile = {"screenshot_colorprofile", "Yes", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
+
 static CV_PossibleValue_t moviemode_cons_t[] = {{MM_GIF, "GIF"}, {MM_APNG, "aPNG"}, {MM_SCREENSHOT, "Screenshots"}, {0, NULL}};
 consvar_t cv_moviemode = {"moviemode_mode", "GIF", CV_SAVE|CV_CALL, moviemode_cons_t, Moviemode_mode_Onchange, 0, NULL, NULL, 0, 0, NULL};
 
@@ -617,11 +619,24 @@ static void M_PNGhdr(png_structp png_ptr, png_infop png_info_ptr, PNG_CONST png_
 	{
 		png_colorp png_PLTE = png_malloc(png_ptr, sizeof(png_color)*256); //palette
 		png_uint_16 i;
-		for (i = 0; i < 256; i++)
+		if (cv_screenshot_colorprofile.value)
+		{
+			for (i = 0; i < 256; i++)
+			{
+				png_PLTE[i].red   = pLocalPalette[i].s.red;
+				png_PLTE[i].green = pLocalPalette[i].s.green;
+				png_PLTE[i].blue  = pLocalPalette[i].s.blue;
+			}
+		}
+		else
 		{
-			png_PLTE[i].red   = pLocalPalette[i].s.red;
-			png_PLTE[i].green = pLocalPalette[i].s.green;
-			png_PLTE[i].blue  = pLocalPalette[i].s.blue;
+			const png_byte *pal = (png_byte *)W_CacheLumpName(GetPalette(), PU_CACHE);
+			for (i = 0; i < 256; i++)
+			{
+				png_PLTE[i].red   = *pal++;
+				png_PLTE[i].green = *pal++;
+				png_PLTE[i].blue  = *pal++;
+			}
 		}
 		png_set_IHDR(png_ptr, png_info_ptr, width, height, 8, PNG_COLOR_TYPE_PALETTE,
 		 png_interlace, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
diff --git a/src/m_misc.h b/src/m_misc.h
index 55c4f14858f657bda28c9b7e3861a9fd0cfbc174..85d819a3cf703ed697b9941c69a53575210b3579 100644
--- a/src/m_misc.h
+++ b/src/m_misc.h
@@ -29,7 +29,7 @@ typedef enum {
 } moviemode_t;
 extern moviemode_t moviemode;
 
-extern consvar_t cv_screenshot_option, cv_screenshot_folder;
+extern consvar_t cv_screenshot_option, cv_screenshot_folder, cv_screenshot_colorprofile;
 extern consvar_t cv_moviemode;
 extern consvar_t cv_zlib_memory, cv_zlib_level, cv_zlib_strategy, cv_zlib_window_bits;
 extern consvar_t cv_zlib_memorya, cv_zlib_levela, cv_zlib_strategya, cv_zlib_window_bitsa;