anchor.diff:          else
           if ptHeight in fPasteTypes then
           begin
  -          fLandTemp[Ly,Lx].Height := fSelectionBuffer[I,K].Height;
  -
             if aUpdateMainLand then
  -            gTerrain.MainLand^[Ly,Lx].Height := fSelectionBuffer[I,K].Height;
  +            gTerrain.MainLand^[Ly,Lx].Height := fSelectionBuffer[I,K].Height
  +          else
  +            fLandTemp[Ly,Lx].Height := fSelectionBuffer[I,K].Height;
           end;
         end;
       end;
  +
     if aUpdateAll then
     begin
       updateRect := KMRectGrow(fSelectionRect, 2); // 2 - just in case
  
positive.code: 
  procedure TKMSelection.DuplicateLandToTemp;
  var
    I,K: Integer;
  begin
    // Copy land to temp array
    // todo: optimise copying process
  
negative.code: procedure TKMSelection.Selection_SyncCellRect;
  begin
    //Convert RawRect values that can be inverted to tilespace Rect
    fSelectionRect.Left   := Trunc(Max(0, Math.Min(fSelectionRectF.Left, fSelectionRectF.Right)));
    fSelectionRect.Top    := Trunc(Max(0, Math.Min(fSelectionRectF.Top, fSelectionRectF.Bottom)));
    fSelectionRect.Right  := Ceil(Max3(0, fSelectionRectF.Left, fSelectionRectF.Right));
    fSelectionRect.Bottom := Ceil(Max3(0, fSelectionRectF.Top, fSelectionRectF.Bottom));
    //Selection must be at least one tile
    if fSelectionRect.Left = fSelectionRect.Right then Inc(fSelectionRect.Right);
    if fSelectionRect.Top = fSelectionRect.Bottom then Inc(fSelectionRect.Bottom);
  