diff --git a/mysql-test/lib/mtr_cases.pl b/mysql-test/lib/mtr_cases.pl
index 878afe95f2c696d5630e6b81a8a748af2b5615cc..b4f0080a4e97445672a790782bd6390ec49c7974 100644
--- a/mysql-test/lib/mtr_cases.pl
+++ b/mysql-test/lib/mtr_cases.pl
@@ -171,8 +171,8 @@ sub collect_one_test_case($$$$$) {
   my $slave_sh=        "$testdir/$tname-slave.sh";
   my $disabled=        "$testdir/$tname.disabled";
 
-  $tinfo->{'master_opt'}= [];
-  $tinfo->{'slave_opt'}=  [];
+  $tinfo->{'master_opt'}= ["--default-time-zone=+3:00"];
+  $tinfo->{'slave_opt'}=  ["--default-time-zone=+3:00"];
   $tinfo->{'slave_mi'}=   [];
 
   if ( -f $master_opt_file )
@@ -180,9 +180,9 @@ sub collect_one_test_case($$$$$) {
     $tinfo->{'master_restart'}= 1;    # We think so for now
     # This is a dirty hack from old mysql-test-run, we use the opt file
     # to flag other things as well, it is not a opt list at all
-    my $extra_master_opt= mtr_get_opts_from_file($master_opt_file);
+    $tinfo->{'master_opt'}= mtr_get_opts_from_file($master_opt_file);
 
-    foreach my $opt (@$extra_master_opt)
+    foreach my $opt (@{$tinfo->{'master_opt'}})
     {
       my $value;
 
@@ -191,7 +191,7 @@ sub collect_one_test_case($$$$$) {
       if ( defined $value )
       {
         $tinfo->{'timezone'}= $value;
-        $extra_master_opt= [];
+        $tinfo->{'master_opt'}= [];
         $tinfo->{'master_restart'}= 0;
         last;
       }
@@ -206,13 +206,11 @@ sub collect_one_test_case($$$$$) {
         {
           $tinfo->{'result_file'}.= $::opt_result_ext;
         }
-        $extra_master_opt= [];
+        $tinfo->{'master_opt'}= [];
         $tinfo->{'master_restart'}= 0;
         last;
       }
     }
-
-    $tinfo->{'master_opt'}= $extra_master_opt;
   }
 
   if ( -f $slave_opt_file )
diff --git a/mysql-test/lib/mtr_process.pl b/mysql-test/lib/mtr_process.pl
index 7bca422773c5ddd1dace7c848da6996e3a91fe9d..1eb4f6b7c5822e9952fa2bc1b52d712b951b606a 100644
--- a/mysql-test/lib/mtr_process.pl
+++ b/mysql-test/lib/mtr_process.pl
@@ -669,6 +669,8 @@ sub mtr_mysqladmin_shutdown () {
     last;                               # If we got here, we are done
   }
 
+  sleep(5) if $::glob_win32;            # FIXME next startup fails if no sleep
+
   return $res;
 }
 
diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl
index 0394c7abc9edcbc1f9222e29c3f17a87b5cc363e..5f32175749246027b2b64da886d0e4817e182633 100755
--- a/mysql-test/mysql-test-run.pl
+++ b/mysql-test/mysql-test-run.pl
@@ -204,7 +204,7 @@ our $opt_bench= 0;
 our $opt_small_bench= 0;
 our $opt_big_test= 0;            # Send --big-test to mysqltest
 
-our $opt_extra_mysqld_opt;       # FIXME not handled
+our @opt_extra_mysqld_opt;
 
 our $opt_compress;
 our $opt_current_test;
@@ -500,7 +500,7 @@ sub command_line_setup () {
              'record'                   => \$opt_record,
 
              # ???
-             'mysqld=s'                 => \$opt_extra_mysqld_opt,
+             'mysqld=s'                 => \@opt_extra_mysqld_opt,
 
              # Run test on running server
              'extern'                   => \$opt_extern,
@@ -953,13 +953,25 @@ sub environment_setup () {
   $ENV{'LC_COLLATE'}=         "C";
   $ENV{'USE_RUNNING_SERVER'}= $glob_use_running_server;
   $ENV{'MYSQL_TEST_DIR'}=     $glob_mysql_test_dir;
+  $ENV{'MYSQL_TEST_WINDIR'}=  $glob_mysql_test_dir;
   $ENV{'MASTER_MYSOCK'}=      $master->[0]->{'path_mysock'};
+  $ENV{'MASTER_WINMYSOCK'}=   $master->[0]->{'path_mysock'};
   $ENV{'MASTER_MYSOCK1'}=     $master->[1]->{'path_mysock'};
   $ENV{'MASTER_MYPORT'}=      $master->[0]->{'path_myport'};
   $ENV{'MASTER_MYPORT1'}=     $master->[1]->{'path_myport'};
   $ENV{'SLAVE_MYPORT'}=       $slave->[0]->{'path_myport'};
 # $ENV{'MYSQL_TCP_PORT'}=     '@MYSQL_TCP_PORT@'; # FIXME
   $ENV{'MYSQL_TCP_PORT'}=     3306;
+
+  if ( $glob_cygwin_perl )
+  {
+    foreach my $key ('MYSQL_TEST_WINDIR','MASTER_MYSOCK')
+    {
+      $ENV{$key}= `cygpath -w $ENV{$key}`;
+      $ENV{$key} =~ s,\\,\\\\,g;
+      chomp($ENV{$key});
+    }
+  }
 }
 
 
@@ -1850,7 +1862,7 @@ sub mysqld_arguments ($$$$$) {
     }
   }
 
-  foreach my $arg ( @$extra_opt )
+  foreach my $arg ( @opt_extra_mysqld_opt, @$extra_opt )
   {
     mtr_add_arg($args, "%s%s", $prefix, $arg);
   }
diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh
index 8ef13d7154debd120ab3fcfaf1dfa4ea05970edc..42025e7427d6c5cca1000becf6306c7bcb88da6a 100644
--- a/mysql-test/mysql-test-run.sh
+++ b/mysql-test/mysql-test-run.sh
@@ -170,7 +170,8 @@ cd ..
 BASEDIR=`pwd`
 cd $CWD
 MYSQL_TEST_DIR=$BASEDIR/mysql-test
-export MYSQL_TEST_DIR
+MYSQL_TEST_WINDIR=$MYSQL_TEST_DIR
+export MYSQL_TEST_DIR MYSQL_TEST_WINDIR
 STD_DATA=$MYSQL_TEST_DIR/std_data
 hostname=`hostname`		# Installed in the mysql privilege table