anchor.diff:  
         //All checks done so unit can walk out now
         KMUnit.Direction := KMGetDirection(KMPointRound(fDoor) ,fStreet);
  -      KMUnit.PrevPosition := fStreet; //@Krom: I don't understand w
  -      KMUnit.NextPosition := KMPointRound(fDoor);
  +      KMUnit.PrevPosition := KMUnit.GetPosition; //@Krom: I don't understand w
  +      KMUnit.NextPosition := fStreet;
         fTerrain.UnitWalk(KMUnit.GetPosition,KMUnit.NextPosition);
         if (KMUnit.GetHome<>nil)and(KMUnit.GetHome.GetHouseType=ht_Barracks) then //Unit home is barracks
           TKMHouseBarracks(KMUnit.GetHome).RecruitsInside:=TKMHouseBarracks(KMUnit.GetHome).RecruitsInside - 1;
       end;
   
       //if fUsingDoorway then inc(fHouse.DoorwayUse); //@Lewin: commented out since it's still crashing in Tutorial
  -    fHasStarted:=true;//}
  -  end;
  +    fHasStarted:=true;
  +  end; //}
     //KMUnit.IsExchanging := (fHouse.DoorwayUse > 1); //@Krom: Commented out to stop crashing due to PreviousPos being wrong; @Lewin: Idon't understand it very well, you will fix it better
   
     if fWaitingForPush then
  
positive.code:     begin
        fWaitingForPush := false;
        KMUnit.Direction := KMGetDirection(KMPointRound(fDoor) ,fStreet);
        KMUnit.NextPosition := fStreet;
        fTerrain.UnitWalk(KMUnit.GetPosition,KMUnit.NextPosition);
        if (KMUnit.GetHome<>nil)and(KMUnit.GetHome.GetHouseType=ht_Barracks) then //Unit home is barracks
          TKMHouseBarracks(KMUnit.GetHome).RecruitsInside:=TKMHouseBarracks(KMUnit.GetHome).RecruitsInside - 1;
  
negative.code: 
    //if fUsingDoorway then inc(fHouse.DoorwayUse); //@Lewin: commented out since it's still crashing in Tutorial
    Result := true;
  end;}
  
  
  procedure TUnitActionGoInOut.Execute(KMUnit: TKMUnit; out DoEnd: Boolean);
  