anchor.diff:  procedure TKMSelection.Selection_SyncCellRect;
   begin
     //Convert RawRect values that can be inverted to tilespace Rect
  -  fSelectionRect.Left   := Trunc(Math.Min(fSelectionRectF.Left, fSelectionRectF.Right));
  -  fSelectionRect.Top    := Trunc(Math.Min(fSelectionRectF.Top, fSelectionRectF.Bottom));
  -  fSelectionRect.Right  := Ceil(Math.Max(fSelectionRectF.Left, fSelectionRectF.Right));
  -  fSelectionRect.Bottom := Ceil(Math.Max(fSelectionRectF.Top, fSelectionRectF.Bottom));
  +  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);
  
positive.code: 
  procedure TKMSelection.DuplicateLandToTemp;
  var
    I,K: Integer;
  begin
    // Copy land to temp array
    // todo: optimise copying process
  
negative.code: uses
    SysUtils,
    KM_Resource, KM_HandsCollection,
    KM_Game, KM_GameCursor, KM_RenderAux, KM_CommonUtils;
  
  
  { TKMSelection }
  