diff -urN fceux-2.2.2-orig/src/drivers/sdl/config.cpp fceux-2.2.2/src/drivers/sdl/config.cpp
--- fceux-2.2.2-orig/src/drivers/sdl/config.cpp	2013-04-18 04:22:05 +0900
+++ fceux-2.2.2/src/drivers/sdl/config.cpp	2016-01-29 14:04:16 +0900
@@ -372,7 +372,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.2.2-orig/src/drivers/sdl/config.h fceux-2.2.2/src/drivers/sdl/config.h
--- fceux-2.2.2-orig/src/drivers/sdl/config.h	2013-04-18 04:22:05 +0900
+++ fceux-2.2.2/src/drivers/sdl/config.h	2016-01-29 14:02:45 +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,
@@ -46,6 +47,8 @@
 		"ToggleMovieRW",
 		"MuteCapture",
 		"Quit",
+		"IncreaseMovieDelay",
+		"DecreaseMovieDelay",
 		"FrameAdvanceLagSkip",
 		"LagCounterDisplay",
 		"SelectState0", "SelectState1", "SelectState2", "SelectState3",
diff -urN fceux-2.2.2-orig/src/drivers/sdl/input.cpp fceux-2.2.2/src/drivers/sdl/input.cpp
--- fceux-2.2.2-orig/src/drivers/sdl/input.cpp	2013-06-27 10:58:10 +0900
+++ fceux-2.2.2/src/drivers/sdl/input.cpp	2016-01-29 14:05:53 +0900
@@ -665,6 +665,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.2.2-orig/src/movie.cpp fceux-2.2.2/src/movie.cpp
--- fceux-2.2.2-orig/src/movie.cpp	2013-07-06 00:37:57 +0900
+++ fceux-2.2.2/src/movie.cpp	2016-01-29 14:28:11 +0900
@@ -90,6 +90,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;
@@ -899,6 +901,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;
@@ -1115,18 +1119,35 @@
 		char counterbuf[32] = {0};
 		int color = 0x20;
 		if(movieMode == MOVIEMODE_PLAY)
-			sprintf(counterbuf,"%d/%d",currFrameCounter,(int)currMovieData.records.size());
+		{
+			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",currFrameCounter,(int)currMovieData.records.size());
+		}
 		else if(movieMode == MOVIEMODE_RECORD)
+		{
 			sprintf(counterbuf,"%d",currFrameCounter);
+		}
 		else if (movieMode == MOVIEMODE_FINISHED)
 		{
-			sprintf(counterbuf,"%d/%d (finished)",currFrameCounter,(int)currMovieData.records.size());
+			char *s = counterbuf;
+			if(movie_delay_used)
+				s += sprintf(s, "(%+d) ", movie_delay);
+			sprintf(s,"%d/%d (finished)",currFrameCounter,(int)currMovieData.records.size());
 			color = 0x17; //Show red to get attention
-		} else if(movieMode == MOVIEMODE_TASEDITOR)
+		}
+		else if(movieMode == MOVIEMODE_TASEDITOR)
 		{
 			sprintf(counterbuf,"%d",currFrameCounter);
-		} else
+		}
+		else
+		{
 			sprintf(counterbuf,"%d (no movie)",currFrameCounter);
+		}
 
 		if(counterbuf[0])
 			DrawTextTrans(ClipSidesOffset+XBuf+FCEU_TextScanlineOffsetFromBottom(30)+1, 256, (uint8*)counterbuf, color+0x80);
@@ -1441,6 +1462,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.2.2-orig/src/movie.h fceux-2.2.2/src/movie.h
--- fceux-2.2.2-orig/src/movie.h	2013-06-16 03:46:52 +0900
+++ fceux-2.2.2/src/movie.h	2016-01-29 14:08:28 +0900
@@ -276,6 +276,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);
