diff --git a/src/netcode/d_netcmd.c b/src/netcode/d_netcmd.c
index 85b1236110c8e2955a7cf52f0786ef6713144869..924d873e66f2a3e06c86574d3c2483037eed8515 100644
--- a/src/netcode/d_netcmd.c
+++ b/src/netcode/d_netcmd.c
@@ -399,6 +399,8 @@ consvar_t cv_freedemocamera = CVAR_INIT("freedemocamera", "Off", NULL, CV_SAVE,
 // NOTE: this should be in hw_main.c, but we can't put it there as it breaks dedicated build
 consvar_t cv_glallowshaders = CVAR_INIT ("gr_allowcustomshaders", "On", "If on, clients are allowed to use custom OpenGL shaders", CV_NETVAR, CV_OnOff, NULL);
 
+consvar_t cv_preticker = CVAR_INIT ("preticker", "On", "If P_Ticker should be invoked twice before map starts, disabling improves load times and fixes map change bugs but can break some addons", CV_NETVAR, CV_OnOff, NULL);
+
 char timedemo_name[256];
 boolean timedemo_csv;
 char timedemo_csv_id[256];
@@ -642,6 +644,7 @@ void D_RegisterServerCommands(void)
 	CV_RegisterVar(&cv_chatspamprotection);
 	CV_RegisterVar(&cv_chatspamspeed);
 	CV_RegisterVar(&cv_chatspamburst);
+	CV_RegisterVar(&cv_preticker);
 }
 
 // =========================================================================
diff --git a/src/netcode/d_netcmd.h b/src/netcode/d_netcmd.h
index c11575575fc025bcce4ad755651e3b77493233db..9d995fd2553d44d109ac0daaab6344afd4e2ad98 100644
--- a/src/netcode/d_netcmd.h
+++ b/src/netcode/d_netcmd.h
@@ -116,6 +116,8 @@ extern consvar_t cv_perfstats;
 extern consvar_t cv_ps_samplesize;
 extern consvar_t cv_ps_descriptor;
 
+extern consvar_t cv_preticker;
+
 extern char timedemo_name[256];
 extern boolean timedemo_csv;
 extern char timedemo_csv_id[256];
diff --git a/src/p_setup.c b/src/p_setup.c
index d8e4e5d67c06b8d3bb9df58d53ad495458c3818d..ecc319e2596133a48b9a5f38ea996ae28278a1ab 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -8152,7 +8152,8 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate)
 			if (playeringame[i])
 				G_CopyTiccmd(&players[i].cmd, &netcmds[buf][i], 1);
 		}
-		P_PreTicker(2);
+		if (cv_preticker.value)
+			P_PreTicker(2);
 		P_MapStart(); // just in case MapLoad modifies tmthing
 		LUA_HookInt(gamemap, HOOK(MapLoad));
 		P_MapEnd(); // just in case MapLoad modifies tmthing