diff --git a/Include/pyerrors.h b/Include/pyerrors.h
index c72a5bd..1f7b2ca 100644
--- a/Include/pyerrors.h
+++ b/Include/pyerrors.h
@@ -173,8 +173,7 @@
 	PyObject *, Py_UNICODE *);
 #endif /* Py_WIN_WIDE_FILENAMES */
 
-PyAPI_FUNC(PyObject *) PyErr_Format(PyObject *, const char *, ...)
-			Py_GCC_ATTRIBUTE((format(printf, 2, 3)));
+PyAPI_FUNC(PyObject *) PyErr_Format(PyObject *, const char *, ...);
 
 #ifdef MS_WINDOWS
 PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilenameObject(
diff --git a/Python/ceval.c b/Python/ceval.c
index d777a3a..37659f8 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2615,9 +2615,9 @@
 		if (argcount > co->co_argcount) {
 			if (!(co->co_flags & CO_VARARGS)) {
 				PyErr_Format(PyExc_TypeError,
-				    "%.200s() takes %s %d "
+				    "%S() takes %s %d "
 				    "%spositional argument%s (%d given)",
-				    PyString_AsString(co->co_name),
+				    co->co_name,
 				    defcount ? "at most" : "exactly",
 				    co->co_argcount,
 				    kwcount ? "non-keyword " : "",
@@ -2649,8 +2649,8 @@
 			int j;
 			if (keyword == NULL || !(PyString_Check(keyword) || PyUnicode_Check(keyword))) {
 				PyErr_Format(PyExc_TypeError,
-				    "%.200s() keywords must be strings",
-				    PyString_AsString(co->co_name));
+				    "%S() keywords must be strings",
+				    co->co_name);
 				goto fail;
 			}
 			/* XXX slow -- speed up using dictionary? */
@@ -2672,10 +2672,10 @@
 			if (j >= co->co_argcount + co->co_kwonlyargcount) {
 				if (kwdict == NULL) {
 					PyErr_Format(PyExc_TypeError,
-					    "%.200s() got an unexpected "
-					    "keyword argument '%.400s'",
-					    PyString_AsString(co->co_name),
-					    PyString_AsString(keyword));
+					    "%S() got an unexpected "
+					    "keyword argument '%S'",
+					    co->co_name,
+					    keyword);
 					goto fail;
 				}
 				PyDict_SetItem(kwdict, keyword, value);
@@ -2683,11 +2683,11 @@
 			else {
 				if (GETLOCAL(j) != NULL) {
 					PyErr_Format(PyExc_TypeError,
-					     "%.200s() got multiple "
+					     "%S() got multiple "
 					     "values for keyword "
-					     "argument '%.400s'",
-					     PyString_AsString(co->co_name),
-					     PyString_AsString(keyword));
+					     "argument '%S'",
+					     co->co_name,
+					     keyword);
 					goto fail;
 				}
 				Py_INCREF(value);
@@ -2711,10 +2711,8 @@
 					continue;
 				}
 				PyErr_Format(PyExc_TypeError,
-					"%.200s() needs "
-					"keyword-only argument %s",
-					PyString_AsString(co->co_name),
-					PyString_AsString(name));
+					"%S() needs keyword-only argument %S",
+					co->co_name, name);
 				goto fail;
 			}
 		}
@@ -2723,10 +2721,10 @@
 			for (i = argcount; i < m; i++) {
 				if (GETLOCAL(i) == NULL) {
 					PyErr_Format(PyExc_TypeError,
-					    "%.200s() takes %s %d "
+					    "%S() takes %s %d "
 					    "%spositional argument%s "
 					    "(%d given)",
-					    PyString_AsString(co->co_name),
+					    co->co_name,
 					    ((co->co_flags & CO_VARARGS) ||
 					     defcount) ? "at least"
 						       : "exactly",
@@ -2751,8 +2749,8 @@
 	else {
 		if (argcount > 0 || kwcount > 0) {
 			PyErr_Format(PyExc_TypeError,
-				     "%.200s() takes no arguments (%d given)",
-				     PyString_AsString(co->co_name),
+				     "%S() takes no arguments (%d given)",
+				     co->co_name,
 				     argcount + kwcount);
 			goto fail;
 		}
@@ -4021,9 +4019,7 @@
 
 	x = PyObject_GetAttr(v, name);
 	if (x == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) {
-		PyErr_Format(PyExc_ImportError,
-			     "cannot import name %.230s",
-			     PyString_AsString(name));
+		PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
 	}
 	return x;
 }
diff --git a/Python/codecs.c b/Python/codecs.c
index ddd1935..3aa1f38 100644
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -443,18 +443,13 @@
 {
     PyObject *type = PyObject_GetAttrString(exc, "__class__");
     if (type != NULL) {
-	PyObject *name = PyObject_GetAttrString(type, "__name__");
-	Py_DECREF(type);
-	if (name != NULL) {
-	    PyObject *string = PyObject_Str(name);
-	    Py_DECREF(name);
-	    if (string != NULL) {
-	        PyErr_Format(PyExc_TypeError,
-		    "don't know how to handle %.400s in error callback",
-		    PyString_AS_STRING(string));
-	        Py_DECREF(string);
-	    }
-	}
+        PyObject *name = PyObject_GetAttrString(type, "__name__");
+        Py_DECREF(type);
+        if (name != NULL) {
+            PyErr_Format(PyExc_TypeError,
+                         "don't know how to handle %S in error callback", name);
+            Py_DECREF(name);
+        }
     }
 }
 
diff --git a/Python/compile.c b/Python/compile.c
index ffca830..359de58 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2467,9 +2467,9 @@
 			break;
 		case Del:
 			PyErr_Format(PyExc_SyntaxError,
-				     "can not delete variable '%s' referenced "
+				     "can not delete variable '%S' referenced "
 				     "in nested scope",
-				     PyString_AS_STRING(name));
+				     name);
 			Py_DECREF(mangled);
 			return 0;
 		case Param:
diff --git a/Python/errors.c b/Python/errors.c
index 4ef491f..2a84c8d 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -54,11 +54,9 @@
 {
 	if (exception != NULL &&
 	    !PyExceptionClass_Check(exception)) {
-		PyObject *excstr = PyObject_ReprStr8(exception);
 		PyErr_Format(PyExc_SystemError,
-			     "exception %s not a BaseException subclass",
-			     PyString_AS_STRING(excstr));
-		Py_DECREF(excstr);
+			     "exception %R not a BaseException subclass",
+			     exception);
 		return;
 	}
 	Py_XINCREF(exception);
@@ -75,7 +73,7 @@
 void
 PyErr_SetString(PyObject *exception, const char *string)
 {
-	PyObject *value = PyString_FromString(string);
+	PyObject *value = PyUnicode_FromString(string);
 	PyErr_SetObject(exception, value);
 	Py_XDECREF(value);
 }
@@ -528,7 +526,7 @@
 	va_start(vargs);
 #endif
 
-	string = PyString_FromFormatV(format, vargs);
+	string = PyUnicode_FromFormatV(format, vargs);
 	PyErr_SetObject(exception, string);
 	Py_XDECREF(string);
 	va_end(vargs);
