anchor.diff:  
       //If Demand aren't reserved already
       Result := Result and ((fDemand[iD].DemandType = dtAlways) or (fDemand[iD].BeingPerformed = 0));
  +
  +    //For constructing houses check if they are connected with road to some other houses,
  +    //which can produce demanded ware (stone or wood)
  +    if Result
  +      and (fDemand[iD].Loc_House <> nil)
  +      and not fDemand[iD].Loc_House.IsComplete
  +      and not fDemand[iD].Loc_House.IsDestroyed then
  +      for I := 0 to gHands[fDemand[iD].Loc_House.Owner].Houses.Count - 1 do
  +      begin
  +        H := gHands[fDemand[iD].Loc_House.Owner].Houses[I];
  +        if H.IsComplete
  +          and not H.IsDestroyed
  +          and (H.ResCanAddToOut(fDemand[iD].Ware) //Check both - output and input ware, because we could use in theory takeout delivery...
  +            or H.ResCanAddToIn(fDemand[iD].Ware)) then
  +          Result := Result and gTerrain.Route_CanBeMade(H.PointBelowEntrance, fDemand[iD].Loc_House.PointBelowEntrance, tpWalkRoad, 0);
  +      end;
     end;
   
     function FindBestDemandId(): Integer;
  
positive.code:                                                out aToHouse: TKMHouse; out aToUnit: TKMUnit; out aForceDelivery: Boolean);
  
    function ValidBestDemand(iD: Integer): Boolean;
    begin
      Result := (fDemand[iD].Ware = aResource) or
                ((fDemand[iD].Ware = wtWarfare) and (aResource in [WARFARE_MIN..WARFARE_MAX])) or
  
negative.code:     else
        CloseOffer(iO);
  
    UpdateQueueItem(aID);
    UpdateOfferItem(iO);
  end;
  
  