anchor.diff:  function TKMSpectator.HitTestCursor: TObject;
   begin
     Result := gHands.GetUnitByUID(GameCursor.ObjectUID);
  +  if (Result is TKMUnit) and TKMUnit(Result).IsDeadOrDying then
  +    Result := nil;
   
     //If there's no unit try pick a house on the Cell below
     if Result = nil then
  +  begin
       Result := gHands.HousesHitTest(GameCursor.Cell.X, GameCursor.Cell.Y);
  +    if (Result is TKMHouse) and TKMHouse(Result).IsDestroyed then
  +      Result := nil;
  +  end;
   end;
   
   
  
positive.code: procedure TKMSpectator.UpdateSelect;
  var
    G: TKMUnitGroup;
  begin
    //In-game player can select only own Units
    if gGame.IsReplay or gGame.IsMapEditor then
      Selected := gHands.GetUnitByUID(GameCursor.ObjectUID)
    else
      Selected := gHands[fHandIndex].Units.GetUnitByUID(GameCursor.ObjectUID);
  
    //If Id belongs to some Warrior, try to select his group instead
    if Selected is TKMUnitWarrior then
    begin
      if gGame.IsReplay or gGame.IsMapEditor then
        G := gHands.GetGroupByMember(TKMUnitWarrior(Selected))
      else
        G := gHands[fHandIndex].UnitGroups.GetGroupByMember(TKMUnitWarrior(Selected));
  
      //Warrior might not be assigned to a group while walking out of the Barracks
      if G <> nil then
        Selected := G;
    end;
  
    //Update selected groups selected unit
    if Selected is TKMUnitGroup then
      TKMUnitGroup(Selected).SelectedUnit := TKMUnitGroup(Selected).MemberByUID(GameCursor.ObjectUID);
  
    //If there's no unit try pick a house on the Cell below
    if Selected = nil then
      if gGame.IsReplay or gGame.IsMapEditor then
        Selected := gHands.HousesHitTest(GameCursor.Cell.X, GameCursor.Cell.Y)
      else
        Selected := gHands[fHandIndex].HousesHitTest(GameCursor.Cell.X, GameCursor.Cell.Y);
  end;
  
  
  
negative.code: 
  
  implementation
  uses KM_HandsCollection, KM_Game, KM_Houses, KM_Units, KM_UnitGroups, KM_GameCursor, KM_Units_Warrior;
  
  
  { TKMSpectator }
  