diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 5d22404..0cf71b5 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -1814,10 +1814,11 @@
 	{NULL,		NULL}	/* sentinel */
 };
 
-static int
-dict_contains(dictobject *mp, PyObject *key)
+int
+PyDict_Contains(PyObject *op, PyObject *key)
 {
 	long hash;
+	dictobject *mp = (dictobject *)op;
 
 	if (!PyString_CheckExact(key) ||
 	    (hash = ((PyStringObject *) key)->ob_shash) == -1) {
@@ -1837,7 +1838,7 @@
 	0,					/* sq_slice */
 	0,					/* sq_ass_item */
 	0,					/* sq_ass_slice */
-	(objobjproc)dict_contains,		/* sq_contains */
+	(objobjproc)PyDict_Contains,		/* sq_contains */
 	0,					/* sq_inplace_concat */
 	0,					/* sq_inplace_repeat */
 };
diff --git a/Objects/setobject.c b/Objects/setobject.c
index ce3f84e..c060077 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -143,13 +143,13 @@
 	PyObject *tmp;
 	int result;
 
-	result = PySequence_Contains(so->data, key);
+	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 -1;
-		result = PySequence_Contains(so->data, tmp);
+		result = PyDict_Contains(so->data, tmp);
 		Py_DECREF(tmp);
 	}
 	return result;
@@ -252,7 +252,7 @@
 	}
 
 	while ((item = PyIter_Next(it)) != NULL) {
-		if (PySequence_Contains(selfdata, item)) {
+		if (PyDict_Contains(selfdata, item)) {
 			if (PyDict_SetItem(tgtdata, item, Py_True) == -1) {
 				Py_DECREF(it);
 				Py_DECREF(result);
@@ -292,7 +292,7 @@
 
 	selfdata = so->data;
 	while ((item = PyIter_Next(it)) != NULL) {
-		if (PySequence_Contains(selfdata, item)) {
+		if (PyDict_Contains(selfdata, item)) {
 			if (PyDict_SetItem(newdict, item, Py_True) == -1) {
 				Py_DECREF(newdict);
 				Py_DECREF(it);
@@ -375,7 +375,7 @@
 	}
 
 	while ((item = PyIter_Next(it)) != NULL) {
-		if (!PySequence_Contains(otherdata, item)) {
+		if (!PyDict_Contains(otherdata, item)) {
 			if (PyDict_SetItem(tgtdata, item, Py_True) == -1) {
 				Py_XDECREF(otherset);
 				Py_DECREF(it);
@@ -481,7 +481,7 @@
 		return NULL;
 
 	while ((item = PyIter_Next(it)) != NULL) {
-		if (PySequence_Contains(selfdata, item)) {
+		if (PyDict_Contains(selfdata, item)) {
 			if (PyDict_DelItem(selfdata, item) == -1) {
 				Py_XDECREF(otherset);
 				Py_DECREF(it);
@@ -541,7 +541,7 @@
 		return NULL;
 	}
 	while ((item = PyIter_Next(it)) != NULL) {
-		if (!PySequence_Contains(selfdata, item)) {
+		if (!PyDict_Contains(selfdata, item)) {
 			if (PyDict_SetItem(tgtdata, item, Py_True) == -1) {
 				Py_DECREF(it);
 				Py_DECREF(item);
@@ -562,7 +562,7 @@
 		return NULL;
 	}
 	while ((item = PyIter_Next(it)) != NULL) {
-		if (!PySequence_Contains(otherdata, item)) {
+		if (!PyDict_Contains(otherdata, item)) {
 			if (PyDict_SetItem(tgtdata, item, Py_True) == -1) {
 				Py_DECREF(it);
 				Py_DECREF(item);
@@ -634,7 +634,7 @@
 
 	otherdata = ((PySetObject *)other)->data;
 	while ((item = PyIter_Next(it)) != NULL) {
-		if (!PySequence_Contains(otherdata, item)) {
+		if (!PyDict_Contains(otherdata, item)) {
 			Py_DECREF(it);
 			Py_DECREF(item);
 			Py_RETURN_FALSE;
