diff --git a/Python/marshal.c b/Python/marshal.c
index 4a2701a..08ad790 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -535,6 +535,30 @@
 	return r_object(&rf);
 }
 
+object *
+PyMarshal_WriteObjectToString(x) /* wrs_object() */
+	object *x;
+{
+	WFILE wf;
+	wf.fp = NULL;
+	wf.str = newsizedstringobject((char *)NULL, 50);
+	if (wf.str == NULL)
+		return NULL;
+	wf.ptr = GETSTRINGVALUE((stringobject *)wf.str);
+	wf.end = wf.ptr + getstringsize(wf.str);
+	wf.error = 0;
+	w_object(x, &wf);
+	if (wf.str != NULL)
+		resizestring(&wf.str,
+		    (int) (wf.ptr - GETSTRINGVALUE((stringobject *)wf.str)));
+	if (wf.error) {
+		XDECREF(wf.str);
+		err_setstr(ValueError, "unmarshallable object");
+		return NULL;
+	}
+	return wf.str;
+}
+
 /* And an interface for Python programs... */
 
 static object *
@@ -595,27 +619,10 @@
 	object *self;
 	object *args;
 {
-	WFILE wf;
 	object *x;
 	if (!getargs(args, "O", &x))
 		return NULL;
-	wf.fp = NULL;
-	wf.str = newsizedstringobject((char *)NULL, 50);
-	if (wf.str == NULL)
-		return NULL;
-	wf.ptr = GETSTRINGVALUE((stringobject *)wf.str);
-	wf.end = wf.ptr + getstringsize(wf.str);
-	wf.error = 0;
-	w_object(x, &wf);
-	if (wf.str != NULL)
-		resizestring(&wf.str,
-		    (int) (wf.ptr - GETSTRINGVALUE((stringobject *)wf.str)));
-	if (wf.error) {
-		XDECREF(wf.str);
-		err_setstr(ValueError, "unmarshallable object");
-		return NULL;
-	}
-	return wf.str;
+	return PyMarshal_WriteObjectToString(x);
 }
 
 static object *
