diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 5c5b6ae..35b4b47 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -26,20 +26,6 @@
 static PyObject *interned;
 
 
-#if defined(HAVE_MBTOWC) && defined(HAVE_WCHAR_H) && defined(HAVE_WCTYPE_H)
-#  define PRINT_MULTIBYTE_STRING
-#  include <locale.h>
-#  include <wchar.h>
-#  include <wctype.h>
-#  if defined(HAVE_ISWPRINT)
-#    define _isprint iswprint
-#  else
-#    define _isprint isprint
-#  endif
-#endif
-
-static const char *hexchars = "0123456789abcdef";
-
 /*
    For both PyString_FromString() and PyString_FromStringAndSize(), the
    parameter `size' denotes number of characters to allocate, not counting any
@@ -763,14 +749,8 @@
 static int
 string_print(PyStringObject *op, FILE *fp, int flags)
 {
-#ifndef PRINT_MULTIBYTE_STRING
 	int i;
 	char c;
-#else
-        char *scur, *send;
-	wchar_t c;
-	int cr;
-#endif
 	int quote;
 
 	/* XXX Ought to check for interrupts when writing long strings */
@@ -796,36 +776,20 @@
 		quote = '"';
 
 	fputc(quote, fp);
-#ifndef PRINT_MULTIBYTE_STRING
 	for (i = 0; i < op->ob_size; i++) {
 		c = op->ob_sval[i];
-#else
-	for (scur = op->ob_sval, send = op->ob_sval + op->ob_size;
-	     scur < send; scur += cr) {
-		if ((cr = mbtowc(&c, scur, send - scur)) <= 0)
-			goto non_printable;
-#endif
 		if (c == quote || c == '\\')
-			fputc('\\', fp), fputc(c, fp);
+			fprintf(fp, "\\%c", c);
                 else if (c == '\t')
-                        fputs("\\t", fp);
+                        fprintf(fp, "\\t");
                 else if (c == '\n')
-                        fputs("\\n", fp);
+                        fprintf(fp, "\\n");
                 else if (c == '\r')
-                        fputs("\\r", fp);
-#ifndef PRINT_MULTIBYTE_STRING
-		else if (' ' <= c && c < 0x7f)
-			fputc(c, fp);
+                        fprintf(fp, "\\r");
+		else if (c < ' ' || c >= 0x7f)
+			fprintf(fp, "\\x%02x", c & 0xff);
 		else
-                        fprintf(fp, "\\x%02x", c & 0xff);
-#else
-		else if (_isprint(c))
-			fwrite(scur, cr, 1, fp);
-		else {
-non_printable:		cr = 1; /* unit to move cursor */
-                        fprintf(fp, "\\x%02x", *scur & 0xff);
-		}
-#endif
+			fputc(c, fp);
 	}
 	fputc(quote, fp);
 	return 0;
@@ -846,14 +810,8 @@
 		return NULL;
 	}
 	else {
-#ifndef PRINT_MULTIBYTE_STRING
 		register int i;
 		register char c;
-#else
-		register char *scur, *send;
-		wchar_t c;
-		int cr;
-#endif
 		register char *p;
 		int quote;
 
@@ -866,18 +824,11 @@
 
 		p = PyString_AS_STRING(v);
 		*p++ = quote;
-#ifndef PRINT_MULTIBYTE_STRING
 		for (i = 0; i < op->ob_size; i++) {
 			/* There's at least enough room for a hex escape
 			   and a closing quote. */
 			assert(newsize - (p - PyString_AS_STRING(v)) >= 5);
 			c = op->ob_sval[i];
-#else
-		for (scur = op->ob_sval, send = op->ob_sval + op->ob_size;
-		     scur < send; scur += cr) {
-			if ((cr = mbtowc(&c, scur, send - scur)) <= 0)
-				goto non_printable;
-#endif
 			if (c == quote || c == '\\')
 				*p++ = '\\', *p++ = c;
 			else if (c == '\t')
@@ -886,20 +837,15 @@
 				*p++ = '\\', *p++ = 'n';
 			else if (c == '\r')
 				*p++ = '\\', *p++ = 'r';
-#ifndef PRINT_MULTIBYTE_STRING
-			else if (' ' <= c && c < 0x7f)
-				*p++ = c;
-			else {
-#else
-			else if (_isprint(c))
-				memcpy(p, scur, cr), p += cr;
-			else {
-non_printable:			cr = 1; c = *scur;
-#endif
-				*p++ = '\\'; *p++ = 'x';
-				*p++ = hexchars[(c >> 4) & 0x0f];
-				*p++ = hexchars[c & 0x0f];
+			else if (c < ' ' || c >= 0x7f) {
+				/* For performance, we don't want to call
+				   PyOS_snprintf here (extra layers of
+				   function call). */
+				sprintf(p, "\\x%02x", c & 0xff);
+                                p += 4;
 			}
+			else
+				*p++ = c;
 		}
 		assert(newsize - (p - PyString_AS_STRING(v)) >= 1);
 		*p++ = quote;
diff --git a/configure b/configure
index 517caab..d9e98e0 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.in Revision: 1.355 .
+# From configure.in Revision: 1.356 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.53.
 #
@@ -901,7 +901,7 @@
 # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
 # absolute.
 ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
-ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
 ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
 ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
 
@@ -3890,13 +3890,12 @@
 
 
 
-
 for ac_header in dlfcn.h fcntl.h grp.h limits.h langinfo.h \
 libintl.h locale.h ncurses.h poll.h pthread.h \
 signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h termios.h \
 sys/audioio.h sys/file.h sys/lock.h sys/mkdev.h sys/modem.h \
 sys/param.h sys/poll.h sys/select.h sys/socket.h sys/time.h sys/times.h \
-sys/un.h sys/utsname.h sys/wait.h pty.h term.h wctype.h libutil.h \
+sys/un.h sys/utsname.h sys/wait.h pty.h term.h libutil.h \
 sys/resource.h netpacket/packet.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
@@ -11934,13 +11933,11 @@
 
 
 
-
-
 for ac_func in alarm chown chroot clock confstr ctermid ctermid_r execv \
  fchdir flock fork fsync fdatasync fpathconf ftime ftruncate \
  gai_strerror getgroups getlogin getpeername getpgid getpid getpwent getwd \
- hstrerror inet_pton iswprint kill killpg lchown link lstat mbtowc mkfifo \
- mknod mktime mremap nice pathconf pause plock poll pthread_init \
+ hstrerror inet_pton kill killpg lchown link lstat mkfifo mknod mktime \
+ mremap nice pathconf pause plock poll pthread_init \
  putenv readlink \
  select setegid seteuid setgid setgroups \
  setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \
@@ -17175,7 +17172,7 @@
 # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be
 # absolute.
 ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd`
-ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd`
+ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd`
 ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd`
 ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd`
 
diff --git a/configure.in b/configure.in
index 94a0d1f..21fc77c 100644
--- a/configure.in
+++ b/configure.in
@@ -618,7 +618,7 @@
 signal.h stdarg.h stddef.h stdlib.h thread.h unistd.h utime.h termios.h \
 sys/audioio.h sys/file.h sys/lock.h sys/mkdev.h sys/modem.h \
 sys/param.h sys/poll.h sys/select.h sys/socket.h sys/time.h sys/times.h \
-sys/un.h sys/utsname.h sys/wait.h pty.h term.h wctype.h libutil.h \
+sys/un.h sys/utsname.h sys/wait.h pty.h term.h libutil.h \
 sys/resource.h netpacket/packet.h)
 AC_HEADER_DIRENT
 AC_HEADER_MAJOR
@@ -1680,8 +1680,8 @@
 AC_CHECK_FUNCS(alarm chown chroot clock confstr ctermid ctermid_r execv \
  fchdir flock fork fsync fdatasync fpathconf ftime ftruncate \
  gai_strerror getgroups getlogin getpeername getpgid getpid getpwent getwd \
- hstrerror inet_pton iswprint kill killpg lchown link lstat mbtowc mkfifo \
- mknod mktime mremap nice pathconf pause plock poll pthread_init \
+ hstrerror inet_pton kill killpg lchown link lstat mkfifo mknod mktime \
+ mremap nice pathconf pause plock poll pthread_init \
  putenv readlink \
  select setegid seteuid setgid setgroups \
  setlocale setregid setreuid setsid setpgid setuid setvbuf snprintf \
diff --git a/pyconfig.h.in b/pyconfig.h.in
index 193a9ca..01cced8 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -199,9 +199,6 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
-/* Define to 1 if you have the `iswprint' function. */
-#undef HAVE_ISWPRINT
-
 /* Define to 1 if you have the `kill' function. */
 #undef HAVE_KILL
 
@@ -253,9 +250,6 @@
 /* Define this if you have the makedev macro. */
 #undef HAVE_MAKEDEV
 
-/* Define to 1 if you have the `mbtowc' function. */
-#undef HAVE_MBTOWC
-
 /* Define to 1 if you have the `memmove' function. */
 #undef HAVE_MEMMOVE
 
@@ -595,9 +589,6 @@
 /* Define if the compiler provides a wchar.h header file. */
 #undef HAVE_WCHAR_H
 
-/* Define to 1 if you have the <wctype.h> header file. */
-#undef HAVE_WCTYPE_H
-
 /* Define to 1 if you have the `_getpty' function. */
 #undef HAVE__GETPTY
 
