anchor.diff:    fUnit.Thought := th_None;
     fUnit.UpdateNextPosition(KMPoint(fUnit.GetPosition.X, fUnit.GetPosition.Y-1));
     fTerrain.UnitRem(fUnit.GetPosition); //Unit does not occupy a tile while inside
  +
  +  //We are walking straight
  +  if fStreet.X = fDoor.X then
  +   IncDoorway;
   end;
   
   
  
positive.code:                         be_Left:    fStreet.X := fStreet.X - 1;
                          be_Center:  ;
                          be_Right:   fStreet.X := fStreet.X + 1;
                          else        exit; //All street tiles are blocked by busy units. Do not exit the house, just wait
                        end;
  
                        //If there's an idling unit, wait till it goes away
                        if (fTerrain.Land[fStreet.Y,fStreet.X].IsUnit <> nil) then
                        begin
                          fWaitingForPush := true;
                          fHasStarted := true;
                          exit; //Wait until our push request is dealt with before we move out
                        end;
  
                        WalkOut; //All checks done so we can walk out now
                      end;
      end;
      if fStreet.X = fDoor.X then //We are walking straight
        IncDoorway;
  
      fHasStarted := true;
    end;
  
  
    if fWaitingForPush then
    begin
      U := fTerrain.Land[fStreet.Y,fStreet.X].IsUnit;
      if (U = nil) then
      begin
        fWaitingForPush := false;
        WalkOut;
        if fStreet.X = fDoor.X then //We are walking straight
          IncDoorway;
      end
      else
        //Make sure they are still moving out of the way (it could be a different unit now)
        if (U.GetUnitAction is TUnitActionWalkTo) and TUnitActionWalkTo(U.GetUnitAction).HasBeenPushed then
          exit //Wait until our push request is dealt with before we move out
        else
        begin
          fHasStarted := false; //This unit switched places with another or gave up, so we must start again
          fWaitingForPush := false;
          exit;
        end;
    end;
  
    //IsExchanging can be updated while we have completed less than 20% of the move. If it is changed after that
  
negative.code:     SaveStream.Write(fUnit.ID) //Store ID, then substitute it with reference on SyncLoad
    else
      SaveStream.Write(Integer(0));
    if fPushedUnit <> nil then
      SaveStream.Write(fPushedUnit.ID) //Store ID, then substitute it with reference on SyncLoad
    else
      SaveStream.Write(Integer(0));
    SaveStream.Write(fDirection, SizeOf(fDirection));
    SaveStream.Write(fDoor);
    SaveStream.Write(fStreet);
  