diff --git a/ChangeLog b/ChangeLog
index bd2e7f1..75a9745 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2008-12-31  Jean-Paul Calderone  <exarkun@twistedmatrix.com>
 
+	* src/crypto/x509ext.c, test/test_crypto.py: Add the get_short_name
+	  method to X509Extension based on patch from Alex Stapleton.
+	
+2008-12-31  Jean-Paul Calderone  <exarkun@twistedmatrix.com>
+
 	* src/crypto/x509ext.c, test/test_crypto.py: Fix X509Extension so
 	  that it is possible to instantiate extensions which use s2i or r2i
 	  instead of v2i (an extremely obscure extension implementation
diff --git a/doc/pyOpenSSL.tex b/doc/pyOpenSSL.tex
index 46318ea..ebd08ff 100644
--- a/doc/pyOpenSSL.tex
+++ b/doc/pyOpenSSL.tex
@@ -534,12 +534,16 @@
 
 \subsubsection{X509Extension objects \label{openssl-509ext}}
 
-X509Extension objects currently only have one method:
+X509Extension objects have several methods:
 
 \begin{methoddesc}[X509Extension]{get_critical}{}
 Return the critical field of the extension object.
 \end{methoddesc}
 
+\begin{methoddesc}[X509Extension]{get_short_name}{}
+Return the short type name of the extension object.
+\end{methoddesc}
+
 \subsubsection{NetscapeSPKI objects \label{openssl-netscape-spki}}
 
 NetscapeSPKI objects have the following methods:
diff --git a/src/crypto/x509ext.c b/src/crypto/x509ext.c
index 53dc48a..3b3c814 100644
--- a/src/crypto/x509ext.c
+++ b/src/crypto/x509ext.c
@@ -30,6 +30,31 @@
     return PyInt_FromLong(X509_EXTENSION_get_critical(self->x509_extension));
 }
 
+static char crypto_X509Extension_get_short_name_doc[] = "\n\
+Returns the short version of the type name of the X509Extension\n\
+\n\
+Arguments: self - The X509Extension object\n\
+           args - The argument tuple, should be empty\n\
+Returns: The short type name.\n\
+";
+
+static PyObject *
+crypto_X509Extension_get_short_name(crypto_X509ExtensionObj *self, PyObject *args) {
+	ASN1_OBJECT *obj;
+	const char *extname;
+
+	if (!PyArg_ParseTuple(args, ":get_short_name")) {
+		return NULL;
+	}
+
+	/* Returns an internal pointer to x509_extension, not a copy */
+	obj = X509_EXTENSION_get_object(self->x509_extension);
+
+	extname = OBJ_nid2sn(OBJ_obj2nid(obj));
+	return PyString_FromString(extname);
+}
+
+
 /*
  * ADD_METHOD(name) expands to a correct PyMethodDef declaration
  *   {  'name', (PyCFunction)crypto_X509Extension_name, METH_VARARGS }
@@ -40,6 +65,7 @@
 static PyMethodDef crypto_X509Extension_methods[] =
 {
     ADD_METHOD(get_critical),
+    ADD_METHOD(get_short_name),
     { NULL, NULL }
 };
 #undef ADD_METHOD
diff --git a/test/test_crypto.py b/test/test_crypto.py
index 2ddb84d..902bde1 100644
--- a/test/test_crypto.py
+++ b/test/test_crypto.py
@@ -133,6 +133,17 @@
         self.assertFalse(ext.get_critical())
 
 
+    def test_get_short_name(self):
+        """
+        L{X509ExtensionType.get_short_name} returns a string giving the short
+        type name of the extension.
+        """
+        ext = X509Extension('basicConstraints', True, 'CA:true')
+        self.assertEqual(ext.get_short_name(), 'basicConstraints')
+        ext = X509Extension('nsComment', True, 'foo bar')
+        self.assertEqual(ext.get_short_name(), 'nsComment')
+
+
 
 class PKeyTests(TestCase, _Python23TestCaseHelper):
     """
