anchor.diff:    KM_UnitTaskSelfTrain,
     KM_UnitTaskThrowRock,
     KM_GameTypes;
  +
  +
  +{ TKMCivilUnit }
  +function TKMCivilUnit.CheckCondition: Boolean;
  +var
  +  H: TKMHouseInn;
  +begin
  +  Result := False;
  +  if IsHungry then
  +  begin
  +    H := gHands[fOwner].FindInn(fCurrPosition, Self);
  +    GoEat(H);
  +  end;
  +end;
  +
  +function TKMCivilUnit.GoEat(aInn: TKMHouseInn): Boolean;
  +begin
  +  Result := False;
  +  if aInn <> nil then
  +  begin
  +    fUnitTask := TKMTaskGoEat.Create(aInn, Self);
  +    Result := True;
  +  end;
  +end;
   
   
   { TKMSettledUnit }
  
positive.code: 
  
  function TKMUnitWorker.UpdateState: Boolean;
  var
    H: TKMHouseInn;
  begin
    Result := True; //Required for override compatibility
    if fCurrentAction = nil then
      raise ELocError.Create(gRes.Units[UnitType].GUIName + ' has no action at start of TKMUnitWorker.UpdateState', fCurrPosition);
    if inherited UpdateState then Exit;
  
    if fCondition < UNIT_MIN_CONDITION then
    begin
      H := gHands[fOwner].FindInn(fCurrPosition, Self);
      if H <> nil then
        fUnitTask := TKMTaskGoEat.Create(H, Self);
    end;
  
    if (fThought = th_Build)and(fUnitTask = nil) then
      fThought := th_None; //Remove build thought if we are no longer doing anything
  
    //If we are still stuck on a house for some reason, get off it ASAP
  
negative.code: 
  function TKMUnitSerf.UpdateState: Boolean;
  var
    OldThought: TKMUnitThought;
    WasIdle: Boolean;
  begin
  