diff --git a/Lib/test/test_import.py b/Lib/test/test_import.py
index d053609..b2e3fb6 100644
--- a/Lib/test/test_import.py
+++ b/Lib/test/test_import.py
@@ -16,49 +16,56 @@
 # Another brief digression to test the accuracy of manifest float constants.
 import double_const  # don't blink -- that *was* the test
 
+def test_with_extension(ext): # ext normally ".py"; perhaps ".pyw"
+    source = TESTFN + ext
+    pyo = TESTFN + ".pyo"
+    if sys.platform.startswith('java'):
+        pyc = TESTFN + "$py.class"
+    else:
+        pyc = TESTFN + ".pyc"
+
+    f = open(source, "w")
+    print >> f, "# This tests Python's ability to import a", ext, "file."
+    a = random.randrange(1000)
+    b = random.randrange(1000)
+    print >> f, "a =", a
+    print >> f, "b =", b
+    f.close()
+
+    try:
+        try:
+            mod = __import__(TESTFN)
+        except ImportError, err:
+            raise ValueError("import from %s failed: %s" % (ext, err))
+
+        if mod.a != a or mod.b != b:
+            print a, "!=", mod.a
+            print b, "!=", mod.b
+            raise ValueError("module loaded (%s) but contents invalid" % mod)
+    finally:
+        os.unlink(source)
+
+    try:
+        try:
+            reload(mod)
+        except ImportError, err:
+            raise ValueError("import from .pyc/.pyo failed: %s" % err)
+    finally:
+        try:
+            os.unlink(pyc)
+        except os.error:
+            pass
+        try:
+            os.unlink(pyo)
+        except os.error:
+            pass
+        del sys.modules[TESTFN]
+
 sys.path.insert(0, os.curdir)
-
-source = TESTFN + ".py"
-pyo = TESTFN + ".pyo"
-if sys.platform.startswith('java'):
-    pyc = TESTFN + "$py.class"
-else:
-    pyc = TESTFN + ".pyc"
-
-f = open(source, "w")
-print >> f, "# This will test Python's ability to import a .py file"
-a = random.randrange(1000)
-b = random.randrange(1000)
-print >> f, "a =", a
-print >> f, "b =", b
-f.close()
-
 try:
-    try:
-        mod = __import__(TESTFN)
-    except ImportError, err:
-        raise ValueError, "import from .py failed: %s" % err
-
-    if mod.a != a or mod.b != b:
-        print a, "!=", mod.a
-        print b, "!=", mod.b
-        raise ValueError, "module loaded (%s) but contents invalid" % mod
+    test_with_extension(".py")
+    if sys.platform.startswith("win"):
+        for ext in ".PY", ".Py", ".pY", ".pyw", ".PYW", ".pYw":
+            test_with_extension(ext)
 finally:
-    os.unlink(source)
-
-try:
-    try:
-        reload(mod)
-    except ImportError, err:
-        raise ValueError, "import from .pyc/.pyo failed: %s" % err
-finally:
-    try:
-        os.unlink(pyc)
-    except os.error:
-        pass
-    try:
-        os.unlink(pyo)
-    except os.error:
-        pass
-
-del sys.path[0]
+    del sys.path[0]
diff --git a/Misc/ACKS b/Misc/ACKS
index ddaf16a..1a4d223 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -42,6 +42,7 @@
 Pablo Bleyer
 Finn Bock
 Paul Boddie
+David Bolen
 Jurjen Bos
 Peter Bosch
 Eric Bouck
diff --git a/Misc/NEWS b/Misc/NEWS
index d93ab86..a1e9fc0 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -32,12 +32,17 @@
   against buffer overruns.
 
 - Unicode APIs now use name mangling to assure that mixing interpreters
-  and extensions using different Unicode widths is rendered next to 
-  impossible. Trying to import an incompatible Unicode-aware extension 
+  and extensions using different Unicode widths is rendered next to
+  impossible. Trying to import an incompatible Unicode-aware extension
   will result in an ImportError.  Unicode extensions writers must make
   sure to check the Unicode width compatibility in their extensions by
   using at least one of the mangled Unicode APIs in the extension.
 
+Windows
+
+- "import module" now compiles module.pyw if it exists and nothing else
+  relevant is found.
+
 
 What's New in Python 2.2a1?
 ===========================
diff --git a/Python/import.c b/Python/import.c
index a2106de..8e08164 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -70,6 +70,9 @@
 #else
 static const struct filedescr _PyImport_StandardFiletab[] = {
 	{".py", "r", PY_SOURCE},
+#ifdef MS_WIN32
+	{".pyw", "r", PY_SOURCE},
+#endif	
 	{".pyc", "rb", PY_COMPILED},
 	{0, 0}
 };
@@ -513,13 +516,19 @@
 static char *
 make_compiled_pathname(char *pathname, char *buf, size_t buflen)
 {
-	size_t len;
-
-	len = strlen(pathname);
+	size_t len = strlen(pathname);
 	if (len+2 > buflen)
 		return NULL;
-	strcpy(buf, pathname);
-	strcpy(buf+len, Py_OptimizeFlag ? "o" : "c");
+
+#ifdef MS_WIN32
+	/* Treat .pyw as if it were .py.  The case of ".pyw" must match
+	   that used in _PyImport_StandardFiletab. */
+	if (len >= 4 && strcmp(&pathname[len-4], ".pyw") == 0)
+		--len;	/* pretend 'w' isn't there */
+#endif
+	memcpy(buf, pathname, len);
+	buf[len] = Py_OptimizeFlag ? 'o' : 'c';
+	buf[len+1] = '\0';
 
 	return buf;
 }
