* Refactor set.__contains__()
* Use Py_RETURN_NONE everywhere.
* Fix-up the firstpass check for the tp_print slot.
diff --git a/Objects/setobject.c b/Objects/setobject.c
index 82ff683..36072ce 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -158,18 +158,9 @@
 static PyObject *
 set_direct_contains(PySetObject *so, PyObject *key)
 {
-	PyObject *tmp;
 	long result;
 
-	result = PyDict_Contains(so->data, key);
-	if (result == -1 && PyAnySet_Check(key)) {
-		PyErr_Clear();
-		tmp = frozenset_dict_wrapper(((PySetObject *)(key))->data);
-		if (tmp == NULL)
-			return NULL;
-		result = PyDict_Contains(so->data, tmp);
-		Py_DECREF(tmp);
-	}
+	result = set_contains(so, key);
 	if (result == -1)
 		return NULL;
 	return PyBool_FromLong(result);
@@ -655,8 +646,8 @@
 	PySetObject *so = (PySetObject *)self;
 	PyObject *key, *value;
 	int pos = 0;
-
 	long hash = 0;
+
 	if (so->hash != -1)
 		return so->hash;
 
@@ -728,11 +719,13 @@
 set_tp_print(PySetObject *so, FILE *fp, int flags)
 {
 	PyObject *key, *value;
-	int pos = 0;
+	int pos=0, firstpass=1;
 
 	fprintf(fp, "%s([", so->ob_type->tp_name);
 	while (PyDict_Next(so->data, &pos, &key, &value)) {
-		if (pos)
+		if (firstpass)
+			firstpass = 0;
+		else
 			fprintf(fp, ", ");
 		if (PyObject_Print(key, fp, 0) != 0)
 			return -1;
@@ -746,8 +739,7 @@
 {
 	PyDict_Clear(so->data);
 	so->hash = -1;
-	Py_INCREF(Py_None);
-	return Py_None;
+	Py_RETURN_NONE;
 }
 
 PyDoc_STRVAR(clear_doc, "Remove all elements from this set.");
@@ -765,8 +757,7 @@
 {
 	if (PyDict_SetItem(so->data, item, Py_True) == -1)
 		return NULL;
-	Py_INCREF(Py_None);
-	return Py_None;
+	Py_RETURN_NONE;
 }
 
 PyDoc_STRVAR(add_doc, 
@@ -790,8 +781,7 @@
 
 	if (PyDict_DelItem(so->data, item) == -1) 
 		return NULL;
-	Py_INCREF(Py_None);
-	return Py_None;
+	Py_RETURN_NONE;
 }
 
 PyDoc_STRVAR(remove_doc,
@@ -818,8 +808,7 @@
 			return NULL;
 		PyErr_Clear();
 	}
-	Py_INCREF(Py_None);
-	return Py_None;
+	Py_RETURN_NONE;
 }
 
 PyDoc_STRVAR(discard_doc,