WINDOWS_LEAN_AND_MEAN:  There is no such symbol, although a very few
MSDN sample programs use it, apparently in error.  The correct name
is WIN32_LEAN_AND_MEAN.  After switching to the correct name, in two
cases more was needed because the code actually relied on things that
disappear when WIN32_LEAN_AND_MEAN is defined.
diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
index 80c2767..5ed3eaf 100644
--- a/Modules/_localemodule.c
+++ b/Modules/_localemodule.c
@@ -26,7 +26,7 @@
 #endif
 
 #if defined(MS_WINDOWS)
-#define WINDOWS_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 #endif
 
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 163263f..4d9c93d 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -217,7 +217,7 @@
 #include <io.h>
 #include <process.h>
 #include "osdefs.h"
-#define WINDOWS_LEAN_AND_MEAN
+/* We don't want WIN32_LEAN_AND_MEAN here -- we need ShellExecute(). */
 #include <windows.h>
 #define popen	_popen
 #define pclose	_pclose
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index a42502b..0b9bab8 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -12,7 +12,7 @@
 #define fileno _fileno
 /* can simulate truncate with Win32 API functions; see file_truncate */
 #define HAVE_FTRUNCATE
-#define WINDOWS_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 #endif
 
diff --git a/PC/w9xpopen.c b/PC/w9xpopen.c
index 8c063ac..95fc277 100644
--- a/PC/w9xpopen.c
+++ b/PC/w9xpopen.c
@@ -14,9 +14,10 @@
  * AKA solution to the problem described in KB: Q150956.
  */    
 
-#define WINDOWS_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 #include <stdio.h>
+#include <stdlib.h>  /* for malloc and its friends */
 
 const char *usage =
 "This program is used by Python's os.popen function\n"