diff --git a/OpenSSL/py3k.h b/OpenSSL/py3k.h
index 443ad8d..e267af1 100644
--- a/OpenSSL/py3k.h
+++ b/OpenSSL/py3k.h
@@ -19,6 +19,7 @@
 #define PyBytes_FromStringAndSize PyString_FromStringAndSize
 
 #define PyLong_FromLong PyInt_FromLong
+#define PyLong_AsLong PyInt_AsLong
 #define PyLong_Check(o) (PyInt_Check(o) || PyLong_Check(o))
 
 #define PyBytes_Size PyString_Size
diff --git a/OpenSSL/ssl/connection.c b/OpenSSL/ssl/connection.c
index d53f45c..741c130 100755
--- a/OpenSSL/ssl/connection.c
+++ b/OpenSSL/ssl/connection.c
@@ -276,7 +276,7 @@
     }
 
     ret = SSL_pending(self->ssl);
-    return PyInt_FromLong((long)ret);
+    return PyLong_FromLong((long)ret);
 }
 
 static char ssl_Connection_bio_write_doc[] = "\n\
@@ -317,7 +317,7 @@
         return NULL;
     }
 
-    return PyInt_FromLong((long)ret);
+    return PyLong_FromLong((long)ret);
 }
 
 static char ssl_Connection_send_doc[] = "\n\
@@ -352,7 +352,7 @@
     err = SSL_get_error(self->ssl, ret);
     if (err == SSL_ERROR_NONE)
     {
-        return PyInt_FromLong((long)ret);
+        return PyLong_FromLong((long)ret);
     }
     else
     {
@@ -429,12 +429,12 @@
     if (!PyArg_ParseTuple(args, "i|i:recv", &bufsiz, &flags))
         return NULL;
 
-    buf = PyString_FromStringAndSize(NULL, bufsiz);
+    buf = PyBytes_FromStringAndSize(NULL, bufsiz);
     if (buf == NULL)
         return NULL;
 
     MY_BEGIN_ALLOW_THREADS(self->tstate)
-    ret = SSL_read(self->ssl, PyString_AsString(buf), bufsiz);
+    ret = SSL_read(self->ssl, PyBytes_AsString(buf), bufsiz);
     MY_END_ALLOW_THREADS(self->tstate)
 
     if (PyErr_Occurred())
@@ -447,7 +447,7 @@
     err = SSL_get_error(self->ssl, ret);
     if (err == SSL_ERROR_NONE)
     {
-        if (ret != bufsiz && _PyString_Resize(&buf, ret) < 0)
+        if (ret != bufsiz && _PyBytes_Resize(&buf, ret) < 0)
             return NULL;
         return buf;
     }
@@ -481,11 +481,11 @@
     if (!PyArg_ParseTuple(args, "i:bio_read", &bufsiz))
         return NULL;
 
-    buf = PyString_FromStringAndSize(NULL, bufsiz);
+    buf = PyBytes_FromStringAndSize(NULL, bufsiz);
     if (buf == NULL)
         return NULL;
 
-    ret = BIO_read(self->from_ssl, PyString_AsString(buf), bufsiz);
+    ret = BIO_read(self->from_ssl, PyBytes_AsString(buf), bufsiz);
 
     if (PyErr_Occurred())
     {
@@ -506,7 +506,7 @@
     /*
      * Shrink the string to match the number of bytes we actually read.
      */
-    if (ret != bufsiz && _PyString_Resize(&buf, ret) < 0)
+    if (ret != bufsiz && _PyBytes_Resize(&buf, ret) < 0)
     {
         Py_DECREF(buf);
         return NULL;
@@ -536,7 +536,7 @@
         return NULL;
     }
 
-    return PyInt_FromLong((long)ret);
+    return PyLong_FromLong((long)ret);
 }
 
 static char ssl_Connection_do_handshake_doc[] = "\n\
@@ -589,7 +589,7 @@
     if (!PyArg_ParseTuple(args, ":renegotiate_pending"))
         return NULL;
 
-    return PyInt_FromLong((long)SSL_renegotiate_pending(self->ssl));
+    return PyLong_FromLong((long)SSL_renegotiate_pending(self->ssl));
 }
 #endif
 
@@ -604,7 +604,7 @@
     if (!PyArg_ParseTuple(args, ":total_renegotiations"))
         return NULL;
 
-    return PyInt_FromLong(SSL_total_renegotiations(self->ssl));
+    return PyLong_FromLong(SSL_total_renegotiations(self->ssl));
 }
 
 static char ssl_Connection_set_accept_state_doc[] = "\n\
@@ -686,11 +686,6 @@
 
     ret = PyEval_CallObject(meth, args);
     Py_DECREF(meth);
-    if (ret == NULL)
-        return NULL;
-    if (PyInt_Check(ret) && PyInt_AsLong(ret) != 0)
-        return ret;
-
     return ret;
 }
 
@@ -820,7 +815,7 @@
     lst = PyList_New(0);
     while ((ret = SSL_get_cipher_list(self->ssl, idx)) != NULL)
     {
-        item = PyString_FromString(ret);
+        item = PyText_FromString(ret);
         PyList_Append(lst, item);
         Py_DECREF(item);
         idx++;
@@ -942,7 +937,7 @@
     if (!PyArg_ParseTuple(args, ":get_shutdown"))
         return NULL;
 
-    return PyInt_FromLong((long)SSL_get_shutdown(self->ssl));
+    return PyLong_FromLong((long)SSL_get_shutdown(self->ssl));
 }
 
 static char ssl_Connection_set_shutdown_doc[] = "\n\
@@ -975,7 +970,7 @@
     if (!PyArg_ParseTuple(args, ":state_string"))
         return NULL;
 
-    return PyString_FromString(SSL_state_string_long(self->ssl));
+    return PyText_FromString(SSL_state_string_long(self->ssl));
 }
 
 static char ssl_Connection_client_random_doc[] = "\n\
@@ -993,7 +988,7 @@
         Py_INCREF(Py_None);
         return Py_None;
     }
-    return PyString_FromStringAndSize( (const char *) self->ssl->s3->client_random, SSL3_RANDOM_SIZE);
+    return PyBytes_FromStringAndSize( (const char *) self->ssl->s3->client_random, SSL3_RANDOM_SIZE);
 }
 
 static char ssl_Connection_server_random_doc[] = "\n\
@@ -1011,7 +1006,7 @@
         Py_INCREF(Py_None);
         return Py_None;
     }
-    return PyString_FromStringAndSize( (const char *) self->ssl->s3->server_random, SSL3_RANDOM_SIZE);
+    return PyBytes_FromStringAndSize( (const char *) self->ssl->s3->server_random, SSL3_RANDOM_SIZE);
 }
 
 static char ssl_Connection_master_key_doc[] = "\n\
@@ -1029,7 +1024,7 @@
         Py_INCREF(Py_None);
         return Py_None;
     }
-    return PyString_FromStringAndSize( (const char *) self->ssl->session->master_key, self->ssl->session->master_key_length);
+    return PyBytes_FromStringAndSize( (const char *) self->ssl->session->master_key, self->ssl->session->master_key_length);
 }
 
 static char ssl_Connection_sock_shutdown_doc[] = "\n\
@@ -1086,7 +1081,7 @@
     if (!PyArg_ParseTuple(args, ":want_read"))
         return NULL;
 
-    return PyInt_FromLong((long)SSL_want_read(self->ssl));
+    return PyLong_FromLong((long)SSL_want_read(self->ssl));
 }
 
 static char ssl_Connection_want_write_doc[] = "\n\
@@ -1101,7 +1096,7 @@
     if (!PyArg_ParseTuple(args, ":want_write"))
         return NULL;
 
-    return PyInt_FromLong((long)SSL_want_write(self->ssl));
+    return PyLong_FromLong((long)SSL_want_write(self->ssl));
 }
 
 /*
@@ -1284,8 +1279,8 @@
 ssl_Connection_getattr(ssl_ConnectionObj *self, char *name)
 {
     PyObject *meth;
-    
-    meth = Py_FindMethod(ssl_Connection_methods, (PyObject *)self, name);
+
+    meth = ssl_Connection_Type.tp_getattr((PyObject *)self, name);
 
     if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_AttributeError))
     {
@@ -1357,8 +1352,7 @@
 }
 
 PyTypeObject ssl_Connection_Type = {
-    PyObject_HEAD_INIT(NULL)
-    0,
+    PyVarObject_HEAD_INIT(&PyType_Type, 0)
     "OpenSSL.SSL.Connection",
     sizeof(ssl_ConnectionObj),
     0,
diff --git a/OpenSSL/ssl/context.c b/OpenSSL/ssl/context.c
index 98cc01c..bfd8ffe 100644
--- a/OpenSSL/ssl/context.c
+++ b/OpenSSL/ssl/context.c
@@ -115,7 +115,7 @@
 	goto out;
     }
 
-    if (!PyString_Check(ret)) {
+    if (!PyBytes_Check(ret)) {
         /*
          * XXX Returned something that wasn't a string.  This is bogus.  We'll
          * return 0 and OpenSSL will treat it as an error, resulting in an
@@ -125,7 +125,7 @@
         goto out;
     }
 
-    len = PyString_Size(ret);
+    len = PyBytes_Size(ret);
     if (len > maxlen) {
         /*
          * Returned more than we said they were allowed to return.  Just
@@ -135,7 +135,7 @@
         len = maxlen;
     }
 
-    str = PyString_AsString(ret);
+    str = PyBytes_AsString(ret);
     strncpy(buf, str, len);
     Py_XDECREF(ret);
 
@@ -723,7 +723,7 @@
         return NULL;
 
     mode = SSL_CTX_get_verify_mode(self->ctx);
-    return PyInt_FromLong((long)mode);
+    return PyLong_FromLong((long)mode);
 }
 
 static char ssl_Context_get_verify_depth_doc[] = "\n\
@@ -740,7 +740,7 @@
         return NULL;
 
     depth = SSL_CTX_get_verify_depth(self->ctx);
-    return PyInt_FromLong((long)depth);
+    return PyLong_FromLong((long)depth);
 }
 
 static char ssl_Context_load_tmp_dh_doc[] = "\n\
@@ -1042,7 +1042,7 @@
     if (!PyArg_ParseTuple(args, "l:set_options", &options))
         return NULL;
 
-    return PyInt_FromLong(SSL_CTX_set_options(self->ctx, options));
+    return PyLong_FromLong(SSL_CTX_set_options(self->ctx, options));
 }
 
 
@@ -1243,8 +1243,7 @@
 
 
 PyTypeObject ssl_Context_Type = {
-    PyObject_HEAD_INIT(NULL)
-    0,
+    PyVarObject_HEAD_INIT(&PyType_Type, 0)
     "OpenSSL.SSL.Context",
     sizeof(ssl_ContextObj),
     0,
diff --git a/OpenSSL/ssl/ssl.c b/OpenSSL/ssl/ssl.c
index 94d4844..00b9617 100644
--- a/OpenSSL/ssl/ssl.c
+++ b/OpenSSL/ssl/ssl.c
@@ -30,7 +30,9 @@
 See the file RATIONALE for a short explanation of why this module was written.\n\
 ";
 
+#ifndef PY3
 void **crypto_API;
+#endif
 
 int _pyOpenSSL_tstate_key;
 
@@ -48,34 +50,51 @@
     { NULL, NULL }
 };
 
+#ifdef PY3
+static struct PyModuleDef sslmodule = {
+    PyModuleDef_HEAD_INIT,
+    "SSL",
+    ssl_doc,
+    -1,
+    ssl_methods
+};
+#endif
+
 /*
  * Initialize SSL sub module
  *
  * Arguments: None
  * Returns:   None
  */
-void
-initSSL(void)
-{
+PyOpenSSL_MODINIT(SSL) {
+    PyObject *module;
+#ifndef PY3
     static void *ssl_API[ssl_API_pointers];
     PyObject *ssl_api_object;
-    PyObject *module;
+
+    import_crypto();
+#endif
 
     SSL_library_init();
     ERR_load_SSL_strings();
 
-    import_crypto();
-
-    if ((module = Py_InitModule3("SSL", ssl_methods, ssl_doc)) == NULL) {
-        return;
+#ifdef PY3
+    module = PyModule_Create(&sslmodule);
+#else
+    module = Py_InitModule3("SSL", ssl_methods, ssl_doc);
+#endif
+    if (module == NULL) {
+        return NULL;
     }
 
+#ifndef PY3
     /* Initialize the C API pointer array */
     ssl_API[ssl_Context_New_NUM]    = (void *)ssl_Context_New;
     ssl_API[ssl_Connection_New_NUM] = (void *)ssl_Connection_New;
     ssl_api_object = PyCObject_FromVoidPtr((void *)ssl_API, NULL);
     if (ssl_api_object != NULL)
         PyModule_AddObject(module, "_C_API", ssl_api_object);
+#endif
 
     /* Exceptions */
 /*
@@ -177,6 +196,14 @@
     _pyOpenSSL_tstate_key = PyThread_create_key();
 #endif
 
-  error:
+#ifdef PY3
+    return module;
+#endif
+
+error:
+#ifdef PY3
+    return NULL;
+#else
     ;
+#endif
 }
