diff --git a/src/m_menu.c b/src/m_menu.c
index 3451b90d63a5b5ed1f3b0ca663a0a45392c90286..ff9d04c531bb33acc8ad1b352e5082b3518538e3 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -12183,21 +12183,36 @@ colordraw:
 		{
 			for (i = 0; i < 16; i++)
 			{
-				if (skincolors[mc->color].accessible && !stoprow)
+				if (skincolors[mc->color].accessible)
 				{
 					M_DrawColorRamp(x + i*w, y + j*16, w, 1, skincolors[mc->color]);
-					if (mc->color == setupm_fakecolor->color) // store current color position
-						{
-							cx = x + i*w;
-							cy = y + j*16;
-						}
+
+					if (mc == setupm_fakecolor) // store current color position
+					{
+						cx = x + i*w;
+						cy = y + j*16;
+					}
 				}
-				mc = mc->next;
-				while (!skincolors[mc->color].accessible && !stoprow) // Find accessible color after this one
+
+				if (stoprow)
 				{
-					mc = mc->next;
-					if (mc == menucolortail) stoprow = true;
+					break;
 				}
+
+				// Find accessible color after this one
+				do
+				{
+					mc = mc->next;
+					if (mc == menucolortail)
+					{
+						stoprow = true;
+					}
+				} while (!skincolors[mc->color].accessible && !stoprow);
+			}
+
+			if (stoprow)
+			{
+				break;
 			}
 		}