diff --git a/src/crypto/netscape_spki.c b/src/crypto/netscape_spki.c
index 51bb83e..4fa9d8d 100644
--- a/src/crypto/netscape_spki.c
+++ b/src/crypto/netscape_spki.c
@@ -243,7 +243,7 @@
 PyTypeObject crypto_NetscapeSPKI_Type = {
     PyObject_HEAD_INIT(NULL)
     0,
-    "OpenSSL.crypto.NetscapeSPKI",
+    "NetscapeSPKI",
     sizeof(crypto_NetscapeSPKIObj),
     0,
     (destructor)crypto_NetscapeSPKI_dealloc,
diff --git a/src/crypto/pkcs12.c b/src/crypto/pkcs12.c
index da58df9..2302242 100644
--- a/src/crypto/pkcs12.c
+++ b/src/crypto/pkcs12.c
@@ -71,14 +71,14 @@
 \n\
 @returns: PKey object containing the private key\n\
 ";
-static PyObject *
+static crypto_PKeyObj *
 crypto_PKCS12_get_privatekey(crypto_PKCS12Obj *self, PyObject *args)
 {
     if (!PyArg_ParseTuple(args, ":get_privatekey"))
         return NULL;
 
     Py_INCREF(self->key);
-    return self->key;
+    return (crypto_PKeyObj *) self->key;
 }
 
 static char crypto_PKCS12_set_privatekey_doc[] = "\n\
@@ -514,7 +514,7 @@
 PyTypeObject crypto_PKCS12_Type = {
     PyObject_HEAD_INIT(NULL)
     0,
-    "OpenSSL.crypto.PKCS12",
+    "PKCS12",
     sizeof(crypto_PKCS12Obj),
     0,
     (destructor)crypto_PKCS12_dealloc,
diff --git a/src/crypto/pkcs7.c b/src/crypto/pkcs7.c
index ad9cbae..1cb0813 100644
--- a/src/crypto/pkcs7.c
+++ b/src/crypto/pkcs7.c
@@ -177,7 +177,7 @@
 PyTypeObject crypto_PKCS7_Type = {
     PyObject_HEAD_INIT(NULL)
     0,
-    "OpenSSL.crypto.PKCS7",
+    "PKCS7",
     sizeof(crypto_PKCS7Obj),
     0,
     (destructor)crypto_PKCS7_dealloc,
diff --git a/src/crypto/x509.c b/src/crypto/x509.c
index 7d3e46d..e089d40 100644
--- a/src/crypto/x509.c
+++ b/src/crypto/x509.c
@@ -800,7 +800,7 @@
 PyTypeObject crypto_X509_Type = {
     PyObject_HEAD_INIT(NULL)
     0,
-    "OpenSSL.crypto.X509",
+    "X509",
     sizeof(crypto_X509Obj),
     0,
     (destructor)crypto_X509_dealloc,
diff --git a/src/crypto/x509ext.c b/src/crypto/x509ext.c
index a8e5f14..90ef543 100644
--- a/src/crypto/x509ext.c
+++ b/src/crypto/x509ext.c
@@ -256,7 +256,7 @@
 PyTypeObject crypto_X509Extension_Type = {
     PyObject_HEAD_INIT(NULL)
     0,
-    "OpenSSL.crypto.X509Extension",
+    "X509Extension",
     sizeof(crypto_X509ExtensionObj),
     0,
     (destructor)crypto_X509Extension_dealloc, 
diff --git a/src/crypto/x509name.c b/src/crypto/x509name.c
index 77046fb..39fdcf8 100644
--- a/src/crypto/x509name.c
+++ b/src/crypto/x509name.c
@@ -55,22 +55,12 @@
 crypto_X509Name_new(PyTypeObject *subtype, PyObject *args, PyObject *kwargs)
 {
     crypto_X509NameObj *name;
-    X509_NAME *sslname;
-    PyObject *newname;
 
     if (!PyArg_ParseTuple(args, "O!:X509Name", &crypto_X509Name_Type, &name)) {
         return NULL;
     }
-    sslname = X509_NAME_dup(name->x509_name);
-    if (sslname == NULL) {
-        exception_from_error_queue(crypto_Error);
-        return NULL;
-    }
-    newname = (PyObject *)crypto_X509Name_New(sslname, 1);
-    if (newname == NULL) {
-        X509_NAME_free(sslname);
-    }
-    return newname;
+
+    return (PyObject *)crypto_X509Name_New(X509_NAME_dup(name->x509_name), 1);
 }
 
 
@@ -433,7 +423,7 @@
 PyTypeObject crypto_X509Name_Type = {
     PyObject_HEAD_INIT(NULL)
     0,
-    "OpenSSL.crypto.X509Name",
+    "X509Name",
     sizeof(crypto_X509NameObj),
     0,
     (destructor)crypto_X509Name_dealloc,
diff --git a/src/crypto/x509req.c b/src/crypto/x509req.c
index 486df93..07bd44b 100644
--- a/src/crypto/x509req.c
+++ b/src/crypto/x509req.c
@@ -372,7 +372,7 @@
 PyTypeObject crypto_X509Req_Type = {
     PyObject_HEAD_INIT(NULL)
     0,
-    "OpenSSL.crypto.X509Req",
+    "X509Req",
     sizeof(crypto_X509ReqObj),
     0,
     (destructor)crypto_X509Req_dealloc,
diff --git a/src/crypto/x509store.c b/src/crypto/x509store.c
index ce67e46..16af3b0 100644
--- a/src/crypto/x509store.c
+++ b/src/crypto/x509store.c
@@ -109,7 +109,7 @@
 PyTypeObject crypto_X509Store_Type = {
     PyObject_HEAD_INIT(NULL)
     0,
-    "OpenSSL.crypto.X509Store",
+    "X509Store",
     sizeof(crypto_X509StoreObj),
     0,
     (destructor)crypto_X509Store_dealloc,
diff --git a/src/ssl/connection.c b/src/ssl/connection.c
index bd39b66..90a9652 100755
--- a/src/ssl/connection.c
+++ b/src/ssl/connection.c
@@ -819,21 +819,10 @@
         return NULL;
 
     lst = PyList_New(0);
-    if (lst == NULL) {
-        return NULL;
-    }
     while ((ret = SSL_get_cipher_list(self->ssl, idx)) != NULL)
     {
         item = PyString_FromString(ret);
-        if (item == NULL) {
-            Py_DECREF(lst);
-            return NULL;
-        }
-        if (PyList_Append(lst, item)) {
-            Py_DECREF(lst);
-            Py_DECREF(item);
-            return NULL;
-        }
+        PyList_Append(lst, item);
         Py_DECREF(item);
         idx++;
     }
diff --git a/src/ssl/context.c b/src/ssl/context.c
index a3d798e..d03e92c 100644
--- a/src/ssl/context.c
+++ b/src/ssl/context.c
@@ -347,17 +347,11 @@
 static PyTypeObject *
 import_crypto_type(const char *name, size_t objsize)
 {
-    PyObject *module, *type;
+    PyObject *module, *type, *name_attr;
     PyTypeObject *res;
-    char modname[] = "OpenSSL.crypto";
-    char buffer[256] = "OpenSSL.crypto.";
+    int right_name;
 
-    if (strlen(buffer) + strlen(name) >= sizeof(buffer)) {
-        PyErr_BadInternalCall();
-        return NULL;
-    }
-    strcat(buffer, name);
-    module = PyImport_ImportModule(modname);
+    module = PyImport_ImportModule("OpenSSL.crypto");
     if (module == NULL) {
         return NULL;
     }
@@ -370,8 +364,16 @@
         Py_DECREF(type);
         return type_modified_error(name);
     }
+    name_attr = PyObject_GetAttrString(type, "__name__");
+    if (name_attr == NULL) {
+        Py_DECREF(type);
+        return NULL;
+    }
+    right_name = (PyString_CheckExact(name_attr) &&
+                  strcmp(name, PyString_AsString(name_attr)) == 0);
+    Py_DECREF(name_attr);
     res = (PyTypeObject *)type;
-    if (strcmp(buffer, res->tp_name) != 0 || res->tp_basicsize != objsize) {
+    if (!right_name || res->tp_basicsize != objsize) {
         Py_DECREF(type);
         return type_modified_error(name);
     }
diff --git a/src/util.c b/src/util.c
index 0ad93e3..ae6ee5e 100644
--- a/src/util.c
+++ b/src/util.c
@@ -22,40 +22,26 @@
 PyObject *
 error_queue_to_list(void) {
     PyObject *errlist, *tuple;
-    int failed;
     long err;
 
     errlist = PyList_New(0);
-    if (errlist == NULL) {
-        return NULL;
-    }
+
     while ((err = ERR_get_error()) != 0) {
-        tuple = Py_BuildValue("(sss)", ERR_lib_error_string(err),
-                                       ERR_func_error_string(err),
-                                       ERR_reason_error_string(err));
-        if (tuple == NULL) {
-            Py_DECREF(errlist);
-            return NULL;
-        }
-        failed = PyList_Append(errlist, tuple);
+	tuple = Py_BuildValue("(sss)", ERR_lib_error_string(err),
+		                       ERR_func_error_string(err),
+				       ERR_reason_error_string(err));
+        PyList_Append(errlist, tuple);
         Py_DECREF(tuple);
-        if (failed) {
-            Py_DECREF(errlist);
-            return NULL;
-        }
     }
 
     return errlist;
 }
 
-void exception_from_error_queue(PyObject *the_Error) {
+void exception_from_error_queue(PyObject *the_Error) { 
     PyObject *errlist = error_queue_to_list();
-
-    if (errlist != NULL) {
-        PyErr_SetObject(the_Error, errlist);
-        Py_DECREF(errlist);
-    }
-}
+    PyErr_SetObject(the_Error, errlist);
+    Py_DECREF(errlist);
+} 
 
 /*
  * Flush OpenSSL's error queue and ignore the result
@@ -71,5 +57,5 @@
      * very nasty things if we just invoked it with error_queue_to_list().
      */
     PyObject *list = error_queue_to_list();
-    Py_XDECREF(list);
+    Py_DECREF(list);
 }
