diff --git a/myisam/mi_open.c b/myisam/mi_open.c
index 178365577aa..5d8f384a5af 100644
--- a/myisam/mi_open.c
+++ b/myisam/mi_open.c
@@ -335,7 +335,6 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
           { /* 4.0 compatibility code, to be removed in 5.0 */
             share->keyinfo[i].seg=pos-FT_SEGS;
             share->keyinfo[i].keysegs-=FT_SEGS;
-            share->state.header.fulltext_keys++;
           }
           else
           {
diff --git a/myisam/myisamchk.c b/myisam/myisamchk.c
index 72b2567278e..b7f8d561a5b 100644
--- a/myisam/myisamchk.c
+++ b/myisam/myisamchk.c
@@ -876,7 +876,7 @@ static int myisamchk(MI_CHECK *param, my_string filename)
   }
   else
   {
-    if (share->state.header.fulltext_keys && !stopwords_inited++)
+    if (!stopwords_inited++)
       ft_init_stopwords();
 
     if (!(param->testflag & T_READONLY))
diff --git a/mysql-test/t/func_group.test b/mysql-test/t/func_group.test
index 1bf924100a9..fed19cbe07c 100644
--- a/mysql-test/t/func_group.test
+++ b/mysql-test/t/func_group.test
@@ -348,7 +348,9 @@ insert into t1 values (3,1);
 select a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b) from t1 group by a;
 select SQL_BIG_RESULT a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b) from t1 group by a;
 drop table t1;
+--disable_warnings
 create table t1 (USR_ID integer not null, MAX_REQ integer not null, constraint PK_SEA_USER primary key (USR_ID)) type=InnoDB;
+--enable_warnings
 insert into t1 values (1, 3);
 select count(*) + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ from t1 group by MAX_REQ;
 select Case When Count(*) < MAX_REQ Then 1 Else 0 End from t1 where t1.USR_ID = 1 group by MAX_REQ;
diff --git a/mysql-test/t/preload.test b/mysql-test/t/preload.test
old mode 100755
new mode 100644
diff --git a/mysys/tree.c b/mysys/tree.c
index a3b69ebff5e..91d2f9771b5 100644
--- a/mysys/tree.c
+++ b/mysys/tree.c
@@ -46,6 +46,16 @@
   Implemented by monty.
 */
 
+/*
+  NOTE:
+  tree->compare function should be ALWAYS called as
+    (*tree->compare)(custom_arg, ELEMENT_KEY(tree,element), key)
+  and not other way around, as
+    (*tree->compare)(custom_arg, key, ELEMENT_KEY(tree,element))
+
+  ft_boolean_search.c (at least) relies on that.
+*/
+
 #include "mysys_priv.h"
 #include <m_string.h>
 #include <my_tree.h>
diff --git a/sql/field.cc b/sql/field.cc
index 394078b7aab..4aa58180a69 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -2672,6 +2672,7 @@ Field_timestamp::Field_timestamp(char *ptr_arg, uint32 len_arg,
   :Field_str(ptr_arg, 19, (uchar*) 0,0,
 	     unireg_check_arg, field_name_arg, table_arg, cs)
 {
+  flags|=ZEROFILL_FLAG; /* 4.0 MYD compatibility */
   if (table && !table->timestamp_field)
   {
     table->timestamp_field= this;		// Automatic timestamp