diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index 10d484b16ee9ad436fd97a4221da09bf0dd48eb6..875a308de1bed52ca76eef478d87938671491b78 100755
--- a/src/d_clisrv.c
+++ b/src/d_clisrv.c
@@ -5262,8 +5262,9 @@ void TryRunTics(tic_t realtics, tic_t entertic)
 
 	}
 	// The network/game is laggy, let's simulate one tic further and use previous controls
+	// hopefully the server won't miss our input 
 	else
-		if (canSimulate && !cl_redownloadinggamestate)
+		if (canSimulate && !cl_redownloadinggamestate && cv_simmisstics.value == 1)
 		{
 			// collect net condition data based on encoded tics, it's needed for calculating correct netcmds
 			DetermineNetConditions();
@@ -5388,6 +5389,8 @@ int DetermineSimulationAmount()
 	float numSimsMedian = netplus_median(MAXSIMULATIONS-1, numToSimulateHistorySorted);
 	if (numSimsMedian <= 1)
 		return 1;
+	if (numSimsMedian > numDesiredSimulateTics)
+		return numDesiredSimulateTics;
 	return (int)numSimsMedian;
 }
 
diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index 76d145b7cff598bf51f6f430a3c8835f098c2850..b5e2c9d6f71cdf1f57dc6daef28fb1d346843bad 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -383,6 +383,8 @@ consvar_t cv_playerfullbright = { "playerfullbright", "Yes", 0, CV_YesNo, NULL,
 static CV_PossibleValue_t simulateTics_cons_t[] = { {0, "MIN"}, {MAXSIMULATIONS - 1, "MAX"}, {0, NULL} };
 consvar_t cv_simulatetics = { "simtics", "MAX", 0, simulateTics_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL };
 
+consvar_t cv_simmisstics = { "simmisstics", "Yes", 0, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL };
+
 static CV_PossibleValue_t simulateculldistance_cons_t[] = { {0, "MIN"}, {10000, "MAX"}, {0, NULL} };
 consvar_t cv_simulateculldistance = { "simcull", "MIN", 0, simulateculldistance_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL };
 
@@ -552,6 +554,7 @@ void D_RegisterServerCommands(void)
 
 	CV_RegisterVar(&cv_simulate);
 	CV_RegisterVar(&cv_simulatetics);
+	CV_RegisterVar(&cv_simmisstics);
 	CV_RegisterVar(&cv_simulateculldistance);
 	CV_RegisterVar(&cv_siminaccuracy);
 	CV_RegisterVar(&cv_netdelay);
diff --git a/src/d_netcmd.h b/src/d_netcmd.h
index 7a35791c7d1940b4deac8afd7c7ab5e099f44ce3..0465fdbbf11749cd74fa9060cafdc6992937cc55 100644
--- a/src/d_netcmd.h
+++ b/src/d_netcmd.h
@@ -109,6 +109,7 @@ extern consvar_t cv_showping;
 
 extern consvar_t cv_simulate;
 extern consvar_t cv_simulatetics;
+extern consvar_t cv_simmisstics;
 extern consvar_t cv_simulateculldistance;
 extern consvar_t cv_siminaccuracy;
 extern consvar_t cv_netdelay;
diff --git a/src/m_menu.c b/src/m_menu.c
index 20a18d3a76d89d52f5b49ab4f4c6e1d949433870..bce6cc82a76abc070013cbe94a4ee5f65c43b457 100755
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -1698,7 +1698,9 @@ static menuitem_t OP_NetPlusOptionsMenu[] =
 	{IT_CVAR | IT_STRING, NULL, "Player jitter reduction tics",     &cv_netsteadyplayers,   16}, //simsteadyplayers
 	{IT_CVAR | IT_STRING, NULL, "Turn off ring toss prediction",     &cv_netslingdelay,   21}, //simslingdelay
 	{IT_CVAR | IT_STRING, NULL, "Objects prediction distance",     &cv_simulateculldistance, 26}, //simcull
-	{IT_CVAR | IT_STRING, NULL, "Prediction inaccuracy (beta)",     &cv_siminaccuracy, 31}, //siminaccuracy
+	// {IT_CVAR | IT_STRING, NULL, "Prediction inaccuracy (beta)",     &cv_siminaccuracy, 31}, //siminaccuracy
+	{IT_CVAR | IT_STRING, NULL, "Predict missed tics",     &cv_simmisstics, 31}, //siminaccuracy
+	// simmisstics
 
 	{IT_HEADER, NULL, "Visuals", NULL, 41},
 	{IT_CVAR | IT_STRING, NULL, "Player trail lifetime",     &cv_nettrails,      46}, //simtrails