diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index 5862f6c..e732f39 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -341,7 +341,7 @@
 	}
 	nbytes = size * descr->itemsize;
 	/* Check for overflow */
-	if (nbytes / descr->itemsize != size) {
+	if (nbytes / descr->itemsize != (size_t)size) {
 		return PyErr_NoMemory();
 	}
 	op = PyMem_NEW(arrayobject, 1);
@@ -933,7 +933,7 @@
 		return NULL;
 	}
 	if (self->ob_size > 0) {
-		if (fwrite(self->ob_item, self->ob_descr->itemsize,
+		if ((int)fwrite(self->ob_item, self->ob_descr->itemsize,
 			   self->ob_size, fp) != self->ob_size) {
 			PyErr_SetFromErrno(PyExc_IOError);
 			clearerr(fp);
diff --git a/Modules/rgbimgmodule.c b/Modules/rgbimgmodule.c
index 81f9fcb..d2428d1 100644
--- a/Modules/rgbimgmodule.c
+++ b/Modules/rgbimgmodule.c
@@ -163,10 +163,10 @@
 {
 	unsigned char buf[4];
 
-	buf[0] = (val >> 24);
-	buf[1] = (val >> 16);
-	buf[2] = (val >> 8);
-	buf[3] = (val >> 0);
+	buf[0] = (unsigned char) (val >> 24);
+	buf[1] = (unsigned char) (val >> 16);
+	buf[2] = (unsigned char) (val >> 8);
+	buf[3] = (unsigned char) (val >> 0);
 	return fwrite(buf, 4, 1, outf);
 }
 
@@ -314,7 +314,7 @@
 		tablen = ysize * zsize * sizeof(long);
 		starttab = (long *)malloc(tablen);
 		lengthtab = (long *)malloc(tablen);
-		rlebuflen = 1.05 * xsize +10;
+		rlebuflen = (int) (1.05 * xsize +10);
 		rledat = (unsigned char *)malloc(rlebuflen);
 		if (!starttab || !lengthtab || !rledat) {
 			PyErr_NoMemory();
@@ -603,7 +603,7 @@
 
 	starttab = (long *)malloc(tablen);
 	lengthtab = (long *)malloc(tablen);
-	rlebuflen = 1.05 * xsize + 10;
+	rlebuflen = (int) (1.05 * xsize + 10);
 	rlebuf = (unsigned char *)malloc(rlebuflen);
 	lumbuf = (unsigned char *)malloc(xsize * sizeof(long));
 	if (!starttab || !lengthtab || !rlebuf || !lumbuf) {
@@ -714,7 +714,7 @@
 		iptr -= 8;
 		count = (iptr - sptr) / 4;
 		while (count) {
-			todo = count > 126 ? 126 : count;
+			todo = count > 126 ? 126 : (short)count;
 			count -= todo;
 			*optr++ = 0x80 | todo;
 			while (todo > 8) {
@@ -742,10 +742,10 @@
 			iptr += 4;
 		count = (iptr - sptr) / 4;
 		while (count) {
-			todo = count > 126 ? 126 : count;
+			todo = count > 126 ? 126 : (short)count;
 			count -= todo;
-			*optr++ = todo;
-			*optr++ = cc;
+			*optr++ = (unsigned char) todo;
+			*optr++ = (unsigned char) cc;
 		}
 	}
 	*optr++ = 0;
diff --git a/Modules/rotormodule.c b/Modules/rotormodule.c
index 6ead93c..65c1758 100644
--- a/Modules/rotormodule.c
+++ b/Modules/rotormodule.c
@@ -93,12 +93,12 @@
 }
 	
 /* Return the next random number in the range [0.0 .. 1.0) */
-static float
+static double
 r_random(r)
 	Rotorobj *r;
 {
 	int x, y, z;
-	float val, term;
+	double val, term;
 
 	x = r->seed[0];
 	y = r->seed[1];
@@ -116,12 +116,12 @@
 	r->seed[1] = y;
 	r->seed[2] = z;
 
-	term = (float)(
-		(((float)x)/(float)30269.0) + 
-		(((float)y)/(float)30307.0) + 
-		(((float)z)/(float)30323.0)
+	term = (double)(
+		(((double)x)/(double)30269.0) + 
+		(((double)y)/(double)30307.0) + 
+		(((double)z)/(double)30323.0)
 		);
-	val = term - (float)floor((double)term);
+	val = term - (double)floor((double)term);
 
 	if (val >= 1.0)
 		val = 0.0;
@@ -134,7 +134,7 @@
 	Rotorobj *r;
 	short s;
 {
-	return (short)((short)(r_random(r) * (float)s) % s);
+	return (short)((short)(r_random(r) * (double)s) % s);
 }
 
 static void
@@ -340,7 +340,7 @@
 	RTR_e_rotors(r);
 	RTR_d_rotors(r);
 	for (i = 0; i < r->rotors; i++) {
-		r->positions[i] = r_rand(r,r->size);
+		r->positions[i] = (unsigned char) r_rand(r,r->size);
 		r->advances[i] = (1+(2*(r_rand(r,r->size/2))));
 		RTR_permute_rotor(r,
 				  &(r->e_rotor[(i*r->size)]),
diff --git a/Modules/structmodule.c b/Modules/structmodule.c
index f0fb491..dbba9b4 100644
--- a/Modules/structmodule.c
+++ b/Modules/structmodule.c
@@ -179,7 +179,7 @@
 	p += incr;
 
 	/* Second byte */
-	*p = ((e&1)<<7) | (fbits>>16);
+	*p = (char) (((e&1)<<7) | (fbits>>16));
 	p += incr;
 
 	/* Third byte */
@@ -255,7 +255,7 @@
 	p += incr;
 
 	/* Second byte */
-	*p = ((e&0xF)<<4) | (fhi>>24);
+	*p = (char) (((e&0xF)<<4) | (fhi>>24));
 	p += incr;
 
 	/* Third byte */
@@ -508,7 +508,7 @@
 	long x;
 	if (get_long(v, &x) < 0)
 		return -1;
-	*p = x;
+	*p = (char)x;
 	return 0;
 }
 
@@ -536,7 +536,7 @@
 	long x;
 	if (get_long(v, &x) < 0)
 		return -1;
-	* (short *)p = x;
+	* (short *)p = (short)x;
 	return 0;
 }
 
@@ -700,7 +700,7 @@
 		return -1;
 	i = f->size;
 	do {
-		p[--i] = x;
+		p[--i] = (char)x;
 		x >>= 8;
 	} while (i > 0);
 	return 0;
@@ -718,7 +718,7 @@
 		return -1;
 	i = f->size;
 	do {
-		p[--i] = x;
+		p[--i] = (char)x;
 		x >>= 8;
 	} while (i > 0);
 	return 0;
@@ -830,7 +830,7 @@
 		return -1;
 	i = f->size;
 	do {
-		*p++ = x;
+		*p++ = (char)x;
 		x >>= 8;
 	} while (--i > 0);
 	return 0;
@@ -848,7 +848,7 @@
 		return -1;
 	i = f->size;
 	do {
-		*p++ = x;
+		*p++ = (char)x;
 		x >>= 8;
 	} while (--i > 0);
 	return 0;
diff --git a/Python/errors.c b/Python/errors.c
index 526b61b..c7e9528 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -84,8 +84,10 @@
 #endif /* macintosh */
 
 #ifndef __STDC__
+#ifndef MS_WINDOWS
 extern char *strerror PROTO((int));
 #endif
+#endif
 
 /* Last exception stored by err_setval() */
 
