Index: engine/owl.c
===================================================================
RCS file: /home/arend/Go/gnugo-rsync/gnugo/engine/owl.c,v
retrieving revision 1.253
diff -u -p -r1.253 owl.c
--- engine/owl.c	11 Feb 2007 13:41:56 -0000	1.253
+++ engine/owl.c	3 May 2007 21:05:14 -0000
@@ -4941,6 +4941,7 @@ owl_test_cuts(signed char goal[BOARDMAX]
     signed char component[MAX_CUTS];
     signed char component2[BOARDMAX];
     int component_size[MAX_CUTS];
+    int component_libs[MAX_CUTS];
     int num_components;
     int biggest_component = -1;
     struct connection_data *conn_data;
@@ -4965,6 +4966,7 @@ owl_test_cuts(signed char goal[BOARDMAX]
      */
     memset(component2, -1, BOARDMAX);
     memset(component_size, 0, sizeof(int) * num_components);
+    memset(component_libs, 0, sizeof(int) * num_components);
     conn_data = malloc(sizeof(struct connection_data) * num_components);
     for (c_id = 0; c_id < num_components; c_id++) {
       signed char this_goal[BOARDMAX];
@@ -5000,17 +5002,27 @@ owl_test_cuts(signed char goal[BOARDMAX]
       if (closest_component != -1) {
 	mark_string(pos, component2, closest_component);
 	component_size[closest_component] += countstones(pos);
+	component_libs[closest_component] += countlib(pos);
       }
     }
 
-    /* Now find the biggest_component. */
+    /* Now find the biggest_component. If some components have the same
+     * size, one with the fewest number of liberties is chosen.
+     */
     {
       int biggest_size = 0;
+      int fewest_libs = (size_t)-1;
       for (c_id = 0; c_id < num_components; c_id++)
 	if (component_size[c_id] > biggest_size) {
 	  biggest_size = component_size[c_id];
+	  fewest_libs = component_libs[c_id];
 	  biggest_component = c_id;
 	}
+	else if (component_size[c_id] == biggest_size
+		 && component_libs[c_id] < fewest_libs) {
+	    fewest_libs = component_libs[c_id];
+	    biggest_component = c_id;
+	}
       gg_assert(biggest_component != -1);
     }
 
