diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py
index 1283867..45923b3 100644
--- a/src/cryptography/x509/__init__.py
+++ b/src/cryptography/x509/__init__.py
@@ -12,7 +12,7 @@
     DistributionPoint, DuplicateExtension, ExtendedKeyUsage,
     Extension, ExtensionNotFound, ExtensionType, Extensions, GeneralName,
     GeneralNames, IPAddress, InhibitAnyPolicy, InvalidVersion,
-    IssuerAlternativeName, KeyUsage, Name, NameAttribute, NameConstraints,
+    IssuerAlternativeName, KeyUsage, NameConstraints,
     NoticeReference, OCSPNoCheck, ObjectIdentifier, OtherName,
     PolicyInformation, RFC822Name, ReasonFlags, RegisteredID,
     RevokedCertificate, SubjectAlternativeName, SubjectKeyIdentifier,
@@ -21,6 +21,7 @@
     load_der_x509_certificate,
     load_der_x509_csr, load_pem_x509_certificate, load_pem_x509_csr,
 )
+from cryptography.x509.name import Name, NameAttribute
 from cryptography.x509.oid import (
     OID_ANY_POLICY, OID_AUTHORITY_INFORMATION_ACCESS,
     OID_AUTHORITY_KEY_IDENTIFIER, OID_BASIC_CONSTRAINTS, OID_CA_ISSUERS,
diff --git a/src/cryptography/x509/base.py b/src/cryptography/x509/base.py
index 6fdc0f5..29e6e87 100644
--- a/src/cryptography/x509/base.py
+++ b/src/cryptography/x509/base.py
@@ -23,6 +23,7 @@
 from cryptography import utils
 from cryptography.hazmat.primitives import serialization
 from cryptography.hazmat.primitives.asymmetric import dsa, ec, rsa
+from cryptography.x509.name import Name
 from cryptography.x509.oid import (
     OID_AUTHORITY_INFORMATION_ACCESS,
     OID_AUTHORITY_KEY_IDENTIFIER, OID_BASIC_CONSTRAINTS,
@@ -128,66 +129,6 @@
         self.type = type
 
 
-class NameAttribute(object):
-    def __init__(self, oid, value):
-        if not isinstance(oid, ObjectIdentifier):
-            raise TypeError(
-                "oid argument must be an ObjectIdentifier instance."
-            )
-
-        if not isinstance(value, six.text_type):
-            raise TypeError(
-                "value argument must be a text type."
-            )
-
-        self._oid = oid
-        self._value = value
-
-    oid = utils.read_only_property("_oid")
-    value = utils.read_only_property("_value")
-
-    def __eq__(self, other):
-        if not isinstance(other, NameAttribute):
-            return NotImplemented
-
-        return (
-            self.oid == other.oid and
-            self.value == other.value
-        )
-
-    def __ne__(self, other):
-        return not self == other
-
-    def __repr__(self):
-        return "<NameAttribute(oid={0.oid}, value={0.value!r})>".format(self)
-
-
-class Name(object):
-    def __init__(self, attributes):
-        self._attributes = attributes
-
-    def get_attributes_for_oid(self, oid):
-        return [i for i in self if i.oid == oid]
-
-    def __eq__(self, other):
-        if not isinstance(other, Name):
-            return NotImplemented
-
-        return self._attributes == other._attributes
-
-    def __ne__(self, other):
-        return not self == other
-
-    def __iter__(self):
-        return iter(self._attributes)
-
-    def __len__(self):
-        return len(self._attributes)
-
-    def __repr__(self):
-        return "<Name({0!r})>".format(self._attributes)
-
-
 class Extensions(object):
     def __init__(self, extensions):
         self._extensions = extensions
diff --git a/src/cryptography/x509/name.py b/src/cryptography/x509/name.py
new file mode 100644
index 0000000..992786e
--- /dev/null
+++ b/src/cryptography/x509/name.py
@@ -0,0 +1,70 @@
+# This file is dual licensed under the terms of the Apache License, Version
+# 2.0, and the BSD License. See the LICENSE file in the root of this repository
+# for complete details.
+
+from __future__ import absolute_import, division, print_function
+
+import six
+
+from cryptography import utils
+from cryptography.x509.oid import ObjectIdentifier
+
+
+class NameAttribute(object):
+    def __init__(self, oid, value):
+        if not isinstance(oid, ObjectIdentifier):
+            raise TypeError(
+                "oid argument must be an ObjectIdentifier instance."
+            )
+
+        if not isinstance(value, six.text_type):
+            raise TypeError(
+                "value argument must be a text type."
+            )
+
+        self._oid = oid
+        self._value = value
+
+    oid = utils.read_only_property("_oid")
+    value = utils.read_only_property("_value")
+
+    def __eq__(self, other):
+        if not isinstance(other, NameAttribute):
+            return NotImplemented
+
+        return (
+            self.oid == other.oid and
+            self.value == other.value
+        )
+
+    def __ne__(self, other):
+        return not self == other
+
+    def __repr__(self):
+        return "<NameAttribute(oid={0.oid}, value={0.value!r})>".format(self)
+
+
+class Name(object):
+    def __init__(self, attributes):
+        self._attributes = attributes
+
+    def get_attributes_for_oid(self, oid):
+        return [i for i in self if i.oid == oid]
+
+    def __eq__(self, other):
+        if not isinstance(other, Name):
+            return NotImplemented
+
+        return self._attributes == other._attributes
+
+    def __ne__(self, other):
+        return not self == other
+
+    def __iter__(self):
+        return iter(self._attributes)
+
+    def __len__(self):
+        return len(self._attributes)
+
+    def __repr__(self):
+        return "<Name({0!r})>".format(self._attributes)
