diff -urN fceux-2.3.0-orig/src/drivers/sdl/config.cpp fceux-2.3.0/src/drivers/sdl/config.cpp
--- fceux-2.3.0-orig/src/drivers/sdl/config.cpp	2021-01-01 23:44:49 +0900
+++ fceux-2.3.0/src/drivers/sdl/config.cpp	2021-05-19 19:27:45 +0900
@@ -50,6 +50,8 @@
 		"ToggleMovieRW",
 		"MuteCapture",
 		"Quit",
+		"IncreaseMovieDelay",
+		"DecreaseMovieDelay",
 		"FrameAdvanceLagSkip",
 		"LagCounterDisplay",
 		"SelectState0", "SelectState1", "SelectState2", "SelectState3",
@@ -415,7 +417,9 @@
 		SDLK_q, // toggle movie RW
 		SDLK_QUOTE, // toggle mute capture
 		0, // quit // edit 10/11/11 - don't map to escape, it causes ugly things to happen to sdl.  can be manually appended to config
-		SDLK_DELETE, // frame advance lag skip
+		SDLK_INSERT, // increase movie delay
+		SDLK_DELETE, // decrease movie delay
+		SDLK_BACKSPACE, // frame advance lag skip
 		SDLK_SLASH, // lag counter display
 		SDLK_0, SDLK_1, SDLK_2, SDLK_3, SDLK_4, SDLK_5,
 		SDLK_6, SDLK_7, SDLK_8, SDLK_9,
diff -urN fceux-2.3.0-orig/src/drivers/sdl/config.h fceux-2.3.0/src/drivers/sdl/config.h
--- fceux-2.3.0-orig/src/drivers/sdl/config.h	2021-01-01 23:44:49 +0900
+++ fceux-2.3.0/src/drivers/sdl/config.h	2021-05-19 19:25:15 +0900
@@ -15,6 +15,7 @@
 	HK_TOGGLE_FRAME_DISPLAY, HK_TOGGLE_SUBTITLE, HK_RESET, HK_SCREENSHOT,
 	HK_PAUSE, HK_DECREASE_SPEED, HK_INCREASE_SPEED, HK_FRAME_ADVANCE, HK_TURBO,
 	HK_TOGGLE_INPUT_DISPLAY, HK_MOVIE_TOGGLE_RW, HK_MUTE_CAPTURE, HK_QUIT, 
+	HK_INCREASE_MOVIE_DELAY, HK_DECREASE_MOVIE_DELAY,
     HK_FA_LAG_SKIP, HK_LAG_COUNTER_DISPLAY,
 	HK_SELECT_STATE_0, HK_SELECT_STATE_1, HK_SELECT_STATE_2, HK_SELECT_STATE_3,
 	HK_SELECT_STATE_4, HK_SELECT_STATE_5, HK_SELECT_STATE_6, HK_SELECT_STATE_7,
diff -urN fceux-2.3.0-orig/src/drivers/sdl/input.cpp fceux-2.3.0/src/drivers/sdl/input.cpp
--- fceux-2.3.0-orig/src/drivers/sdl/input.cpp	2021-01-01 23:44:49 +0900
+++ fceux-2.3.0/src/drivers/sdl/input.cpp	2021-05-19 19:25:15 +0900
@@ -645,6 +645,16 @@
 		FCEUI_SetMovieToggleReadOnly (!FCEUI_GetMovieToggleReadOnly ());
 	}
 
+	if (_keyonly (Hotkeys[HK_INCREASE_MOVIE_DELAY]))
+	{
+		FCEUI_AdjustMovieDelay (+1);
+	}
+
+	if (_keyonly (Hotkeys[HK_DECREASE_MOVIE_DELAY]))
+	{
+		FCEUI_AdjustMovieDelay (-1);
+	}
+
 #ifdef CREATE_AVI
 	if (_keyonly (Hotkeys[HK_MUTE_CAPTURE]))
 	{
diff -urN fceux-2.3.0-orig/src/movie.cpp fceux-2.3.0/src/movie.cpp
--- fceux-2.3.0-orig/src/movie.cpp	2021-01-01 23:44:49 +0900
+++ fceux-2.3.0/src/movie.cpp	2021-05-19 19:27:23 +0900
@@ -94,6 +94,8 @@
 uint32 cur_input_display = 0;
 int pauseframe = -1;
 bool movie_readonly = true;
+int movie_delay = 0;
+bool movie_delay_used = false;
 int input_display = 0;
 int frame_display = 0;
 int rerecord_display = 0;
@@ -1088,6 +1090,8 @@
 
 	//stuff that should only happen when we're ready to positively commit to the replay
 	currFrameCounter = 0;
+	movie_delay = 0;
+	movie_delay_used = false;
 	pauseframe = _pauseframe;
 	movie_readonly = _read_only;
 	movieMode = MOVIEMODE_PLAY;
@@ -1325,12 +1329,18 @@
 
 	if (frame_display)
 	{
-		char counterbuf[32] = {0};
+		char counterbuf[48] = {0};
 		int color = 0x20;
 		
 		if (movieMode == MOVIEMODE_PLAY)
 		{
-			sprintf(counterbuf, "%d/%d%s%s", currFrameCounter, (int)currMovieData.records.size(), GetMovieRecordModeStr(), GetMovieReadOnlyStr());
+			char *s = counterbuf;

+			if(movie_delay_used)

+			{

+				s += sprintf(s, "(%+d) ", movie_delay);

+				color = 0x28; // Yellow to emphasize that delay was used

+			}

+			sprintf(s, "%d/%d%s%s", currFrameCounter, (int)currMovieData.records.size(), GetMovieRecordModeStr(), GetMovieReadOnlyStr());
 		} else if (movieMode == MOVIEMODE_RECORD)
 		{
 			if (movieRecordMode == MOVIE_RECORD_MODE_TRUNCATE)
@@ -1339,7 +1349,10 @@
 				sprintf(counterbuf, "%d/%d%s%s (record)", currFrameCounter, (int)currMovieData.records.size(), GetMovieRecordModeStr(), GetMovieReadOnlyStr());
 		} else if (movieMode == MOVIEMODE_FINISHED)
 		{
-			sprintf(counterbuf,"%d/%d%s%s (finished)",currFrameCounter,(int)currMovieData.records.size(), GetMovieRecordModeStr(), GetMovieReadOnlyStr());
+			char *s = counterbuf;

+			if(movie_delay_used)

+				s += sprintf(s, "(%+d) ", movie_delay);

+			sprintf(s,"%d/%d%s%s (finished)",currFrameCounter,(int)currMovieData.records.size(), GetMovieRecordModeStr(), GetMovieReadOnlyStr());
 			color = 0x17; //Show red to get attention
 		} else if (movieMode == MOVIEMODE_TASEDITOR)
 		{
@@ -1662,6 +1675,25 @@
 	}
 }
 
+void FCEUI_SetMovieDelay(int delay)
+{
+	movie_delay = delay;
+}
+
+void FCEUI_AdjustMovieDelay(int adjust)
+{
+	if (currFrameCounter - adjust < 0)
+		adjust = currFrameCounter;
+	else if (currFrameCounter - adjust > (int)currMovieData.records.size())
+		adjust = -(currMovieData.records.size() - currFrameCounter);
+	if (adjust != 0)
+	{
+		currFrameCounter -= adjust;
+		movie_delay += adjust;
+		movie_delay_used = true;
+        }
+}
+
 int FCEUI_GetMovieLength()
 {
 	return currMovieData.records.size();
diff -urN fceux-2.3.0-orig/src/movie.h fceux-2.3.0/src/movie.h
--- fceux-2.3.0-orig/src/movie.h	2021-01-01 23:44:49 +0900
+++ fceux-2.3.0/src/movie.h	2021-05-19 19:25:15 +0900
@@ -306,6 +306,8 @@
 void FCEUI_MovieToggleFrameDisplay();
 void FCEUI_MovieToggleRerecordDisplay();
 void FCEUI_ToggleInputDisplay(void);
+void FCEUI_SetMovieDelay(int delay);
+void FCEUI_AdjustMovieDelay(int adjust);
 
 void LoadSubtitles(MovieData &);
 void ProcessSubtitles(void);
