anchor.diff:  begin
     if not CanUndo then Exit;
   
  -  // Find previous state of area we are undoing ("Initial" state at 0 being our last chance)
  -  prev := fCheckpointPos - 1;
  -  while prev > 0 do
  -  begin
  -    if fCheckpoints[prev].Area = fCheckpoints[fCheckpointPos].Area then
  -      Break;
  -    Dec(prev);
  -  end;
  +  prev := GetPrevAreaCheckpointPos(fCheckpointPos - 1, fCheckpoints[fCheckpointPos].Area);
   
     Assert(prev >= 0);
   
     // Apply only requested area (e.g. if we are undoing single change made to Houses at step 87 since editing start)
     fCheckpoints[prev].Apply(fCheckpoints[fCheckpointPos].Area, aUpdateImmidiately);
   
  -  if not aUpdateImmidiately and (fCheckpoints[fCheckpointPos].Area in [caTerrain, caAll]) then
  -    fUpdateTerrainNeeded := True;
  -
     Dec(fCheckpointPos);
   
     IncCounter;
  
positive.code:     // Hand Flag Color
      //
    );
  
    TKMCheckpoint = class
    private
  
negative.code:     procedure Clear;
  
      procedure MakeCheckpoint(aArea: TKMCheckpointArea; const aCaption: string);
      procedure JumpTo(aIndex: Integer); overload;
      procedure Undo(aUpdateImmidiately: Boolean = True);
      procedure Redo(aUpdateImmidiately: Boolean = True);
    end;
  