anchor.diff:  
   { TTemplateDragProxy }
   
  -constructor TTemplateDragProxy.Create(ADraggingTemplate: TObjTemplate);
  +constructor TTemplateDragProxy.Create(AOwner: TfMain;
  +  ADraggingTemplate: TObjTemplate);
   begin
     FDraggingTemplate := ADraggingTemplate;
  -  inherited AutoCreate(fMain);
  +  inherited Create(AOwner);
   end;
   
   procedure TTemplateDragProxy.Drop;
  
positive.code:   o: TMapObject;
    ot: TMapObjectTemplate;
  begin
    ot :=  fMain.FMap.Templates.Add;
  
  
  
    ot.FillFrom(FDraggingTemplate);
  
    o := fMain.FMap.Objects.Add;
  
    o.TemplateID := ot.TID;
  
    Assert(Assigned(o.Template), 'Template not assigned by ID');
  
    o.L := fMain.FMap.CurrentLevel;
    o.X := fMain.FMouseTileX;
    o.Y := fMain.FMouseTileY;
  
    if o.Options.MayBeOwned then
    begin
      o.Options.Owner := fMain.FCurrentPlayer;
    end;
  
    //TODO: undo
    fMain.FSelectedObject := o;
  end;
  
  procedure TTemplateDragProxy.Render(x, y: integer);
  
negative.code: procedure TfMain.DoStartDrag(var DragObject: TDragObject);
  begin
    case FNextDragSubject of
      TDragSubject.MapObject: DragObject := TObjectDragProxy.Create(self, FSelectedObject, FMouseTileX, FMouseTileY);
      TDragSubject.MapTemplate: DragObject := TTemplateDragProxy.Create(self, FSelectedTemplate);
    else
    inherited DoStartDrag(DragObject);
    end;
  