diff --git a/cmd/integration/commands/state_stages.go b/cmd/integration/commands/state_stages.go
index d6a8aa703289aa851bbe10954017b481c676284f..f9c5bcbf9cbc45dd4fc685efa8cd5cd568dfa63b 100644
--- a/cmd/integration/commands/state_stages.go
+++ b/cmd/integration/commands/state_stages.go
@@ -379,6 +379,9 @@ func checkChanges(expectedAccountChanges map[uint64]*changeset.ChangeSet, tx eth
 		checkHistoryFrom = prunedTo
 	}
 	for blockN := range expectedAccountChanges {
+		if blockN <= checkHistoryFrom {
+			continue
+		}
 		if err := checkChangeSet(tx, blockN, expectedAccountChanges[blockN], expectedStorageChanges[blockN]); err != nil {
 			return err
 		}
diff --git a/eth/stagedsync/default_stages.go b/eth/stagedsync/default_stages.go
index 1fa1431077de33714366bb06439429e5f307b210..627dcc448f68dab91e903aa2846432aca5353289 100644
--- a/eth/stagedsync/default_stages.go
+++ b/eth/stagedsync/default_stages.go
@@ -57,9 +57,10 @@ func DefaultStages(ctx context.Context,
 			},
 		},
 		{
-			ID:          stages.CreateHeadersSnapshot,
-			Description: "Create headers snapshot",
-			Disabled:    true,
+			ID:                  stages.CreateHeadersSnapshot,
+			Description:         "Create headers snapshot",
+			Disabled:            true,
+			DisabledDescription: "Enable by --snapshot.layout",
 			Forward: func(firstCycle bool, s *StageState, u Unwinder, tx ethdb.RwTx) error {
 				return SpawnHeadersSnapshotGenerationStage(s, tx, snapshotHeaders, firstCycle, ctx)
 			},
@@ -84,9 +85,10 @@ func DefaultStages(ctx context.Context,
 			},
 		},
 		{
-			ID:          stages.CreateBodiesSnapshot,
-			Description: "Create bodies snapshot",
-			Disabled:    true,
+			ID:                  stages.CreateBodiesSnapshot,
+			Description:         "Create bodies snapshot",
+			Disabled:            true,
+			DisabledDescription: "Enable by --snapshot.layout",
 			Forward: func(firstCycle bool, s *StageState, u Unwinder, tx ethdb.RwTx) error {
 				return SpawnBodiesSnapshotGenerationStage(s, tx, snapshotBodies, ctx)
 			},
diff --git a/eth/stagedsync/stage_execute.go b/eth/stagedsync/stage_execute.go
index f0f7ddb7a6b3076a4ccdc70a6243cb42ca728789..a0d59130c9d78989b36b757ca66407b4817ff07a 100644
--- a/eth/stagedsync/stage_execute.go
+++ b/eth/stagedsync/stage_execute.go
@@ -229,6 +229,13 @@ func SpawnExecuteBlocksStage(s *StageState, u Unwinder, tx ethdb.RwTx, toBlock u
 	if errStart != nil {
 		return errStart
 	}
+	nextStageProgress, err := stages.GetStageProgress(tx, stages.HashState)
+	if err != nil {
+		return err
+	}
+	nextStagesExpectData := nextStageProgress > 0 // Incremental move of next stages depend on fully written ChangeSets, Receipts, CallTraceSet
+
+	logPrefix := s.LogPrefix()
 	var to = prevStageProgress
 	if toBlock > 0 {
 		to = min(prevStageProgress, toBlock)
@@ -236,7 +243,6 @@ func SpawnExecuteBlocksStage(s *StageState, u Unwinder, tx ethdb.RwTx, toBlock u
 	if to <= s.BlockNumber {
 		return nil
 	}
-	logPrefix := s.LogPrefix()
 	if to > s.BlockNumber+16 {
 		log.Info(fmt.Sprintf("[%s] Blocks execution", logPrefix), "from", s.BlockNumber, "to", to)
 	}
@@ -281,9 +287,10 @@ Loop:
 			checkTEVMCode = ethdb.GetCheckTEVM(tx)
 		}
 
-		writeReceipts := blockNum > cfg.prune.Receipts.PruneTo(to)
-		writeChangeSets := blockNum > cfg.prune.History.PruneTo(to)
-		writeCallTraces := blockNum > cfg.prune.CallTraces.PruneTo(to)
+		// Incremental move of next stages depend on fully written ChangeSets, Receipts, CallTraceSet
+		writeChangeSets := nextStagesExpectData || blockNum > cfg.prune.History.PruneTo(to)
+		writeReceipts := nextStagesExpectData || blockNum > cfg.prune.Receipts.PruneTo(to)
+		writeCallTraces := nextStagesExpectData || blockNum > cfg.prune.CallTraces.PruneTo(to)
 		if err = executeBlock(block, tx, batch, cfg, *cfg.vmConfig, writeChangeSets, writeReceipts, writeCallTraces, checkTEVMCode, initialCycle); err != nil {
 			log.Error(fmt.Sprintf("[%s] Execution failed", logPrefix), "block", blockNum, "hash", block.Hash().String(), "error", err)
 			u.UnwindTo(blockNum-1, block.Hash())
diff --git a/eth/stagedsync/stage_interhashes.go b/eth/stagedsync/stage_interhashes.go
index 196a4310a622c641f61735647aa296a10e8ad160..e6b5b5f813f8a6834b29f41425c697d5f9c157b5 100644
--- a/eth/stagedsync/stage_interhashes.go
+++ b/eth/stagedsync/stage_interhashes.go
@@ -479,6 +479,9 @@ func ResetHashState(tx ethdb.RwTx) error {
 	if err := stages.SaveStageProgress(tx, stages.HashState, 0); err != nil {
 		return err
 	}
+	if err := stages.SaveStagePruneProgress(tx, stages.HashState, 0); err != nil {
+		return err
+	}
 
 	return nil
 }
@@ -493,6 +496,9 @@ func ResetIH(tx ethdb.RwTx) error {
 	if err := stages.SaveStageProgress(tx, stages.IntermediateHashes, 0); err != nil {
 		return err
 	}
+	if err := stages.SaveStagePruneProgress(tx, stages.IntermediateHashes, 0); err != nil {
+		return err
+	}
 	return nil
 }