diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index a08e987cef842fd8521edc380cdc1a663a92da6a..7aedd29d099d3a58e5dad759403257fd58861c7a 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -114,6 +114,7 @@ static void BaseNumLaps_OnChange(void);
 static void KartFrantic_OnChange(void);
 static void KartSpeed_OnChange(void);
 static void KartEncore_OnChange(void);
+static void KartVoteRuleChanges_OnChange(void);
 static void KartComeback_OnChange(void);
 static void KartEliminateLast_OnChange(void);
 
@@ -367,8 +368,9 @@ consvar_t cv_kartfrantic = {"kartfrantic", "Off", CV_NETVAR|CV_CHEAT|CV_CALL|CV_
 consvar_t cv_kartcomeback = {"kartcomeback", "On", CV_NETVAR|CV_CHEAT|CV_CALL|CV_NOINIT, CV_OnOff, KartComeback_OnChange, 0, NULL, NULL, 0, 0, NULL};
 consvar_t cv_kartencore = {"kartencore", "Off", CV_NETVAR|CV_CALL|CV_NOINIT, CV_OnOff, KartEncore_OnChange, 0, NULL, NULL, 0, 0, NULL};
 static CV_PossibleValue_t kartvoterulechanges_cons_t[] = {{0, "Never"}, {1, "Sometimes"}, {2, "Frequent"}, {3, "Always"}, {0, NULL}};
-consvar_t cv_kartgametypechanges = {"kartgametypechanges", "Frequent", CV_NETVAR, kartvoterulechanges_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
-consvar_t cv_kartencorechance = {"kartencorechance", "Frequent", CV_NETVAR, kartvoterulechanges_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
+consvar_t cv_kartvoterulechanges = {"kartvoterulechanges", "Frequent", CV_NETVAR|CV_CALL|CV_NOINIT, kartvoterulechanges_cons_t, KartVoteRuleChanges_OnChange, 0, NULL, NULL, 0, 0, NULL};
+consvar_t cv_kartgametypechanges = {"kartgametypechanges", "Frequent", 0, kartvoterulechanges_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
+consvar_t cv_kartencorechance = {"kartencorechance", "Frequent", 0, kartvoterulechanges_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
 static CV_PossibleValue_t kartspeedometer_cons_t[] = {{0, "Off"}, {1, "Kilometers"}, {2, "Miles"}, {3, "Fracunits"}, {0, NULL}};
 consvar_t cv_kartspeedometer = {"kartdisplayspeed", "Off", CV_SAVE, kartspeedometer_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL}; // use tics in display
 static CV_PossibleValue_t kartvoices_cons_t[] = {{0, "Never"}, {1, "Tasteful"}, {2, "Meme"}, {0, NULL}};
@@ -5938,6 +5940,14 @@ static void KartEncore_OnChange(void)
 	}
 }
 
+static void KartVoteRuleChanges_OnChange(void)
+{
+	const char *s;
+	s = cv_kartvoterulechanges.string;
+	CV_StealthSet(&cv_kartgametypechanges, s);
+	CV_StealthSet(&cv_kartencorechance, s);
+}
+
 static void KartComeback_OnChange(void)
 {
 	if (G_BattleGametype())
diff --git a/src/d_netcmd.h b/src/d_netcmd.h
index 68fd6a5902a2d3b81303d5696b780aea2836c888..6d75f86767f8d83f6bfe10a529d5808dc6671344 100644
--- a/src/d_netcmd.h
+++ b/src/d_netcmd.h
@@ -117,6 +117,7 @@ extern consvar_t cv_kartbumpers;
 extern consvar_t cv_kartfrantic;
 extern consvar_t cv_kartcomeback;
 extern consvar_t cv_kartencore;
+extern consvar_t cv_kartvoterulechanges;
 extern consvar_t cv_kartgametypechanges;
 extern consvar_t cv_kartencorechance;;
 extern consvar_t cv_kartspeedometer;
diff --git a/src/k_kart.c b/src/k_kart.c
index d389749170ebd3e9d6274afe439009c08e25cd7a..5d11a26bb728c880db32e37465cbd0c02e154615 100644
--- a/src/k_kart.c
+++ b/src/k_kart.c
@@ -574,6 +574,7 @@ void K_RegisterKartStuff(void)
 	CV_RegisterVar(&cv_kartfrantic);
 	CV_RegisterVar(&cv_kartcomeback);
 	CV_RegisterVar(&cv_kartencore);
+	CV_RegisterVar(&cv_kartvoterulechanges);
 	CV_RegisterVar(&cv_kartgametypechanges);
 	CV_RegisterVar(&cv_kartencorechance);
 	CV_RegisterVar(&cv_kartspeedometer);