anchor.diff:        QueueIdx := fQueueArray[QueueIdx].Next;
       end;
     end;
  -
  +  // Find nearby unvisited polygons and expand polygon
     procedure ExpandPolygon(aIdx: Word);
     var
       I, NearbyIdx: Integer;
  
positive.code:   StartPolygons: TKMWordArray;
  begin
    Result := False;
    CityCenterPoints := gAIFields.Eye.GetCityCenterPoints(True);
    if (Length(CityCenterPoints) < 1) then
      Exit;
    SetLength(StartPolygons, Length(CityCenterPoints));
    for I := Low(StartPolygons) to High(StartPolygons) do
      StartPolygons[I] := gAIFields.NavMesh.Point2Polygon[ CityCenterPoints[I].Y,CityCenterPoints[I].X ];
  
    Result := FillPolygons(Length(StartPolygons), StartPolygons);
  end;
  
  
  function TForwardFF.FindDefenceLines(aOwner: TKMHandIndex; var aDefLines: TKMDefenceLines): Boolean;
  begin
    Result := False;
    fOwner := aOwner;
  
    gAIFields.Eye.OwnerUpdate(aOwner); // DEBUG
  
    Result := ForwardFF();
    if Result then
  
negative.code: end;
  
  
  // Backward flood fill -> flood fill from enemy influence area to owner city
  // BackwardFF will find the best possible defences
  procedure TBackwardFF.BackwardFlood();
  var
    PolyArr: TPolygonArray;
    // Prepare init polygons for backward flood fill (polygons near enemy)
    procedure CreateBorders();
    var
      I, K, QueueIdx, NearbyIdx: Word;
    begin
      QueueIdx := fStartQueue;
      for I := 1 to fQueueCnt do // Enemy polygons are prepared in Queue
      begin
        for K := 0 to PolyArr[QueueIdx].NearbyCount-1 do
        begin
  