anchor.diff:            for iO := 1 to fQueue.fOfferCount do
               if (fQueue.fOffer[iO].Ware <> wt_None)
                 and fQueue.ValidDelivery(iO,iD)
  -              and AnySerfCanDoDelivery(iO,iD) then //Only choose this delivery if at least one of the serfs can do it
  +              and AnySerfCanDoDelivery(iO,iD) //Only choose this delivery if at least one of the serfs can do it
  +              and fQueue.TryCalculateBid(iO,iD,Bid)
  +              and ((Bid < BestBid) or (fQueue.fDemand[iD].Importance > BestImportance)) then
               begin
  -              Bid := fQueue.CalculateBid(iO,iD,nil);
  -              if (Bid < BestBid) or (fQueue.fDemand[iD].Importance > BestImportance) then
  -              begin
  -                BestBid := Bid;
  -                BestImportance := fQueue.fDemand[iD].Importance;
  -                FoundO := iO;
  -                FoundD := iD;
  -              end;
  +              BestBid := Bid;
  +              BestImportance := fQueue.fDemand[iD].Importance;
  +              FoundO := iO;
  +              FoundD := iD;
               end;
   
         //FoundO and FoundD give us the best delivery to do at this moment. Now find the best serf for the job.
  
positive.code:     if fDemand[iD].Loc_House <> nil then
      begin
        //Check delivery flag
        Result := Result and (fDemand[iD].Loc_House.DeliveryMode = dm_Delivery);
        //for ArmorWorkshop also check accept ware flag
        if fDemand[iD].Loc_House is TKMHouseArmorWorkshop then
          Result := Result and TKMHouseArmorWorkshop(fDemand[iD].Loc_House).AcceptWareForDelivery(fDemand[iD].Ware);
        if fDemand[iD].Loc_House is TKMHouseTownHall then
          Result := Result and (TKMHouseTownHall(fDemand[iD].Loc_House).GoldMaxCnt > TKMHouseTownHall(fDemand[iD].Loc_House).GoldCnt);
      end;
  
      //If Demand aren't reserved already
      Result := Result and ((fDemand[iD].DemandType = dtAlways) or (fDemand[iD].BeingPerformed = 0));
    end;
  
negative.code: 
      if fOfferToDemandCache.TryGetValue(BidKey, OfferToDemandCache) then
      begin
        Result := (OfferToDemandCache = NOT_REACHABLE_DEST_VALUE);
        if not Result then
          aBidBasicValue := NOT_REACHABLE_DEST_VALUE
        else
          aBidBasicValue := SerfBidValue + OfferToDemandCache;
        Exit;
      end;
    end;
  