diff --git a/Doc/inst/inst.tex b/Doc/inst/inst.tex
index 35ea161..51802c0 100644
--- a/Doc/inst/inst.tex
+++ b/Doc/inst/inst.tex
@@ -384,26 +384,26 @@
 of the following sections applies to you.
 
 
-\subsection{Alternate installation: \UNIX{} (the home scheme)}
+\subsection{Alternate installation: the home scheme}
 \label{alt-install-prefix}
 
-Under \UNIX, there are two ways to perform an alternate installation.
-The ``prefix scheme'' is similar to how alternate installation works
-under Windows and Mac OS, but is not necessarily the most useful way to
-maintain a personal Python library.  Hence, we document the more
-convenient and commonly useful ``home scheme'' first.
-
 The idea behind the ``home scheme'' is that you build and maintain a
-personal stash of Python modules, probably under your home directory.
+personal stash of Python modules.  This scheme's name is derived from
+the idea of a ``home'' directory on \UNIX, since it's not unusual for
+a \UNIX{} user to make their home directory have a layout similar to
+\file{/usr/} or \file{/usr/local/}.  This scheme can be used by
+anyone, regardless of the operating system their installing for.
+
 Installing a new module distribution is as simple as
 
 \begin{verbatim}
 python setup.py install --home=<dir>
 \end{verbatim}
 
-where you can supply any directory you like for the \longprogramopt{home}
-option.  Lazy typists can just type a tilde (\code{\textasciitilde}); the
-\command{install} command will expand this to your home directory:
+where you can supply any directory you like for the
+\longprogramopt{home} option.  On \UNIX, lazy typists can just type a
+tilde (\code{\textasciitilde}); the \command{install} command will
+expand this to your home directory:
 
 \begin{verbatim}
 python setup.py install --home=~
@@ -417,6 +417,11 @@
               {home}{/bin}
               {home}{/share}
 
+
+\versionchanged[The \longprogramopt{home} option used to be supported
+                only on \UNIX]{2.4}
+
+
 \subsection{Alternate installation: \UNIX{} (the prefix scheme)}
 \label{alt-install-home}
 
@@ -491,14 +496,13 @@
 point to an alternate Python installation, this is immaterial.)
 
 
-\subsection{Alternate installation: Windows}
+\subsection{Alternate installation: Windows (the prefix scheme)}
 \label{alt-install-windows}
 
-Since Windows has no conception of a user's home directory, and since
-the standard Python installation under Windows is simpler than that
-under \UNIX, there's no point in having separate \longprogramopt{prefix}
-and \longprogramopt{home} options.  Just use the \longprogramopt{prefix}
-option to specify a base directory, e.g.
+Windows has no concept of a user's home directory, and since the
+standard Python installation under Windows is simpler than under
+\UNIX, the \longprogramopt{prefix} option has traditionally been used
+to install additional packages in separate locations on Windows.
 
 \begin{verbatim}
 python setup.py install --prefix="\Temp\Python"
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
index 7fb46a7..3c36ede 100644
--- a/Lib/distutils/command/install.py
+++ b/Lib/distutils/command/install.py
@@ -242,19 +242,15 @@
                   ("must supply either prefix/exec-prefix/home or " +
                    "install-base/install-platbase -- not both")
 
+        if self.home and (self.prefix or self.exec_prefix):
+            raise DistutilsOptionError, \
+                  "must supply either home or prefix/exec-prefix -- not both"
+
         # Next, stuff that's wrong (or dubious) only on certain platforms.
-        if os.name == 'posix':
-            if self.home and (self.prefix or self.exec_prefix):
-                raise DistutilsOptionError, \
-                      ("must supply either home or prefix/exec-prefix -- " +
-                       "not both")
-        else:
+        if os.name != "posix":
             if self.exec_prefix:
                 self.warn("exec-prefix option ignored on this platform")
                 self.exec_prefix = None
-            if self.home:
-                self.warn("home option ignored on this platform")
-                self.home = None
 
         # Now the interesting logic -- so interesting that we farm it out
         # to other methods.  The goal of these methods is to set the final
@@ -405,15 +401,19 @@
 
     def finalize_other (self):          # Windows and Mac OS for now
 
-        if self.prefix is None:
-            self.prefix = os.path.normpath(sys.prefix)
+        if self.home is not None:
+            self.install_base = self.install_platbase = self.home
+            self.select_scheme("unix_home")
+        else:
+            if self.prefix is None:
+                self.prefix = os.path.normpath(sys.prefix)
 
-        self.install_base = self.install_platbase = self.prefix
-        try:
-            self.select_scheme(os.name)
-        except KeyError:
-            raise DistutilsPlatformError, \
-                  "I don't know how to install stuff on '%s'" % os.name
+            self.install_base = self.install_platbase = self.prefix
+            try:
+                self.select_scheme(os.name)
+            except KeyError:
+                raise DistutilsPlatformError, \
+                      "I don't know how to install stuff on '%s'" % os.name
 
     # finalize_other ()
 
diff --git a/Lib/distutils/tests/test_install.py b/Lib/distutils/tests/test_install.py
new file mode 100644
index 0000000..c834b91
--- /dev/null
+++ b/Lib/distutils/tests/test_install.py
@@ -0,0 +1,55 @@
+"""Tests for distutils.command.install."""
+
+import os
+import unittest
+
+from distutils.command.install import install
+from distutils.core import Distribution
+
+from distutils.tests import support
+
+
+class InstallTestCase(support.TempdirManager, unittest.TestCase):
+
+    def test_home_installation_scheme(self):
+        # This ensure two things:
+        # - that --home generates the desired set of directory names
+        # - test --home is supported on all platforms
+        builddir = self.mkdtemp()
+        destination = os.path.join(builddir, "installation")
+
+        dist = Distribution({"name": "foopkg"})
+        # script_name need not exist, it just need to be initialized
+        dist.script_name = os.path.join(builddir, "setup.py")
+        dist.command_obj["build"] = support.DummyCommand(
+            build_base=builddir,
+            build_lib=os.path.join(builddir, "lib"),
+            )
+
+        cmd = install(dist)
+        cmd.home = destination
+        cmd.ensure_finalized()
+
+        self.assertEqual(cmd.install_base, destination)
+        self.assertEqual(cmd.install_platbase, destination)
+
+        def check_path(got, expected):
+            got = os.path.normpath(got)
+            expected = os.path.normpath(expected)
+            self.assertEqual(got, expected)
+
+        libdir = os.path.join(destination, "lib", "python")
+        check_path(cmd.install_lib, libdir)
+        check_path(cmd.install_platlib, libdir)
+        check_path(cmd.install_purelib, libdir)
+        check_path(cmd.install_headers,
+                   os.path.join(destination, "include", "python", "foopkg"))
+        check_path(cmd.install_scripts, os.path.join(destination, "bin"))
+        check_path(cmd.install_data, destination)
+
+
+def test_suite():
+    return unittest.makeSuite(InstallTestCase)
+
+if __name__ == "__main__":
+    unittest.main(defaultTest="test_suite")
diff --git a/Misc/NEWS b/Misc/NEWS
index b5038f7..caaed29 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -365,6 +365,9 @@
 - refactored site.py into functions.  Also wrote regression tests for the
   module.
 
+- The distutils install command now supports the --home option and
+  installation scheme for all platforms.
+
 - The distutils sdist command now ignores all .svn directories, in
   addition to CVS and RCS directories.  .svn directories hold
   administrative files for the Subversion source control system.
