diff --git a/ChangeLog b/ChangeLog
index d1b046e..5a68f4a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-12-28  Jean-Paul Calderone  <exarkun@twistedmatrix.com>
+
+	* test/test_crypto.py, src/crypto/x509req.c: Added get_version and
+	  set_version_methods to X509ReqType based on patch from Wouter van
+	  Bommel.  Resolves LP#274418.
+
 2008-09-22  Jean-Paul Calderone  <exarkun@twistedmatrix.com>
 
 	* Release 0.8
diff --git a/doc/pyOpenSSL.tex b/doc/pyOpenSSL.tex
index 4252cac..a1b303f 100644
--- a/doc/pyOpenSSL.tex
+++ b/doc/pyOpenSSL.tex
@@ -454,6 +454,15 @@
 Verify a certificate request using the public key \var{pkey}.
 \end{methoddesc}
 
+\begin{methoddesc}[X509Req]{set_version}{version}
+Set the version (RFC 2459, 4.1.2.1) of the certificate request to
+\var{version}.
+\end{methoddesc}
+
+\begin{methoddesc}[X509Req]{get_version}{}
+Get the version (RFC 2459, 4.1.2.1) of the certificate request.
+\end{methoddesc}
+
 \subsubsection{X509Store objects \label{openssl-x509store}}
 
 The X509Store object has currently just one method:
diff --git a/src/crypto/x509req.c b/src/crypto/x509req.c
index f367360..bb6385f 100644
--- a/src/crypto/x509req.c
+++ b/src/crypto/x509req.c
@@ -239,6 +239,56 @@
     return Py_None;
 }
 
+static char crypto_X509Req_set_version_doc[] = "\n\
+Set the version subfield (RFC 2459, section 4.1.2.1) of the certificate\n\
+request.\n\
+\n\
+Arguments: self - X509Req object\n\
+           args - The Python argument tuple, should be:\n\
+             version - The version number\n\
+Returns:   None\n\
+";
+
+static PyObject *
+crypto_X509Req_set_version(crypto_X509ReqObj *self, PyObject *args)
+{
+    long version;
+
+    if (!PyArg_ParseTuple(args, "l:set_version", &version)) {
+        return NULL;
+    }
+
+    if (!X509_REQ_set_version(self->x509_req, version)) {
+        return NULL;
+    }
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+static char crypto_X509Req_get_version_doc[] = "\n\
+Get the version subfield (RFC 2459, section 4.1.2.1) of the certificate\n\
+request.\n\
+\n\
+Arguments: self - X509Req object\n\
+           args - The Python argument tuple, should be empty.\n\
+Returns:   an integer giving the value of the version subfield\n\
+";
+
+static PyObject *
+crypto_X509Req_get_version(crypto_X509ReqObj *self, PyObject *args)
+{
+    long version;
+
+    if (!PyArg_ParseTuple(args, ":get_version")) {
+        return NULL;
+    }
+
+    version = X509_REQ_get_version(self->x509_req);
+
+    return PyLong_FromLong(version);
+}
+
 /*
  * ADD_METHOD(name) expands to a correct PyMethodDef declaration
  *   {  'name', (PyCFunction)crypto_X509Req_name, METH_VARARGS }
@@ -254,6 +304,8 @@
     ADD_METHOD(sign),
     ADD_METHOD(verify),
     ADD_METHOD(add_extensions),
+    ADD_METHOD(set_version),
+    ADD_METHOD(get_version),
     { NULL, NULL }
 };
 #undef ADD_METHOD
diff --git a/test/test_crypto.py b/test/test_crypto.py
index 31ceb2d..ffc4f35 100644
--- a/test/test_crypto.py
+++ b/test/test_crypto.py
@@ -419,6 +419,20 @@
             "%r is of type %r, should be %r" % (request, type(request), X509ReqType))
 
 
+    def test_version(self):
+        """
+        L{X509ReqType.set_version} sets the X.509 version of the certificate
+        request.  L{X509ReqType.get_version} returns the X.509 version of
+        the certificate request.  The initial value of the version is 0.
+        """
+        request = X509Req()
+        self.assertEqual(request.get_version(), 0)
+        request.set_version(1)
+        self.assertEqual(request.get_version(), 1)
+        request.set_version(3)
+        self.assertEqual(request.get_version(), 3)
+
+
     def test_get_subject(self):
         """
         L{X509ReqType.get_subject} returns an L{X509Name} for the subject of
