diff --git a/src/cpu/minor/decode.cc b/src/cpu/minor/decode.cc
index 390ca5f..94d3dec 100644
--- a/src/cpu/minor/decode.cc
+++ b/src/cpu/minor/decode.cc
@@ -314,7 +314,9 @@
     }
 
     for (auto tid : priority_list) {
-        if (getInput(tid) && !decodeInfo[tid].blocked) {
+        if (cpu.getContext(tid)->status() == ThreadContext::Active &&
+            getInput(tid) &&
+            !decodeInfo[tid].blocked) {
             threadPriority = tid;
             return tid;
         }
diff --git a/src/cpu/minor/execute.cc b/src/cpu/minor/execute.cc
index 93c0895..d7cb475 100644
--- a/src/cpu/minor/execute.cc
+++ b/src/cpu/minor/execute.cc
@@ -1676,7 +1676,12 @@
 
     for (auto tid : priority_list) {
         ExecuteThreadInfo &ex_info = executeInfo[tid];
-        bool can_commit_insts = !ex_info.inFlightInsts->empty();
+
+        bool is_thread_active =
+                cpu.getContext(tid)->status() == ThreadContext::Active;
+        bool can_commit_insts = !ex_info.inFlightInsts->empty() &&
+                                is_thread_active;
+
         if (can_commit_insts) {
             QueuedInst *head_inflight_inst = &(ex_info.inFlightInsts->front());
             MinorDynInstPtr inst = head_inflight_inst->inst;
@@ -1742,7 +1747,8 @@
     }
 
     for (auto tid : priority_list) {
-        if (getInput(tid)) {
+        if (cpu.getContext(tid)->status() == ThreadContext::Active &&
+            getInput(tid)) {
             issuePriority = tid;
             return tid;
         }
diff --git a/src/cpu/minor/fetch2.cc b/src/cpu/minor/fetch2.cc
index 09a06fc..1808901 100644
--- a/src/cpu/minor/fetch2.cc
+++ b/src/cpu/minor/fetch2.cc
@@ -584,7 +584,9 @@
     }
 
     for (auto tid : priority_list) {
-        if (getInput(tid) && !fetchInfo[tid].blocked) {
+        if (cpu.getContext(tid)->status() == ThreadContext::Active &&
+            getInput(tid) &&
+            !fetchInfo[tid].blocked) {
             threadPriority = tid;
             return tid;
         }
