diff --git a/turbo/stages/stageloop.go b/turbo/stages/stageloop.go
index bb00b8ac7b5d0c2367e32944b3f84d61b10cf125..d303850eff1b9369e7f201ed39a0cd8edfabcd00 100644
--- a/turbo/stages/stageloop.go
+++ b/turbo/stages/stageloop.go
@@ -45,10 +45,21 @@ func StageLoop(
 	initialCycle := true
 
 	for {
-		select {
-		case <-ctx.Done():
-			return
-		default:
+		if !hd.POSSync() {
+			// Wait for delivery of any p2p headers here to resume the stage loop
+			// Since StageLoopStep creates RW database transaction, the mining loop can only do its work (it also requires creating RW transaction)
+			// when the control flow is outside StageLoopStep function. Therefore wait here to give mining loop this opportunity
+			select {
+			case <-ctx.Done():
+				return
+			case <-hd.DeliveryNotify:
+			}
+		} else {
+			select {
+			case <-ctx.Done():
+				return
+			default:
+			}
 		}
 		start := time.Now()
 
@@ -102,16 +113,6 @@ func StageLoop(
 			case <-c:
 			}
 		}
-		if !hd.POSSync() {
-			// Wait for delivery of any p2p headers here to resume the stage loop
-			// Since StageLoopStep creates RW database transaction, the mining loop can only do its work (it also requires creating RW transaction)
-			// when the control flow is outside StageLoopStep function. Therefore wait here to give mining loop this opportunity
-			select {
-			case <-ctx.Done():
-				return
-			case <-hd.DeliveryNotify:
-			}
-		}
 	}
 }