diff --git a/Objects/bufferobject.c b/Objects/bufferobject.c
index 4c213ce..242261f 100644
--- a/Objects/bufferobject.c
+++ b/Objects/bufferobject.c
@@ -184,28 +184,22 @@
 static PyObject *
 buffer_repr(PyBufferObject *self)
 {
-	char buf[300];
 	char *status = self->b_readonly ? "read-only" : "read-write";
 
 	if ( self->b_base == NULL )
-	{
-		sprintf(buf, "<%s buffer ptr %p, size %d at %p>",
-			status,
-			self->b_ptr,
-			self->b_size,
-			self);
-	}
+		return PyString_FromFormat("<%s buffer ptr %p, size %d at %p>",
+					   status,
+					   self->b_ptr,
+					   self->b_size,
+					   self);
 	else
-	{
-		sprintf(buf, "<%s buffer for %p, ptr %p, size %d at %p>",
+		return PyString_FromFormat(
+			"<%s buffer for %p, ptr %p, size %d at %p>",
 			status,
 			self->b_base,
 			self->b_ptr,
 			self->b_size,
 			self);
-	}
-
-	return PyString_FromString(buf);
 }
 
 static long
diff --git a/Objects/cellobject.c b/Objects/cellobject.c
index 9a36776..47e5174 100644
--- a/Objects/cellobject.c
+++ b/Objects/cellobject.c
@@ -62,14 +62,12 @@
 static PyObject *
 cell_repr(PyCellObject *op)
 {
-	char buf[256];
-
 	if (op->ob_ref == NULL)
-		sprintf(buf, "<cell at %p: empty>", op);
-	else
-		sprintf(buf, "<cell at %p: %.80s object at %p>",
-			op, op->ob_ref->ob_type->tp_name, op->ob_ref);
-	return PyString_FromString(buf);
+		return PyString_FromFormat("<cell at %p: empty>", op);
+
+	return PyString_FromFormat("<cell at %p: %.80s object at %p>",
+				   op, op->ob_ref->ob_type->tp_name,
+				   op->ob_ref);
 }
 
 static int
diff --git a/Objects/classobject.c b/Objects/classobject.c
index 0f39d4b..f1145a4 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -313,19 +313,17 @@
 class_repr(PyClassObject *op)
 {
 	PyObject *mod = PyDict_GetItemString(op->cl_dict, "__module__");
-	char buf[140];
 	char *name;
 	if (op->cl_name == NULL || !PyString_Check(op->cl_name))
 		name = "?";
 	else
 		name = PyString_AsString(op->cl_name);
 	if (mod == NULL || !PyString_Check(mod))
-		sprintf(buf, "<class ?.%.100s at %p>", name, op);
+		return PyString_FromFormat("<class ?.s at %p>", name, op);
 	else
-		sprintf(buf, "<class %.50s.%.50s at %p>",
-			PyString_AsString(mod),
-			name, op);
-	return PyString_FromString(buf);
+		return PyString_FromFormat("<class %s.%s at %p>",
+					   PyString_AsString(mod),
+					   name, op);
 }
 
 static PyObject *
@@ -776,7 +774,6 @@
 		reprstr = PyString_InternFromString("__repr__");
 	func = instance_getattr(inst, reprstr);
 	if (func == NULL) {
-		char buf[140];
 		PyObject *classname = inst->in_class->cl_name;
 		PyObject *mod = PyDict_GetItemString(
 			inst->in_class->cl_dict, "__module__");
@@ -787,13 +784,12 @@
 			cname = "?";
 		PyErr_Clear();
 		if (mod == NULL || !PyString_Check(mod))
-			sprintf(buf, "<?.%.100s instance at %p>",
-				cname, inst);
+			return PyString_FromFormat("<?.%s instance at %p>",
+						   cname, inst);
 		else
-			sprintf(buf, "<%.50s.%.50s instance at %p>",
-				PyString_AsString(mod),
-				cname, inst);
-		return PyString_FromString(buf);
+			return PyString_FromFormat("<%s.%s instance at %p>",
+						   PyString_AsString(mod),
+						   cname, inst);
 	}
 	res = PyEval_CallObject(func, (PyObject *)NULL);
 	Py_DECREF(func);
@@ -2042,7 +2038,6 @@
 static PyObject *
 instancemethod_repr(PyMethodObject *a)
 {
-	char buffer[240];
 	PyObject *self = a->im_self;
 	PyObject *func = a->im_func;
 	PyObject *klass = a->im_class;
@@ -2072,8 +2067,8 @@
 			sklassname = PyString_AS_STRING(klassname);
 	}
 	if (self == NULL)
-		sprintf(buffer, "<unbound method %.100s.%.100s>",
-			sklassname, sfuncname);
+		result = PyString_FromFormat("<unbound method %s.%s>",
+					     sklassname, sfuncname);
 	else {
 		/* XXX Shouldn't use repr() here! */
 		PyObject *selfrepr = PyObject_Repr(self);
@@ -2083,11 +2078,11 @@
 			Py_DECREF(selfrepr);
 			goto fail;
 		}
-		sprintf(buffer, "<bound method %.60s.%.60s of %.60s>",
-			sklassname, sfuncname, PyString_AS_STRING(selfrepr));
+		result = PyString_FromFormat("<bound method %s.%s of %s>",
+					     sklassname, sfuncname,
+					     PyString_AS_STRING(selfrepr));
 		Py_DECREF(selfrepr);
 	}
-	result = PyString_FromString(buffer);
   fail:
 	Py_XDECREF(funcname);
 	Py_XDECREF(klassname);
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
index efed1c0..44b20e2 100644
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -55,38 +55,36 @@
 static PyObject *
 descr_repr(PyDescrObject *descr, char *format)
 {
-	char buffer[500];
-
-	sprintf(buffer, format, descr_name(descr), descr->d_type->tp_name);
-	return PyString_FromString(buffer);
+	return PyString_FromFormat(format, descr_name(descr),
+				   descr->d_type->tp_name);
 }
 
 static PyObject *
 method_repr(PyMethodDescrObject *descr)
 {
 	return descr_repr((PyDescrObject *)descr, 
-			  "<method '%.300s' of '%.100s' objects>");
+			  "<method '%s' of '%s' objects>");
 }
 
 static PyObject *
 member_repr(PyMemberDescrObject *descr)
 {
 	return descr_repr((PyDescrObject *)descr, 
-			  "<member '%.300s' of '%.100s' objects>");
+			  "<member '%s' of '%s' objects>");
 }
 
 static PyObject *
 getset_repr(PyGetSetDescrObject *descr)
 {
 	return descr_repr((PyDescrObject *)descr, 
-			  "<attribute '%.300s' of '%.100s' objects>");
+			  "<attribute '%s' of '%s' objects>");
 }
 
 static PyObject *
 wrapper_repr(PyWrapperDescrObject *descr)
 {
 	return descr_repr((PyDescrObject *)descr, 
-			  "<slot wrapper '%.300s' of '%.100s' objects>");
+			  "<slot wrapper '%s' of '%s' objects>");
 }
 
 static int
@@ -100,8 +98,8 @@
 	}
 	if (!PyObject_IsInstance(obj, (PyObject *)(descr->d_type))) {
 		PyErr_Format(PyExc_TypeError,
-			     "descriptor '%.200s' for '%.100s' objects "
-			     "doesn't apply to '%.100s' object",
+			     "descriptor '%s' for '%s' objects "
+			     "doesn't apply to '%s' object",
 			     descr_name((PyDescrObject *)descr),
 			     descr->d_type->tp_name,
 			     obj->ob_type->tp_name);
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index 0bb2f25..e18e2a2 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -179,13 +179,11 @@
 static PyObject *
 file_repr(PyFileObject *f)
 {
-	char buf[300];
-	sprintf(buf, "<%s file '%.256s', mode '%.10s' at %p>",
-		f->f_fp == NULL ? "closed" : "open",
-		PyString_AsString(f->f_name),
-		PyString_AsString(f->f_mode),
-		f);
-	return PyString_FromString(buf);
+	return PyString_FromFormat("<%s file '%s', mode '%s' at %p>",
+				   f->f_fp == NULL ? "closed" : "open",
+				   PyString_AsString(f->f_name),
+				   PyString_AsString(f->f_mode),
+				   f);
 }
 
 static PyObject *
diff --git a/Objects/funcobject.c b/Objects/funcobject.c
index 6532e58..6f56bf6 100644
--- a/Objects/funcobject.c
+++ b/Objects/funcobject.c
@@ -239,14 +239,11 @@
 static PyObject*
 func_repr(PyFunctionObject *op)
 {
-	char buf[140];
 	if (op->func_name == Py_None)
-		sprintf(buf, "<anonymous function at %p>", op);
-	else
-		sprintf(buf, "<function %.100s at %p>",
-			PyString_AsString(op->func_name),
-			op);
-	return PyString_FromString(buf);
+		return PyString_FromFormat("<anonymous function at %p>", op);
+	return PyString_FromFormat("<function %s at %p>",
+				   PyString_AsString(op->func_name),
+				   op);
 }
 
 static int
diff --git a/Objects/methodobject.c b/Objects/methodobject.c
index cdba350..e766ba5 100644
--- a/Objects/methodobject.c
+++ b/Objects/methodobject.c
@@ -172,15 +172,13 @@
 static PyObject *
 meth_repr(PyCFunctionObject *m)
 {
-	char buf[200];
 	if (m->m_self == NULL)
-		sprintf(buf, "<built-in function %.80s>", m->m_ml->ml_name);
-	else
-		sprintf(buf,
-			"<built-in method %.80s of %.80s object at %p>",
-			m->m_ml->ml_name, m->m_self->ob_type->tp_name,
-			m->m_self);
-	return PyString_FromString(buf);
+		return PyString_FromFormat("<built-in function %s>",
+					   m->m_ml->ml_name);
+	return PyString_FromFormat("<built-in method %s of %s object at %p>",
+				   m->m_ml->ml_name,
+				   m->m_self->ob_type->tp_name,
+				   m->m_self);
 }
 
 static int
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c
index 2ccf0bf..ba81593 100644
--- a/Objects/moduleobject.c
+++ b/Objects/moduleobject.c
@@ -157,13 +157,8 @@
 static PyObject *
 module_repr(PyModuleObject *m)
 {
-	static int template1len = sizeof("<module '' (built-in)>") + 1;
-	static int template2len = sizeof("<module '' from ''>") + 1;
-
-	char *buf;
 	char *name;
 	char *filename;
-	PyObject *rtn;
 
 	name = PyModule_GetName((PyObject *)m);
 	if (name == NULL) {
@@ -173,19 +168,9 @@
 	filename = PyModule_GetFilename((PyObject *)m);
 	if (filename == NULL) {
 		PyErr_Clear();
-		buf = PyObject_MALLOC(
-			sizeof(char) * (strlen(name) + template1len));
-		sprintf(buf, "<module '%s' (built-in)>", name);
+		return PyString_FromFormat("<module '%s' (built-in)>", name);
 	}
-	else {
-		buf = PyObject_MALLOC(
-			sizeof(char) * (strlen(name) + strlen(filename) +
-					template2len));
-		sprintf(buf, "<module '%s' from '%s'>", name, filename);
-	}
-	rtn = PyString_FromString(buf);
-	PyObject_FREE(buf);
-	return rtn;
+	return PyString_FromFormat("<module '%s' from '%s'>", name, filename);
 }
 
 /* We only need a traverse function, no clear function: If the module
diff --git a/Objects/object.c b/Objects/object.c
index 7e4a211..1d62690 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -222,6 +222,7 @@
 }
 #endif /* WITH_CYCLE_GC */
 
+
 PyObject *
 PyObject_Repr(PyObject *v)
 {
@@ -235,12 +236,9 @@
 #endif
 	if (v == NULL)
 		return PyString_FromString("<NULL>");
-	else if (v->ob_type->tp_repr == NULL) {
-		char buf[120];
-		sprintf(buf, "<%.80s object at %p>",
-			v->ob_type->tp_name, v);
-		return PyString_FromString(buf);
-	}
+	else if (v->ob_type->tp_repr == NULL)
+		return PyString_FromFormat("<%s object at %p",
+					   v->ob_type->tp_name, v);
 	else {
 		PyObject *res;
 		res = (*v->ob_type->tp_repr)(v);
diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c
index 5ad86ed..24765f4 100644
--- a/Objects/rangeobject.c
+++ b/Objects/rangeobject.c
@@ -126,30 +126,30 @@
 static PyObject *
 range_repr(rangeobject *r)
 {
-	/* buffers must be big enough to hold 3 longs + an int +
-	 * a bit of "(xrange(...) * ...)" text.
-	 */
-	char buf1[250];
-	char buf2[250];
-
+	PyObject *rtn;
+	
 	if (r->start == 0 && r->step == 1)
-		sprintf(buf1, "xrange(%ld)", r->start + r->len * r->step);
+		rtn = PyString_FromFormat("xrange(%ld)",
+					  r->start + r->len * r->step);
 
 	else if (r->step == 1)
-		sprintf(buf1, "xrange(%ld, %ld)",
-			r->start,
-			r->start + r->len * r->step);
+		rtn = PyString_FromFormat("xrange(%ld, %ld)",
+					  r->start,
+					  r->start + r->len * r->step);
 
 	else
-		sprintf(buf1, "xrange(%ld, %ld, %ld)",
-			r->start,
-			r->start + r->len * r->step,
-			r->step);
-
-	if (r->reps != 1)
-		sprintf(buf2, "(%s * %d)", buf1, r->reps);
-
-	return PyString_FromString(r->reps == 1 ? buf1 : buf2);
+		rtn = PyString_FromFormat("xrange(%ld, %ld, %ld)",
+					  r->start,
+					  r->start + r->len * r->step,
+					  r->step);
+	if (r->reps != 1) {
+		PyObject *extra = PyString_FromFormat(
+			"(%s * %d)",
+			PyString_AS_STRING(rtn), r->reps);
+		Py_DECREF(rtn);
+		rtn = extra;
+	}
+	return rtn;
 }
 
 static PyObject *
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index bf2bdc0..5cc4161 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -113,8 +113,7 @@
 static PyObject *
 type_repr(PyTypeObject *type)
 {
-	PyObject *mod, *name;
-	char buf[200];
+	PyObject *mod, *name, *rtn;
 
 	mod = type_module(type, NULL);
 	if (mod == NULL)
@@ -126,15 +125,18 @@
 	name = type_name(type, NULL);
 	if (name == NULL)
 		return NULL;
-	if (mod != NULL && strcmp(PyString_AS_STRING(mod), "__builtin__"))
-		sprintf(buf, "<type '%.80s.%.80s'>",
-			PyString_AS_STRING(mod),
-			PyString_AS_STRING(name));
+
+	if (mod != NULL && strcmp(PyString_AS_STRING(mod), "__builtin__")) {
+		rtn = PyString_FromFormat("<type '%s.%s'>",
+					  PyString_AS_STRING(mod),
+					  PyString_AS_STRING(name));
+	}
 	else
-		sprintf(buf, "<type '%.80s'>", type->tp_name);
+		rtn = PyString_FromFormat("<type '%s'>", type->tp_name);
+
 	Py_XDECREF(mod);
 	Py_DECREF(name);
-	return PyString_FromString(buf);
+	return rtn;
 }
 
 static PyObject *
@@ -968,8 +970,7 @@
 object_repr(PyObject *self)
 {
 	PyTypeObject *type;
-	PyObject *mod, *name;
-	char buf[200];
+	PyObject *mod, *name, *rtn;
 
 	type = self->ob_type;
 	mod = type_module(type, NULL);
@@ -983,15 +984,16 @@
 	if (name == NULL)
 		return NULL;
 	if (mod != NULL && strcmp(PyString_AS_STRING(mod), "__builtin__"))
-		sprintf(buf, "<%.80s.%.80s instance at %p>",
-			PyString_AS_STRING(mod),
-			PyString_AS_STRING(name),
-			self);
+		rtn = PyString_FromFormat("<%s.%s instance at %p>",
+					  PyString_AS_STRING(mod),
+					  PyString_AS_STRING(name),
+					  self);
 	else
-		sprintf(buf, "<%.80s instance at %p>", type->tp_name, self);
+		rtn = PyString_FromFormat("<%s instance at %p>",
+					  type->tp_name, self);
 	Py_XDECREF(mod);
 	Py_DECREF(name);
-	return PyString_FromString(buf);
+	return rtn;
 }
 
 static PyObject *
@@ -2590,13 +2592,9 @@
 		Py_DECREF(func);
 		return res;
 	}
-	else {
-		char buf[120];
-		PyErr_Clear();
-		sprintf(buf, "<%.80s object at %p>",
-			self->ob_type->tp_name, self);
-		return PyString_FromString(buf);
-	}
+	PyErr_Clear();
+	return PyString_FromFormat("<%s object at %p>",
+				   self->ob_type->tp_name, self);
 }
 
 static PyObject *
