diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c
index 0c49f7f..aed3c42 100644
--- a/Modules/_codecsmodule.c
+++ b/Modules/_codecsmodule.c
@@ -316,7 +316,7 @@
 		       size);
 }
 
-#if defined(MS_WIN32) && defined(HAVE_USABLE_WCHAR_T)
+#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
 
 static PyObject *
 mbcs_decode(PyObject *self,
@@ -334,7 +334,7 @@
 		       size);
 }
 
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 
 /* --- Encoder ------------------------------------------------------------ */
 
@@ -636,7 +636,7 @@
     return v;
 }
 
-#if defined(MS_WIN32) && defined(HAVE_USABLE_WCHAR_T)
+#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
 
 static PyObject *
 mbcs_encode(PyObject *self,
@@ -661,7 +661,7 @@
     return v;
 }
 
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 #endif /* Py_USING_UNICODE */
 
 /* --- Module API --------------------------------------------------------- */
@@ -695,7 +695,7 @@
     {"charmap_decode", 		charmap_decode,			METH_VARARGS},
     {"readbuffer_encode",	readbuffer_encode,		METH_VARARGS},
     {"charbuffer_encode",	charbuffer_encode,		METH_VARARGS},
-#if defined(MS_WIN32) && defined(HAVE_USABLE_WCHAR_T)
+#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
     {"mbcs_encode", 		mbcs_encode,			METH_VARARGS},
     {"mbcs_decode", 		mbcs_decode,			METH_VARARGS},
 #endif
diff --git a/Modules/_hotshot.c b/Modules/_hotshot.c
index 06a6824..3426e97 100644
--- a/Modules/_hotshot.c
+++ b/Modules/_hotshot.c
@@ -12,7 +12,7 @@
  * Which timer to use should be made more configurable, but that should not
  * be difficult.  This will do for now.
  */
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 #include <windows.h>
 #include <direct.h>    /* for getcwd() */
 typedef __int64 hs_time;
@@ -90,7 +90,7 @@
 static PyObject * ProfilerError = NULL;
 
 
-#ifndef MS_WIN32
+#ifndef MS_WINDOWS
 #ifdef GETTIMEOFDAY_NO_TZ
 #define GETTIMEOFDAY(ptv) gettimeofday((ptv))
 #else
@@ -818,7 +818,7 @@
 get_tdelta(ProfilerObject *self)
 {
     int tdelta;
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
     hs_time tv;
     hs_time diff;
 
@@ -909,7 +909,7 @@
 
 /* A couple of useful helper functions. */
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 static LARGE_INTEGER frequency = {0, 0};
 #endif
 
@@ -921,7 +921,7 @@
 {
     hs_time tv1, tv2;
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
     hs_time diff;
     QueryPerformanceFrequency(&frequency);
 #endif
@@ -929,7 +929,7 @@
     GETTIMEOFDAY(&tv1);
     while (1) {
         GETTIMEOFDAY(&tv2);
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
         diff = tv2 - tv1;
         if (diff != 0) {
             timeofday_diff = (unsigned long)diff;
@@ -945,7 +945,7 @@
         }
 #endif
     }
-#if defined(MS_WIN32) || defined(macintosh) || defined(PYOS_OS2)
+#if defined(MS_WINDOWS) || defined(macintosh) || defined(PYOS_OS2)
     rusage_diff = -1;
 #else
     {
@@ -1448,7 +1448,7 @@
     else
         pack_add_info(self, "executable-version", buffer);
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
     PyOS_snprintf(cwdbuffer, sizeof(cwdbuffer), "%I64d", frequency.QuadPart);
     pack_add_info(self, "reported-performance-frequency", cwdbuffer);
 #else
@@ -1553,7 +1553,7 @@
 }
 
 PyDoc_VAR(resolution__doc__) = 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 PyDoc_STR(
 "resolution() -> (performance-counter-ticks, update-frequency)\n"
 "Return the resolution of the timer provided by the QueryPerformanceCounter()\n"
@@ -1580,7 +1580,7 @@
             calibrate();
             calibrate();
         }
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
         result = Py_BuildValue("ii", timeofday_diff, frequency.LowPart);
 #else
         result = Py_BuildValue("ii", timeofday_diff, rusage_diff);
diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
index e6bacb4..80c2767 100644
--- a/Modules/_localemodule.c
+++ b/Modules/_localemodule.c
@@ -25,7 +25,7 @@
 #include <libintl.h>
 #endif
 
-#if defined(MS_WIN32)
+#if defined(MS_WINDOWS)
 #define WINDOWS_LEAN_AND_MEAN
 #include <windows.h>
 #endif
@@ -363,7 +363,7 @@
     return result;
 }
 
-#if defined(MS_WIN32)
+#if defined(MS_WINDOWS)
 static PyObject*
 PyLocale_getdefaultlocale(PyObject* self)
 {
@@ -627,7 +627,7 @@
    METH_VARARGS, strcoll__doc__},
   {"strxfrm", (PyCFunction) PyLocale_strxfrm, 
    METH_VARARGS, strxfrm__doc__},
-#if defined(MS_WIN32) || defined(macintosh)
+#if defined(MS_WINDOWS) || defined(macintosh)
   {"_getdefaultlocale", (PyCFunction) PyLocale_getdefaultlocale, METH_NOARGS},
 #endif
 #ifdef HAVE_LANGINFO_H
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index 3164a27..eca67d3 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -20,11 +20,11 @@
 
 #include <Python.h>
 
-#ifndef MS_WIN32
+#ifndef MS_WINDOWS
 #define UNIX
 #endif
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 #include <windows.h>
 static int
 my_getpagesize(void)
@@ -75,7 +75,7 @@
 	size_t	size;
 	size_t	pos;
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	HANDLE	map_handle;
 	HANDLE	file_handle;
 	char *	tagname;
@@ -92,7 +92,7 @@
 static void
 mmap_object_dealloc(mmap_object *m_obj)
 {
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	if (m_obj->data != NULL)
 		UnmapViewOfFile (m_obj->data);
 	if (m_obj->map_handle != INVALID_HANDLE_VALUE)
@@ -101,7 +101,7 @@
 		CloseHandle (m_obj->file_handle);
 	if (m_obj->tagname)
 		PyMem_Free(m_obj->tagname);
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 
 #ifdef UNIX
 	if (m_obj->data!=NULL) {
@@ -118,7 +118,7 @@
 {
         if (!PyArg_ParseTuple(args, ":close"))
 		return NULL;
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	/* For each resource we maintain, we need to check
 	   the value is valid, and if so, free the resource 
 	   and set the member value to an invalid value so
@@ -138,7 +138,7 @@
 		CloseHandle (self->file_handle);
 		self->file_handle = INVALID_HANDLE_VALUE;
 	}
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 
 #ifdef UNIX
 	munmap(self->data, self->size);
@@ -149,7 +149,7 @@
 	return (Py_None);
 }
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 #define CHECK_VALID(err)						\
 do {									\
     if (!self->map_handle) {						\
@@ -157,7 +157,7 @@
 	return err;							\
     }									\
 } while (0)
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 
 #ifdef UNIX
 #define CHECK_VALID(err)						\
@@ -336,7 +336,7 @@
         if (!PyArg_ParseTuple(args, ":size"))
 		return NULL;
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	if (self->file_handle != INVALID_HANDLE_VALUE) {
 		return (Py_BuildValue (
 			"l", (long)
@@ -344,7 +344,7 @@
 	} else {
 		return (Py_BuildValue ("l", (long) self->size) );
 	}
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 
 #ifdef UNIX
 	{
@@ -376,7 +376,7 @@
 	if (!PyArg_ParseTuple (args, "l:resize", &new_size) || 
 	    !is_resizeable(self)) {
 		return NULL;
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	} else { 
 		DWORD dwErrCode = 0;
 		/* First, unmap the file view */
@@ -414,7 +414,7 @@
 		}
 		PyErr_SetFromWindowsErr(dwErrCode);
 		return (NULL);
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 
 #ifdef UNIX
 #ifndef HAVE_MREMAP 
@@ -467,10 +467,10 @@
 				 "flush values out of range");
 		return NULL;
 	} else {
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 		return (Py_BuildValue("l", (long)
                                       FlushViewOfFile(self->data+offset, size)));
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 #ifdef UNIX
 		/* XXX semantics of return value? */
 		/* XXX flags for msync? */
@@ -909,7 +909,7 @@
 }
 #endif /* UNIX */
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 static PyObject *
 new_mmap_object(PyObject *self, PyObject *args, PyObject *kwdict)
 {
@@ -1042,7 +1042,7 @@
 	PyErr_SetFromWindowsErr(dwErr);
 	return (NULL);
 }
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 
 /* List of functions exported by this module */
 static struct PyMethodDef mmap_functions[] = {
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 2a77ee3..163263f 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -4,7 +4,7 @@
 /* This file is also used for Windows NT/MS-Win and OS/2.  In that case the
    module actually calls itself 'nt' or 'os2', not 'posix', and a few
    functions are either unimplemented or implemented differently.  The source
-   assumes that for Windows NT, the macro 'MS_WIN32' is defined independent
+   assumes that for Windows NT, the macro 'MS_WINDOWS' is defined independent
    of the compiler used.  Different compilers define their own feature
    test macro, e.g. '__BORLANDC__' or '_MSC_VER'.  For OS/2, the compiler
    independent macro PYOS_OS2 should be defined.  On OS/2 the default
@@ -82,15 +82,12 @@
 #else
 #ifdef _MSC_VER		/* Microsoft compiler */
 #define HAVE_GETCWD     1
-#ifdef MS_WIN32
 #define HAVE_SPAWNV	1
 #define HAVE_EXECV      1
 #define HAVE_PIPE       1
 #define HAVE_POPEN      1
 #define HAVE_SYSTEM	1
 #define HAVE_CWAIT	1
-#else /* 16-bit Windows */
-#endif /* !MS_WIN32 */
 #else
 #if defined(PYOS_OS2) && defined(PYCC_GCC)
 /* Everything needed is defined in PC/os2emx/pyconfig.h */
@@ -222,13 +219,8 @@
 #include "osdefs.h"
 #define WINDOWS_LEAN_AND_MEAN
 #include <windows.h>
-#ifdef MS_WIN32
 #define popen	_popen
 #define pclose	_pclose
-#else /* 16-bit Windows */
-#include <dos.h>
-#include <ctype.h>
-#endif /* MS_WIN32 */
 #endif /* _MSC_VER */
 
 #if defined(PYCC_VACPP) && defined(PYOS_OS2)
@@ -268,7 +260,7 @@
 
 /* choose the appropriate stat and fstat functions and return structs */
 #undef STAT
-#if defined(MS_WIN64) || defined(MS_WIN32)
+#if defined(MS_WIN64) || defined(MS_WINDOWS)
 #	define STAT _stati64
 #	define FSTAT _fstati64
 #	define STRUCT_STAT struct _stati64
@@ -367,7 +359,7 @@
 	return rc;
 }
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 static PyObject *
 win32_error(char* function, char* filename)
 {
@@ -684,17 +676,17 @@
 	char *pathfree = NULL;  /* this memory must be free'd */
 	int res;
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	int pathlen;
 	char pathcopy[MAX_PATH];
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 
 	if (!PyArg_ParseTuple(args, format,
 	                      Py_FileSystemDefaultEncoding, &path))
 		return NULL;
 	pathfree = path;
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	pathlen = strlen(path);
 	/* the library call can blow up if the file name is too long! */
 	if (pathlen > MAX_PATH) {
@@ -719,7 +711,7 @@
 			path = pathcopy;
 		}
 	}
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 
 	Py_BEGIN_ALLOW_THREADS
 	res = (*statfunc)(path, &st);
@@ -991,7 +983,7 @@
 {
 	/* XXX Should redo this putting the (now four) versions of opendir
 	   in separate files instead of having them all here... */
-#if defined(MS_WIN32) && !defined(HAVE_OPENDIR)
+#if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR)
 
 	PyObject *d, *v;
 	HANDLE hFindFile;
@@ -1047,67 +1039,6 @@
 
 	return d;
 
-#elif defined(_MSC_VER) /* 16-bit Windows */
-
-#ifndef MAX_PATH
-#define MAX_PATH	250
-#endif
-	char *name, *pt;
-	int len;
-	PyObject *d, *v;
-	char namebuf[MAX_PATH+5];
-	struct _find_t ep;
-
-	if (!PyArg_ParseTuple(args, "t#:listdir", &name, &len))
-		return NULL;
-	if (len >= MAX_PATH) {
-		PyErr_SetString(PyExc_ValueError, "path too long");
-		return NULL;
-	}
-	strcpy(namebuf, name);
-	for (pt = namebuf; *pt; pt++)
-		if (*pt == ALTSEP)
-			*pt = SEP;
-	if (namebuf[len-1] != SEP)
-		namebuf[len++] = SEP;
-	strcpy(namebuf + len, "*.*");
-
-	if ((d = PyList_New(0)) == NULL)
-		return NULL;
-
-	if (_dos_findfirst(namebuf, _A_RDONLY |
-			   _A_HIDDEN | _A_SYSTEM | _A_SUBDIR, &ep) != 0)
-        {
-		errno = ENOENT;
-		return posix_error_with_filename(name);
-	}
-	do {
-		if (ep.name[0] == '.' &&
-		    (ep.name[1] == '\0' ||
-		     ep.name[1] == '.' &&
-		     ep.name[2] == '\0'))
-			continue;
-		strcpy(namebuf, ep.name);
-		for (pt = namebuf; *pt; pt++)
-			if (isupper(*pt))
-				*pt = tolower(*pt);
-		v = PyString_FromString(namebuf);
-		if (v == NULL) {
-			Py_DECREF(d);
-			d = NULL;
-			break;
-		}
-		if (PyList_Append(d, v) != 0) {
-			Py_DECREF(v);
-			Py_DECREF(d);
-			d = NULL;
-			break;
-		}
-		Py_DECREF(v);
-	} while (_dos_findnext(&ep) == 0);
-
-	return d;
-
 #elif defined(PYOS_OS2)
 
 #ifndef MAX_PATH
@@ -1220,7 +1151,7 @@
 #endif /* which OS */
 }  /* end of posix_listdir */
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 /* A helper function for abspath on win32 */
 static PyObject *
 posix__getfullpathname(PyObject *self, PyObject *args)
@@ -1240,7 +1171,7 @@
 		return win32_error("GetFullPathName", inbuf);
 	return PyString_FromString(outbuf);
 } /* end of posix__getfullpathname */
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 
 PyDoc_STRVAR(posix_mkdir__doc__,
 "mkdir(path [, mode=0777])\n\n\
@@ -3050,7 +2981,7 @@
 
 #endif /* PYCC_??? */
 
-#elif defined(MS_WIN32)
+#elif defined(MS_WINDOWS)
 
 /*
  * Portable 'popen' replacement for Win32.
@@ -4211,7 +4142,7 @@
 #endif /* HAVE_TIMES */
 
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 #define HAVE_TIMES	/* so the method table will pick it up */
 static PyObject *
 posix_times(PyObject *self, PyObject *args)
@@ -4237,7 +4168,7 @@
 		(double)0,
 		(double)0);
 }
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 
 #ifdef HAVE_TIMES
 PyDoc_STRVAR(posix_times__doc__,
@@ -4414,7 +4345,7 @@
 posix_lseek(PyObject *self, PyObject *args)
 {
 	int fd, how;
-#if defined(MS_WIN64) || defined(MS_WIN32)
+#if defined(MS_WIN64) || defined(MS_WINDOWS)
 	LONG_LONG pos, res;
 #else
 	off_t pos, res;
@@ -4441,7 +4372,7 @@
 		return NULL;
 
 	Py_BEGIN_ALLOW_THREADS
-#if defined(MS_WIN64) || defined(MS_WIN32)
+#if defined(MS_WIN64) || defined(MS_WINDOWS)
 	res = _lseeki64(fd, pos, how);
 #else
 	res = lseek(fd, pos, how);
@@ -4590,7 +4521,7 @@
 
     return Py_BuildValue("(ii)", read, write);
 #else
-#if !defined(MS_WIN32)
+#if !defined(MS_WINDOWS)
 	int fds[2];
 	int res;
 	if (!PyArg_ParseTuple(args, ":pipe"))
@@ -4601,7 +4532,7 @@
 	if (res != 0)
 		return posix_error();
 	return Py_BuildValue("(ii)", fds[0], fds[1]);
-#else /* MS_WIN32 */
+#else /* MS_WINDOWS */
 	HANDLE read, write;
 	int read_fd, write_fd;
 	BOOL ok;
@@ -4615,7 +4546,7 @@
 	read_fd = _open_osfhandle((Py_intptr_t)read, 0);
 	write_fd = _open_osfhandle((Py_intptr_t)write, 1);
 	return Py_BuildValue("(ii)", read_fd, write_fd);
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 #endif
 }
 #endif  /* HAVE_PIPE */
@@ -5189,7 +5120,7 @@
 		  "tempnam is a potential security risk to your program") < 0)
 	    return NULL;
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
     name = _tempnam(dir, pfx);
 #else
     name = tempnam(dir, pfx);
@@ -6250,7 +6181,7 @@
     return NULL;
 }
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 PyDoc_STRVAR(win32_startfile__doc__,
 "startfile(filepath) - Start a file with its associated application.\n\
 \n\
@@ -6390,7 +6321,7 @@
 #endif /* HAVE_PLOCK */
 #ifdef HAVE_POPEN
 	{"popen",	posix_popen, METH_VARARGS, posix_popen__doc__},
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	{"popen2",	win32_popen2, METH_VARARGS},
 	{"popen3",	win32_popen3, METH_VARARGS},
 	{"popen4",	win32_popen4, METH_VARARGS},
@@ -6542,7 +6473,7 @@
 	{"pathconf",	posix_pathconf, METH_VARARGS, posix_pathconf__doc__},
 #endif
 	{"abort",	posix_abort, METH_VARARGS, posix_abort__doc__},
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	{"_getfullpathname",	posix__getfullpathname, METH_VARARGS, NULL},
 #endif
 	{NULL,		NULL}		 /* Sentinel */
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 240e9a9..25d5d94 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -6,7 +6,7 @@
 #include "Python.h"
 #include "intrcheck.h"
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 #include <process.h>
 #endif
 
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index b2b58bf..8f2c4f8 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -29,23 +29,20 @@
 #else
 #ifdef MS_WINDOWS
 #include <windows.h>
-#if defined(MS_WIN16) || defined(__BORLANDC__)
+#if defined(__BORLANDC__)
 /* These overrides not needed for Win32 */
 #define timezone _timezone
 #define tzname _tzname
 #define daylight _daylight
-#endif /* MS_WIN16 || __BORLANDC__ */
-#ifdef MS_WIN16
-#define altzone _altzone
-#endif /* MS_WIN16 */
+#endif /* __BORLANDC__ */
 #endif /* MS_WINDOWS */
 #endif /* !__WATCOMC__ || __QNX__ */
 
-#if defined(MS_WIN32) && !defined(MS_WIN64) && !defined(__BORLANDC__)
+#if defined(MS_WINDOWS) && !defined(MS_WIN64) && !defined(__BORLANDC__)
 /* Win32 has better clock replacement
    XXX Win64 does not yet, but might when the platform matures. */
 #undef HAVE_CLOCK /* We have our own version down below */
-#endif /* MS_WIN32 && !MS_WIN64 */
+#endif /* MS_WINDOWS && !MS_WIN64 */
 
 #if defined(PYOS_OS2)
 #define INCL_DOS
@@ -141,7 +138,7 @@
 }
 #endif /* HAVE_CLOCK */
 
-#if defined(MS_WIN32) && !defined(MS_WIN64) && !defined(__BORLANDC__)
+#if defined(MS_WINDOWS) && !defined(MS_WIN64) && !defined(__BORLANDC__)
 /* Due to Mark Hammond and Tim Peters */
 static PyObject *
 time_clock(PyObject *self, PyObject *args)
@@ -170,7 +167,7 @@
 }
 
 #define HAVE_CLOCK /* So it gets included in the methods */
-#endif /* MS_WIN32 && !MS_WIN64 */
+#endif /* MS_WINDOWS && !MS_WIN64 */
 
 #ifdef HAVE_CLOCK
 PyDoc_STRVAR(clock_doc,
@@ -736,7 +733,7 @@
 static int
 floatsleep(double secs)
 {
-/* XXX Should test for MS_WIN32 first! */
+/* XXX Should test for MS_WINDOWS first! */
 #if defined(HAVE_SELECT) && !defined(__BEOS__) && !defined(__EMX__)
 	struct timeval t;
 	double frac;
@@ -771,36 +768,7 @@
 	Py_BEGIN_ALLOW_THREADS
 	delay((int)(secs * 1000 + 0.5));  /* delay() uses milliseconds */
 	Py_END_ALLOW_THREADS
-#elif defined(MSDOS)
-	struct timeb t1, t2;
-	double frac;
-	extern double fmod(double, double);
-	extern double floor(double);
-	if (secs <= 0.0)
-		return;
-	frac = fmod(secs, 1.0);
-	secs = floor(secs);
-	ftime(&t1);
-	t2.time = t1.time + (int)secs;
-	t2.millitm = t1.millitm + (int)(frac*1000.0);
-	while (t2.millitm >= 1000) {
-		t2.time++;
-		t2.millitm -= 1000;
-	}
-	for (;;) {
-#ifdef QUICKWIN
-		Py_BEGIN_ALLOW_THREADS
-		_wyield();
-		Py_END_ALLOW_THREADS
-#endif
-		if (PyErr_CheckSignals())
-			return -1;
-		ftime(&t1);
-		if (t1.time > t2.time ||
-		    t1.time == t2.time && t1.millitm >= t2.millitm)
-			break;
-	}
-#elif defined(MS_WIN32)
+#elif defined(MS_WINDOWS)
 	{
 		double millisecs = secs * 1000.0;
 		if (millisecs > (double)ULONG_MAX) {
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index d4caaf0..a42502b 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -8,7 +8,7 @@
 #include <sys/types.h>
 #endif /* DONT_HAVE_SYS_TYPES_H */
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 #define fileno _fileno
 /* can simulate truncate with Win32 API functions; see file_truncate */
 #define HAVE_FTRUNCATE
@@ -480,7 +480,7 @@
 	if (ret != 0)
 		goto onioerror;
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	/* MS _chsize doesn't work if newsize doesn't fit in 32 bits,
 	   so don't even try using it. */
 	{
@@ -542,7 +542,7 @@
 	ret = ftruncate(fileno(f->f_fp), newsize);
 	Py_END_ALLOW_THREADS
 	if (ret != 0) goto onioerror;
-#endif /* !MS_WIN32 */
+#endif /* !MS_WINDOWS */
 
 	Py_INCREF(Py_None);
 	return Py_None;
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index ae27b7f..1b45ef7 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -41,7 +41,7 @@
 #include "unicodeobject.h"
 #include "ucnhash.h"
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 #include <windows.h>
 #endif
 
@@ -2243,7 +2243,7 @@
 				 NULL);
 }
 
-#if defined(MS_WIN32) && defined(HAVE_USABLE_WCHAR_T)
+#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
 
 /* --- MBCS codecs for Windows -------------------------------------------- */
 
@@ -2305,7 +2305,7 @@
     return repr;
 }
 
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 
 /* --- Character Mapping Codec -------------------------------------------- */
 
diff --git a/PC/getpathp.c b/PC/getpathp.c
index 6695a70..e2d4e7a 100644
--- a/PC/getpathp.c
+++ b/PC/getpathp.c
@@ -57,7 +57,7 @@
 #include "Python.h"
 #include "osdefs.h"
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 #include <windows.h>
 #include <tchar.h>
 #endif
@@ -182,7 +182,7 @@
 	return 0;
 }
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 
 /* a string loaded from the DLL at startup.*/
 extern const char *PyWin_DLLVersionString;
@@ -340,7 +340,7 @@
 		free(keyBuf);
 	return retval;
 }
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 
 static void
 get_progpath(void)
@@ -349,7 +349,7 @@
 	char *path = getenv("PATH");
 	char *prog = Py_GetProgramName();
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 #ifdef UNICODE
 	WCHAR wprogpath[MAXPATHLEN+1];
 	/* Windows documents that GetModuleFileName() will "truncate",
@@ -423,7 +423,7 @@
 	char *pythonhome = Py_GetPythonHome();
 	char *envpath = Py_GETENV("PYTHONPATH");
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	int skiphome, skipdefault;
 	char *machinepath = NULL;
 	char *userpath = NULL;
@@ -446,7 +446,7 @@
 		envpath = NULL;
 
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	skiphome = pythonhome==NULL ? 0 : 1;
 	machinepath = getpythonregpath(HKEY_LOCAL_MACHINE, skiphome);
 	userpath = getpythonregpath(HKEY_CURRENT_USER, skiphome);
@@ -482,7 +482,7 @@
 		bufsz = 0;
 	bufsz += strlen(PYTHONPATH) + 1;
 	bufsz += strlen(argv0_path) + 1;
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	if (userpath)
 		bufsz += strlen(userpath) + 1;
 	if (machinepath)
@@ -503,12 +503,12 @@
 			fprintf(stderr, "Using default static path.\n");
 			module_search_path = PYTHONPATH;
 		}
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 		if (machinepath)
 			free(machinepath);
 		if (userpath)
 			free(userpath);
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 		return;
 	}
 
@@ -517,7 +517,7 @@
 		buf = strchr(buf, '\0');
 		*buf++ = DELIM;
 	}
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	if (userpath) {
 		strcpy(buf, userpath);
 		buf = strchr(buf, '\0');
@@ -541,7 +541,7 @@
 		strcpy(buf, PYTHONPATH);
 		buf = strchr(buf, '\0');
 	}
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 	else {
 		char *p = PYTHONPATH;
 		char *q;
diff --git a/PC/pyconfig.h b/PC/pyconfig.h
index 893db43..ac043eb 100644
--- a/PC/pyconfig.h
+++ b/PC/pyconfig.h
@@ -12,8 +12,7 @@
 the following #defines
 
 MS_WIN64 - Code specific to the MS Win64 API
-MS_WIN32 - Code specific to the MS Win32 (and Win64) API
-MS_WIN16 - Code specific to the old 16 bit Windows API.
+MS_WIN32 - Code specific to the MS Win32 (and Win64) API (obsolete, this covers all supported APIs)
 MS_WINDOWS - Code specific to Windows, but all versions.
 MS_COREDLL - Code if the Python core is built as a DLL.
 
@@ -65,9 +64,6 @@
 #define NT	/* NT is obsolete - please use MS_WIN32 instead */
 #define MS_WIN32
 #endif
-#ifdef _WIN16
-#define MS_WIN16
-#endif
 #define MS_WINDOWS
 
 /* set the COMPILER */
@@ -451,10 +447,7 @@
 /* #define HAVE_ALTZONE */
 
 /* Define if you have the putenv function.  */
-#ifdef MS_WIN32
-/* Does this exist on Win16? */
 #define HAVE_PUTENV
-#endif
 
 /* Define if your compiler supports function prototypes */
 #define HAVE_PROTOTYPES
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 7126391..fec7554 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -16,7 +16,7 @@
 /* The default encoding used by the platform file system APIs
    Can remain NULL for all platforms that don't have such a concept
 */
-#if defined(MS_WIN32) && defined(HAVE_USABLE_WCHAR_T)
+#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
 const char *Py_FileSystemDefaultEncoding = "mbcs";
 #else
 const char *Py_FileSystemDefaultEncoding = NULL; /* use default */
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index 9062cf3..7178962 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -20,8 +20,6 @@
 };
 
 
-#ifdef MS_WIN32
-
 /* Case insensitive string compare, to avoid any dependencies on particular
    C RTL implementations */
 
@@ -150,7 +148,6 @@
 
 	return NULL;
 }
-#endif /* MS_WIN32 */
 
 
 dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
@@ -161,7 +158,6 @@
 
 	PyOS_snprintf(funcname, sizeof(funcname), "init%.200s", shortname);
 
-#ifdef MS_WIN32
 	{
 		HINSTANCE hDLL = NULL;
 		char pathbuf[260];
@@ -242,31 +238,6 @@
 		}
 		p = GetProcAddress(hDLL, funcname);
 	}
-#endif /* MS_WIN32 */
-#ifdef MS_WIN16
-	{
-		HINSTANCE hDLL;
-		char pathbuf[16];
-		if (strchr(pathname, '\\') == NULL &&
-		    strchr(pathname, '/') == NULL)
-		{
-			/* Prefix bare filename with ".\" */
-			PyOS_snprintf(pathbuf, sizeof(pathbuf),
-				      ".\\%-.13s", pathname);
-			pathname = pathbuf;
-		}
-		hDLL = LoadLibrary(pathname);
-		if (hDLL < HINSTANCE_ERROR){
-			char errBuf[256];
-			PyOS_snprintf(errBuf, sizeof(errBuf),
-				      "DLL load failed with error code %d",
-				      hDLL);
-			PyErr_SetString(PyExc_ImportError, errBuf);
-			return NULL;
-		}
-		p = GetProcAddress(hDLL, funcname);
-	}
-#endif /* MS_WIN16 */
 
 	return p;
 }
diff --git a/Python/errors.c b/Python/errors.c
index 265e5bb..f744ad4 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -15,7 +15,7 @@
 #endif
 #endif
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 #include "windows.h"
 #include "winbase.h"
 #endif
@@ -267,7 +267,7 @@
 #ifdef PLAN9
 	char errbuf[ERRMAX];
 #endif
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	char *s_buf = NULL;
 #endif
 #ifdef EINTR
@@ -281,7 +281,7 @@
 	if (i == 0)
 		s = "Error"; /* Sometimes errno didn't get set */
 	else
-#ifndef MS_WIN32
+#ifndef MS_WINDOWS
 		s = strerror(i);
 #else
 	{
@@ -322,7 +322,7 @@
 		PyErr_SetObject(exc, v);
 		Py_DECREF(v);
 	}
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	LocalFree(s_buf);
 #endif
 	return NULL;
diff --git a/Python/frozenmain.c b/Python/frozenmain.c
index 21724ef..397f046 100644
--- a/Python/frozenmain.c
+++ b/Python/frozenmain.c
@@ -3,7 +3,7 @@
 
 #include "Python.h"
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 extern void PyWinFreeze_ExeInit(void);
 extern void PyWinFreeze_ExeTerm(void);
 extern int PyInitFrozenExtensions(void);
@@ -32,12 +32,12 @@
 		setbuf(stderr, (char *)NULL);
 	}
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	PyInitFrozenExtensions();
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 	Py_SetProgramName(argv[0]);
 	Py_Initialize();
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	PyWinFreeze_ExeInit();
 #endif
 
@@ -60,7 +60,7 @@
 	if (inspect && isatty((int)fileno(stdin)))
 		sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	PyWinFreeze_ExeTerm();
 #endif
 	Py_Finalize();
diff --git a/Python/import.c b/Python/import.c
index 9efd3ea..6fd05d8 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -88,7 +88,7 @@
 #else
 static const struct filedescr _PyImport_StandardFiletab[] = {
 	{".py", "U", PY_SOURCE},
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	{".pyw", "U", PY_SOURCE},
 #endif
 	{".pyc", "rb", PY_COMPILED},
@@ -548,7 +548,7 @@
 	if (len+2 > buflen)
 		return NULL;
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	/* 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)
@@ -1156,7 +1156,7 @@
 /* First we may need a pile of platform-specific header files; the sequence
  * of #if's here should match the sequence in the body of case_ok().
  */
-#if defined(MS_WIN32) || defined(__CYGWIN__)
+#if defined(MS_WINDOWS) || defined(__CYGWIN__)
 #include <windows.h>
 #ifdef __CYGWIN__
 #include <sys/cygwin.h>
@@ -1189,8 +1189,8 @@
  * match the sequence just above.
  */
 
-/* MS_WIN32 || __CYGWIN__ */
-#if defined(MS_WIN32) || defined(__CYGWIN__)
+/* MS_WINDOWS || __CYGWIN__ */
+#if defined(MS_WINDOWS) || defined(__CYGWIN__)
 	WIN32_FIND_DATA data;
 	HANDLE h;
 #ifdef __CYGWIN__
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 324bc89..63e0e8e 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -17,7 +17,7 @@
 #include <signal.h>
 #endif
 
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 #undef BYTE
 #include "windows.h"
 #endif
@@ -1272,14 +1272,14 @@
 #ifdef macintosh
 	for (;;);
 #endif
-#ifdef MS_WIN32
+#ifdef MS_WINDOWS
 	OutputDebugString("Fatal Python error: ");
 	OutputDebugString(msg);
 	OutputDebugString("\n");
 #ifdef _DEBUG
 	DebugBreak();
 #endif
-#endif /* MS_WIN32 */
+#endif /* MS_WINDOWS */
 	abort();
 }
 
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 66fceca..549bbec 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -687,7 +687,6 @@
   because it is thread-safe.\n\
 "
 )
-#ifndef MS_WIN16
 /* concatenating string here */
 PyDoc_STR(
 "\n\
@@ -737,7 +736,6 @@
 settrace() -- set the global debug tracing function\n\
 "
 )
-#endif /* MS_WIN16 */
 /* end of sys_doc */ ;
 
 PyObject *
