diff --git a/OpenSSL/crypto/x509.c b/OpenSSL/crypto/x509.c
index daae351..2f12437 100644
--- a/OpenSSL/crypto/x509.c
+++ b/OpenSSL/crypto/x509.c
@@ -30,7 +30,7 @@
     if (!PyArg_ParseTuple(args, ":get_version"))
         return NULL;
 
-    return PyInt_FromLong((long)X509_get_version(self->x509));
+    return PyLong_FromLong((long)X509_get_version(self->x509));
 }
 
 static char crypto_X509_set_version_doc[] = "\n\
@@ -102,21 +102,13 @@
         return NULL;
     }
 
-    if (!PyInt_Check(serial) && !PyLong_Check(serial)) {
+    if (!PyLong_Check(serial)) {
         PyErr_SetString(
             PyExc_TypeError, "serial number must be integer");
         goto err;
     }
 
-    if ((format_args = Py_BuildValue("(O)", serial)) == NULL) {
-        goto err;
-    }
-
-    if ((format = PyString_FromString("%x")) == NULL) {
-        goto err;
-    }
-
-    if ((hex = PyString_Format(format, format_args)) == NULL) {
+    if ((hex = PyNumber_ToBase(serial, 16)) == NULL) {
         goto err;
     }
 
@@ -125,7 +117,7 @@
      * it.  If bignum is still NULL after this call, then the return value
      * is actually the result.  I hope.  -exarkun
      */
-    small_serial = BN_hex2bn(&bignum, PyString_AsString(hex));
+    small_serial = BN_hex2bn(&bignum, PyBytes_AsString(hex));
 
     Py_DECREF(format_args);
     format_args = NULL;
@@ -418,14 +410,14 @@
 	    Py_INCREF(Py_None);
 	    return Py_None;
 	} else if (timestamp->type == V_ASN1_GENERALIZEDTIME) {
-		return PyString_FromString((char *)timestamp->data);
+		return PyBytes_FromString((char *)timestamp->data);
 	} else {
 		ASN1_TIME_to_generalizedtime(timestamp, &gt_timestamp);
 		if (gt_timestamp == NULL) {
 			exception_from_error_queue(crypto_Error);
 			return NULL;
 		} else {
-			py_timestamp = PyString_FromString((char *)gt_timestamp->data);
+			py_timestamp = PyBytes_FromString((char *)gt_timestamp->data);
 			ASN1_GENERALIZEDTIME_free(gt_timestamp);
 			return py_timestamp;
 		}
@@ -582,9 +574,9 @@
 
     tnow = time(NULL);
     if (ASN1_UTCTIME_cmp_time_t(X509_get_notAfter(self->x509), tnow) < 0)
-        return PyInt_FromLong(1L);
+        return PyLong_FromLong(1L);
     else
-        return PyInt_FromLong(0L);
+        return PyLong_FromLong(0L);
 }
 
 static char crypto_X509_subject_name_hash_doc[] = "\n\
@@ -637,7 +629,7 @@
         sprintf(tmp+i*3,"%02X:",fp[i]);
     }
     tmp[3*len-1] = 0;
-    ret = PyString_FromStringAndSize(tmp,3*len-1);
+    ret = PyBytes_FromStringAndSize(tmp,3*len-1);
     free(tmp);
     return ret;
 }
@@ -783,20 +775,6 @@
     PyObject_Del(self);
 }
 
-/*
- * Find attribute
- *
- * Arguments: self - The X509 object
- *            name - The attribute name
- * Returns:   A Python object for the attribute, or NULL if something went
- *            wrong
- */
-static PyObject *
-crypto_X509_getattr(crypto_X509Obj *self, char *name)
-{
-    return Py_FindMethod(crypto_X509_methods, (PyObject *)self, name);
-}
-
 PyTypeObject crypto_X509_Type = {
     PyObject_HEAD_INIT(NULL)
     0,
@@ -805,7 +783,7 @@
     0,
     (destructor)crypto_X509_dealloc,
     NULL, /* print */
-    (getattrfunc)crypto_X509_getattr,
+    NULL, /* getattr */
     NULL, /* setattr */
     NULL, /* compare */
     NULL, /* repr */
diff --git a/OpenSSL/crypto/x509ext.h b/OpenSSL/crypto/x509ext.h
index f20e562..6ce7f68 100644
--- a/OpenSSL/crypto/x509ext.h
+++ b/OpenSSL/crypto/x509ext.h
@@ -19,8 +19,9 @@
 
 extern  PyTypeObject      crypto_X509Extension_Type;
 
-#define crypto_X509Extension_Check(v) ((v)->ob_type == \
-				       &crypto_X509Extension_Type)
+#define crypto_X509Extension_Check(v) ( \
+        PyObject_TypeCheck((v),         \
+                           &crypto_X509Extension_Type))
 
 typedef struct {
     PyObject_HEAD
diff --git a/OpenSSL/py3k.h b/OpenSSL/py3k.h
index a9e8e5c..55bcfda 100644
--- a/OpenSSL/py3k.h
+++ b/OpenSSL/py3k.h
@@ -16,6 +16,7 @@
 #define PyBytes_FromStringAndSize PyString_FromStringAndSize
 
 #define PyLong_FromLong PyInt_FromLong
+#define PyLong_Check(o) (PyInt_Check(o) || PyLong_Check(o))
 
 #define PyBytes_Size PyString_Size
 #define PyBytes_Check PyString_Check
