diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index bdcccf1..9bd9202 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -44,6 +44,7 @@
 type_set_name(PyTypeObject *type, PyObject *value, void *context)
 {
 	PyHeapTypeObject* et;
+	char *tp_name;
 
 	if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
 		PyErr_Format(PyExc_TypeError,
@@ -61,11 +62,10 @@
 			     type->tp_name, Py_Type(value)->tp_name);
 		return -1;
 	}
-	value = _PyUnicode_AsDefaultEncodedString(value, NULL);
-	if (value == NULL)
+	tp_name = PyUnicode_AsString(value);
+	if (tp_name == NULL)
 		return -1;
-	if (strlen(PyString_AS_STRING(value))
-	    != (size_t)PyString_GET_SIZE(value)) {
+	if (strlen(tp_name) != (size_t)PyUnicode_GET_SIZE(value)) {
 		PyErr_Format(PyExc_ValueError,
 			     "__name__ must not contain null bytes");
 		return -1;
@@ -78,7 +78,7 @@
 	Py_DECREF(et->ht_name);
 	et->ht_name = value;
 
-	type->tp_name = PyString_AS_STRING(value);
+	type->tp_name = tp_name;
 
 	return 0;
 }
@@ -1736,7 +1736,7 @@
 		/* Have slots */
 
 		/* Make it into a tuple */
-		if (PyString_Check(slots) || PyUnicode_Check(slots))
+		if (PyUnicode_Check(slots))
 			slots = PyTuple_Pack(1, slots);
 		else
 			slots = PySequence_Tuple(slots);
@@ -1875,14 +1875,10 @@
 	type->tp_as_sequence = &et->as_sequence;
 	type->tp_as_mapping = &et->as_mapping;
 	type->tp_as_buffer = &et->as_buffer;
-	if (PyString_Check(name))
-		type->tp_name = PyString_AsString(name);
-	else {
-		type->tp_name = PyUnicode_AsString(name);
-		if (!type->tp_name) {
-			Py_DECREF(type);
-			return NULL;
-		}
+	type->tp_name = PyUnicode_AsString(name);
+	if (!type->tp_name) {
+		Py_DECREF(type);
+		return NULL;
 	}
 
 	/* Set tp_base and tp_bases */
diff --git a/Python/import.c b/Python/import.c
index 24eeada..8195bad 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -453,8 +453,8 @@
 		while (PyDict_Next(modules, &pos, &key, &value)) {
 			if (value->ob_refcnt != 1)
 				continue;
-			if (PyString_Check(key) && PyModule_Check(value)) {
-				name = PyString_AS_STRING(key);
+			if (PyUnicode_Check(key) && PyModule_Check(value)) {
+				name = PyUnicode_AsString(key);
 				if (strcmp(name, "__builtin__") == 0)
 					continue;
 				if (strcmp(name, "sys") == 0)
@@ -472,8 +472,8 @@
 	/* Next, delete all modules (still skipping __builtin__ and sys) */
 	pos = 0;
 	while (PyDict_Next(modules, &pos, &key, &value)) {
-		if (PyString_Check(key) && PyModule_Check(value)) {
-			name = PyString_AS_STRING(key);
+		if (PyUnicode_Check(key) && PyModule_Check(value)) {
+			name = PyUnicode_AsString(key);
 			if (strcmp(name, "__builtin__") == 0)
 				continue;
 			if (strcmp(name, "sys") == 0)
@@ -2008,30 +2008,21 @@
 	*buf = '\0';
 	*p_buflen = 0;
 	modname = PyDict_GetItem(globals, namestr);
-	if (modname == NULL || (!PyString_Check(modname) && !PyUnicode_Check(modname)))
+	if (modname == NULL || !PyUnicode_Check(modname))
 		return Py_None;
 
-	if (PyUnicode_Check(modname)) {
-		/* XXX need to support Unicode better */
-		modname = _PyUnicode_AsDefaultEncodedString(modname, NULL);
-		if (!modname) {
-			PyErr_Clear();
-			return NULL;
-		}
-	}
-
 	modpath = PyDict_GetItem(globals, pathstr);
 	if (modpath != NULL) {
-		Py_ssize_t len = PyString_GET_SIZE(modname);
+		Py_ssize_t len = PyUnicode_GET_SIZE(modname);
 		if (len > MAXPATHLEN) {
 			PyErr_SetString(PyExc_ValueError,
 					"Module name too long");
 			return NULL;
 		}
-		strcpy(buf, PyString_AS_STRING(modname));
+		strcpy(buf, PyUnicode_AsString(modname));
 	}
 	else {
-		char *start = PyString_AS_STRING(modname);
+		char *start = PyUnicode_AsString(modname);
 		char *lastdot = strrchr(start, '.');
 		size_t len;
 		if (lastdot == NULL && level > 0) {
@@ -2174,19 +2165,9 @@
 			}
 			return 0;
 		}
-		if (PyString_Check(item)) {
-			/* XXX there shouldn't be any str8 objects here */
-			PyObject *uni = PyUnicode_DecodeASCII(PyString_AsString(item),
-							      PyString_Size(item),
-							      "strict");
-			Py_DECREF(item);
-			if (!uni)
-				return 0;
-			item = uni;
-		}
 		if (!PyUnicode_Check(item)) {
 			PyErr_SetString(PyExc_TypeError,
-					"Item in ``from list'' not a unicode string");
+					"Item in ``from list'' not a string");
 			Py_DECREF(item);
 			return 0;
 		}
@@ -2444,7 +2425,7 @@
    done using whatever import hooks are installed in the current
    environment, e.g. by "rexec".
    A dummy list ["__doc__"] is passed as the 4th argument so that
-   e.g. PyImport_Import(PyString_FromString("win32com.client.gencache"))
+   e.g. PyImport_Import(PyUnicode_FromString("win32com.client.gencache"))
    will return <module "gencache"> instead of <module "win32com">. */
 
 PyObject *
