diff --git a/include/config-win.h b/include/config-win.h
index 1d54a4bf9ec9a015aab08bdf5f7507d493fed033..cb2c072d056ccec43eaf7329c5af2cf9ed7aae56 100644
--- a/include/config-win.h
+++ b/include/config-win.h
@@ -332,6 +332,9 @@ inline double ulonglong2double(ulonglong value)
 #define SHAREDIR		"share"
 #define DEFAULT_CHARSET_HOME	"C:/mysql/"
 #endif
+#ifndef DEFAULT_HOME_ENV
+#define DEFAULT_HOME_ENV MYSQL_HOME
+#endif
 
 /* File name handling */
 
diff --git a/libmysql/Makefile.shared b/libmysql/Makefile.shared
index 9664fb0abef4c12d1f678412a13db9337c7843f7..c7ce02737074b099125e16a5420182f702e1ac4c 100644
--- a/libmysql/Makefile.shared
+++ b/libmysql/Makefile.shared
@@ -81,6 +81,7 @@ CLEANFILES =		$(target_libadd) $(SHLIBOBJS) \
 			$(target)
 DEFS =			-DDEFAULT_CHARSET_HOME="\"$(MYSQLBASEdir)\"" \
 			-DDATADIR="\"$(MYSQLDATAdir)\"" \
+			-DDEFAULT_HOME_ENV=MYSQL_HOME \
 			-DSHAREDIR="\"$(MYSQLSHAREdir)\"" $(target_defs)
 
 # The automatic dependencies miss this
diff --git a/mysys/Makefile.am b/mysys/Makefile.am
index b0ca1b402ee60df2226d09034ec3efd047545983..4698d06d8c3c83cccfc915a2c941223d07c31bf2 100644
--- a/mysys/Makefile.am
+++ b/mysys/Makefile.am
@@ -66,6 +66,7 @@ DEFS =			-DDEFAULT_BASEDIR=\"$(prefix)\" \
 			-DDATADIR="\"$(MYSQLDATAdir)\"" \
 			-DDEFAULT_CHARSET_HOME="\"$(MYSQLBASEdir)\"" \
 			-DSHAREDIR="\"$(MYSQLSHAREdir)\"" \
+			-DDEFAULT_HOME_ENV=MYSQL_HOME \
                         @DEFS@
 
 libmysys_a_DEPENDENCIES= @THREAD_LOBJECTS@
diff --git a/mysys/default.c b/mysys/default.c
index d6d84f65d8be9483a34b1b7013163c3a6b95574b..3de134d936f1db528db326747daf77c8ff58d266 100644
--- a/mysys/default.c
+++ b/mysys/default.c
@@ -45,23 +45,8 @@ char *defaults_extra_file=0;
 
 /* Which directories are searched for options (and in which order) */
 
-const char *default_directories[]= {
-#ifdef __WIN__
-"C:/",
-#elif defined(__NETWARE__)
-"sys:/etc/",
-#else
-"/etc/",
-#endif
-#ifdef DATADIR
-DATADIR,
-#endif
-"",					/* Place for defaults_extra_dir */
-#if !defined(__WIN__) && !defined(__NETWARE__)
-"~/",
-#endif
-NullS,
-};
+#define MAX_DEFAULT_DIRS 4
+const char *default_directories[MAX_DEFAULT_DIRS + 1];
 
 #ifdef __WIN__
 static const char *f_extensions[]= { ".ini", ".cnf", 0 };
@@ -89,6 +74,7 @@ static int search_default_file_with_ext(Process_option_func func,
                                         void *func_ctx,
 					const char *dir, const char *ext,
 					const char *config_file);
+static void init_default_directories();
 
 static char *remove_end_comment(char *ptr);
 
@@ -319,6 +305,7 @@ int load_defaults(const char *conf_file, const char **groups,
   struct handle_option_ctx ctx;
   DBUG_ENTER("load_defaults");
 
+  init_default_directories();
   init_alloc_root(&alloc,512,0);
   if (*argc >= 2 && !strcmp(argv[0][1],"--no-defaults"))
   {
@@ -652,6 +639,7 @@ void print_defaults(const char *conf_file, const char **groups)
   char name[FN_REFLEN], **ext;
   const char **dirs;
 
+  init_default_directories();
   puts("\nDefault options are read from the following files in the given order:");
 
   if (dirname_length(conf_file))
@@ -714,3 +702,23 @@ void print_defaults(const char *conf_file, const char **groups)
 }
 
 #include <help_end.h>
+
+static void init_default_directories()
+{
+  const char *env, **ptr= default_directories;
+
+#ifdef __WIN__
+  *ptr++= "C:/";
+#elif defined(__NETWARE__)
+  *ptr++= "sys:/etc/";
+#else
+  *ptr++= "/etc/";
+#endif
+  if ((env= getenv(STRINGIFY_ARG(DEFAULT_HOME_ENV))))
+    *ptr++= env;
+  *ptr++= "";			/* Place for defaults_extra_file */
+#if !defined(__WIN__) && !defined(__NETWARE__)
+  *ptr++= "~/";;
+#endif
+  *ptr= 0;			/* end marker */
+}
diff --git a/scripts/mysqld_multi.sh b/scripts/mysqld_multi.sh
index ba46fd6fa29fb39a384c6612be38f6aaefc28c73..ee873a86c8d1bf0e915ec8b144c5d4a7d97b241f 100644
--- a/scripts/mysqld_multi.sh
+++ b/scripts/mysqld_multi.sh
@@ -4,7 +4,7 @@ use Getopt::Long;
 use POSIX qw(strftime);
 
 $|=1;
-$VER="2.11";
+$VER="2.12";
 
 $opt_config_file   = undef();
 $opt_example       = 0;
@@ -430,6 +430,16 @@ sub find_groups
     {
       $data[$i] = $line;
     }
+    if (defined($ENV{MYSQL_HOME}) && -f "$ENV{MYSQL_HOME}/my.cnf" &&
+	-r "$ENV{MYSQL_HOME}/my.cnf")
+    {
+      open(MY_CNF, "<$ENV{MYSQL_HOME}/my.cnf") && (@tmp=<MY_CNF>) &&
+      close(MY_CNF);
+    }
+    for (; ($line = shift @tmp); $i++)
+    {
+      $data[$i] = $line;
+    }
     if (-f "$homedir/.my.cnf" && -r "$homedir/.my.cnf")
     {
       open(MY_CNF, "<$homedir/.my.cnf") && (@tmp=<MY_CNF>) && close(MY_CNF);
diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh
index 1f4d17f88853d848ab5fd17015113d7e96beb505..0e18f137c5a77ee6a8d6225fb2354f1d802e9db0 100644
--- a/scripts/mysqld_safe.sh
+++ b/scripts/mysqld_safe.sh
@@ -52,11 +52,7 @@ parse_arguments() {
 
       # mysqld_safe-specific options - must be set in my.cnf ([mysqld_safe])!
       --ledir=*)   ledir=`echo "$arg" | sed -e "s;--ledir=;;"` ;;
-      # err-log should be removed in 5.0
-      --err-log=*) err_log=`echo "$arg" | sed -e "s;--err-log=;;"` ;;
       --log-error=*) err_log=`echo "$arg" | sed -e "s;--log-error=;;"` ;;
-      # QQ The --open-files should be removed in 5.0
-      --open-files=*) open_files=`echo "$arg" | sed -e "s;--open-files=;;"` ;;
       --open-files-limit=*) open_files=`echo "$arg" | sed -e "s;--open-files-limit=;;"` ;;
       --core-file-size=*) core_file_size=`echo "$arg" | sed -e "s;--core-file-size=;;"` ;;
       --timezone=*) TZ=`echo "$arg" | sed -e "s;--timezone=;;"` ; export TZ; ;;
@@ -94,7 +90,7 @@ then
   DATADIR=$MY_BASEDIR_VERSION/data
   if test -z "$defaults"
   then
-    defaults="--defaults-extra-file=$MY_BASEDIR_VERSION/data/my.cnf"
+    defaults="--defaults-extra-file=$DATADIR/my.cnf"
   fi
 # Check if this is a 'moved install directory'
 elif test -f ./var/mysql/db.frm -a -f ./share/mysql/english/errmsg.sys -a \
@@ -106,8 +102,17 @@ then
 else
   MY_BASEDIR_VERSION=@prefix@
   DATADIR=@localstatedir@
+  if test -z "$MYSQL_HOME"
+  then 
+    MYSQL_HOME=$DATADIR                 # Installation in a not common path
+  fi
   ledir=@libexecdir@
 fi
+if test -z "$MYSQL_HOME"
+then 
+  MYSQL_HOME=$MY_BASEDIR_VERSION
+fi
+export MYSQL_HOME
 
 user=@MYSQLD_USER@
 niceness=0