diff --git a/Makefile.am b/Makefile.am
index 8a575b3c3656e236fc47e2955f4608695ef7384d..bcffe546e7ea1a7dd7c6aecf818e1b3c3b15e4fa 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -118,7 +118,7 @@ test-unit:
 
 test-ps:
 	cd mysql-test ; \
-	./mysql-test-run.pl $(force) --ps-protocol --mysqld=--binlog-format=statement
+	./mysql-test-run.pl $(force) --ps-protocol --mysqld=--binlog-format=mixed
 
 test-nr:
 	cd mysql-test ; \
@@ -129,6 +129,10 @@ test-pr:
 	./mysql-test-run.pl $(force) --ps-protocol --mysqld=--binlog-format=row
 
 test-ns:
+	cd mysql-test ; \
+	./mysql-test-run.pl $(force) --mysqld=--binlog-format=mixed
+
+test-binlog-statement:
 	cd mysql-test ; \
 	./mysql-test-run.pl $(force) --mysqld=--binlog-format=statement
 
diff --git a/mysql-test/extra/binlog_tests/binlog.test b/mysql-test/extra/binlog_tests/binlog.test
index 993b3fbf63487b424a370dac89590a1e2a14df31..af7320a49f6490587d3332537dd57fb8372d51d5 100644
--- a/mysql-test/extra/binlog_tests/binlog.test
+++ b/mysql-test/extra/binlog_tests/binlog.test
@@ -60,24 +60,4 @@ insert into t1 values(null);
 select * from t1;
 drop table t1;
 
-# Test of binlogging of INSERT_ID with INSERT DELAYED
-create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
-# First, avoid BUG#20627:
-set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
-# Verify that only one INSERT_ID event is binlogged.
-insert delayed into t1 values (207);
-
-# We use sleeps between statements, that's the only way to get a
-# repeatable binlog in a normal test run and under Valgrind.
-# It may be that the "binlog missing rows" of BUG#20821 shows up
-# here.
-sleep 2;
-insert delayed into t1 values (null);
-sleep 2;
-insert delayed into t1 values (300);
-sleep 2; # time for the delayed queries to reach disk
-select * from t1;
---replace_column 2 # 5 #
---replace_regex /table_id: [0-9]+/table_id: #/
-show binlog events from 102;
-drop table t1;
+-- source extra/binlog_tests/binlog_insert_delayed.test
diff --git a/mysql-test/extra/binlog_tests/binlog_insert_delayed.test b/mysql-test/extra/binlog_tests/binlog_insert_delayed.test
new file mode 100644
index 0000000000000000000000000000000000000000..596bb1d5772c5aea0761a82fb86c8cd3132a461d
--- /dev/null
+++ b/mysql-test/extra/binlog_tests/binlog_insert_delayed.test
@@ -0,0 +1,22 @@
+# Test of binlogging of INSERT_ID with INSERT DELAYED
+create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
+# First, avoid BUG#20627:
+set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
+# Verify that only one INSERT_ID event is binlogged.
+# Note, that because of WL#3368 mixed mode binlog records RBR events for the delayed
+insert delayed into t1 values (207);
+
+# We use sleeps between statements, that's the only way to get a
+# repeatable binlog in a normal test run and under Valgrind.
+# It may be that the "binlog missing rows" of BUG#20821 shows up
+# here.
+sleep 2;
+insert delayed into t1 values (null);
+sleep 2;
+insert delayed into t1 values (300);
+sleep 2; # time for the delayed queries to reach disk
+select * from t1;
+--replace_column 2 # 5 #
+--replace_regex /table_id: [0-9]+/table_id: #/
+show binlog events from 102;
+drop table t1;
diff --git a/mysql-test/extra/rpl_tests/rpl_loaddata.test b/mysql-test/extra/rpl_tests/rpl_loaddata.test
index 08e89c20973e26969a79b989fcb4ce4905049f3e..e58908ec7e9037737438bfc05d008df7e0dc6e18 100644
--- a/mysql-test/extra/rpl_tests/rpl_loaddata.test
+++ b/mysql-test/extra/rpl_tests/rpl_loaddata.test
@@ -1,5 +1,5 @@
 # Requires statement logging
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 
 # See if replication of a "LOAD DATA in an autoincrement column"
 # Honours autoincrement values
diff --git a/mysql-test/extra/rpl_tests/rpl_stm_000001.test b/mysql-test/extra/rpl_tests/rpl_stm_000001.test
index 443ed27053a7882967f50ebc431b1e107bbcc3ae..8673ae3130554d81d57d72b2a4db39d546c82bf1 100644
--- a/mysql-test/extra/rpl_tests/rpl_stm_000001.test
+++ b/mysql-test/extra/rpl_tests/rpl_stm_000001.test
@@ -1,4 +1,4 @@
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source include/master-slave.inc
 
 create table t1 (word char(20) not null);
diff --git a/mysql-test/extra/rpl_tests/rpl_stm_charset.test b/mysql-test/extra/rpl_tests/rpl_stm_charset.test
index d29a82cfd3156bf009f36eee5e04869cd1ed315e..10b4310127fb847e8ab5ce11fd7143f8942481a8 100644
--- a/mysql-test/extra/rpl_tests/rpl_stm_charset.test
+++ b/mysql-test/extra/rpl_tests/rpl_stm_charset.test
@@ -2,7 +2,7 @@
 # This test will fail if the server/client does not support enough charsets.
 
 # Requires statement logging
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 
 source include/master-slave.inc;
 --disable_warnings
diff --git a/mysql-test/include/have_binlog_format_mixed.inc b/mysql-test/include/have_binlog_format_mixed.inc
new file mode 100644
index 0000000000000000000000000000000000000000..fc5ca61c5a095289fa186e2f6cbc1ddfe8cb3dbf
--- /dev/null
+++ b/mysql-test/include/have_binlog_format_mixed.inc
@@ -0,0 +1,4 @@
+-- require r/have_binlog_format_mixed.require
+disable_query_log;
+show variables like "binlog_format";
+enable_query_log;
diff --git a/mysql-test/include/have_binlog_format_mixed_or_statement.inc b/mysql-test/include/have_binlog_format_mixed_or_statement.inc
new file mode 100644
index 0000000000000000000000000000000000000000..8ee6f2cc0305b45bc5105da3aa975def78ff9f2e
--- /dev/null
+++ b/mysql-test/include/have_binlog_format_mixed_or_statement.inc
@@ -0,0 +1,5 @@
+--require r/have_binlog_format_statement.require
+--disable_query_log
+--replace_result MIXED STATEMENT
+show variables like "binlog_format";
+--enable_query_log
diff --git a/mysql-test/r/binlog_statement_insert_delayed.result b/mysql-test/r/binlog_statement_insert_delayed.result
new file mode 100644
index 0000000000000000000000000000000000000000..bae01f7dc5d477226b4e12a55a234a54ffae2802
--- /dev/null
+++ b/mysql-test/r/binlog_statement_insert_delayed.result
@@ -0,0 +1,18 @@
+create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
+set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
+insert delayed into t1 values (207);
+insert delayed into t1 values (null);
+insert delayed into t1 values (300);
+select * from t1;
+a
+207
+208
+300
+show binlog events from 102;
+Log_name	Pos	Event_type	Server_id	End_log_pos	Info
+master-bin.000001	#	Query	1	#	use `test`; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam
+master-bin.000001	#	Query	1	#	use `test`; insert delayed into t1 values (207)
+master-bin.000001	#	Intvar	1	#	INSERT_ID=208
+master-bin.000001	#	Query	1	#	use `test`; insert delayed into t1 values (null)
+master-bin.000001	#	Query	1	#	use `test`; insert delayed into t1 values (300)
+drop table t1;
diff --git a/mysql-test/r/binlog_stm_binlog.result b/mysql-test/r/binlog_stm_binlog.result
index 4e23db4828fc94400791c05ab63df157fe3c0167..b175089f585d44c701677aaad68a60b5c8c55302 100644
--- a/mysql-test/r/binlog_stm_binlog.result
+++ b/mysql-test/r/binlog_stm_binlog.result
@@ -172,8 +172,10 @@ master-bin.000001	#	Intvar	1	#	INSERT_ID=127
 master-bin.000001	#	Query	1	#	use `test`; insert into t1 values(null)
 master-bin.000001	#	Query	1	#	use `test`; drop table t1
 master-bin.000001	#	Query	1	#	use `test`; create table t1 (a int not null auto_increment, primary key (a)) engine=myisam
-master-bin.000001	#	Query	1	#	use `test`; insert delayed into t1 values (207)
-master-bin.000001	#	Intvar	1	#	INSERT_ID=208
-master-bin.000001	#	Query	1	#	use `test`; insert delayed into t1 values (null)
-master-bin.000001	#	Query	1	#	use `test`; insert delayed into t1 values (300)
+master-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
+master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
+master-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
+master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
+master-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
+master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
 drop table t1;
diff --git a/mysql-test/r/have_binlog_format_mixed.require b/mysql-test/r/have_binlog_format_mixed.require
new file mode 100644
index 0000000000000000000000000000000000000000..4b752cbb31484e7e716efa0061375fab1fa5c71d
--- /dev/null
+++ b/mysql-test/r/have_binlog_format_mixed.require
@@ -0,0 +1,2 @@
+Variable_name	Value
+binlog_format	MIXED
diff --git a/mysql-test/r/rpl_rbr_to_sbr.result b/mysql-test/r/rpl_rbr_to_sbr.result
index c5a672ee13b1474049f230d89d6935e888768fb4..4b2d129c73279e23aaa45c7e461b7221144e3117 100644
--- a/mysql-test/r/rpl_rbr_to_sbr.result
+++ b/mysql-test/r/rpl_rbr_to_sbr.result
@@ -5,9 +5,6 @@ reset slave;
 drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
 start slave;
 SET BINLOG_FORMAT=MIXED;
-SELECT @@GLOBAL.BINLOG_FORMAT, @@SESSION.BINLOG_FORMAT;
-@@GLOBAL.BINLOG_FORMAT	@@SESSION.BINLOG_FORMAT
-STATEMENT	MIXED
 SET GLOBAL BINLOG_FORMAT=MIXED;
 SELECT @@GLOBAL.BINLOG_FORMAT, @@SESSION.BINLOG_FORMAT;
 @@GLOBAL.BINLOG_FORMAT	@@SESSION.BINLOG_FORMAT
diff --git a/mysql-test/t/archive.test b/mysql-test/t/archive.test
index 294e7730e073de7b656c7eb1467e02ff47486cef..0dccd8f111a9b9987a9f03c34874fc2ccbd86410 100644
--- a/mysql-test/t/archive.test
+++ b/mysql-test/t/archive.test
@@ -3,7 +3,7 @@
 # Taken FROM the select test
 #
 -- source include/have_archive.inc
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 
 --disable_warnings
 drop table if exists t1,t2,t3;
diff --git a/mysql-test/t/binlog_statement_insert_delayed.test b/mysql-test/t/binlog_statement_insert_delayed.test
new file mode 100644
index 0000000000000000000000000000000000000000..9b78296236f4f447057beab1d270776980731819
--- /dev/null
+++ b/mysql-test/t/binlog_statement_insert_delayed.test
@@ -0,0 +1,9 @@
+# This test is to verify replication with INSERT DELAY through
+# unrecommended STATEMENT binlog format
+
+-- source include/not_embedded.inc
+-- source include/have_binlog_format_statement.inc
+-- disable_query_log
+reset master; # get rid of previous tests binlog
+-- enable_query_log
+-- source extra/binlog_tests/binlog_insert_delayed.test
diff --git a/mysql-test/t/binlog_stm_binlog.test b/mysql-test/t/binlog_stm_binlog.test
index f22e7e45aea2dbf286239b5b06070e53a7f36b84..280b7a3aef9f93e24aa8af7661e27702ed6ffe43 100644
--- a/mysql-test/t/binlog_stm_binlog.test
+++ b/mysql-test/t/binlog_stm_binlog.test
@@ -13,6 +13,6 @@ drop table t1;
 # For both statement and row based bin logs 9/19/2005 [jbm]
 
 -- source include/not_embedded.inc
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed.inc
 -- source extra/binlog_tests/binlog.test
 
diff --git a/mysql-test/t/binlog_stm_blackhole.test b/mysql-test/t/binlog_stm_blackhole.test
index 6047d8ca2fc1c84381eccb0123625aaac167f7eb..02ba2be095bda493f1435b5a988a6332153a0713 100644
--- a/mysql-test/t/binlog_stm_blackhole.test
+++ b/mysql-test/t/binlog_stm_blackhole.test
@@ -2,5 +2,5 @@
 # For both statement and row based bin logs 9/19/2005 [jbm]
 
 -- source include/not_embedded.inc
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source extra/binlog_tests/blackhole.test
diff --git a/mysql-test/t/binlog_stm_ctype_cp932.test b/mysql-test/t/binlog_stm_ctype_cp932.test
index 436f95a24531de96d0e1a0cf960db22d409cd602..c0791d8144580ef9159526ee90fd536e1f84dc24 100644
--- a/mysql-test/t/binlog_stm_ctype_cp932.test
+++ b/mysql-test/t/binlog_stm_ctype_cp932.test
@@ -2,5 +2,5 @@
 # For both statement and row based bin logs 9/19/2005 [jbm]
 
 -- source include/not_embedded.inc
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source extra/binlog_tests/ctype_cp932.test
diff --git a/mysql-test/t/binlog_stm_ctype_ucs.test b/mysql-test/t/binlog_stm_ctype_ucs.test
index a32ac3155c790dbbf50866102c5959c96170c656..c8cd7e06398eb9e508f3e015501496c266304446 100644
--- a/mysql-test/t/binlog_stm_ctype_ucs.test
+++ b/mysql-test/t/binlog_stm_ctype_ucs.test
@@ -1,6 +1,6 @@
 # This is a wrapper for binlog.test so that the same test case can be used 
 # For both statement and row based bin logs 9/19/2005 [jbm]
 
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source extra/binlog_tests/ctype_ucs_binlog.test
 
diff --git a/mysql-test/t/binlog_stm_drop_tmp_tbl.test b/mysql-test/t/binlog_stm_drop_tmp_tbl.test
index e8acd00c77989b2552ae1924607770836fe70607..6017f272d0186506228762bed8a00ab5be963504 100644
--- a/mysql-test/t/binlog_stm_drop_tmp_tbl.test
+++ b/mysql-test/t/binlog_stm_drop_tmp_tbl.test
@@ -1,5 +1,5 @@
 # This is a wrapper for binlog.test so that the same test case can be used 
 # For both statement and row based bin logs 9/19/2005 [jbm]
 
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source extra/binlog_tests/drop_temp_table.test
diff --git a/mysql-test/t/binlog_stm_innodb_stat.test b/mysql-test/t/binlog_stm_innodb_stat.test
index c6017246e6d39920c34c1b9f6af0deec71499d52..a08039c4a41e315407725eb1530e42bd3b642d56 100644
--- a/mysql-test/t/binlog_stm_innodb_stat.test
+++ b/mysql-test/t/binlog_stm_innodb_stat.test
@@ -1,5 +1,5 @@
 # This is a wrapper for binlog.test so that the same test case can be used 
 # For both statement and row based bin logs 9/19/2005 [jbm]
 
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source extra/binlog_tests/innodb_stat.test
diff --git a/mysql-test/t/binlog_stm_insert_select.test b/mysql-test/t/binlog_stm_insert_select.test
index 06792990a550017436f27a265e97ee1b9f3957be..3aefa1e6cf7edadfa1651754ded34320e4298b86 100644
--- a/mysql-test/t/binlog_stm_insert_select.test
+++ b/mysql-test/t/binlog_stm_insert_select.test
@@ -1,5 +1,5 @@
 # This is a wrapper for binlog.test so that the same test case can be used 
 # For both statement and row based bin logs 9/19/2005 [jbm]
 
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source extra/binlog_tests/insert_select-binlog.test
diff --git a/mysql-test/t/binlog_stm_mix_innodb_myisam.test b/mysql-test/t/binlog_stm_mix_innodb_myisam.test
index 829cf50fe1e9dd3cc0f96396b5a8eae5d931b2f2..cb6516a3a2f6eefe8304c29a82ecd1d82f6f467c 100644
--- a/mysql-test/t/binlog_stm_mix_innodb_myisam.test
+++ b/mysql-test/t/binlog_stm_mix_innodb_myisam.test
@@ -1,7 +1,7 @@
 # This is a wrapper for binlog.test so that the same test case can be used 
 # For both statement and row based bin logs 9/19/2005 [jbm]
 
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source extra/binlog_tests/mix_innodb_myisam_binlog.test
 
 # This piece below cannot be put into
diff --git a/mysql-test/t/create_select_tmp.test b/mysql-test/t/create_select_tmp.test
index 144bccc5871a389b3a96fe503115c3a6d6af5b73..ba9898b7752127f159857ded359f7faed4ce130b 100644
--- a/mysql-test/t/create_select_tmp.test
+++ b/mysql-test/t/create_select_tmp.test
@@ -6,7 +6,7 @@
 # inconsistency between binlog and the internal list of temp tables.
 
 # This does not work for RBR yet.
---source include/have_binlog_format_statement.inc
+--source include/have_binlog_format_mixed_or_statement.inc
 
 -- source include/have_innodb.inc
 --disable_warnings
diff --git a/mysql-test/t/ctype_cp932_binlog_stm.test b/mysql-test/t/ctype_cp932_binlog_stm.test
index 7a0ac6714170f7e707b6774e7da04a5e383dbb2a..6b591fbe5f598594c95970d30397ec7294db2eab 100644
--- a/mysql-test/t/ctype_cp932_binlog_stm.test
+++ b/mysql-test/t/ctype_cp932_binlog_stm.test
@@ -1,7 +1,7 @@
 # This is a wrapper for binlog.test so that the same test case can be used 
 # For both statement and row based bin logs 11/07/2005 [jbm]
 
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source extra/binlog_tests/ctype_cp932_binlog.test
 
 #
diff --git a/mysql-test/t/date_formats.test b/mysql-test/t/date_formats.test
index 6898cd5802d17dbdaa93157e4bfc1dffa1ffa1d4..c19ebeb2e2882534f6583d398ffb7d8f67839db9 100644
--- a/mysql-test/t/date_formats.test
+++ b/mysql-test/t/date_formats.test
@@ -6,9 +6,9 @@
 drop table if exists t1;
 --enable_warnings
 
---replace_result ROW <format> STATEMENT <format>
+--replace_result ROW <format> STATEMENT <format> MIXED <format>
 SHOW GLOBAL VARIABLES LIKE "%_format%";
---replace_result ROW <format> STATEMENT <format>
+--replace_result ROW <format> STATEMENT <format> MIXED <format>
 SHOW SESSION VARIABLES LIKE "%_format%";
 
 #
@@ -36,7 +36,7 @@ set datetime_format= '%H:%i:%s.%f %m-%d-%Y';
 set datetime_format= '%h:%i:%s %p %Y-%m-%d';
 set datetime_format= '%h:%i:%s.%f %p %Y-%m-%d';
 
---replace_result ROW <format> STATEMENT <format>
+--replace_result ROW <format> STATEMENT <format> MIXED <format>
 SHOW SESSION VARIABLES LIKE "%format";
 
 --error 1231
diff --git a/mysql-test/t/mysqlbinlog.test b/mysql-test/t/mysqlbinlog.test
index ceba78bf762cc67a39b160cbab554217e993cb0d..b1ee39479b9d58e5b985aa82961881dcc4e31357 100644
--- a/mysql-test/t/mysqlbinlog.test
+++ b/mysql-test/t/mysqlbinlog.test
@@ -1,6 +1,6 @@
 # We are using .opt file since we need small binlog size
 # TODO: Need to look at making a row based version once the new row based client is completed. [jbm]
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 
 # Embedded server doesn't support binlogging
 -- source include/not_embedded.inc
diff --git a/mysql-test/t/mysqlbinlog2.test b/mysql-test/t/mysqlbinlog2.test
index 91da502da0286ec38bdaa55d3fd45f19c497902d..69cd5d904532e5d668fd52d8d7ff841447f05520 100644
--- a/mysql-test/t/mysqlbinlog2.test
+++ b/mysql-test/t/mysqlbinlog2.test
@@ -2,7 +2,7 @@
 # and a few others.
 
 # TODO: Need to look at making row based version once new binlog client is complete.
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 
 # Embedded server doesn't support binlogging
 -- source include/not_embedded.inc
diff --git a/mysql-test/t/ndb_multi.test b/mysql-test/t/ndb_multi.test
index 36018e6c679d9e39580b09ed2204aea54c00c2da..df2cc9c1d8b48ec4d37399c705862be2f765f088 100644
--- a/mysql-test/t/ndb_multi.test
+++ b/mysql-test/t/ndb_multi.test
@@ -1,7 +1,7 @@
 -- source include/have_ndb.inc
 -- source include/have_multi_ndb.inc
 -- source include/not_embedded.inc
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 
 --disable_warnings
 connection server2;
diff --git a/mysql-test/t/rpl000013.test b/mysql-test/t/rpl000013.test
index c681e76cf519258a469e2caba44f92f51c8d8760..69a102e84cee8d497f6226afe0afe2343c0b772c 100644
--- a/mysql-test/t/rpl000013.test
+++ b/mysql-test/t/rpl000013.test
@@ -7,7 +7,7 @@
 # in row-based, it hangs waiting for an offset which is never
 # reached (the "sync_with_master 1"), logically.
 
---source include/have_binlog_format_statement.inc
+--source include/have_binlog_format_mixed_or_statement.inc
 source include/master-slave.inc;
 save_master_pos;
 connection slave;
diff --git a/mysql-test/t/rpl_heap.test b/mysql-test/t/rpl_heap.test
index b35983ad4d766bd6fba9f563774214ced4ffc519..b8972ee9e787d7e40de56549dc79d25436068798 100644
--- a/mysql-test/t/rpl_heap.test
+++ b/mysql-test/t/rpl_heap.test
@@ -1,5 +1,5 @@
 # Requires statement logging
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 
 # You must run this test with --manager.
 
diff --git a/mysql-test/t/rpl_loaddata_s.test b/mysql-test/t/rpl_loaddata_s.test
index 72a5d1a8ec1d8b8b42254ad73bda7cf32059e949..2c94c8ef9535d8f8ff5e930ec3c5bddf1973c7bd 100644
--- a/mysql-test/t/rpl_loaddata_s.test
+++ b/mysql-test/t/rpl_loaddata_s.test
@@ -2,7 +2,7 @@
 # replicated LOAD DATA INFILE correctly when it has binlog_*_db rules.
 # This is for BUG#1100 (LOAD DATA INFILE was half-logged).
 
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source include/master-slave.inc
 
 connection slave;
diff --git a/mysql-test/t/rpl_mixed_ddl_dml.test b/mysql-test/t/rpl_mixed_ddl_dml.test
index 5b9ed6898b8e4c6ff5174eced6913e53d28e883d..6a1f81abed3c9cff90d805c88653b9701fab3694 100644
--- a/mysql-test/t/rpl_mixed_ddl_dml.test
+++ b/mysql-test/t/rpl_mixed_ddl_dml.test
@@ -1,7 +1,7 @@
 # Mixed DDL-DML (CREATE ... SELECT ...) statements can only be
 # replicated properly in statement-based replication.
 # Currently statement based due to bug 12345
---source include/have_binlog_format_statement.inc
+--source include/have_binlog_format_mixed_or_statement.inc
 
 source include/master-slave.inc;
 
diff --git a/mysql-test/t/rpl_rbr_to_sbr.test b/mysql-test/t/rpl_rbr_to_sbr.test
index c10199f8ff5a4859bdfd33b35bfc34b37fbcc5bc..83a9b08c344739edf50ffe0240f7e525455abd55 100644
--- a/mysql-test/t/rpl_rbr_to_sbr.test
+++ b/mysql-test/t/rpl_rbr_to_sbr.test
@@ -1,12 +1,11 @@
 -- source include/have_row_based.inc
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source include/master-slave.inc
 
 # Test that the slave temporarily switches to ROW when seeing binrow
 # events when it is in STATEMENT or MIXED mode
 
 SET BINLOG_FORMAT=MIXED;
-SELECT @@GLOBAL.BINLOG_FORMAT, @@SESSION.BINLOG_FORMAT;
 SET GLOBAL BINLOG_FORMAT=MIXED;
 SELECT @@GLOBAL.BINLOG_FORMAT, @@SESSION.BINLOG_FORMAT;
 
diff --git a/mysql-test/t/rpl_rewrt_db.test b/mysql-test/t/rpl_rewrt_db.test
index 8acc05f6ff527b63f50170c04105f31fbf1c9e8d..52f04e073dd8b1739b237c09b419cfa28d28de4a 100644
--- a/mysql-test/t/rpl_rewrt_db.test
+++ b/mysql-test/t/rpl_rewrt_db.test
@@ -1,5 +1,5 @@
 # TBF - difference in row level logging
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source include/master-slave.inc
 
 --disable_warnings
diff --git a/mysql-test/t/rpl_rotate_logs.test b/mysql-test/t/rpl_rotate_logs.test
index a5c8a87c74d60c0801191b7a8f6bcc5882fbe273..2249dff1449c3182fa846072c57a4504dc637c77 100644
--- a/mysql-test/t/rpl_rotate_logs.test
+++ b/mysql-test/t/rpl_rotate_logs.test
@@ -13,7 +13,7 @@
 # - Test creating a duplicate key error and recover from it
 
 # Requires statement logging
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 
 connect (master,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
 --disable_warnings
diff --git a/mysql-test/t/rpl_stm_EE_err2.test b/mysql-test/t/rpl_stm_EE_err2.test
index dbcc66686ec31b47f2055998a24828f720091a5b..face651b9a13bbbcb8512c17e35971beb0fbdb96 100644
--- a/mysql-test/t/rpl_stm_EE_err2.test
+++ b/mysql-test/t/rpl_stm_EE_err2.test
@@ -3,6 +3,6 @@
 # Date: 2006-01-11
 # Purpose: Engine Wrapper for rpl_stm_EE_err2.test
 ##############################
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 let $engine_type=myisam;
 -- source extra/rpl_tests/rpl_stm_EE_err2.test
diff --git a/mysql-test/t/rpl_stm_flsh_tbls.test b/mysql-test/t/rpl_stm_flsh_tbls.test
index 3a6102de279dbb773e984329316aa3b3b4a90832..43a5234ccc74e14bd3bcb989ea9b14c8ac6276f5 100644
--- a/mysql-test/t/rpl_stm_flsh_tbls.test
+++ b/mysql-test/t/rpl_stm_flsh_tbls.test
@@ -1,5 +1,5 @@
 # depends on the binlog output
---source include/have_binlog_format_statement.inc
+--source include/have_binlog_format_mixed_or_statement.inc
 
 let $rename_event_pos= 652;
 -- source extra/rpl_tests/rpl_flsh_tbls.test
diff --git a/mysql-test/t/rpl_stm_log.test b/mysql-test/t/rpl_stm_log.test
index d11e1fd8ac1dca26c49bdef60d4294d2ded58d2b..5a1e0facc83015f1ba86e2b835784b2a8f9f3dbb 100644
--- a/mysql-test/t/rpl_stm_log.test
+++ b/mysql-test/t/rpl_stm_log.test
@@ -1,5 +1,5 @@
 # Requires statement logging
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 let $engine_type=MyISAM;
 -- source extra/rpl_tests/rpl_log.test
 
diff --git a/mysql-test/t/rpl_stm_max_relay_size.test b/mysql-test/t/rpl_stm_max_relay_size.test
index 50008533388ee02bc20310ad0bf1bd25d1c84f25..950aa8b322a242de7a4f2919fa6f32d27557f146 100644
--- a/mysql-test/t/rpl_stm_max_relay_size.test
+++ b/mysql-test/t/rpl_stm_max_relay_size.test
@@ -4,7 +4,7 @@
 # Test of manual relay log rotation with FLUSH LOGS.
 
 # Requires statement logging
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source extra/rpl_tests/rpl_max_relay_size.test
 
 # End of 4.1 tests
diff --git a/mysql-test/t/rpl_stm_multi_query.test b/mysql-test/t/rpl_stm_multi_query.test
index 97c322ac780d12f5ba2e7724dd4564957e82200c..c39d1fad015b9a07db6a50eb2a35e471cee037d5 100644
--- a/mysql-test/t/rpl_stm_multi_query.test
+++ b/mysql-test/t/rpl_stm_multi_query.test
@@ -4,7 +4,7 @@
 # one binlog event containing all queries)
 
 # Requires statement logging
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source extra/rpl_tests/rpl_multi_query.test
 
 
diff --git a/mysql-test/t/rpl_stm_mystery22.test b/mysql-test/t/rpl_stm_mystery22.test
index a43f26103509a1db0d2a352c5668523190f8878b..017593fdfbac2fa9fceddb331c8d979689ff0cae 100644
--- a/mysql-test/t/rpl_stm_mystery22.test
+++ b/mysql-test/t/rpl_stm_mystery22.test
@@ -15,7 +15,7 @@
 #should proceed in a correct way.
 #################################
 
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source include/master-slave.inc
 
 # first, cause a duplicate key problem on the slave
diff --git a/mysql-test/t/rpl_stm_no_op.test b/mysql-test/t/rpl_stm_no_op.test
index f82bbd8cd5543923677081debe302e5a7d1b8efe..66dc89bd712bad3f5a89fc4c044e755ff77af054 100644
--- a/mysql-test/t/rpl_stm_no_op.test
+++ b/mysql-test/t/rpl_stm_no_op.test
@@ -4,7 +4,7 @@
 # case. So this test is meaningul only in statement-based (and if it was
 # enabled in row-based, it would fail as expected).
 
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 
 source include/master-slave.inc;
 
diff --git a/mysql-test/t/rpl_stm_reset_slave.test b/mysql-test/t/rpl_stm_reset_slave.test
index 282033bf6d12bea4d10910707345acc62e42ef72..6a99d4e161312ace6620d58b9228d0ef7b752107 100644
--- a/mysql-test/t/rpl_stm_reset_slave.test
+++ b/mysql-test/t/rpl_stm_reset_slave.test
@@ -1,5 +1,5 @@
 # TBF - difference in row level logging
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source extra/rpl_tests/rpl_reset_slave.test
 
 # End of 4.1 tests
diff --git a/mysql-test/t/rpl_stm_until.test b/mysql-test/t/rpl_stm_until.test
index 9a4e4471fe196055e36f38dec1ab18627ca089ac..f42965c0eb05157fbee21139558c5faf645eb93b 100644
--- a/mysql-test/t/rpl_stm_until.test
+++ b/mysql-test/t/rpl_stm_until.test
@@ -1,4 +1,4 @@
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source include/master-slave.inc
 
 # Test is dependent on binlog positions
diff --git a/mysql-test/t/rpl_temp_table.test b/mysql-test/t/rpl_temp_table.test
index c29fa8e676dfb1228966bd2642a8a78c463b81da..9b73961aeea68379f67981a6d54c49c898798559 100644
--- a/mysql-test/t/rpl_temp_table.test
+++ b/mysql-test/t/rpl_temp_table.test
@@ -1,7 +1,7 @@
 # drop table t1 t2 t3 are included int master-slave.inc
 #  meaningful only in statement-based:
 
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 -- source include/master-slave.inc
 
 
diff --git a/mysql-test/t/rpl_trigger.test b/mysql-test/t/rpl_trigger.test
index 591941c19eb6263d85b3ab40d9be903519516d1c..0f87475ff07442b4326bfb7770fba5829e078886 100644
--- a/mysql-test/t/rpl_trigger.test
+++ b/mysql-test/t/rpl_trigger.test
@@ -2,7 +2,7 @@
 # Test of triggers with replication
 # Adding statement include due to Bug 12574
 # TODO: Remove statement include once 12574 is patched
---source include/have_binlog_format_statement.inc 
+--source include/have_binlog_format_mixed_or_statement.inc 
 --source include/master-slave.inc
 
 --disable_warnings
diff --git a/mysql-test/t/rpl_trunc_temp.test b/mysql-test/t/rpl_trunc_temp.test
index 56f858dc9a269e98929805203f81bd068669fb0f..28bcb0c06c32a86edf73816dd2b8632c9dccbf3f 100644
--- a/mysql-test/t/rpl_trunc_temp.test
+++ b/mysql-test/t/rpl_trunc_temp.test
@@ -1,5 +1,5 @@
 # Requires statement logging
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 
 source include/master-slave.inc;
 
diff --git a/mysql-test/t/user_var-binlog.test b/mysql-test/t/user_var-binlog.test
index 7f1561b925bcf236b320c733c6bcfd056cd28fb0..6615e48ca42a91ffcd69bb2f9795de7865db0c1d 100644
--- a/mysql-test/t/user_var-binlog.test
+++ b/mysql-test/t/user_var-binlog.test
@@ -1,5 +1,5 @@
 # Requires statement logging
--- source include/have_binlog_format_statement.inc
+-- source include/have_binlog_format_mixed_or_statement.inc
 # TODO: Create row based version once $MYSQL_BINLOG has new RB version
 # Embedded server does not support binlogging
 --source include/not_embedded.inc
diff --git a/sql/ha_innodb.cc b/sql/ha_innodb.cc
index 00a92e05ffbfcbfd26440076734aee6a3e5eb4f5..d39f87ee3ecbeeef794151e1eaddd8628a6867dc 100644
--- a/sql/ha_innodb.cc
+++ b/sql/ha_innodb.cc
@@ -7387,7 +7387,9 @@ innobase_xa_prepare(
 	int error = 0;
 	trx_t* trx = check_trx_exists(thd);
 
-	if (thd->lex->sql_command != SQLCOM_XA_PREPARE) {
+	if (thd->lex->sql_command != SQLCOM_XA_PREPARE &&
+	    (all || !(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))))
+	{
 
 		/* For ibbackup to work the order of transactions in binlog
 		and InnoDB must be the same. Consider the situation
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 7561943d197da8aaf5d34f473be14b9e015bc8e0..8f02c0565ffa5a3ba96f122d9442e1dcc2963880 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -3135,7 +3135,11 @@ with --log-bin instead.");
       global_system_variables.binlog_format= BINLOG_FORMAT_ROW;
     else
 #endif
+#if defined(HAVE_ROW_BASED_REPLICATION)
+      global_system_variables.binlog_format= BINLOG_FORMAT_MIXED;
+#else
       global_system_variables.binlog_format= BINLOG_FORMAT_STMT;
+#endif
   }
 
   /* Check that we have not let the format to unspecified at this point */
@@ -4936,7 +4940,13 @@ Disable with --skip-bdb (will save memory).",
    "supports only statement-based binary logging, so only 'statement' is "
    "a legal value."
 #endif
-   , 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
+   , 0, 0, 0, GET_STR, REQUIRED_ARG,
+#ifdef HAVE_ROW_BASED_REPLICATION
+   BINLOG_FORMAT_MIXED
+#else
+   BINLOG_FORMAT_STMT
+#endif
+   , 0, 0, 0, 0, 0 },
   {"binlog-do-db", OPT_BINLOG_DO_DB,
    "Tells the master it should log updates for the specified database, and exclude all others not explicitly mentioned.",
    0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
diff --git a/unittest/Makefile.am b/unittest/Makefile.am
index ca3291efde0a042993fe9bc406841e15661208dc..f2f7fc0bf7d57a4fe12f13e671fb879a0f5d49e4 100644
--- a/unittest/Makefile.am
+++ b/unittest/Makefile.am
@@ -1,15 +1,12 @@
 SUBDIRS      = mytap . mysys examples
 
-noinst_SCRIPTS = unit
 EXTRA_DIST = unit.pl
 CLEANFILES = unit
 
 unittests = mytap mysys
 
-test: unit
-	./unit run $(unittests)
-
-unit: $(srcdir)/unit.pl
-	cp $(srcdir)/unit.pl $@
-	chmod 700 $@
+test:
+	perl unit.pl run $(unittests)
 
+test-verbose:
+	HARNESS_VERBOSE=1 perl unit.pl run $(unittests)
diff --git a/unittest/README.txt b/unittest/README.txt
index 0d8bb9025d85e7787d877197014eb65df7a8fa9c..cefa8753f8f300d3027b72e998588e85e835691d 100644
--- a/unittest/README.txt
+++ b/unittest/README.txt
@@ -9,7 +9,9 @@ mytap                 Source for the MyTAP library
 mysys                 Tests for mysys components
   bitmap-t.c          Unit test for MY_BITMAP
   base64-t.c          Unit test for base64 encoding functions
-examples              Example unit tests
+examples              Example unit tests.
+  core-t.c            Example of raising a signal in the middle of the test
+		      THIS TEST WILL STOP ALL FURTHER TESTING!
   simple-t.c          Example of a standard TAP unit test
   skip-t.c            Example where some test points are skipped
   skip_all-t.c        Example of a test where the entire test is skipped
@@ -24,6 +26,9 @@ To make and execute all unit tests in the directory:
 
    make test
 
+Observe that the tests in the examples/ directory are just various
+examples of tests and are not expected to pass.
+
 
 Adding unit tests
 -----------------
diff --git a/unittest/examples/Makefile.am b/unittest/examples/Makefile.am
index f3c70b654a1176305730e55981b85a91ca5f8d0c..8aefb351220a638f6987c7696f9050c1ca36236b 100644
--- a/unittest/examples/Makefile.am
+++ b/unittest/examples/Makefile.am
@@ -5,5 +5,5 @@ AM_LDFLAGS         = -L$(top_builddir)/unittest/mytap
 
 LDADD              = -lmytap
 
-noinst_PROGRAMS    = simple-t skip-t todo-t skip_all-t no_plan-t
+noinst_PROGRAMS    = simple-t skip-t todo-t skip_all-t no_plan-t core-t
 
diff --git a/unittest/examples/core-t.c b/unittest/examples/core-t.c
new file mode 100644
index 0000000000000000000000000000000000000000..3572d72868ba2e17c55cbb12956a898be78b9431
--- /dev/null
+++ b/unittest/examples/core-t.c
@@ -0,0 +1,19 @@
+
+#include "my_config.h"
+
+#include <stdlib.h>
+#include <tap.h>
+
+/*
+  This is a simple test to demonstrate what happens if a signal that
+  generates a core is raised.
+
+  Note that this test will stop all further testing!
+ */
+
+int main() {
+  plan(3);
+  ok(1, "First test");
+  abort();
+  return exit_status();
+}
diff --git a/unittest/mytap/tap.c b/unittest/mytap/tap.c
index d3f5013b4c9dddef8dcbf751000192cd65b35efd..17ec51863d98be2037b1f54edf36853c575be148 100644
--- a/unittest/mytap/tap.c
+++ b/unittest/mytap/tap.c
@@ -20,10 +20,13 @@
 
 #include "tap.h"
 
+#include "my_config.h"
+
 #include <stdlib.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <string.h>
+#include <signal.h>
 
 /**
    Test data structure.
@@ -70,7 +73,7 @@ emit_tap(int pass, char const *fmt, va_list ap)
 /**
    Emit a TAP directive.
 
-   TAP directives are comments after a have the form
+   TAP directives are comments after that have the form:
 
    @code
    ok 1 # skip reason for skipping
@@ -96,6 +99,25 @@ emit_endl()
   fprintf(tapout, "\n");
 }
 
+static void
+handle_core_signal(int signo)
+{
+  BAIL_OUT("Signal %d thrown", signo);
+}
+
+void
+BAIL_OUT(char const *fmt, ...)
+{
+  va_list ap;
+  va_start(ap, fmt);
+  fprintf(tapout, "Bail out! ");
+  vfprintf(tapout, fmt, ap);
+  emit_endl();
+  va_end(ap);
+  exit(255);
+}
+
+
 void
 diag(char const *fmt, ...)
 {
@@ -103,14 +125,38 @@ diag(char const *fmt, ...)
   va_start(ap, fmt);
   fprintf(tapout, "# ");
   vfprintf(tapout, fmt, ap);
-  fprintf(tapout, "\n");
+  emit_endl();
   va_end(ap);
 }
 
+typedef struct signal_entry {
+  int signo;
+  void (*handler)(int);
+} signal_entry;
+
+static signal_entry install_signal[]= {
+  { SIGQUIT, handle_core_signal },
+  { SIGILL,  handle_core_signal },
+  { SIGABRT, handle_core_signal },
+  { SIGFPE,  handle_core_signal },
+  { SIGSEGV, handle_core_signal },
+  { SIGBUS,  handle_core_signal },
+  { SIGXCPU, handle_core_signal },
+  { SIGXFSZ, handle_core_signal },
+  { SIGSYS,  handle_core_signal },
+  { SIGTRAP, handle_core_signal }
+};
 
 void
 plan(int const count)
 {
+  /*
+    Install signal handler
+  */
+  size_t i;
+  for (i= 0; i < sizeof(install_signal)/sizeof(*install_signal); ++i)
+    signal(install_signal[i].signo, install_signal[i].handler);
+
   g_test.plan= count;
   switch (count)
   {
diff --git a/unittest/mytap/tap.h b/unittest/mytap/tap.h
index cc1d0926012781d724a06b7d0bad750a0ba5e051..51b8c7df04deb23addff75ca606a67b7ddc2a75b 100644
--- a/unittest/mytap/tap.h
+++ b/unittest/mytap/tap.h
@@ -24,8 +24,8 @@
 #include "my_global.h"
 
 /*
-  @defgroup MyTAP MySQL support for performing unit tests according to TAP.
-
+  @defgroup MyTAP MySQL support for performing unit tests according to
+  the Test Anything Protocol (TAP).
 */
 
 #define NO_PLAN  (0)
@@ -36,6 +36,7 @@
    @internal We are using the "typedef struct X { ... } X" idiom to
    create class/struct X both in C and C++.
  */
+
 typedef struct TEST_DATA {
   /**
      Number of tests that is planned to execute.
@@ -67,8 +68,13 @@ extern "C" {
    it was called with <code>NO_PLAN</code>, i.e., the test plan will
    be printed after all the test lines.
 
+   The plan() function will install signal handlers for all signals
+   that generate a core, so if you want to override these signals, do
+   it <em>after</em> you have called the plan() function.
+
    @param count The planned number of tests to run. 
 */
+
 void plan(int count);
 
 
@@ -87,9 +93,11 @@ void plan(int count);
    @param fmt  Format string in printf() format. NULL is allowed, in
                which case nothing is printed.
 */
+
 void ok(int pass, char const *fmt, ...)
   __attribute__((format(printf,2,3)));
 
+
 /**
    Skip a determined number of tests.
 
@@ -114,6 +122,7 @@ void ok(int pass, char const *fmt, ...)
    @param how_many   Number of tests that are to be skipped.
    @param reason     A reason for skipping the tests
  */
+
 void skip(int how_many, char const *reason, ...)
     __attribute__((format(printf,2,3)));
 
@@ -130,22 +139,47 @@ void skip(int how_many, char const *reason, ...)
      for (i = 0 ; i < 2 ; ++i)
        ok(duck[i] == paddling, "is duck %d paddling?", i);
    }
+   @endcode
 
    @see skip
-
-   @endcode
  */
+
 #define SKIP_BLOCK_IF(SKIP_IF_TRUE, COUNT, REASON) \
   if (SKIP_IF_TRUE) skip((COUNT),(REASON)); else
 
+
 /**
    Print a diagnostics message.
 
    @param fmt  Diagnostics message in printf() format.
  */
+
 void diag(char const *fmt, ...)
   __attribute__((format(printf,1,2)));
 
+
+/**
+   Print a bail out message.
+
+   A bail out message can be issued when no further testing can be
+   done, e.g., when there are missing dependencies.
+
+   The test will exit with status 255.  This function does not return.
+
+   @code
+   BAIL_OUT("Lost connection to server %s", server_name);
+   @endcode
+
+   @note A bail out message is printed if a signal that generates a
+   core is raised.
+
+   @param fmt Bail out message in printf() format.
+*/
+
+void BAIL_OUT(char const *fmt, ...)
+  __attribute__((noreturn, format(printf,1,2)));
+
+
 /**
    Print summary report and return exit status.
 
@@ -161,6 +195,7 @@ void diag(char const *fmt, ...)
    @returns EXIT_SUCCESS if all tests passed, EXIT_FAILURE if one or
    more tests failed.
  */
+
 int exit_status(void);
 
 
@@ -171,9 +206,11 @@ int exit_status(void);
    automatically call exit(), so there is no need to have checks
    around it.
  */
+
 void skip_all(char const *reason, ...)
   __attribute__((noreturn, format(printf, 1, 2)));
 
+
 /**
    Start section of tests that are not yet ready.
 
@@ -194,14 +231,18 @@ void skip_all(char const *reason, ...)
 
    @param message Message that will be printed before the todo tests.
 */
+
 void todo_start(char const *message, ...)
-  __attribute__((format (printf, 1, 2)));
+  __attribute__((format(printf, 1, 2)));
+
 
 /**
    End a section of tests that are not yet ready.
 */
+
 void todo_end();
 
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/unittest/unit.pl b/unittest/unit.pl
index 3092a874192deb1cb19e20c2420ff4a0d6131906..28ebb44846dec49c19072254f40c3c960c37995a 100644
--- a/unittest/unit.pl
+++ b/unittest/unit.pl
@@ -1,19 +1,5 @@
 #!/usr/bin/perl
 
-# Override _command_line in the standard Perl test harness to prevent
-# it from using "perl" to run the test scripts.
-package MySQL::Straps;
-
-use base qw(Test::Harness::Straps);
-
-use strict;
-
-sub _command_line {
-  return $_[1]
-}
-
-package main;
-
 use Test::Harness qw(&runtests $verbose);
 use File::Find;
 
@@ -37,9 +23,6 @@ unit - Run unit tests in directory
 
 my $cmd = shift;
 
-# $Test::Harness::Verbose = 1;
-# $Test::Harness::Debug = 1;
-
 if (defined $cmd && exists $dispatch{$cmd}) {
     $dispatch{$cmd}->(@ARGV);
 } else {
@@ -95,14 +78,7 @@ sub run_cmd (@) {
     if (@files > 0) {
         # Removing the first './' from the file names
         foreach (@files) { s!^\./!! }
-
-        # Install the strap above instead of the default strap.  Since
-        # we are replacing the straps under the feet of Test::Harness,
-        # we need to do some basic initializations in the new straps.
-        $Test::Harness::Strap = MySQL::Straps->new;
-        $Test::Harness::Strap->{callback} = \&Test::Harness::strap_callback
-          if defined &Test::Harness::strap_callback;
-
+        $ENV{'HARNESS_PERL_SWITCHES'} .= q" -e 'exec @ARGV'";
         runtests @files;
     }
 }