diff --git a/src/core/system.cpp b/src/core/system.cpp
index 8ad14096e..01210d588 100644
--- a/src/core/system.cpp
+++ b/src/core/system.cpp
@@ -2306,8 +2306,11 @@ void DoRunahead()
   {
     // we need to replay and catch up - load the state,
     s_runahead_replay_pending = false;
-    if (!LoadMemoryState(s_runahead_states.front()))
+    if (s_runahead_states.empty() || !LoadMemoryState(s_runahead_states.front()))
+    {
+      s_runahead_states.clear();
       return;
+    }
 
     // and throw away all the states, forcing us to catch up below
     // TODO: can we leave one frame here and run, avoiding the extra save?
@@ -2365,7 +2368,7 @@ void DoMemorySaveStates()
 
 void SetRunaheadReplayFlag()
 {
-  if (s_runahead_frames == 0)
+  if (s_runahead_frames == 0 || s_runahead_states.empty())
     return;
 
   Log_DevPrintf("Runahead rewind pending...");