diff --git a/Lib/ssl.py b/Lib/ssl.py
index a6619d6..be13866 100644
--- a/Lib/ssl.py
+++ b/Lib/ssl.py
@@ -148,10 +148,6 @@
         self.do_handshake_on_connect = do_handshake_on_connect
         self.suppress_ragged_eofs = suppress_ragged_eofs
 
-    # See Modules/_ssl.c:PySSL_dealloc()
-    # def __del__(self):
-    #    self._real_close()
-
     def dup(self):
         raise NotImplemented("Can't dup() %s instances" %
                              self.__class__.__name__)
@@ -304,7 +300,6 @@
         socket.shutdown(self, how)
 
     def _real_close(self):
-        # real close is called by Modules/_ssl.c:PySSL_dealloc()
         self._sslobj = None
         # self._closed = True
         if self._base:
@@ -353,6 +348,10 @@
                               self.do_handshake_on_connect),
                 addr)
 
+
+    def __del__(self):
+        self._real_close()
+
 def wrap_socket(sock, keyfile=None, certfile=None,
                 server_side=False, cert_reqs=CERT_NONE,
                 ssl_version=PROTOCOL_SSLv23, ca_certs=None,
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index 1aedaf8..bd3f172 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -266,7 +266,7 @@
 	int ret;
 	int verification_mode;
 
-	self = PyObject_GC_New(PySSLObject, &PySSL_Type); /* Create new object */
+	self = PyObject_New(PySSLObject, &PySSL_Type); /* Create new object */
 	if (self == NULL)
 		return NULL;
 	self->peer_cert = NULL;
@@ -385,7 +385,6 @@
 
 	self->Socket = Sock;
 	Py_INCREF(self->Socket);
-	_PyObject_GC_TRACK(self);
 	return self;
  fail:
 	if (errstr)
@@ -1051,41 +1050,16 @@
 	return NULL;
 }
 
-/* GC support. */
-static int
-PySSL_traverse(PySSLObject *self, visitproc visit, void *arg)
+static void PySSL_dealloc(PySSLObject *self)
 {
-	Py_VISIT(self->Socket);
-	return 0;
-}
-
-static int
-PySSL_clear(PySSLObject *self)
-{
-	Py_CLEAR(self->Socket);
-	return 0;
-}
-
-static void
-PySSL_dealloc(PySSLObject *self)
-{
-	PyObject *o;
-	PyObject *exc_type, *exc_value, *exc_tb;
-
-	PyErr_Fetch(&exc_type, &exc_value, &exc_tb);
-	o = PyObject_CallMethod((PyObject*)self, "_real_close", NULL);
-	Py_XDECREF(o);
-	PyErr_Restore(exc_type, exc_value, exc_tb);
-	
-	PyObject_GC_UnTrack(self);
 	if (self->peer_cert)	/* Possible not to have one? */
-		X509_free(self->peer_cert);
+		X509_free (self->peer_cert);
 	if (self->ssl)
 		SSL_free(self->ssl);
 	if (self->ctx)
 		SSL_CTX_free(self->ctx);
-	Py_CLEAR(self->Socket);
-	Py_Type(self)->tp_free((PyObject *)self);
+	Py_XDECREF(self->Socket);
+	PyObject_Del(self);
 }
 
 /* If the socket has a timeout, do a select()/poll() on the socket.
@@ -1385,15 +1359,20 @@
 	{NULL, NULL}
 };
 
+static PyObject *PySSL_getattr(PySSLObject *self, char *name)
+{
+	return Py_FindMethod(PySSLMethods, (PyObject *)self, name);
+}
+
 static PyTypeObject PySSL_Type = {
 	PyVarObject_HEAD_INIT(NULL, 0)
-	"_ssl.SSLContext",		/*tp_name*/
+	"ssl.SSLContext",		/*tp_name*/
 	sizeof(PySSLObject),		/*tp_basicsize*/
 	0,				/*tp_itemsize*/
 	/* methods */
 	(destructor)PySSL_dealloc,	/*tp_dealloc*/
 	0,				/*tp_print*/
-	0,				/*tp_getattr*/
+	(getattrfunc)PySSL_getattr,	/*tp_getattr*/
 	0,				/*tp_setattr*/
 	0,				/*tp_compare*/
 	0,				/*tp_repr*/
@@ -1401,32 +1380,6 @@
 	0,				/*tp_as_sequence*/
 	0,				/*tp_as_mapping*/
 	0,				/*tp_hash*/
-	0,				/* tp_call */
-	0,				/* tp_str */
-	PyObject_GenericGetAttr,	/* tp_getattro */
-	0,				/* tp_setattro */
-	0,				/* tp_as_buffer */
-	Py_TPFLAGS_DEFAULT | 
-		Py_TPFLAGS_HAVE_GC,	/* tp_flags */
-	0,				/* tp_doc */
-	(traverseproc)PySSL_traverse,	/* tp_traverse */
-	(inquiry)PySSL_clear,		/* tp_clear */
-	0,				/* tp_richcompare */
-	0,				/* tp_weaklistoffset */
-	0,				/* tp_iter */
-	0,				/* tp_iternext */
-	PySSLMethods,			/* tp_methods */
-	0,				/* tp_members */
-	0,				/* tp_getset */
-	0,				/* tp_base */
-	0,				/* tp_dict */
-	0,				/* tp_descr_get */
-	0,				/* tp_descr_set */
-	0,				/* tp_dictoffset */
-	0,				/* tp_init */
-	PyType_GenericAlloc,		/* tp_alloc */
-	PyType_GenericNew,		/* tp_new */
-	PyObject_GC_Del,		/* tp_free */
 };
 
 #ifdef HAVE_OPENSSL_RAND
