CRLNumber needs to be a class for reasons.
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 3dc5249..3e24633 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -29,7 +29,7 @@
 
   * :class:`~cryptography.x509.AuthorityInformationAccess`
   * :class:`~cryptography.x509.AuthorityKeyIdentifier`
-  * ``CRLNumber``
+  * :class:`~cryptography.x509.CRLNumber`
   * :class:`~cryptography.x509.IssuerAlternativeName`
 
 1.1.2 - 2015-12-10
diff --git a/docs/x509/reference.rst b/docs/x509/reference.rst
index dace8c1..f53eae0 100644
--- a/docs/x509/reference.rst
+++ b/docs/x509/reference.rst
@@ -1695,6 +1695,27 @@
 
         :type: int
 
+.. class:: CRLNumber(crl_number)
+
+    .. versionadded:: 1.2
+
+    The CRL number is a non-critical CRL extension that conveys a
+    monotonically increasing sequence number for a given CRL scope and
+    CRL issuer. This extension allows users to easily determine when a
+    particular CRL supersedes another CRL. :rfc:`5280` requires that this
+    extension be present in conforming CRLs.
+
+    .. attribute:: oid
+
+        :type: :class:`ObjectIdentifier`
+
+        Returns
+        :attr:`~cryptography.x509.oid.ExtensionOID.CRL_NUMBER`.
+
+    .. attribute:: crl_number
+
+        :type: int
+
 .. class:: CertificatePolicies(policies)
 
     .. versionadded:: 0.9
diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py
index 45c0df5..7e89ac6 100644
--- a/src/cryptography/hazmat/backends/openssl/x509.py
+++ b/src/cryptography/hazmat/backends/openssl/x509.py
@@ -182,7 +182,7 @@
 def _decode_crl_number(backend, ext):
     asn1_int = backend._ffi.cast("ASN1_INTEGER *", ext)
     asn1_int = backend._ffi.gc(asn1_int, backend._lib.ASN1_INTEGER_free)
-    return backend._asn1_integer_to_int(asn1_int)
+    return x509.CRLNumber(backend._asn1_integer_to_int(asn1_int))
 
 
 class _X509ExtensionParser(object):
diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py
index 70e1d3d..c4434fd 100644
--- a/src/cryptography/x509/__init__.py
+++ b/src/cryptography/x509/__init__.py
@@ -14,7 +14,7 @@
 from cryptography.x509.extensions import (
     AccessDescription, AuthorityInformationAccess,
     AuthorityKeyIdentifier, BasicConstraints, CRLDistributionPoints,
-    CertificatePolicies, DistributionPoint, DuplicateExtension,
+    CRLNumber, CertificatePolicies, DistributionPoint, DuplicateExtension,
     ExtendedKeyUsage, Extension, ExtensionNotFound, ExtensionType, Extensions,
     GeneralNames, InhibitAnyPolicy, IssuerAlternativeName, KeyUsage,
     NameConstraints, NoticeReference, OCSPNoCheck, PolicyInformation,
@@ -124,6 +124,7 @@
     "ExtendedKeyUsage",
     "OCSPNoCheck",
     "BasicConstraints",
+    "CRLNumber",
     "KeyUsage",
     "AuthorityInformationAccess",
     "AccessDescription",
diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py
index 71ce8a1..15feb71 100644
--- a/src/cryptography/x509/extensions.py
+++ b/src/cryptography/x509/extensions.py
@@ -109,6 +109,31 @@
 
 
 @utils.register_interface(ExtensionType)
+class CRLNumber(object):
+    oid = ExtensionOID.CRL_NUMBER
+
+    def __init__(self, crl_number):
+        if not isinstance(crl_number, six.integer_types):
+            raise TypeError("crl_number must be an integer")
+
+        self._crl_number = crl_number
+
+    def __eq__(self, other):
+        if not isinstance(other, CRLNumber):
+            return NotImplemented
+
+        return self.crl_number == other.crl_number
+
+    def __ne__(self, other):
+        return not self == other
+
+    def __repr__(self):
+        return "<CRLNumber({0})>".format(self.crl_number)
+
+    crl_number = utils.read_only_property("_crl_number")
+
+
+@utils.register_interface(ExtensionType)
 class AuthorityKeyIdentifier(object):
     oid = ExtensionOID.AUTHORITY_KEY_IDENTIFIER
 
diff --git a/tests/test_x509.py b/tests/test_x509.py
index b39e189..ae2746e 100644
--- a/tests/test_x509.py
+++ b/tests/test_x509.py
@@ -192,7 +192,7 @@
         ian = crl.extensions.get_extension_for_class(
             x509.IssuerAlternativeName
         )
-        assert crl_number.value == 1
+        assert crl_number.value == x509.CRLNumber(1)
         assert crl_number.critical is False
         assert aki.value == x509.AuthorityKeyIdentifier(
             key_identifier=(
diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py
index 83145cd..4b1d6a5 100644
--- a/tests/test_x509_ext.py
+++ b/tests/test_x509_ext.py
@@ -1488,6 +1488,21 @@
         ]
 
 
+class TestCRLNumber(object):
+    def test_eq(self):
+        crl_number = x509.CRLNumber(15)
+        assert crl_number == x509.CRLNumber(15)
+
+    def test_ne(self):
+        crl_number = x509.CRLNumber(15)
+        assert crl_number != x509.CRLNumber(14)
+        assert crl_number != object()
+
+    def test_repr(self):
+        crl_number = x509.CRLNumber(15)
+        assert repr(crl_number) == "<CRLNumber(15)>"
+
+
 class TestSubjectAlternativeName(object):
     def test_get_values_for_type(self):
         san = x509.SubjectAlternativeName(