Index: server/ruleset.c
===================================================================
--- server/ruleset.c	(révision 17789)
+++ server/ruleset.c	(copie de travail)
@@ -2164,18 +2164,7 @@
         BV_SET(pbase2->conflicts, base_index(pbase));
       }
     }
-    
     free(slist);
-
-    if (territory_claiming_base(pbase)) {
-      base_type_iterate(pbase2) {
-        if (pbase2 > pbase && territory_claiming_base(pbase2)) {
-          BV_SET(pbase->conflicts, base_index(pbase2));
-          BV_SET(pbase2->conflicts, base_index(pbase));
-        }
-      } base_type_iterate_end;
-    }
-
   } base_type_iterate_end;
 
   secfile_check_unused(file);
Index: common/borders.c
===================================================================
--- common/borders.c	(révision 17789)
+++ common/borders.c	(copie de travail)
@@ -27,6 +27,18 @@
 #include "borders.h"
 
 /*************************************************************************
+  Border radius sq from given city.
+*************************************************************************/
+static int inline city_border_radius_sq(struct city *pcity)
+{
+  return (game.info.border_city_radius_sq
+          /* Limit the addition due to the city size. A city size of 60
+           * or more is possible with a city radius of 5 (radius_sq = 26). */
+          + MIN(pcity->size, CITY_MAP_MAX_RADIUS_SQ)
+          * game.info.border_size_effect);
+}
+
+/*************************************************************************
   Border radius sq from given border source tile.
 *************************************************************************/
 int tile_border_source_radius_sq(struct tile *ptile)
@@ -41,27 +53,24 @@
   pcity = tile_city(ptile);
 
   if (pcity) {
-    radius_sq = game.info.border_city_radius_sq;
-    /* Limit the addition due to the city size. A city size of 60 or more is
-     * possible with a city radius of 5 (radius_sq = 26). */
-    radius_sq += MIN(pcity->size, CITY_MAP_MAX_RADIUS_SQ)
-                 * game.info.border_size_effect;
-  } else {
-    base_type_iterate(pbase) {
-      if (tile_has_base(ptile, pbase) && territory_claiming_base(pbase)) {
-        radius_sq = pbase->border_sq;
-        break;
-      }
-    } base_type_iterate_end;
+    radius_sq = city_border_radius_sq(pcity);
   }
 
+  /* Maybe a base can grant us a better radius. */
+  base_type_iterate(pbase) {
+    if (tile_has_base(ptile, pbase) && territory_claiming_base(pbase)) {
+      radius_sq = MAX(radius_sq, pbase->border_sq);
+    }
+  } base_type_iterate_end;
+
   return radius_sq;
 }
 
 /*************************************************************************
-  Border source strength
+  Border source strength.
 *************************************************************************/
-int tile_border_source_strength(struct tile *ptile)
+static int tile_border_source_strength(struct tile *ptile,
+                                       int sq_dist_to_source)
 {
   struct city *pcity;
   int strength = 0;
@@ -72,7 +81,10 @@
 
   pcity = tile_city(ptile);
 
-  if (pcity) {
+  if (pcity && sq_dist_to_source <= city_border_radius_sq(pcity)) {
+    /* This means that the city is or at least can claim the territory
+     * at this place. As long as bases have very low strength, let get
+     * the strength from the city. */
     strength = pcity->size + 2;
   } else {
     base_type_iterate(pbase) {
@@ -91,8 +103,8 @@
 *************************************************************************/
 int tile_border_strength(struct tile *ptile, struct tile *source)
 {
-  int full_strength = tile_border_source_strength(source);
   int sq_dist = sq_map_distance(ptile, source);
+  int full_strength = tile_border_source_strength(source, sq_dist);
 
   if (sq_dist > 0) {
     return full_strength * full_strength / sq_dist;
Index: common/borders.h
===================================================================
--- common/borders.h	(révision 17789)
+++ common/borders.h	(copie de travail)
@@ -17,7 +17,6 @@
 
 bool is_border_source(struct tile *ptile);
 int tile_border_source_radius_sq(struct tile *ptile);
-int tile_border_source_strength(struct tile *ptile);
 int tile_border_strength(struct tile *ptile, struct tile *source);
 
 #endif  /* FC__BORDERS_H */
