Index: moduleobject.c
===================================================================
--- moduleobject.c	(revision 57464)
+++ moduleobject.c	(working copy)
@@ -66,17 +66,17 @@
 	d = ((PyModuleObject *)m)->md_dict;
 	if (d == NULL ||
 	    (nameobj = PyDict_GetItemString(d, "__name__")) == NULL ||
-	    !(PyString_Check(nameobj) || PyUnicode_Check(nameobj)))
+	    !(PyUnicode_Check(nameobj)))
 	{
 		PyErr_SetString(PyExc_SystemError, "nameless module");
 		return NULL;
 	}
-        if (PyUnicode_Check(nameobj)) {
-		nameobj = _PyUnicode_AsDefaultEncodedString(nameobj, NULL);
+	if (PyUnicode_Check(nameobj)) {
+		nameobj = PyUnicode_AsString(nameobj);
 		if (nameobj == NULL)
 			return NULL;
 	}
-	return PyString_AsString(nameobj);
+	return nameobj;
 }
 
 char *
@@ -91,12 +91,12 @@
 	d = ((PyModuleObject *)m)->md_dict;
 	if (d == NULL ||
 	    (fileobj = PyDict_GetItemString(d, "__file__")) == NULL ||
-	    !PyString_Check(fileobj))
+	    !PyUnicode_Check(fileobj))
 	{
 		PyErr_SetString(PyExc_SystemError, "module filename missing");
 		return NULL;
 	}
-	return PyString_AsString(fileobj);
+	return PyUnicode_AsString(fileobj);
 }
 
 void
@@ -120,8 +120,8 @@
 	/* First, clear only names starting with a single underscore */
 	pos = 0;
 	while (PyDict_Next(d, &pos, &key, &value)) {
-		if (value != Py_None && PyString_Check(key)) {
-			char *s = PyString_AsString(key);
+		if (value != Py_None && PyUnicode_Check(key)) {
+			char *s = PyUnicode_AsString(key);
 			if (s[0] == '_' && s[1] != '_') {
 				if (Py_VerboseFlag > 1)
 				    PySys_WriteStderr("#   clear[1] %s\n", s);
@@ -133,8 +133,8 @@
 	/* Next, clear all names except for __builtins__ */
 	pos = 0;
 	while (PyDict_Next(d, &pos, &key, &value)) {
-		if (value != Py_None && PyString_Check(key)) {
-			char *s = PyString_AsString(key);
+		if (value != Py_None && PyUnicode_Check(key)) {
+			char *s = PyUnicode_AsString(key);
 			if (s[0] != '_' || strcmp(s, "__builtins__") != 0) {
 				if (Py_VerboseFlag > 1)
 				    PySys_WriteStderr("#   clear[2] %s\n", s);
Index: floatobject.c
===================================================================
--- floatobject.c	(revision 57464)
+++ floatobject.c	(working copy)
@@ -74,11 +74,7 @@
 	Py_ssize_t len;
 	PyObject *result = NULL;
 
-	if (PyString_Check(v)) {
-		s = PyString_AS_STRING(v);
-		len = PyString_GET_SIZE(v);
-	}
-	else if (PyUnicode_Check(v)) {
+	if (PyUnicode_Check(v)) {
 		s_buffer = (char *)PyMem_MALLOC(PyUnicode_GET_SIZE(v)+1);
 		if (s_buffer == NULL)
 			return PyErr_NoMemory();
@@ -843,7 +839,7 @@
 		return float_subtype_new(type, args, kwds); /* Wimp out */
 	if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:float", kwlist, &x))
 		return NULL;
-	if (PyString_Check(x))
+	if (PyUnicode_Check(x))
 		return PyFloat_FromString(x);
 	return PyNumber_Float(x);
 }
@@ -892,24 +888,25 @@
 float_getformat(PyTypeObject *v, PyObject* arg)
 {
 	char* s;
+	int len;
 	float_format_type r;
 
 	if (PyUnicode_Check(arg)) {
-		arg = _PyUnicode_AsDefaultEncodedString(arg, NULL);
-		if (arg == NULL)
-			return NULL;
-	}
-	if (!PyString_Check(arg)) {
+		s = PyUnicode_AsString(arg);
+		if (s == NULL)
+		  return NULL;
+		len = PyUnicode_GET_SIZE(arg);
+	} else {
 		PyErr_Format(PyExc_TypeError,
-	     "__getformat__() argument must be string, not %.500s",
-			     Py_Type(arg)->tp_name);
-		return NULL;
-	}
-	s = PyString_AS_STRING(arg);
-	if (strcmp(s, "double") == 0) {
+			"__getformat__() argument must be string, not %.500s",
+			Py_Type(arg)->tp_name);
+			return NULL;
+		}
+	
+	if (len==6 && strncmp(s, "double", 6) == 0) {
 		r = double_format;
 	}
-	else if (strcmp(s, "float") == 0) {
+	else if (len==5 && strncmp(s, "float", 5) == 0) {
 		r = float_format;
 	}
 	else {
