diff --git a/doc/tools/texinputs/howto.cls b/doc/tools/texinputs/howto.cls
index fd74133..899b4ae 100644
--- a/doc/tools/texinputs/howto.cls
+++ b/doc/tools/texinputs/howto.cls
@@ -6,7 +6,6 @@
 \ProvidesClass{howto}
              [1998/02/25 Document class (Python HOWTO)]
 
-\RequirePackage{ifpdf}
 \RequirePackage{pypaper}
 
 % Change the options here to get a different set of basic options,  This
@@ -24,7 +23,7 @@
 % distribution.
 %
 % The "fancyhdr" package makes nicer page footers reasonable to
-% implement, and is used to put the chapter and section information in
+% implement, and is used to put the chapter and section information in 
 % the footers.
 %
 \RequirePackage{fancyhdr}\typeout{Using fancier footers than usual.}
@@ -50,8 +49,7 @@
 %
 \renewcommand{\maketitle}{
   \py@doHorizontalRule
-  \ifpdf
-    \begingroup
+  \@ifundefined{pdfinfo}{}{{
     % This \def is required to deal with multi-line authors; it
     % changes \\ to ', ' (comma-space), making it pass muster for
     % generating document info in the PDF file.
@@ -60,8 +58,7 @@
       /Author (\@author)
       /Title (\@title)
     }
-    \endgroup
-  \fi
+  }}
   \begin{flushright}
     {\rm\Huge\py@HeaderFamily \@title} \par
     {\em\large\py@HeaderFamily \py@release} \par
@@ -87,7 +84,7 @@
   \py@doHorizontalRule
   \vspace{12pt}
   \py@doing@page@targetstrue
-}
+}  
 
 % Fix the theindex environment to add an entry to the Table of
 % Contents; this is much nicer than just having to jump to the end of
diff --git a/doc/tools/texinputs/manual.cls b/doc/tools/texinputs/manual.cls
index 942cb49..789cae1 100644
--- a/doc/tools/texinputs/manual.cls
+++ b/doc/tools/texinputs/manual.cls
@@ -6,7 +6,6 @@
 \ProvidesClass{manual}
              [1998/03/03 Document class (Python manual)]
 
-\RequirePackage{ifpdf}
 \RequirePackage{pypaper}
 
 % Change the options here to get a different set of basic options, but only
@@ -24,7 +23,7 @@
 % distribution.
 %
 % The "fancyhdr" package makes nicer page footers reasonable to
-% implement, and is used to put the chapter and section information in
+% implement, and is used to put the chapter and section information in 
 % the footers.
 %
 \RequirePackage{fancyhdr}\typeout{Using fancier footers than usual.}
@@ -64,8 +63,7 @@
     \let\footnotesize\small
     \let\footnoterule\relax
     \py@doHorizontalRule%
-    \ifpdf
-      \begingroup
+    \@ifundefined{pdfinfo}{}{{
       % This \def is required to deal with multi-line authors; it
       % changes \\ to ', ' (comma-space), making it pass muster for
       % generating document info in the PDF file.
@@ -74,8 +72,7 @@
         /Author (\@author)
         /Title (\@title)
       }
-      \endgroup
-    \fi
+    }}
     \begin{flushright}%
       {\rm\Huge\py@HeaderFamily \@title \par}%
       {\em\LARGE\py@HeaderFamily \py@release \par}
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);
 }
diff --git a/test/test_crypto.py b/test/test_crypto.py
index 3d49fd0..fbe5635 100644
--- a/test/test_crypto.py
+++ b/test/test_crypto.py
@@ -10,7 +10,6 @@
 from os import popen2
 from datetime import datetime, timedelta
 
-from OpenSSL import crypto
 from OpenSSL.crypto import TYPE_RSA, TYPE_DSA, Error, PKey, PKeyType
 from OpenSSL.crypto import X509, X509Type, X509Name, X509NameType
 from OpenSSL.crypto import X509Req, X509ReqType
@@ -1534,20 +1533,5 @@
 
 
 
-class ModuleTests(TestCase):
-    """
-    Tests for all objects in L{OpenSSL.crypto} module.
-    """
-
-    def test_type_module_name(self):
-        """
-        Test that all types have a sane C{__module__} attribute.
-        """
-        for name, obj in vars(crypto).items():
-            if isinstance(obj, type):
-                self.assertEqual(obj.__module__, "OpenSSL.crypto", name)
-
-
-
 if __name__ == '__main__':
     main()
diff --git a/test/test_ssl.py b/test/test_ssl.py
index 29c5c05..8a75ee0 100644
--- a/test/test_ssl.py
+++ b/test/test_ssl.py
@@ -10,7 +10,6 @@
 from os.path import join
 from unittest import main
 
-from OpenSSL import SSL
 from OpenSSL.crypto import TYPE_RSA, FILETYPE_PEM, PKey, dump_privatekey, load_certificate, load_privatekey
 from OpenSSL.SSL import WantReadError, Context, ContextType, Connection, ConnectionType, Error
 from OpenSSL.SSL import SSLv2_METHOD, SSLv3_METHOD, SSLv23_METHOD, TLSv1_METHOD
@@ -703,20 +702,6 @@
         self._check_client_CA_list(set_replaces_add_CA)
 
 
-class ModuleTests(TestCase):
-    """
-    Tests for all objects in L{OpenSSL.crypto} module.
-    """
-
-    def test_type_module_name(self):
-        """
-        Test that all types have a sane C{__module__} attribute.
-        """
-        for name, obj in vars(SSL).items():
-            if isinstance(obj, type):
-                self.assertEqual(obj.__module__, "OpenSSL.SSL", name)
-
-
 
 if __name__ == '__main__':
     main()
