diff --git a/Modules/regexmodule.c b/Modules/regexmodule.c
index b9f75a0..9b40ab5 100644
--- a/Modules/regexmodule.c
+++ b/Modules/regexmodule.c
@@ -35,7 +35,7 @@
 #include "modsupport.h"
 
 #include "regexpr.h"
-#include "ctype.h"
+#include <ctype.h>
 
 static object *RegexError;	/* Exception */	
 
@@ -433,7 +433,7 @@
 					++o; /* eat the '>' */
 					break;
 				}
-				if (!isalnum(*o) && *o != '_') {
+				if (!isalnum(Py_CHARMASK(*o)) && *o != '_') {
 					o = backtrack;
 					break;
 				}
diff --git a/Modules/stropmodule.c b/Modules/stropmodule.c
index 326dfb8..90ee4fd 100644
--- a/Modules/stropmodule.c
+++ b/Modules/stropmodule.c
@@ -41,7 +41,6 @@
 {
 	int len, i, j, err;
 	char *s;
-	char c;
 	object *list, *item;
 
 	if (!getargs(args, "s#", &s, &len))
@@ -52,13 +51,11 @@
 
 	i = 0;
 	while (i < len) {
-		while (i < len &&
-		       ((c = s[i]), isspace(c))) {
+		while (i < len && isspace(Py_CHARMASK(s[i]))) {
 			i = i+1;
 		}
 		j = i;
-		while (i < len &&
-		       !((c = s[i]), isspace(c))) {
+		while (i < len && isspace(Py_CHARMASK(s[i]))) {
 			i = i+1;
 		}
 		if (j < i) {
@@ -269,20 +266,19 @@
 {
 	char *s;
 	int len, i, j;
-	char c;
 
 	if (!getargs(args, "s#", &s, &len))
 		return NULL;
 
 	i = 0;
-	while (i < len && ((c = s[i]), isspace(c))) {
+	while (i < len && isspace(Py_CHARMASK(s[i]))) {
 		i++;
 	}
 
 	j = len;
 	do {
 		j--;
-	} while (j >= i &&  ((c = s[j]), isspace(c)));
+	} while (j >= i && isspace(Py_CHARMASK(s[i])));
 	j++;
 
 	if (i == 0 && j == len) {
@@ -312,7 +308,7 @@
 	s_new = getstringvalue(new);
 	changed = 0;
 	for (i = 0; i < n; i++) {
-		char c = *s++;
+		int c = Py_CHARMASK(*s++);
 		if (isupper(c)) {
 			changed = 1;
 			*s_new = tolower(c);
@@ -347,7 +343,7 @@
 	s_new = getstringvalue(new);
 	changed = 0;
 	for (i = 0; i < n; i++) {
-		char c = *s++;
+		int c = Py_CHARMASK(*s++);
 		if (islower(c)) {
 			changed = 1;
 			*s_new = toupper(c);
@@ -382,7 +378,7 @@
 	s_new = getstringvalue(new);
 	changed = 0;
 	for (i = 0; i < n; i++) {
-		char c = *s++;
+		int c = Py_CHARMASK(*s++);
 		if (islower(c)) {
 			changed = 1;
 			*s_new = toupper(c);
@@ -530,7 +526,7 @@
 
 	/* Create 'whitespace' object */
 	n = 0;
-	for (c = 1; c < 256; c++) {
+	for (c = 0; c < 256; c++) {
 		if (isspace(c))
 			buf[n++] = c;
 	}
@@ -541,7 +537,7 @@
 	}
 	/* Create 'lowercase' object */
 	n = 0;
-	for (c = 1; c < 256; c++) {
+	for (c = 0; c < 256; c++) {
 		if (islower(c))
 			buf[n++] = c;
 	}
@@ -553,7 +549,7 @@
 
 	/* Create 'uppercase' object */
 	n = 0;
-	for (c = 1; c < 256; c++) {
+	for (c = 0; c < 256; c++) {
 		if (isupper(c))
 			buf[n++] = c;
 	}
diff --git a/Python/ceval.c b/Python/ceval.c
index 48fce5b..411e7f3 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -753,7 +753,8 @@
 				/* XXX move into writeobject() ? */
 				char *s = getstringvalue(v);
 				int len = getstringsize(v);
-				if (len > 0 && isspace(s[len-1]) &&
+				if (len > 0 &&
+				    isspace(Py_CHARMASK(s[len-1])) &&
 				    s[len-1] != ' ')
 					softspace(w, 0);
 			}
diff --git a/Python/compile.c b/Python/compile.c
index 45bed39..cb25da2 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -608,12 +608,12 @@
 			*p++ = c;
 			break;
 		case 'x':
-			if (isxdigit(*s)) {
+			if (isxdigit(Py_CHARMASK(*s))) {
 				sscanf(s, "%x", &c);
 				*p++ = c;
 				do {
 					s++;
-				} while (isxdigit(*s));
+				} while (isxdigit(Py_CHARMASK(*s)));
 				break;
 			}
 		/* FALLTHROUGH */
diff --git a/Python/mystrtoul.c b/Python/mystrtoul.c
index e7c0a57..a646283 100644
--- a/Python/mystrtoul.c
+++ b/Python/mystrtoul.c
@@ -26,6 +26,14 @@
 #include "config.h"
 #endif
 
+/* Convert a possibly signed character to a nonnegative int */
+/* XXX This assumes characters are 8 bits wide */
+#ifdef __CHAR_UNSIGNED__
+#define Py_CHARMASK(c)		(c)
+#else
+#define Py_CHARMASK(c)		((c) & 0xff)
+#endif
+
 #include "rename2.h"
 
 /* strtol and strtoul, renamed to avoid conflicts */
@@ -70,7 +78,7 @@
     }
 
 /* skip leading white space */
-    while (*str && isspace(*str))
+    while (*str && isspace(Py_CHARMASK(*str)))
 	str++;
 
 /* check for leading 0 or 0x for auto-base or base 16 */
@@ -99,7 +107,7 @@
     }
 
 /* do the conversion */
-    while (c = *str)
+    while (c = Py_CHARMASK(*str))
     {
 	if (isdigit(c) && c - '0' < base)
 	    c -= '0';
@@ -143,7 +151,7 @@
 	long result;
 	char sign;
 	
-	while (*str && isspace(*str))
+	while (*str && isspace(Py_CHARMASK(*str)))
 		str++;
 	
 	sign = *str;
