diff --git a/INSTALL b/INSTALL
index 793b9bb..b650ba6 100644
--- a/INSTALL
+++ b/INSTALL
@@ -11,47 +11,59 @@
 pyOpenSSL uses distutils, so there really shouldn't be any problems. To build
 the library:
 
-    python setup.py build
+  $ python setup.py build
 
 If your OpenSSL header files aren't in /usr/include, you may need to supply
 the -I flag to let the setup script know where to look. The same goes for the
 libraries of course, use the -L flag. Note that build won't accept these
 flags, so you have to run first build_ext and then build! Example:
 
-    python setup.py build_ext -I/usr/local/ssl/include -L/usr/local/ssl/lib
-    python setup.py build
+  $ python setup.py build_ext -I/usr/local/ssl/include -L/usr/local/ssl/lib
+  $ python setup.py build
 
 Now you should have a directory called OpenSSL that contains e.g. SSL.so and
 __init__.py somewhere in the build dicrectory, so just:
 
-    python setup.py install
+  $ python setup.py install
 
 If you, for some arcane reason, don't want the module to appear in the
 site-packages directory, use the --prefix option.
 
 You can, of course, do
 
-    python setup.py --help
+  $ python setup.py --help
 
 to find out more about how to use the script.
 
 
 -- Building the Module on a Windows System --
 
-Big thanks to Itamar Shtull-Trauring and Oleg Orlov for their help with
-Windows build instructions. Same as for Unix systems, we have to separate
-the build_ext and the build.
+pyOpenSSL is known to build with mingw32 for Python 2.3 through Python 2.5. 
+For Python 2.6, the official Windows installer of which is built with
+Microsoft Visual Studio 2008 (version 9.0), Microsoft Visual Studio 2008
+(version 9.0) is required.  You can specify that mingw32 be used by passing
+the --compiler argument to build_ext.  You will also need to specify the
+location of the OpenSSL headers and libraries:
 
-Building the library:
+  C:\pyOpenSSL-X.Y> setup.py build_ext -c mingw32 -I C:\OpenSSL\include ^
+                      -L C:\OpenSSL bdist_msi
 
-    setup.py build_ext -I ...\openssl\inc32 -L ...\openssl\out32dll
-    setup.py build
+The correct header and library paths depend on how you have OpenSSL
+installed.  The above paths are correct for the default installation of
+(<http://www.slproweb.com/products/Win32OpenSSL.html>).
 
-Where ...\openssl is of course the location of your OpenSSL installation.
+The bdist_msi command will build an MSI installer.  It can be substituted
+with another bdist command if another kind of installer is desired.
 
-Installation is the same as for Unix systems:
+To build with MSVC instead, omit the -c option and pass a slightly different
+library directory:
 
-    setup.py install
+  C:\pyOpenSSL-X.Y> setup.py build_ext -I C:\OpenSSL\include ^
+                      -L C:\OpenSSL\lib bdist_msi
+
+The resulting binary distribution will be placed in the dist directory. To
+install it, dDepending on what kind of distribution you create, run it,
+unzip it, or copy it to Python installation's site-packages.
 
 And similarily, you can do
 
@@ -59,6 +71,9 @@
 
 to get more information.
 
+Big thanks to Itamar Shtull-Trauring, Oleg Orlov, Zooko O'Whielacronx, Chris
+Galvan, and #python and #distutils on FreeNode for their help with Windows
+build instructions.
 
 -- Documentation --
 
diff --git a/setup.py b/setup.py
index 06d477b..a6a446c 100755
--- a/setup.py
+++ b/setup.py
@@ -42,34 +42,27 @@
 
 # Add more platforms here when needed
 if os.name == 'nt' or sys.platform == 'win32':
-    Libraries = ['eay32', 'Ws2_32']
-    # Try to find it...
-    for path in ["C:\\OpenSSL\\lib\\MinGW", "C:\\Python23\\libs",
-                 "C:\\Python24\\libs", "C:\\Python25\\libs", "C:\\Python26\\libs"]:
-        # The .a is the "export library".  It's the thing we need to link
-        # against to let us use the .dll.
-        ssleay32 = os.path.join(path, "ssleay32.a")
-        if os.path.exists(ssleay32):
-            ExtraObjects = [ssleay32]
-            break
-    else:
-        raise SystemExit("Cannot find ssleay32.a, aborting")
+
+    Libraries = ['Ws2_32']
+    def makeTellMeIf(original, what):
+        class tellMeIf(original):
+            def __init__(*a, **kw):
+                Libraries.extend(what)
+                return original.__init__(*a, **kw)
+        return tellMeIf
+
+    from distutils import cygwinccompiler
+    cygwinccompiler.Mingw32CCompiler = makeTellMeIf(cygwinccompiler.Mingw32CCompiler, ['eay32', 'ssl32'])
+    from distutils import msvccompiler
+    msvccompiler.MSVCCompiler = makeTellMeIf(msvccompiler.MSVCCompiler, ['libeay32', 'ssleay32'])
+
+    import shutil
+    shutil.copy("C:\\OpenSSL\\ssleay32.dll", os.path.split(os.path.abspath(__file__))[0])
+    shutil.copy("C:\\OpenSSL\\libeay32.dll", os.path.split(os.path.abspath(__file__))[0])
+    package_data = {'': ['ssleay32.dll', 'libeay32.dll']}
 else:
     Libraries = ['ssl', 'crypto']
-    ExtraObjects = []
-
-if sys.platform == 'darwin':
-    IncludeDirs = ['/sw/include']
-    LibraryDirs = ['/sw/lib']
-
-# On Windows, make sure the necessary .dll's get added to the egg.
-data_files = []
-if sys.platform == 'win32':
-    import ctypes.util
-    libeay32 = ctypes.util.find_library("libeay32")
-    if libeay32 is None:
-        raise SystemExit("Cannot find libeay32.dll, aborting")
-    data_files = [("OpenSSL", [libeay32])]
+    package_data = {}
 
 
 def mkExtension(name):
@@ -77,10 +70,11 @@
     src = globals()[name.lower() + '_src']
     dep = globals()[name.lower() + '_dep']
     return Extension(modname, src, libraries=Libraries, depends=dep,
-                     include_dirs=IncludeDirs, library_dirs=LibraryDirs,
-                     extra_objects=ExtraObjects)
+                     include_dirs=IncludeDirs, library_dirs=LibraryDirs)
+
 
 setup(name='pyOpenSSL', version=__version__,
+      packages = ['OpenSSL'],
       package_dir = {'OpenSSL': '.'},
       ext_modules = [mkExtension('crypto'), mkExtension('rand'),
                      mkExtension('SSL')],
@@ -90,7 +84,8 @@
                      'OpenSSL.test.test_crypto',
                      'OpenSSL.test.test_rand',
                      'OpenSSL.test.test_ssl'],
-      data_files = data_files,
+      zip_safe = False,
+      package_data = package_data,
       description = 'Python wrapper module around the OpenSSL library',
       author = 'Martin Sjögren, AB Strakt',
       author_email = 'msjogren@gmail.com',
