diff --git a/myisam/ft_boolean_search.c b/myisam/ft_boolean_search.c
index d728c379ea5e98c34f1343038af16b09f5761905..61381f80783171c7decf3262d455a022b4ad57d4 100644
--- a/myisam/ft_boolean_search.c
+++ b/myisam/ft_boolean_search.c
@@ -360,25 +360,34 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, byte *query,
 }
 
 
-/* returns 1 if str0 contain str1 */
+/* returns 1 if str0 ~= /\<str1\>/ */
 static int _ftb_strstr(const byte *s0, const byte *e0,
                 const byte *s1, const byte *e1,
                 CHARSET_INFO *cs)
 {
-  const byte *p;
+  const byte *p0, *p1;
+  my_bool s_after, e_before;
 
-  while (s0 < e0)
+  s_after=true_word_char(s1[0]);
+  e_before=true_word_char(e1[-1]);
+  p0=s0;
+
+  while (p0 < e0)
   {
-    while (s0 < e0 && cs->to_upper[(uint) (uchar) *s0++] !=
+    while (p0 < e0 && cs->to_upper[(uint) (uchar) *p0++] !=
 	   cs->to_upper[(uint) (uchar) *s1])
       /* no-op */;
-    if (s0 >= e0)
+    if (p0 >= e0)
       return 0;
-    p=s1+1;
-    while (s0 < e0 && p < e1 && cs->to_upper[(uint) (uchar) *s0] ==
-	   cs->to_upper[(uint) (uchar) *p])
-      s0++, p++;
-    if (p >= e1)
+
+    if (s_after && p0-1 > s0 && true_word_char(p0[-2]))
+      continue;
+
+    p1=s1+1;
+    while (p0 < e0 && p1 < e1 && cs->to_upper[(uint) (uchar) *p0] ==
+	   cs->to_upper[(uint) (uchar) *p1])
+      p0++, p1++;
+    if (p1 == e1 && (!e_before || p0 == e0 || !true_word_char(p0[0])))
       return 1;
   }
   return 0;
diff --git a/myisam/ft_parser.c b/myisam/ft_parser.c
index c25ed6022a0d8dc3298524b87b9df18817885bdb..f397660af6b96841dcc82c512ec6580f64003139 100644
--- a/myisam/ft_parser.c
+++ b/myisam/ft_parser.c
@@ -105,15 +105,6 @@ FT_WORD * ft_linearize(TREE *wtree)
   DBUG_RETURN(wlist);
 }
 
-#define true_word_char(X)	(isalnum(X) || (X)=='_')
-#ifdef HYPHEN_IS_DELIM
-#define misc_word_char(X)	((X)=='\'')
-#else
-#define misc_word_char(X)	((X)=='\'' || (X)=='-')
-#endif
-#define word_char(X)		(true_word_char(X) || misc_word_char(X))
-
-
 /* returns:
  * 0 - eof
  * 1 - word found
diff --git a/myisam/ftdefs.h b/myisam/ftdefs.h
index 62fa4362e19725b9b339b45d07b832976b5ee770..46acf60d7969c4dd164a7a8080454a943a95133e 100644
--- a/myisam/ftdefs.h
+++ b/myisam/ftdefs.h
@@ -22,8 +22,9 @@
 #include <m_ctype.h>
 #include <my_tree.h>
 
-#define HYPHEN_IS_DELIM
-#define HYPHEN_IS_CONCAT     /* not used for now */
+#define true_word_char(X)       (isalnum(X) || (X)=='_')
+#define misc_word_char(X)       ((X)=='\'')
+#define word_char(X)            (true_word_char(X) || misc_word_char(X))
 
 #define COMPILE_STOPWORDS_IN
 
diff --git a/mysql-test/r/fulltext.result b/mysql-test/r/fulltext.result
index 738941f63c706595a9c0e30fae70432b2a2a4425..baa3a834f6ff34ebd01968b000e293f137b6f3ac 100644
--- a/mysql-test/r/fulltext.result
+++ b/mysql-test/r/fulltext.result
@@ -116,7 +116,8 @@ a	b
 MySQL has now support	for full-text search
 select * from t1 where MATCH a,b AGAINST ('"text i"' IN BOOLEAN MODE);
 a	b
-Full-text indexes	are called collections
+select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE);
+a	b
 select * from t1 where MATCH a,b AGAINST ('+(support collections) +foobar*' IN BOOLEAN MODE);
 a	b
 select * from t1 where MATCH a,b AGAINST ('+(+(support collections)) +foobar*' IN BOOLEAN MODE);
diff --git a/mysql-test/t/fulltext.test b/mysql-test/t/fulltext.test
index 774a3b4261987a2277f6797eacd8657b51c71526..86d2cde370a44b15ff74a2570eca7e6c6f92845d 100644
--- a/mysql-test/t/fulltext.test
+++ b/mysql-test/t/fulltext.test
@@ -52,6 +52,7 @@ select * from t1 where MATCH a,b AGAINST ('"text search"  "now support"' IN BOOL
 select * from t1 where MATCH a,b AGAINST ('"text search" -"now support"' IN BOOLEAN MODE);
 select * from t1 where MATCH a,b AGAINST ('"text search" +"now support"' IN BOOLEAN MODE);
 select * from t1 where MATCH a,b AGAINST ('"text i"' IN BOOLEAN MODE);
+select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE);
 
 select * from t1 where MATCH a,b AGAINST ('+(support collections) +foobar*' IN BOOLEAN MODE);
 select * from t1 where MATCH a,b AGAINST ('+(+(support collections)) +foobar*' IN BOOLEAN MODE);