diff --git a/scripts/make_win_src_distribution.sh b/scripts/make_win_src_distribution.sh
index 9b310722886ef466ab41d56f52b58ff52778a41b..b0d63f1d6d88a87f6b050f870aad4ae80917517d 100755
--- a/scripts/make_win_src_distribution.sh
+++ b/scripts/make_win_src_distribution.sh
@@ -13,8 +13,8 @@ DEBUG=0
 SILENT=0
 SUFFIX=""
 DIRNAME=""
-OUTTAR=0
-OUTZIP=0
+OUTTAR="0"
+OUTZIP="0"
 
 #
 # This script must run from MySQL top directory
@@ -114,16 +114,37 @@ done
 # Convert argument file from unix to DOS text
 #
 
-unix_to_dos()
-{
-  for arg do
-    print_debug "Replacing LF -> CRLF from '$arg'"
+if [ `which recode` ]
+then
 
-    sed -e 's/$/\r/' $arg > $arg.tmp
-    rm -f $arg
-    mv $arg.tmp $arg
-  done
-}
+  print_debug "Using 'recode' to convert from unix to dos text"
+
+  unix_to_dos()
+  {
+    for arg do
+      print_debug "Replacing LF -> CRLF from '$arg'"
+
+      chmod u+w $arg
+      recode lat1..ibmpc $arg
+    done
+  }
+
+else
+
+  print_debug "Using 'sed' to convert from unix to dos text"
+
+  unix_to_dos()
+  {
+    for arg do
+      print_debug "Replacing LF -> CRLF from '$arg'"
+
+      sed -e 's/$/\r/' $arg > $arg.tmp
+      rm -f $arg
+      mv $arg.tmp $arg
+    done
+  }
+
+fi
 
 
 #
@@ -363,8 +384,10 @@ which_1 ()
 # Create the result zip/tar file
 #
 
-if [ [ "$OUTTAR" = "0" ] && [ "$OUTZIP" = "0" ] ]; then
-  OUTZIP=1
+if [ "$OUTTAR" = "0" ]; then
+  if [ "$OUTZIP" = "0" ]; then
+    OUTZIP=1
+  fi
 fi
 
 set_tarzip_options()
diff --git a/scripts/mysql_fix_privilege_tables.sql b/scripts/mysql_fix_privilege_tables.sql
new file mode 100644
index 0000000000000000000000000000000000000000..aca9a9c21d49a5b9fe5d1889f4523dc233f20c1e
--- /dev/null
+++ b/scripts/mysql_fix_privilege_tables.sql
@@ -0,0 +1,159 @@
+-- This scripts updates the mysql.user, mysql.db, mysql.host and the
+-- mysql.func tables to MySQL 3.22.14 and above.
+
+-- This is needed if you want to use the new GRANT functions,
+-- CREATE AGGREGATE FUNCTION or want to use the more secure passwords in 3.23
+
+-- If you get 'Access denied' errors, you should run this script again
+-- and give the MySQL root user password as an argument!
+
+
+-- Converting all privilege tables to MyISAM format
+ALTER TABLE user type=MyISAM;
+ALTER TABLE db type=MyISAM;
+ALTER TABLE host type=MyISAM;
+ALTER TABLE func type=MyISAM;
+ALTER TABLE columns_priv type=MyISAM;
+ALTER TABLE tables_priv type=MyISAM;
+
+
+--  Fix old password format, add File_priv and func table
+
+-- If your tables are already up to date or partially up to date you will
+-- get some warnings about 'Duplicated column name'. You can safely ignore these!
+
+alter table user change password password char(16) NOT NULL;
+alter table user add File_priv enum('N','Y') NOT NULL;
+CREATE TABLE if not exists func (
+  name char(64) DEFAULT '' NOT NULL,
+  ret tinyint(1) DEFAULT '0' NOT NULL,
+  dl char(128) DEFAULT '' NOT NULL,
+  type enum ('function','aggregate') NOT NULL,
+  PRIMARY KEY (name)
+);
+
+--  Add the new grant colums
+
+-- Creating Grant Alter and Index privileges if they don't exists
+-- You can ignore any Duplicate column errors
+alter table user add Grant_priv enum('N','Y') NOT NULL,add References_priv enum('N','Y') NOT NULL,add Index_priv enum('N','Y') NOT NULL,add Alter_priv enum('N','Y') NOT NULL;
+alter table host add Grant_priv enum('N','Y') NOT NULL,add References_priv enum('N','Y') NOT NULL,add Index_priv enum('N','Y') NOT NULL,add Alter_priv enum('N','Y') NOT NULL;
+alter table db add Grant_priv enum('N','Y') NOT NULL,add References_priv enum('N','Y') NOT NULL,add Index_priv enum('N','Y') NOT NULL,add Alter_priv enum('N','Y') NOT NULL;
+
+--  If the new grant columns didn't exists, copy File -> Grant
+--  and Create -> Alter, Index, References
+
+-- Setting default privileges for the new grant, index and alter privileges
+  UPDATE user SET Grant_priv=File_priv,References_priv=Create_priv,Index_priv=Create_priv,Alter_priv=Create_priv;
+  UPDATE db SET References_priv=Create_priv,Index_priv=Create_priv,Alter_priv=Create_priv;
+  UPDATE host SET References_priv=Create_priv,Index_priv=Create_priv,Alter_priv=Create_priv;
+
+--
+--  The second alter changes ssl_type to new 4.0.2 format
+
+-- Adding columns needed by GRANT .. REQUIRE (openssl)"
+-- You can ignore any Duplicate column errors"
+ALTER TABLE user
+ADD ssl_type enum('','ANY','X509', 'SPECIFIED') NOT NULL,
+ADD ssl_cipher BLOB NOT NULL,
+ADD x509_issuer BLOB NOT NULL,
+ADD x509_subject BLOB NOT NULL;
+ALTER TABLE user MODIFY ssl_type enum('','ANY','X509', 'SPECIFIED') NOT NULL;
+
+--
+--  Create tables_priv and columns_priv if they don't exists
+--
+
+-- Creating the new table and column privilege tables"
+
+CREATE TABLE IF NOT EXISTS tables_priv (
+  Host char(60) DEFAULT '' NOT NULL,
+  Db char(60) DEFAULT '' NOT NULL,
+  User char(16) DEFAULT '' NOT NULL,
+  Table_name char(60) DEFAULT '' NOT NULL,
+  Grantor char(77) DEFAULT '' NOT NULL,
+  Timestamp timestamp(14),
+  Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter') DEFAULT '' NOT NULL,
+  Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,
+  PRIMARY KEY (Host,Db,User,Table_name)
+);
+CREATE TABLE IF NOT EXISTS columns_priv (
+  Host char(60) DEFAULT '' NOT NULL,
+  Db char(60) DEFAULT '' NOT NULL,
+  User char(16) DEFAULT '' NOT NULL,
+  Table_name char(60) DEFAULT '' NOT NULL,
+  Column_name char(59) DEFAULT '' NOT NULL,
+  Timestamp timestamp(14),
+  Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,
+  PRIMARY KEY (Host,Db,User,Table_name,Column_name)
+);
+
+--
+--  Name change of Type -> Column_priv from MySQL 3.22.12
+--
+
+-- Changing name of columns_priv.Type -> columns_priv.Column_priv
+-- You can ignore any Unknown column errors from this
+
+
+ALTER TABLE columns_priv change Type Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL;
+
+
+
+--
+--  Add the new 'type' column to the func table.
+--
+
+-- Fixing the func table
+-- You can ignore any Duplicate column errors
+
+alter table func add type enum ('function','aggregate') NOT NULL;
+
+
+--
+--  Change the user,db and host tables to MySQL 4.0 format
+--
+
+-- Adding new fields used by MySQL 4.0.2 to the privilege tables
+-- You can ignore any Duplicate column errors
+
+
+alter table user
+add Show_db_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER alter_priv,
+add Super_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Show_db_priv,
+add Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Super_priv,
+add Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Create_tmp_table_priv,
+add Execute_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Lock_tables_priv,
+add Repl_slave_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Execute_priv,
+add Repl_client_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Repl_slave_priv;
+
+
+-- Convert privileges so that users have similar privileges as before
+
+-- Updating new privileges in MySQL 4.0.2 from old ones
+
+  update user set show_db_priv= select_priv, super_priv=process_priv, execute_priv=process_priv, create_tmp_table_priv='Y', Lock_tables_priv='Y', Repl_slave_priv=file_priv, Repl_client_priv=file_priv where user<>"";
+
+
+--  Add fields that can be used to limit number of questions and connections
+--  for some users.
+
+
+alter table user
+add max_questions int(11) NOT NULL AFTER x509_subject,
+add max_updates   int(11) unsigned NOT NULL AFTER max_questions,
+add max_connections int(11) unsigned NOT NULL AFTER max_updates;
+
+
+--
+--  Add Create_tmp_table_priv and Lock_tables_priv to db and host
+--
+
+
+alter table db
+add Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,
+add Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL;
+alter table host
+add Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,
+add Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL;
+