diff --git a/src/NDS.cpp b/src/NDS.cpp
index 2207da0b..36799feb 100644
--- a/src/NDS.cpp
+++ b/src/NDS.cpp
@@ -964,12 +964,6 @@ void NDS::MainRAMHandleARM9()
 
         case MainRAMType::DMA32:
         {
-            if (CPUStop & ((1<<ARM9.MRTrack.Var)-1))
-            {
-                memset(&ARM9.MRTrack, 0, sizeof(ARM9.MRTrack));
-                break;
-            }
-
             DMA* dma = &DMAs[ARM9.MRTrack.Var];
             int burststart = dma->Running - 1;
             
@@ -1066,7 +1060,7 @@ void NDS::MainRAMHandleARM9()
                 if (burststart <= 1) dma->Running = 1;
                 else dma->Running = 2;
                 
-                if ((dma->IterCount == 0) || ((ARM9Regions[dma->CurSrcAddr>>14] != Mem9_MainRAM) && (ARM9Regions[dma->CurDstAddr>>14] != Mem9_MainRAM)) || (DMA9Timestamp >= ARM9Target))
+                if ((dma->IterCount == 0) || ((ARM9Regions[dma->CurSrcAddr>>14] != Mem9_MainRAM) && (ARM9Regions[dma->CurDstAddr>>14] != Mem9_MainRAM)) || (DMA9Timestamp >= ARM9Target) || (CPUStop & ((1<<ARM9.MRTrack.Var)-1)))
                     memset(&ARM9.MRTrack, 0, sizeof(ARM9.MRTrack));
                 else
                     ARM9.MRTrack.Progress = 0;
@@ -1076,12 +1070,6 @@ void NDS::MainRAMHandleARM9()
 
         case MainRAMType::DMA16:
         {
-            if (CPUStop & ((1<<ARM9.MRTrack.Var)-1))
-            {
-                memset(&ARM9.MRTrack, 0, sizeof(ARM9.MRTrack));
-                break;
-            }
-
             DMA* dma = &DMAs[ARM9.MRTrack.Var];
             int burststart = dma->Running - 1;
             
@@ -1178,7 +1166,7 @@ void NDS::MainRAMHandleARM9()
                 if (burststart <= 1) dma->Running = 1;
                 else dma->Running = 2;
                 
-                if ((dma->IterCount == 0) || ((ARM9Regions[dma->CurSrcAddr>>14] != Mem9_MainRAM) && (ARM9Regions[dma->CurDstAddr>>14] != Mem9_MainRAM)) || (DMA9Timestamp >= ARM9Target))
+                if ((dma->IterCount == 0) || ((ARM9Regions[dma->CurSrcAddr>>14] != Mem9_MainRAM) && (ARM9Regions[dma->CurDstAddr>>14] != Mem9_MainRAM)) || (DMA9Timestamp >= ARM9Target) || (CPUStop & ((1<<ARM9.MRTrack.Var)-1)))
                     memset(&ARM9.MRTrack, 0, sizeof(ARM9.MRTrack));
                 else
                     ARM9.MRTrack.Progress = 0;
@@ -1338,12 +1326,6 @@ void NDS::MainRAMHandleARM7()
 
         case MainRAMType::DMA32:
         {
-            if (CPUStop & CPUStop_DMA7 & ((1<<ARM7.MRTrack.Var)-1))
-            {
-                memset(&ARM7.MRTrack, 0, sizeof(ARM7.MRTrack));
-                break;
-            }
-
             DMA* dma = &DMAs[ARM7.MRTrack.Var];
             int burststart = dma->Running - 1;
             
@@ -1434,7 +1416,7 @@ void NDS::MainRAMHandleARM7()
                 if (burststart <= 1) dma->Running = 1;
                 else dma->Running = 2;
                 
-                if ((dma->IterCount == 0) || ((ARM7Regions[dma->CurSrcAddr>>15] != Mem7_MainRAM) && (ARM7Regions[dma->CurDstAddr>>15] != Mem7_MainRAM)) || (ARM7Timestamp >= ARM7Target))
+                if ((dma->IterCount == 0) || ((ARM7Regions[dma->CurSrcAddr>>15] != Mem7_MainRAM) && (ARM7Regions[dma->CurDstAddr>>15] != Mem7_MainRAM)) || (ARM7Timestamp >= ARM7Target) || (CPUStop & CPUStop_DMA7 & ((1<<ARM7.MRTrack.Var)-1)))
                     memset(&ARM7.MRTrack, 0, sizeof(ARM7.MRTrack));
                 else
                     ARM7.MRTrack.Progress = 0;
@@ -1444,12 +1426,6 @@ void NDS::MainRAMHandleARM7()
 
         case MainRAMType::DMA16:
         {
-            if (CPUStop & CPUStop_DMA7 & ((1<<ARM7.MRTrack.Var)-1))
-            {
-                memset(&ARM7.MRTrack, 0, sizeof(ARM7.MRTrack));
-                break;
-            }
-
             DMA* dma = &DMAs[ARM7.MRTrack.Var];
             int burststart = dma->Running - 1;
             
@@ -1540,7 +1516,7 @@ void NDS::MainRAMHandleARM7()
                 if (burststart <= 1) dma->Running = 1;
                 else dma->Running = 2;
                 
-                if ((dma->IterCount == 0) || ((ARM7Regions[dma->CurSrcAddr>>15] != Mem7_MainRAM) && (ARM7Regions[dma->CurDstAddr>>15] != Mem7_MainRAM)) || (ARM7Timestamp >= ARM7Target))
+                if ((dma->IterCount == 0) || ((ARM7Regions[dma->CurSrcAddr>>15] != Mem7_MainRAM) && (ARM7Regions[dma->CurDstAddr>>15] != Mem7_MainRAM)) || (ARM7Timestamp >= ARM7Target) || (CPUStop & CPUStop_DMA7 & ((1<<ARM7.MRTrack.Var)-1)))
                     memset(&ARM7.MRTrack, 0, sizeof(ARM7.MRTrack));
                 else
                     ARM7.MRTrack.Progress = 0;