diff --git a/riscv/debug_command_shell.cc b/riscv/debug_command_shell.cc
index c05ce16..0893446 100644
--- a/riscv/debug_command_shell.cc
+++ b/riscv/debug_command_shell.cc
@@ -185,37 +185,33 @@
   std::string previous_line;
   current_core_ = 0;
   absl::string_view line_view;
-  bool halt_reason = false;
   while (true) {
     // Prompt and read in the next command.
     auto pc_result =
         core_access_[current_core_].debug_interface->ReadRegister("pc");
     std::string prompt;
-    if (halt_reason) {
-      halt_reason = false;
-      auto result =
-          core_access_[current_core_].debug_interface->GetLastHaltReason();
-      if (result.ok()) {
-        switch (result.value()) {
-          case *HaltReason::kSoftwareBreakpoint:
-            absl::StrAppend(&prompt, "Stopped at software breakpoint\n");
-            break;
-          case *HaltReason::kUserRequest:
-            absl::StrAppend(&prompt, "Stopped at user request\n");
-            break;
-          case *HaltReason::kDataWatchPoint:
-            absl::StrAppend(&prompt, "Stopped at data watchpoint\n");
-            break;
-          case *HaltReason::kProgramDone:
-            absl::StrAppend(&prompt, "Program done\n");
-            break;
-          default:
-            if ((result.value() >= *HaltReason::kUserSpecifiedMin) &&
-                (result.value() <= *HaltReason::kUserSpecifiedMax)) {
-              absl::StrAppend(&prompt, "Stopped for custom halt reason\n");
-            }
-            break;
-        }
+    auto result =
+        core_access_[current_core_].debug_interface->GetLastHaltReason();
+    if (result.ok()) {
+      switch (result.value()) {
+        case *HaltReason::kSoftwareBreakpoint:
+          absl::StrAppend(&prompt, "Stopped at software breakpoint\n");
+          break;
+        case *HaltReason::kUserRequest:
+          absl::StrAppend(&prompt, "Stopped at user request\n");
+          break;
+        case *HaltReason::kDataWatchPoint:
+          absl::StrAppend(&prompt, "Stopped at data watchpoint\n");
+          break;
+        case *HaltReason::kProgramDone:
+          absl::StrAppend(&prompt, "Program done\n");
+          break;
+        default:
+          if ((result.value() >= *HaltReason::kUserSpecifiedMin) &&
+              (result.value() <= *HaltReason::kUserSpecifiedMax)) {
+            absl::StrAppend(&prompt, "Stopped for custom halt reason\n");
+          }
+          break;
       }
     }
     if (pc_result.ok()) {
diff --git a/riscv/riscv_top.cc b/riscv/riscv_top.cc
index 3f6dbf1..4b90c44 100644
--- a/riscv/riscv_top.cc
+++ b/riscv/riscv_top.cc
@@ -434,6 +434,7 @@
         // Reset the halt reason and continue;
         halted_ = false;
         halt_reason_ = *HaltReason::kNone;
+        need_to_step_over_ = false;
         continue;
       }
       break;
@@ -766,6 +767,8 @@
   if (inst_swap) {
     (void)rv_action_point_manager_->ap_memory_interface()
         ->WriteOriginalInstruction(address);
+    // Invalidate the cache entry so that the original instruction is used.
+    rv_decode_cache_->Invalidate(address);
   }
   // Get the decoded instruction.
   Instruction* inst = rv_decode_cache_->GetDecodedInstruction(address);
