diff --git a/Modules/cgensupport.c b/Modules/cgensupport.c
index d8a6014..fd2bad6 100644
--- a/Modules/cgensupport.c
+++ b/Modules/cgensupport.c
@@ -93,7 +93,7 @@
 	long x;
 	if (!getilongarg(args, nargs, i, &x))
 		return 0;
-	*p_arg = x;
+	*p_arg = (short) x;
 	return 1;
 }
 
@@ -129,15 +129,15 @@
 		/* Fall through to error return at end of function */
 	}
 	else if (is_floatobject(v)) {
-		*p_arg = GETFLOATVALUE((floatobject *)v);
+		*p_arg = (float) GETFLOATVALUE((floatobject *)v);
 		return 1;
 	}
 	else if (is_intobject(v)) {
-		*p_arg = GETINTVALUE((intobject *)v);
+		*p_arg = (float) GETINTVALUE((intobject *)v);
 		return 1;
 	}
 	else if (is_longobject(v)) {
-		*p_arg = dgetlongvalue(v);
+		*p_arg = (float) dgetlongvalue(v);
 		return 1;
 	}
 	return err_badarg();
@@ -221,7 +221,7 @@
 	long x;
 	if (!getilongarraysize(args, nargs, i, &x))
 		return 0;
-	*p_arg = x;
+	*p_arg = (short) x;
 	return 1;
 }
 
@@ -287,7 +287,7 @@
 			if (!is_intobject(w)) {
 				return err_badarg();
 			}
-			p_arg[i] = getintvalue(w);
+			p_arg[i] = (short) getintvalue(w);
 		}
 		return 1;
 	}
@@ -300,7 +300,7 @@
 			if (!is_intobject(w)) {
 				return err_badarg();
 			}
-			p_arg[i] = getintvalue(w);
+			p_arg[i] = (short) getintvalue(w);
 		}
 		return 1;
 	}
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index cee167c..da76f18 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -42,6 +42,8 @@
 
 #include "mymath.h"
 
+#include <ctype.h>
+
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
@@ -233,7 +235,7 @@
 		err_setstr(ValueError, "chr() arg not in range(256)");
 		return NULL;
 	}
-	s[0] = x;
+	s[0] = (char)x;
 	return newsizedstringobject(s, 1);
 }
 
@@ -301,7 +303,7 @@
 	object *args;
 {
 	object *r, *i, *tmp;
-	number_methods *nbr, *nbi;
+	number_methods *nbr, *nbi = NULL;
 	Py_complex cr, ci;
 	int own_r = 0;
 
@@ -484,7 +486,7 @@
 		return NULL;
 	}
 	str = getstringvalue(cmd);
-	if (strlen(str) != getstringsize(cmd)) {
+	if ((int)strlen(str) != getstringsize(cmd)) {
 		err_setstr(ValueError,
 			   "embedded '\\0' in string arg");
 		return NULL;
diff --git a/Python/cgensupport.c b/Python/cgensupport.c
index d8a6014..fd2bad6 100644
--- a/Python/cgensupport.c
+++ b/Python/cgensupport.c
@@ -93,7 +93,7 @@
 	long x;
 	if (!getilongarg(args, nargs, i, &x))
 		return 0;
-	*p_arg = x;
+	*p_arg = (short) x;
 	return 1;
 }
 
@@ -129,15 +129,15 @@
 		/* Fall through to error return at end of function */
 	}
 	else if (is_floatobject(v)) {
-		*p_arg = GETFLOATVALUE((floatobject *)v);
+		*p_arg = (float) GETFLOATVALUE((floatobject *)v);
 		return 1;
 	}
 	else if (is_intobject(v)) {
-		*p_arg = GETINTVALUE((intobject *)v);
+		*p_arg = (float) GETINTVALUE((intobject *)v);
 		return 1;
 	}
 	else if (is_longobject(v)) {
-		*p_arg = dgetlongvalue(v);
+		*p_arg = (float) dgetlongvalue(v);
 		return 1;
 	}
 	return err_badarg();
@@ -221,7 +221,7 @@
 	long x;
 	if (!getilongarraysize(args, nargs, i, &x))
 		return 0;
-	*p_arg = x;
+	*p_arg = (short) x;
 	return 1;
 }
 
@@ -287,7 +287,7 @@
 			if (!is_intobject(w)) {
 				return err_badarg();
 			}
-			p_arg[i] = getintvalue(w);
+			p_arg[i] = (short) getintvalue(w);
 		}
 		return 1;
 	}
@@ -300,7 +300,7 @@
 			if (!is_intobject(w)) {
 				return err_badarg();
 			}
-			p_arg[i] = getintvalue(w);
+			p_arg[i] = (short) getintvalue(w);
 		}
 		return 1;
 	}
diff --git a/Python/getargs.c b/Python/getargs.c
index 506cd38..4ac934d 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -453,7 +453,7 @@
 			if (ival == -1 && err_occurred())
 				return "integer<b>";
 			else
-				*p = ival;
+				*p = (char) ival;
 			break;
 		}
 	
@@ -464,7 +464,7 @@
 			if (ival == -1 && err_occurred())
 				return "integer<h>";
 			else
-				*p = ival;
+				*p = (short) ival;
 			break;
 		}
 	
@@ -497,7 +497,7 @@
 			if (err_occurred())
 				return "float<f>";
 			else
-				*p = dval;
+				*p = (float) dval;
 			break;
 		}
 	
@@ -548,7 +548,7 @@
 				*q = getstringsize(arg);
 				format++;
 			}
-			else if (strlen(*p) != getstringsize(arg))
+			else if ((int)strlen(*p) != getstringsize(arg))
 				return "string without null bytes";
 			break;
 		}
@@ -571,7 +571,7 @@
 				format++;
 			}
 			else if (*p != NULL &&
-				 strlen(*p) != getstringsize(arg))
+				 (int)strlen(*p) != getstringsize(arg))
 				return "None or string without null bytes";
 			break;
 		}
diff --git a/Python/import.c b/Python/import.c
index 06350b7..8dadc0e 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -436,6 +436,7 @@
 	FILE *fp = NULL;
 
 #ifdef MS_COREDLL
+	extern FILE *PyWin_FindRegisteredModule();
 	if ((fp=PyWin_FindRegisteredModule(name, &fdp, buf, buflen))!=NULL) {
 		*p_fp = fp;
 		return fdp;
@@ -460,7 +461,7 @@
 		if (len + 2 + namelen + import_maxsuffixsize >= buflen)
 			continue; /* Too long */
 		strcpy(buf, getstringvalue(v));
-		if (strlen(buf) != len)
+		if ((int)strlen(buf) != len)
 			continue; /* v contains '\0' */
 #ifdef macintosh
 		if ( PyMac_FindResourceModule(name, buf) ) {
@@ -740,10 +741,10 @@
 
 	if (!newgetargs(args, ""))
 		return NULL;
-	buf[0] = (MAGIC >>  0) & 0xff;
-	buf[1] = (MAGIC >>  8) & 0xff;
-	buf[2] = (MAGIC >> 16) & 0xff;
-	buf[3] = (MAGIC >> 24) & 0xff;
+	buf[0] = (char) ((MAGIC >>  0) & 0xff);
+	buf[1] = (char) ((MAGIC >>  8) & 0xff);
+	buf[2] = (char) ((MAGIC >> 16) & 0xff);
+	buf[3] = (char) ((MAGIC >> 24) & 0xff);
 
 	return newsizedstringobject(buf, 4);
 }
diff --git a/Python/traceback.c b/Python/traceback.c
index 3f80ef5..f9b840e 100644
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -196,7 +196,7 @@
 					if (len + 1 + taillen >= MAXPATHLEN)
 						continue; /* Too long */
 					strcpy(namebuf, getstringvalue(v));
-					if (strlen(namebuf) != len)
+					if ((int)strlen(namebuf) != len)
 						continue; /* v contains '\0' */
 					if (len > 0 && namebuf[len-1] != SEP)
 						namebuf[len++] = SEP;
