diff --git a/patterns/helpers.c b/patterns/helpers.c
index e08238c..c615f8f 100644
--- a/patterns/helpers.c
+++ b/patterns/helpers.c
@@ -881,6 +881,52 @@ int distrust_tactics_helper(int str)
   return 0;
 }
 
+
+/*
+ * This helper returns 1 if str is part of a 4 stone string having a
+ * bent four in the corner shape.
+ *
+ * |x???
+ * |Oxx?
+ * |OOOx
+ * +----
+ *
+ */
+
+int
+bent_four_helper(int str)
+{
+  int stones[4];
+  int good_corner_found = 0;
+  int color = board[str];
+  int k;
+
+  if (!IS_STONE(color))
+    return 0;
+
+  if (findstones(str, 4, stones) != 4)
+    return 0;
+
+  /* All stones must be on the edge. Also detect the presence of a
+   * corner stone.
+   */
+  for (k = 0; k < 4; k++) {
+    if (!is_edge_vertex(stones[k]))
+      return 0;
+    if (is_corner_vertex(stones[k])) {
+      int corner = stones[k];
+      if ((board[EAST(corner)] == color)
+	  + (board[SOUTH(corner)] == color)
+	  + (board[WEST(corner)] == color)
+	  + (board[NORTH(corner)] == color) == 2)
+	good_corner_found = 1;
+    }
+  }
+
+  return good_corner_found;
+}
+
+
 /*
  * LOCAL Variables:
  * tab-width: 8
diff --git a/patterns/owl_defendpats.db b/patterns/owl_defendpats.db
index 3a3e7c8..79537e9 100644
--- a/patterns/owl_defendpats.db
+++ b/patterns/owl_defendpats.db
@@ -2885,6 +2885,11 @@ O.a
 
 
 Pattern D711
+# gf Revised constraint. (3.9.1)
+# This pattern is really only helpful for bent four in the corner
+# situations, see e.g. owl:223 and nicklas1:1902. In certain semeai
+# situations it is directly harmful to capture the nakade stones
+# prematurely.
 
 O?          capture nakade, might give new possibilities
 X*
@@ -2894,10 +2899,15 @@ X*
 O?
 A*
 
-;lib(A)==1 && wormsize(A)>=3
+;lib(A)==1 && wormsize(A)==4 && bent_four_helper(A)
 
 
 Pattern D712
+# gf Revised constraint. (3.9.1)
+# This pattern is really only helpful for bent four in the corner
+# situations, see e.g. owl:223 and nicklas1:1902. In certain semeai
+# situations it is directly harmful to capture the nakade stones
+# prematurely.
 
 ?O          capture nakade, might give new possibilities
 X*
@@ -2907,7 +2917,7 @@ X*
 ?O
 A*
 
-;lib(A)==1 && wormsize(A)>=3
+;lib(A)==1 && wormsize(A)==4 && bent_four_helper(A)
 
 
 Pattern D713
diff --git a/patterns/patterns.h b/patterns/patterns.h
index d8a353e..7904927 100644
--- a/patterns/patterns.h
+++ b/patterns/patterns.h
@@ -332,6 +332,7 @@ int adjacent_to_defendable_stone_in_atari(int str);
 void backfill_replace(int move, int str);
 int break_mirror_helper(int str, int color);
 int distrust_tactics_helper(int str);
+int bent_four_helper(int str);
 int disconnect_helper(int apos, int bpos);
 
 

