diff --git a/src/command.c b/src/command.c
index 50310f11255b57d30228a65cfe26b676c5c89497..723388058400dca24b93ed241a8d7dcc505bdcc9 100644
--- a/src/command.c
+++ b/src/command.c
@@ -2076,9 +2076,10 @@ void CV_AddValue(consvar_t *var, INT32 increment)
 					{
 						increment = 0;
 						currentindice = max;
+						break; // The value we definitely want, stop here.
 					}
 					else if (var->PossibleValue[max].value == var->value)
-						currentindice = max;
+						currentindice = max; // The value we maybe want.
 				}
 
 				if (increment)
diff --git a/src/r_fps.c b/src/r_fps.c
index 9c3a9db53d05ca626f24aa187a20c2e9f7a650fc..136cdfe9e73d2abe7293079c89216d17d072a2ac 100644
--- a/src/r_fps.c
+++ b/src/r_fps.c
@@ -27,38 +27,33 @@
 #endif
 
 static CV_PossibleValue_t fpscap_cons_t[] = {
-	{-1, "Match refresh rate"},
-	{0, "Unlimited"},
 #ifdef DEVELOP
 	// Lower values are actually pretty useful for debugging interp problems!
-	{1, "One Singular Frame"},
-	{10, "10"},
-	{20, "20"},
-	{25, "25"},
-	{30, "30"},
+	{1, "MIN"},
+#else
+	{TICRATE, "MIN"},
 #endif
-	{35, "35"},
-	{50, "50"},
-	{60, "60"},
-	{70, "70"},
-	{75, "75"},
-	{90, "90"},
-	{100, "100"},
-	{120, "120"},
-	{144, "144"},
-	{200, "200"},
-	{240, "240"},
+	{300, "MAX"},
+	{-1, "Unlimited"},
+	{0, "Match refresh rate"},
 	{0, NULL}
 };
 consvar_t cv_fpscap = CVAR_INIT ("fpscap", "Match refresh rate", CV_SAVE, fpscap_cons_t, NULL);
 
 UINT32 R_GetFramerateCap(void)
 {
-	if (cv_fpscap.value < 0)
+	if (cv_fpscap.value == 0)
 	{
+		// 0: Match refresh rate
 		return I_GetRefreshRate();
 	}
 
+	if (cv_fpscap.value < 0)
+	{
+		// -1: Unlimited
+		return 0;
+	}
+
 	return cv_fpscap.value;
 }