diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 648711d..3b4ddaf 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -4,7 +4,256 @@
 
 #include "Python.h"
 
-#include <ctype.h>
+/* Our own locale-independent ctype.h-like macros */
+/* XXX Move into a header file? */
+
+#define FLAG_LOWER  0x01
+#define FLAG_UPPER  0x02
+#define FLAG_ALPHA  (FLAG_LOWER|FLAG_UPPER)
+#define FLAG_DIGIT  0x04
+#define FLAG_ALNUM  (FLAG_ALPHA|FLAG_DIGIT)
+#define FLAG_SPACE  0x08
+#define FLAG_XDIGIT 0x10
+
+static unsigned int ctype_table[256] = {
+    0, /* 0x0 '\x00' */
+    0, /* 0x1 '\x01' */
+    0, /* 0x2 '\x02' */
+    0, /* 0x3 '\x03' */
+    0, /* 0x4 '\x04' */
+    0, /* 0x5 '\x05' */
+    0, /* 0x6 '\x06' */
+    0, /* 0x7 '\x07' */
+    0, /* 0x8 '\x08' */
+    FLAG_SPACE, /* 0x9 '\t' */
+    FLAG_SPACE, /* 0xa '\n' */
+    FLAG_SPACE, /* 0xb '\v' */
+    FLAG_SPACE, /* 0xc '\f' */
+    FLAG_SPACE, /* 0xd '\r' */
+    0, /* 0xe '\x0e' */
+    0, /* 0xf '\x0f' */
+    0, /* 0x10 '\x10' */
+    0, /* 0x11 '\x11' */
+    0, /* 0x12 '\x12' */
+    0, /* 0x13 '\x13' */
+    0, /* 0x14 '\x14' */
+    0, /* 0x15 '\x15' */
+    0, /* 0x16 '\x16' */
+    0, /* 0x17 '\x17' */
+    0, /* 0x18 '\x18' */
+    0, /* 0x19 '\x19' */
+    0, /* 0x1a '\x1a' */
+    0, /* 0x1b '\x1b' */
+    0, /* 0x1c '\x1c' */
+    0, /* 0x1d '\x1d' */
+    0, /* 0x1e '\x1e' */
+    0, /* 0x1f '\x1f' */
+    FLAG_SPACE, /* 0x20 ' ' */
+    0, /* 0x21 '!' */
+    0, /* 0x22 '"' */
+    0, /* 0x23 '#' */
+    0, /* 0x24 '$' */
+    0, /* 0x25 '%' */
+    0, /* 0x26 '&' */
+    0, /* 0x27 "'" */
+    0, /* 0x28 '(' */
+    0, /* 0x29 ')' */
+    0, /* 0x2a '*' */
+    0, /* 0x2b '+' */
+    0, /* 0x2c ',' */
+    0, /* 0x2d '-' */
+    0, /* 0x2e '.' */
+    0, /* 0x2f '/' */
+    FLAG_DIGIT|FLAG_XDIGIT, /* 0x30 '0' */
+    FLAG_DIGIT|FLAG_XDIGIT, /* 0x31 '1' */
+    FLAG_DIGIT|FLAG_XDIGIT, /* 0x32 '2' */
+    FLAG_DIGIT|FLAG_XDIGIT, /* 0x33 '3' */
+    FLAG_DIGIT|FLAG_XDIGIT, /* 0x34 '4' */
+    FLAG_DIGIT|FLAG_XDIGIT, /* 0x35 '5' */
+    FLAG_DIGIT|FLAG_XDIGIT, /* 0x36 '6' */
+    FLAG_DIGIT|FLAG_XDIGIT, /* 0x37 '7' */
+    FLAG_DIGIT|FLAG_XDIGIT, /* 0x38 '8' */
+    FLAG_DIGIT|FLAG_XDIGIT, /* 0x39 '9' */
+    0, /* 0x3a ':' */
+    0, /* 0x3b ';' */
+    0, /* 0x3c '<' */
+    0, /* 0x3d '=' */
+    0, /* 0x3e '>' */
+    0, /* 0x3f '?' */
+    0, /* 0x40 '@' */
+    FLAG_UPPER|FLAG_XDIGIT, /* 0x41 'A' */
+    FLAG_UPPER|FLAG_XDIGIT, /* 0x42 'B' */
+    FLAG_UPPER|FLAG_XDIGIT, /* 0x43 'C' */
+    FLAG_UPPER|FLAG_XDIGIT, /* 0x44 'D' */
+    FLAG_UPPER|FLAG_XDIGIT, /* 0x45 'E' */
+    FLAG_UPPER|FLAG_XDIGIT, /* 0x46 'F' */
+    FLAG_UPPER, /* 0x47 'G' */
+    FLAG_UPPER, /* 0x48 'H' */
+    FLAG_UPPER, /* 0x49 'I' */
+    FLAG_UPPER, /* 0x4a 'J' */
+    FLAG_UPPER, /* 0x4b 'K' */
+    FLAG_UPPER, /* 0x4c 'L' */
+    FLAG_UPPER, /* 0x4d 'M' */
+    FLAG_UPPER, /* 0x4e 'N' */
+    FLAG_UPPER, /* 0x4f 'O' */
+    FLAG_UPPER, /* 0x50 'P' */
+    FLAG_UPPER, /* 0x51 'Q' */
+    FLAG_UPPER, /* 0x52 'R' */
+    FLAG_UPPER, /* 0x53 'S' */
+    FLAG_UPPER, /* 0x54 'T' */
+    FLAG_UPPER, /* 0x55 'U' */
+    FLAG_UPPER, /* 0x56 'V' */
+    FLAG_UPPER, /* 0x57 'W' */
+    FLAG_UPPER, /* 0x58 'X' */
+    FLAG_UPPER, /* 0x59 'Y' */
+    FLAG_UPPER, /* 0x5a 'Z' */
+    0, /* 0x5b '[' */
+    0, /* 0x5c '\\' */
+    0, /* 0x5d ']' */
+    0, /* 0x5e '^' */
+    0, /* 0x5f '_' */
+    0, /* 0x60 '`' */
+    FLAG_LOWER|FLAG_XDIGIT, /* 0x61 'a' */
+    FLAG_LOWER|FLAG_XDIGIT, /* 0x62 'b' */
+    FLAG_LOWER|FLAG_XDIGIT, /* 0x63 'c' */
+    FLAG_LOWER|FLAG_XDIGIT, /* 0x64 'd' */
+    FLAG_LOWER|FLAG_XDIGIT, /* 0x65 'e' */
+    FLAG_LOWER|FLAG_XDIGIT, /* 0x66 'f' */
+    FLAG_LOWER, /* 0x67 'g' */
+    FLAG_LOWER, /* 0x68 'h' */
+    FLAG_LOWER, /* 0x69 'i' */
+    FLAG_LOWER, /* 0x6a 'j' */
+    FLAG_LOWER, /* 0x6b 'k' */
+    FLAG_LOWER, /* 0x6c 'l' */
+    FLAG_LOWER, /* 0x6d 'm' */
+    FLAG_LOWER, /* 0x6e 'n' */
+    FLAG_LOWER, /* 0x6f 'o' */
+    FLAG_LOWER, /* 0x70 'p' */
+    FLAG_LOWER, /* 0x71 'q' */
+    FLAG_LOWER, /* 0x72 'r' */
+    FLAG_LOWER, /* 0x73 's' */
+    FLAG_LOWER, /* 0x74 't' */
+    FLAG_LOWER, /* 0x75 'u' */
+    FLAG_LOWER, /* 0x76 'v' */
+    FLAG_LOWER, /* 0x77 'w' */
+    FLAG_LOWER, /* 0x78 'x' */
+    FLAG_LOWER, /* 0x79 'y' */
+    FLAG_LOWER, /* 0x7a 'z' */
+    0, /* 0x7b '{' */
+    0, /* 0x7c '|' */
+    0, /* 0x7d '}' */
+    0, /* 0x7e '~' */
+    0, /* 0x7f '\x7f' */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+};
+
+#define ISLOWER(c) (ctype_table[Py_CHARMASK(c)] & FLAG_LOWER)
+#define ISUPPER(c) (ctype_table[Py_CHARMASK(c)] & FLAG_UPPER)
+#define ISALPHA(c) (ctype_table[Py_CHARMASK(c)] & FLAG_ALPHA)
+#define ISDIGIT(c) (ctype_table[Py_CHARMASK(c)] & FLAG_DIGIT)
+#define ISXDIGIT(c) (ctype_table[Py_CHARMASK(c)] & FLAG_XDIGIT)
+#define ISALNUM(c) (ctype_table[Py_CHARMASK(c)] & FLAG_ALNUM)
+#define ISSPACE(c) (ctype_table[Py_CHARMASK(c)] & FLAG_SPACE)
+
+#undef islower
+#define islower(c) undefined_islower(c)
+#undef isupper
+#define isupper(c) undefined_isupper(c)
+#undef isalpha
+#define isalpha(c) undefined_isalpha(c)
+#undef isdigit
+#define isdigit(c) undefined_isdigit(c)
+#undef isxdigit
+#define isxdigit(c) undefined_isxdigit(c)
+#undef isalnum
+#define isalnum(c) undefined_isalnum(c)
+#undef isspace
+#define isspace(c) undefined_isspace(c)
+
+static unsigned char ctype_tolower[256] = {
+    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+    0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+    0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+    0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+    0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+    0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+    0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+    0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+    0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+    0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+    0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+    0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+    0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+    0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+    0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+    0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+    0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+    0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+    0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+    0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+    0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+    0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+    0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+    0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+    0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+    0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+    0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+    0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+    0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+};
+
+static unsigned char ctype_toupper[256] = {
+    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+    0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+    0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+    0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+    0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+    0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+    0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+    0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+    0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+    0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+    0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+    0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+    0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+    0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+    0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+    0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+    0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+    0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+    0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+    0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+    0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+    0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+    0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+    0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+    0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+    0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+    0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+    0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+    0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
+};
+
+#define TOLOWER(c) (ctype_tolower[Py_CHARMASK(c)])
+#define TOUPPER(c) (ctype_toupper[Py_CHARMASK(c)])
+
+#undef tolower
+#define tolower(c) undefined_tolower(c)
+#undef toupper
+#define toupper(c) undefined_toupper(c)
 
 #ifdef COUNT_ALLOCS
 int null_strings, one_strings;
@@ -173,7 +422,7 @@
 	for (f = format; *f; f++) {
 		if (*f == '%') {
 			const char* p = f;
-			while (*++f && *f != '%' && !isalpha(Py_CHARMASK(*f)))
+			while (*++f && *f != '%' && !ISALPHA(*f))
 				;
 
 			/* skip the 'l' or 'z' in {%ld, %zd, %lu, %zu} since
@@ -242,15 +491,15 @@
 			/* parse the width.precision part (we're only
 			   interested in the precision value, if any) */
 			n = 0;
-			while (isdigit(Py_CHARMASK(*f)))
+			while (ISDIGIT(*f))
 				n = (n*10) + *f++ - '0';
 			if (*f == '.') {
 				f++;
 				n = 0;
-				while (isdigit(Py_CHARMASK(*f)))
+				while (ISDIGIT(*f))
 					n = (n*10) + *f++ - '0';
 			}
-			while (*f && *f != '%' && !isalpha(Py_CHARMASK(*f)))
+			while (*f && *f != '%' && !ISALPHA(*f))
 				f++;
 			/* handle the long flag, but only for %ld and %lu.
 			   others can be added when necessary. */
@@ -606,23 +855,22 @@
 			*p++ = c;
 			break;
 		case 'x':
-			if (isxdigit(Py_CHARMASK(s[0]))
-			    && isxdigit(Py_CHARMASK(s[1]))) {
+			if (ISXDIGIT(s[0]) && ISXDIGIT(s[1])) {
 				unsigned int x = 0;
 				c = Py_CHARMASK(*s);
 				s++;
-				if (isdigit(c))
+				if (ISDIGIT(c))
 					x = c - '0';
-				else if (islower(c))
+				else if (ISLOWER(c))
 					x = 10 + c - 'a';
 				else
 					x = 10 + c - 'A';
 				x = x << 4;
 				c = Py_CHARMASK(*s);
 				s++;
-				if (isdigit(c))
+				if (ISDIGIT(c))
 					x += c - '0';
-				else if (islower(c))
+				else if (ISLOWER(c))
 					x += 10 + c - 'a';
 				else
 					x += 10 + c - 'A';
@@ -1250,10 +1498,10 @@
 /* Always force the list to the expected size. */
 #define FIX_PREALLOC_SIZE(list) Py_Size(list) = count
 
-#define SKIP_SPACE(s, i, len)    { while (i<len &&  isspace(Py_CHARMASK(s[i]))) i++; }
-#define SKIP_NONSPACE(s, i, len) { while (i<len && !isspace(Py_CHARMASK(s[i]))) i++; }
-#define RSKIP_SPACE(s, i)        { while (i>=0  &&  isspace(Py_CHARMASK(s[i]))) i--; }
-#define RSKIP_NONSPACE(s, i)     { while (i>=0  && !isspace(Py_CHARMASK(s[i]))) i--; }
+#define SKIP_SPACE(s, i, len)    { while (i<len &&  ISSPACE(s[i])) i++; }
+#define SKIP_NONSPACE(s, i, len) { while (i<len && !ISSPACE(s[i])) i++; }
+#define RSKIP_SPACE(s, i)        { while (i>=0  &&  ISSPACE(s[i])) i--; }
+#define RSKIP_NONSPACE(s, i)     { while (i>=0  && !ISSPACE(s[i])) i--; }
 
 Py_LOCAL_INLINE(PyObject *)
 split_whitespace(const char *s, Py_ssize_t len, Py_ssize_t maxsplit)
@@ -1869,7 +2117,7 @@
 
 	i = 0;
 	if (striptype != RIGHTSTRIP) {
-		while (i < len && isspace(Py_CHARMASK(s[i]))) {
+		while (i < len && ISSPACE(s[i])) {
 			i++;
 		}
 	}
@@ -1878,7 +2126,7 @@
 	if (striptype != LEFTSTRIP) {
 		do {
 			j--;
-		} while (j >= i && isspace(Py_CHARMASK(s[j])));
+		} while (j >= i && ISSPACE(s[j]));
 		j++;
 	}
 
@@ -1979,11 +2227,6 @@
 \n\
 Return a copy of the string S converted to lowercase.");
 
-/* _tolower and _toupper are defined by SUSv2, but they're not ISO C */
-#ifndef _tolower
-#define _tolower tolower
-#endif
-
 static PyObject *
 string_lower(PyStringObject *self)
 {
@@ -2001,8 +2244,8 @@
 
 	for (i = 0; i < n; i++) {
 		int c = Py_CHARMASK(s[i]);
-		if (isupper(c))
-			s[i] = _tolower(c);
+		if (ISUPPER(c))
+			s[i] = TOLOWER(c);
 	}
 
 	return newobj;
@@ -2013,10 +2256,6 @@
 \n\
 Return a copy of the string S converted to uppercase.");
 
-#ifndef _toupper
-#define _toupper toupper
-#endif
-
 static PyObject *
 string_upper(PyStringObject *self)
 {
@@ -2034,8 +2273,8 @@
 
 	for (i = 0; i < n; i++) {
 		int c = Py_CHARMASK(s[i]);
-		if (islower(c))
-			s[i] = _toupper(c);
+		if (ISLOWER(c))
+			s[i] = TOUPPER(c);
 	}
 
 	return newobj;
@@ -2061,13 +2300,13 @@
 	s_new = PyString_AsString(newobj);
 	for (i = 0; i < n; i++) {
 		int c = Py_CHARMASK(*s++);
-		if (islower(c)) {
+		if (ISLOWER(c)) {
 			if (!previous_is_cased)
-			    c = toupper(c);
+			    c = TOUPPER(c);
 			previous_is_cased = 1;
-		} else if (isupper(c)) {
+		} else if (ISUPPER(c)) {
 			if (previous_is_cased)
-			    c = tolower(c);
+			    c = TOLOWER(c);
 			previous_is_cased = 1;
 		} else
 			previous_is_cased = 0;
@@ -2095,16 +2334,16 @@
 	s_new = PyString_AsString(newobj);
 	if (0 < n) {
 		int c = Py_CHARMASK(*s++);
-		if (islower(c))
-			*s_new = toupper(c);
+		if (ISLOWER(c))
+			*s_new = TOUPPER(c);
 		else
 			*s_new = c;
 		s_new++;
 	}
 	for (i = 1; i < n; i++) {
 		int c = Py_CHARMASK(*s++);
-		if (isupper(c))
-			*s_new = tolower(c);
+		if (ISUPPER(c))
+			*s_new = TOLOWER(c);
 		else
 			*s_new = c;
 		s_new++;
@@ -2173,11 +2412,11 @@
 	s_new = PyString_AsString(newobj);
 	for (i = 0; i < n; i++) {
 		int c = Py_CHARMASK(*s++);
-		if (islower(c)) {
-			*s_new = toupper(c);
+		if (ISLOWER(c)) {
+			*s_new = TOUPPER(c);
 		}
-		else if (isupper(c)) {
-			*s_new = tolower(c);
+		else if (ISUPPER(c)) {
+			*s_new = TOLOWER(c);
 		}
 		else
 			*s_new = c;
@@ -3386,7 +3625,7 @@
 
     /* Shortcut for single character strings */
     if (PyString_GET_SIZE(self) == 1 &&
-	isspace(*p))
+	ISSPACE(*p))
 	return PyBool_FromLong(1);
 
     /* Special case for empty strings */
@@ -3395,7 +3634,7 @@
 
     e = p + PyString_GET_SIZE(self);
     for (; p < e; p++) {
-	if (!isspace(*p))
+	if (!ISSPACE(*p))
 	    return PyBool_FromLong(0);
     }
     return PyBool_FromLong(1);
@@ -3417,7 +3656,7 @@
 
     /* Shortcut for single character strings */
     if (PyString_GET_SIZE(self) == 1 &&
-	isalpha(*p))
+	ISALPHA(*p))
 	return PyBool_FromLong(1);
 
     /* Special case for empty strings */
@@ -3426,7 +3665,7 @@
 
     e = p + PyString_GET_SIZE(self);
     for (; p < e; p++) {
-	if (!isalpha(*p))
+	if (!ISALPHA(*p))
 	    return PyBool_FromLong(0);
     }
     return PyBool_FromLong(1);
@@ -3447,8 +3686,7 @@
     register const unsigned char *e;
 
     /* Shortcut for single character strings */
-    if (PyString_GET_SIZE(self) == 1 &&
-	isalnum(*p))
+    if (PyString_GET_SIZE(self) == 1 && ISALNUM(*p))
 	return PyBool_FromLong(1);
 
     /* Special case for empty strings */
@@ -3457,7 +3695,7 @@
 
     e = p + PyString_GET_SIZE(self);
     for (; p < e; p++) {
-	if (!isalnum(*p))
+	if (!ISALNUM(*p))
 	    return PyBool_FromLong(0);
     }
     return PyBool_FromLong(1);
@@ -3478,8 +3716,7 @@
     register const unsigned char *e;
 
     /* Shortcut for single character strings */
-    if (PyString_GET_SIZE(self) == 1 &&
-	isdigit(*p))
+    if (PyString_GET_SIZE(self) == 1 && ISDIGIT(*p))
 	return PyBool_FromLong(1);
 
     /* Special case for empty strings */
@@ -3488,7 +3725,7 @@
 
     e = p + PyString_GET_SIZE(self);
     for (; p < e; p++) {
-	if (!isdigit(*p))
+	if (!ISDIGIT(*p))
 	    return PyBool_FromLong(0);
     }
     return PyBool_FromLong(1);
@@ -3511,7 +3748,7 @@
 
     /* Shortcut for single character strings */
     if (PyString_GET_SIZE(self) == 1)
-	return PyBool_FromLong(islower(*p) != 0);
+	return PyBool_FromLong(ISLOWER(*p));
 
     /* Special case for empty strings */
     if (PyString_GET_SIZE(self) == 0)
@@ -3520,9 +3757,9 @@
     e = p + PyString_GET_SIZE(self);
     cased = 0;
     for (; p < e; p++) {
-	if (isupper(*p))
+	if (ISUPPER(*p))
 	    return PyBool_FromLong(0);
-	else if (!cased && islower(*p))
+	else if (!cased && ISLOWER(*p))
 	    cased = 1;
     }
     return PyBool_FromLong(cased);
@@ -3545,7 +3782,7 @@
 
     /* Shortcut for single character strings */
     if (PyString_GET_SIZE(self) == 1)
-	return PyBool_FromLong(isupper(*p) != 0);
+	return PyBool_FromLong(ISUPPER(*p));
 
     /* Special case for empty strings */
     if (PyString_GET_SIZE(self) == 0)
@@ -3554,9 +3791,9 @@
     e = p + PyString_GET_SIZE(self);
     cased = 0;
     for (; p < e; p++) {
-	if (islower(*p))
+	if (ISLOWER(*p))
 	    return PyBool_FromLong(0);
-	else if (!cased && isupper(*p))
+	else if (!cased && ISUPPER(*p))
 	    cased = 1;
     }
     return PyBool_FromLong(cased);
@@ -3581,7 +3818,7 @@
 
     /* Shortcut for single character strings */
     if (PyString_GET_SIZE(self) == 1)
-	return PyBool_FromLong(isupper(*p) != 0);
+	return PyBool_FromLong(ISUPPER(*p));
 
     /* Special case for empty strings */
     if (PyString_GET_SIZE(self) == 0)
@@ -3593,13 +3830,13 @@
     for (; p < e; p++) {
 	register const unsigned char ch = *p;
 
-	if (isupper(ch)) {
+	if (ISUPPER(ch)) {
 	    if (previous_is_cased)
 		return PyBool_FromLong(0);
 	    previous_is_cased = 1;
 	    cased = 1;
 	}
-	else if (islower(ch)) {
+	else if (ISLOWER(ch)) {
 	    if (!previous_is_cased)
 		return PyBool_FromLong(0);
 	    previous_is_cased = 1;
@@ -4434,11 +4671,11 @@
 				if (--fmtcnt >= 0)
 					c = *fmt++;
 			}
-			else if (c >= 0 && isdigit(c)) {
+			else if (c >= 0 && ISDIGIT(c)) {
 				width = c - '0';
 				while (--fmtcnt >= 0) {
 					c = Py_CHARMASK(*fmt++);
-					if (!isdigit(c))
+					if (!ISDIGIT(c))
 						break;
 					if ((width*10) / 10 != width) {
 						PyErr_SetString(
@@ -4471,11 +4708,11 @@
 					if (--fmtcnt >= 0)
 						c = *fmt++;
 				}
-				else if (c >= 0 && isdigit(c)) {
+				else if (c >= 0 && ISDIGIT(c)) {
 					prec = c - '0';
 					while (--fmtcnt >= 0) {
 						c = Py_CHARMASK(*fmt++);
-						if (!isdigit(c))
+						if (!ISDIGIT(c))
 							break;
 						if ((prec*10) / 10 != prec) {
 							PyErr_SetString(
