Tweaks to keep the Microsoft compiler quier.
diff --git a/Modules/audioop.c b/Modules/audioop.c
index 0e95c91..003f8af 100644
--- a/Modules/audioop.c
+++ b/Modules/audioop.c
@@ -255,7 +255,7 @@
 	signed char *cp;
 	int len, size, val = 0;
 	int i;
-	float avg = 0.0;
+	double avg = 0.0;
 
 	if ( !PyArg_Parse(args, "(s#i)", &cp, &len, &size) )
 		return 0;
@@ -272,7 +272,7 @@
 	if ( len == 0 )
 		val = 0;
 	else
-		val = (int)(avg / (float)(len/size));
+		val = (int)(avg / (double)(len/size));
 	return PyInt_FromLong(val);
 }
 
@@ -284,7 +284,7 @@
 	signed char *cp;
 	int len, size, val = 0;
 	int i;
-	float sum_squares = 0.0;
+	double sum_squares = 0.0;
 
 	if ( !PyArg_Parse(args, "(s#i)", &cp, &len, &size) )
 		return 0;
@@ -296,12 +296,12 @@
 		if ( size == 1 )      val = (int)*CHARP(cp, i);
 		else if ( size == 2 ) val = (int)*SHORTP(cp, i);
 		else if ( size == 4 ) val = (int)*LONGP(cp, i);
-		sum_squares += (float)val*(float)val;
+		sum_squares += (double)val*(double)val;
 	}
 	if ( len == 0 )
 		val = 0;
 	else
-		val = (int)sqrt(sum_squares / (float)(len/size));
+		val = (int)sqrt(sum_squares / (double)(len/size));
 	return PyInt_FromLong(val);
 }
 
@@ -498,7 +498,7 @@
 	int len, size, val = 0, prevval = 0, prevextremevalid = 0,
 		prevextreme = 0;
 	int i;
-	float avg = 0.0;
+	double avg = 0.0;
 	int diff, prevdiff, extremediff, nextreme = 0;
 
 	if ( !PyArg_Parse(args, "(s#i)", &cp, &len, &size) )
@@ -544,7 +544,7 @@
 	if ( nextreme == 0 )
 		val = 0;
 	else
-		val = (int)(avg / (float)nextreme);
+		val = (int)(avg / (double)nextreme);
 	return PyInt_FromLong(val);
 }
 
diff --git a/Modules/imageop.c b/Modules/imageop.c
index 0f8e0ed..007c83e 100644
--- a/Modules/imageop.c
+++ b/Modules/imageop.c
@@ -572,7 +572,7 @@
 		b = (int) (((value >> 16) & 0xff) / 255. * 3. + .5);
 #endif
 		nvalue = (r<<5) | (b<<3) | g;
-		*ncp++ = nvalue;
+		*ncp++ = (unsigned char)nvalue;
 	}
 	return rv;
 }
@@ -653,7 +653,7 @@
 		b = (value >> 16) & 0xff;
 		nvalue = (int)(0.30*r + 0.59*g + 0.11*b);
 		if ( nvalue > 255 ) nvalue = 255;
-		*ncp++ = nvalue;
+		*ncp++ = (unsigned char)nvalue;
 	}
 	return rv;
 }
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 7ca697a..e62be1f 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -31,9 +31,15 @@
 
 /* Signal module -- many thanks to Lance Ellinghaus */
 
+/* XXX Signals should be recorded per thread, now we have thread state. */
+
 #include "Python.h"
 #include "intrcheck.h"
 
+#ifdef MS_WIN32
+#include <process.h>
+#endif
+
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
@@ -119,7 +125,8 @@
 #endif
 		is_tripped++;
 		Handlers[sig_num].tripped = 1;
-		Py_AddPendingCall((int (*) Py_PROTO((ANY *)))PyErr_CheckSignals, NULL);
+		Py_AddPendingCall(
+			(int (*) Py_PROTO((ANY *)))PyErr_CheckSignals, NULL);
 #ifdef WITH_THREAD
 	}
 #endif
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 27eb313..7b73b63 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -417,7 +417,7 @@
 		if (setipaddr(host, addr) < 0)
 			return 0;
 		addr->sin_family = AF_INET;
-		addr->sin_port = htons(port);
+		addr->sin_port = htons((short)port);
 		*addr_ret = (struct sockaddr *) addr;
 		*len_ret = sizeof *addr;
 		return 1;
@@ -516,7 +516,9 @@
 BUILD_FUNC_DEF_2(PySocketSock_setblocking,PySocketSockObject*,s,PyObject*,args)
 {
 	int block;
+#ifndef MS_WINDOWS
 	int delay_flag;
+#endif
 	if (!PyArg_GetInt(args, &block))
 		return NULL;
 	Py_BEGIN_ALLOW_THREADS
diff --git a/Python/compile.c b/Python/compile.c
index 7d9a3a8..21629ab 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -182,6 +182,9 @@
 	(hashfunc)code_hash, /*tp_hash*/
 };
 
+#define NAME_CHARS \
+	"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"
+
 codeobject *
 newcodeobject(argcount, nlocals, stacksize, flags,
 	      code, consts, names, varnames, filename, name,
@@ -237,7 +240,7 @@
 		if (!is_stringobject(v))
 			continue;
 		p = getstringvalue(v);
-		if (strspn(p, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz")
+		if ((int)strspn(p, NAME_CHARS)
 		    != getstringsize(v))
 			continue;
 		PyString_InternInPlace(&PyTuple_GET_ITEM(consts, i));
diff --git a/Python/importdl.c b/Python/importdl.c
index 2abef33..02f87dc 100644
--- a/Python/importdl.c
+++ b/Python/importdl.c
@@ -503,13 +503,16 @@
                         perror(funcname);
 	}
 #endif /* hpux */
+#ifdef USE_SHLIB
   got_it:
+#endif
 	if (p == NULL) {
 		err_setstr(ImportError,
 		   "dynamic module does not define init function");
 		return NULL;
 	}
 	(*p)();
+	/* XXX Need check for err_occurred() here */
 
 	m = dictlookup(import_modules, name);
 	if (m == NULL) {
diff --git a/Python/mystrtoul.c b/Python/mystrtoul.c
index a869b46..ed0e526 100644
--- a/Python/mystrtoul.c
+++ b/Python/mystrtoul.c
@@ -141,7 +141,7 @@
 	*ptr = str;
     if (ovf)
     {
-	result = ~0;
+	result = (unsigned long) ~0L;
 	errno = ERANGE;
     }
     return result;
diff --git a/Python/structmember.c b/Python/structmember.c
index 7e24fa5..f5cca97 100644
--- a/Python/structmember.c
+++ b/Python/structmember.c
@@ -186,7 +186,7 @@
 					err_badarg();
 					return -1;
 				}
-				*(char*)addr = getintvalue(v);
+				*(char*)addr = (char) getintvalue(v);
 				break;
 			case T_SHORT:
 			case T_USHORT:
@@ -194,7 +194,7 @@
 					err_badarg();
 					return -1;
 				}
-				*(short*)addr = getintvalue(v);
+				*(short*)addr = (short) getintvalue(v);
 				break;
 			case T_UINT:
 			case T_INT:
@@ -202,7 +202,7 @@
 					err_badarg();
 					return -1;
 				}
-				*(int*)addr = getintvalue(v);
+				*(int*)addr = (int) getintvalue(v);
 				break;
 			case T_LONG:
 				if (!is_intobject(v)) {
@@ -223,9 +223,10 @@
 				break;
 			case T_FLOAT:
 				if (is_intobject(v))
-					*(float*)addr = getintvalue(v);
+					*(float*)addr = (float) getintvalue(v);
 				else if (is_floatobject(v))
-					*(float*)addr = getfloatvalue(v);
+					*(float*)addr =
+						(float) getfloatvalue(v);
 				else {
 					err_badarg();
 					return -1;
@@ -233,7 +234,8 @@
 				break;
 			case T_DOUBLE:
 				if (is_intobject(v))
-					*(double*)addr = getintvalue(v);
+					*(double*)addr =
+						(double) getintvalue(v);
 				else if (is_floatobject(v))
 					*(double*)addr = getfloatvalue(v);
 				else {