diff --git a/Python/ceval.c b/Python/ceval.c
index 78196ba..e153432 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2876,7 +2876,7 @@
 	}
 	else {
 		char *s = PyString_AsString(prog);
-		if ((int)strlen(s) != PyString_Size(prog)) {
+		if (strlen(s) != (size_t)PyString_Size(prog)) {
 			PyErr_SetString(PyExc_ValueError,
 					"embedded '\\0' in exec string");
 			return -1;
diff --git a/Python/codecs.c b/Python/codecs.c
index 5e01cca..ceff376 100644
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -83,11 +83,16 @@
 PyObject *normalizestring(const char *string)
 {
     register int i;
-    int len = strlen(string);
+    size_t len = strlen(string);
     char *p;
     PyObject *v;
     
-    v = PyString_FromStringAndSize(NULL, len);
+	if (len > INT_MAX) {
+		PyErr_SetString(PyExc_OverflowError, "string is too large");
+		return NULL;
+	}
+	
+    v = PyString_FromStringAndSize(NULL, (int)len);
     if (v == NULL)
 	return NULL;
     p = PyString_AS_STRING(v);
diff --git a/Python/compile.c b/Python/compile.c
index a387317..4373422 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -265,8 +265,8 @@
 		if (!PyString_Check(v))
 			continue;
 		p = PyString_AsString(v);
-		if ((int)strspn(p, NAME_CHARS)
-		    != PyString_Size(v))
+		if (strspn(p, NAME_CHARS)
+		    != (size_t)PyString_Size(v))
 			continue;
 		PyString_InternInPlace(&PyTuple_GET_ITEM(consts, i));
 	}
@@ -340,7 +340,7 @@
 	PyObject *exc;
 	char *msg;
 {
-	int n = strlen(msg);
+	size_t n = strlen(msg);
 	PyObject *v;
 	char buffer[30];
 	char *s;
@@ -720,12 +720,12 @@
 	struct compiling *c;
 	char *name;
 	char *buffer;
-	int maxlen;
+	size_t maxlen;
 {
 	/* Name mangling: __private becomes _classname__private.
 	   This is independent from how the name is used. */
 	char *p;
-	int nlen, plen;
+	size_t nlen, plen;
 	nlen = strlen(name);
 	if (nlen+2 >= maxlen)
 		return 0; /* Don't mangle __extremely_long_names */
@@ -761,7 +761,7 @@
 	char buffer[256];
 	if (name != NULL && name[0] == '_' && name[1] == '_' &&
 	    c->c_private != NULL &&
-	    com_mangle(c, name, buffer, (int)sizeof(buffer)))
+	    com_mangle(c, name, buffer, sizeof(buffer)))
 		name = buffer;
 #endif
 	if (name == NULL || (v = PyString_InternFromString(name)) == NULL) {
@@ -883,7 +883,7 @@
 	char *s;
 {
 	PyObject *v;
-	int len;
+	size_t len;
 	char *buf;
 	char *p;
 	char *end;
@@ -908,6 +908,10 @@
 	}
 	s++;
 	len = strlen(s);
+	if (len > INT_MAX) {
+		PyErr_SetString(PyExc_OverflowError, "string to parse is too long");
+		return NULL;
+	}
 	if (s[--len] != quote) {
 		PyErr_BadInternalCall();
 		return NULL;
@@ -2201,7 +2205,7 @@
 		char buffer[256];
 		if (s != NULL && s[0] == '_' && s[1] == '_' &&
 		    c->c_private != NULL &&
-		    com_mangle(c, s, buffer, (int)sizeof(buffer)))
+		    com_mangle(c, s, buffer, sizeof(buffer)))
 			s = buffer;
 #endif
 		if (PyDict_GetItemString(c->c_locals, s) != NULL) {
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index 08a2a89..7506c41 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -104,7 +104,7 @@
 					"DLL load failed with error code %d",
 					errorCode);
 			} else {
-				int len;
+				size_t len;
 				/* For some reason a \r\n
 				   is appended to the text */
 				if (theLength >= 2 &&
diff --git a/Python/getcwd.c b/Python/getcwd.c
index e720c99..7005869 100644
--- a/Python/getcwd.c
+++ b/Python/getcwd.c
@@ -62,7 +62,7 @@
 		return NULL;
 	}
 	ret = getwd(localbuf);
-	if (ret != NULL && strlen(localbuf) >= size) {
+	if (ret != NULL && strlen(localbuf) >= (size_t)size) {
 		errno = ERANGE;
 		return NULL;
 	}
diff --git a/Python/modsupport.c b/Python/modsupport.c
index 7b40286..13737f1 100644
--- a/Python/modsupport.c
+++ b/Python/modsupport.c
@@ -355,8 +355,15 @@
 				Py_INCREF(v);
 			}
 			else {
-				if (n < 0)
-					n = strlen(str);
+				if (n < 0) {
+					size_t m = strlen(str);
+					if (m > INT_MAX) {
+						PyErr_SetString(PyExc_OverflowError,
+							"string too long for Python string");
+						return NULL;
+					}
+					n = (int)m;
+				}
 				v = PyString_FromStringAndSize(str, n);
 			}
 			return v;
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 6219454..843df8d 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -504,7 +504,7 @@
 	Py_XDECREF(v);
 #ifdef MS_COREDLL
 	PyDict_SetItemString(sysdict, "dllhandle",
-			     v = PyInt_FromLong((int)PyWin_DLLhModule));
+			     v = PyLong_FromVoidPtr(PyWin_DLLhModule));
 	Py_XDECREF(v);
 	PyDict_SetItemString(sysdict, "winver",
 			     v = PyString_FromString(PyWin_DLLVersionString));
diff --git a/Python/thread_nt.h b/Python/thread_nt.h
index c8ed6cd..9e82a94 100644
--- a/Python/thread_nt.h
+++ b/Python/thread_nt.h
@@ -101,6 +101,9 @@
 	return mutex->hevent != NULL ;	/* TRUE if the mutex is created */
 }
 
+#ifdef InterlockedCompareExchange
+#undef InterlockedCompareExchange
+#endif
 #define InterlockedCompareExchange(dest,exchange,comperand) (ixchg((dest), (exchange), (comperand)))
 
 VOID DeleteNonRecursiveMutex(PNRMUTEX mutex)
@@ -179,7 +182,7 @@
  */
 int PyThread_start_new_thread(void (*func)(void *), void *arg)
 {
-	long rv;
+	INT_PTR rv;
 	int success = 0;
 
 	dprintf(("%ld: PyThread_start_new_thread called\n", PyThread_get_thread_ident()));
@@ -190,7 +193,7 @@
  
 	if (rv != -1) {
 		success = 1;
-		dprintf(("%ld: PyThread_start_new_thread succeeded: %ld\n", PyThread_get_thread_ident(), rv));
+		dprintf(("%ld: PyThread_start_new_thread succeeded: %p\n", PyThread_get_thread_ident(), rv));
 	}
 
 	return success;
diff --git a/Python/traceback.c b/Python/traceback.c
index 0b8157d..d63aef5 100644
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -166,7 +166,7 @@
 		path = PySys_GetObject("path");
 		if (path != NULL && PyList_Check(path)) {
 			int npath = PyList_Size(path);
-			int taillen = strlen(tail);
+			size_t taillen = strlen(tail);
 			char namebuf[MAXPATHLEN+1];
 			for (i = 0; i < npath; i++) {
 				PyObject *v = PyList_GetItem(path, i);
@@ -175,12 +175,12 @@
 					break;
 				}
 				if (PyString_Check(v)) {
-					int len;
+					size_t len;
 					len = PyString_Size(v);
 					if (len + 1 + taillen >= MAXPATHLEN)
 						continue; /* Too long */
 					strcpy(namebuf, PyString_AsString(v));
-					if ((int)strlen(namebuf) != len)
+					if (strlen(namebuf) != len)
 						continue; /* v contains '\0' */
 					if (len > 0 && namebuf[len-1] != SEP)
 						namebuf[len++] = SEP;
