diff -N -r -u -X .ignore gnugo-copy/config.vc gnugo/config.vc
--- gnugo-copy/config.vc	2007-02-18 05:06:56.734375000 +0100
+++ gnugo/config.vc	2007-03-14 23:44:39.406250000 +0100
@@ -30,6 +30,9 @@
 /* GAIN/LOSS codes. Disabled by default. */
 #define EXPERIMENTAL_OWL_EXT 0
 
+/* Disable unneeded things. 0 standard. */
+#define FINAL_RELEASE 0
+
 /* Define as 1 to use the grid optimisation, or 2 to run it in self-test mode
    */
 #define GRID_OPT 1
diff -N -r -u -X .ignore gnugo-copy/engine/value_moves.c gnugo/engine/value_moves.c
--- gnugo-copy/engine/value_moves.c	2007-01-28 16:14:03.750000000 +0100
+++ gnugo/engine/value_moves.c	2007-03-13 13:25:24.796875000 +0100
@@ -2981,12 +2981,30 @@
 	|| (owl_move_reason_known(pos, aa)
 	    && dragon[aa].status == CRITICAL)
 	|| move_reason_known(pos, SEMEAI_MOVE, aa)) {
+      float excess_value;
+      int our_dragon = (color == worm[aa].color);
+      float dragon_ter_val = 2 * DRAGON2(aa).strategic_size;
+
+      if ((our_dragon && defense_move_known(pos, aa) == WIN)
+	  || (!our_dragon && attack_move_known(pos, aa) == WIN)) {
+	excess_value = dragon_ter_val - move[pos].territorial_value;
+	if (excess_value > 0.0) {
+	  /* We haven't counted all the territorial value, the most probably
+	   * because of ko situations - repair it here.
+	   * FIXME: We should count values of all ko threats to know how
+	   * much we really gain. As for now 0.75 factor is used. */
+	  excess_value *= 0.75;
+	  TRACE("  %1m: %f - territory underestimation bonus for %1m\n", pos,
+		excess_value, aa);
+	  tot_value += excess_value;
+	}
+      }
+
       /* But if the strategical value was larger than the territorial
        * value (e.g. because connecting to strong dragon) we award the
        * excess value as a bonus.
        */
-      float excess_value = (dragon_value[aa] - 
-			    2 * DRAGON2(aa).strategic_size);
+      excess_value = (dragon_value[aa] - dragon_ter_val);
       if (excess_value > 0.0) {
 	TRACE("  %1m: %f - strategic bonus for %1m\n", pos, excess_value, aa);
 	tot_value += excess_value;
diff -N -r -u -X .ignore gnugo-copy/engine/worm.c gnugo/engine/worm.c
--- gnugo-copy/engine/worm.c	2007-03-14 13:12:20.250000000 +0100
+++ gnugo/engine/worm.c	2007-03-14 17:46:59.484375000 +0100
@@ -1734,6 +1734,10 @@
 }
 
 
+/* Find stones, that could live for sure, if player (color) moves
+ * first.
+ */
+
 void
 get_lively_stones(int color, signed char safe_stones[BOARDMAX])
 {
@@ -1741,10 +1745,11 @@
   memset(safe_stones, 0, BOARDMAX * sizeof(*safe_stones));
   for (pos = BOARDMIN; pos < BOARDMAX; pos++)
     if (IS_STONE(board[pos]) && worm[pos].origin == pos) {
-      if ((stackp == 0 && worm[pos].attack_codes[0] == 0) || !attack(pos, NULL)
+      if ((!stackp && !worm[pos].attack_codes[0])
+	  || (stackp && !attack(pos, NULL))
 	  || (board[pos] == color
-	      && ((stackp == 0 && worm[pos].defense_codes[0] != 0)
-		  || find_defense(pos, NULL))))
+	      && ((!stackp && worm[pos].defense_codes[0] == WIN)
+		  || (stackp && find_defense(pos, NULL) == WIN))))
 	mark_string(pos, safe_stones, 1);
     }
 }
diff -N -r -u -X .ignore gnugo-copy/regression/arb.tst gnugo/regression/arb.tst
--- gnugo-copy/regression/arb.tst	2006-01-28 23:04:24.000000000 +0100
+++ gnugo/regression/arb.tst	2007-03-12 13:23:06.171875000 +0100
@@ -66,7 +66,7 @@
 # Defend against a combination attack.
 loadsgf games/arb/game03.sgf 109
 232 reg_genmove black
-#? [M9|M10|L10|L11]
+#? [M9|M10|M11|L10|L11]
 
 loadsgf games/arb/game04.sgf 43
 233 reg_genmove black
diff -N -r -u -X .ignore gnugo-copy/regression/nngs4.tst gnugo/regression/nngs4.tst
--- gnugo-copy/regression/nngs4.tst	2006-05-22 18:38:08.000000000 +0200
+++ gnugo/regression/nngs4.tst	2007-03-13 11:27:09.890625000 +0100
@@ -249,7 +249,7 @@
 #C13 looks correct here /evand
 loadsgf games/nngs/gnugo-3.3.10-niki-200210281349.sgf 144
 610 reg_genmove white
-#? [C13|D13]
+#? [C13|D13|B14]
 
 #New failure (3.3.20)
 #pull out the stones /evand
