diff --git a/Doc/lib/libunicodedata.tex b/Doc/lib/libunicodedata.tex
index b52b708..dcbda77 100644
--- a/Doc/lib/libunicodedata.tex
+++ b/Doc/lib/libunicodedata.tex
@@ -131,7 +131,7 @@
 \versionadded{2.3}
 \end{datadesc}
 
-\begin{datadesc}{db_3_2_0}
+\begin{datadesc}{ucd_3_2_0}
 This is an object that has the same methods as the entire
 module, but uses the Unicode database version 3.2 instead,
 for applications that require this specific version of
diff --git a/Include/ucnhash.h b/Include/ucnhash.h
index b7d3f08..6231c98 100644
--- a/Include/ucnhash.h
+++ b/Include/ucnhash.h
@@ -16,7 +16,7 @@
     /* Get name for a given character code.  Returns non-zero if
        success, zero if not.  Does not set Python exceptions. 
        If self is NULL, data come from the default version of the database.
-       If it is not NULL, it should be a unicodedata.db_X_Y_Z object */
+       If it is not NULL, it should be a unicodedata.ucd_X_Y_Z object */
     int (*getname)(PyObject *self, Py_UCS4 code, char* buffer, int buflen);
 
     /* Get character code for a given name.  Same error handling
diff --git a/Lib/encodings/idna.py b/Lib/encodings/idna.py
index fde710b..3d3ed23 100644
--- a/Lib/encodings/idna.py
+++ b/Lib/encodings/idna.py
@@ -1,7 +1,7 @@
 # This module implements the RFCs 3490 (IDNA) and 3491 (Nameprep)
 
 import stringprep, re, codecs
-from unicodedata import db_3_2_0 as unicodedata
+from unicodedata import ucd_3_2_0 as unicodedata
 
 # IDNA section 3.1
 dots = re.compile(u"[\u002E\u3002\uFF0E\uFF61]")
diff --git a/Lib/stringprep.py b/Lib/stringprep.py
index 225aedb..1d49dd1 100644
--- a/Lib/stringprep.py
+++ b/Lib/stringprep.py
@@ -5,7 +5,7 @@
 and mappings, for which a mapping function is provided.
 """
 
-from unicodedata import db_3_2_0 as unicodedata
+from unicodedata import ucd_3_2_0 as unicodedata
 
 assert unicodedata.unidata_version == '3.2.0'
 
diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c
index a854837..a3152c3 100644
--- a/Modules/unicodedata.c
+++ b/Modules/unicodedata.c
@@ -70,67 +70,20 @@
 
 #define get_old_record(self, v)    ((((PreviousDBVersion*)self)->getrecord)(v))
 
-/* Forward declaration */
-static PyMethodDef unicodedata_functions[];
-
 static PyMemberDef DB_members[] = {
 	{"unidata_version", T_STRING, offsetof(PreviousDBVersion, name), READONLY},
         {NULL}
 };
 
-static PyTypeObject Xxo_Type = {
-	/* The ob_type field must be initialized in the module init function
-	 * to be portable to Windows without using C++. */
-	PyObject_HEAD_INIT(NULL)
-	0,			/*ob_size*/
-	"unicodedata.DB",		/*tp_name*/
-	sizeof(PreviousDBVersion),	/*tp_basicsize*/
-	0,			/*tp_itemsize*/
-	/* methods */
-	(destructor)PyObject_Del, /*tp_dealloc*/
-	0,			/*tp_print*/
-	0,                      /*tp_getattr*/
-	0,			/*tp_setattr*/
-	0,			/*tp_compare*/
-	0,			/*tp_repr*/
-	0,			/*tp_as_number*/
-	0,			/*tp_as_sequence*/
-	0,			/*tp_as_mapping*/
-	0,			/*tp_hash*/
-        0,                      /*tp_call*/
-        0,                      /*tp_str*/
-        PyObject_GenericGetAttr,/*tp_getattro*/
-        0,                      /*tp_setattro*/
-        0,                      /*tp_as_buffer*/
-        Py_TPFLAGS_DEFAULT,     /*tp_flags*/
-        0,                      /*tp_doc*/
-        0,                      /*tp_traverse*/
-        0,                      /*tp_clear*/
-        0,                      /*tp_richcompare*/
-        0,                      /*tp_weaklistoffset*/
-        0,                      /*tp_iter*/
-        0,                      /*tp_iternext*/
-        unicodedata_functions,  /*tp_methods*/
-        DB_members,             /*tp_members*/
-        0,                      /*tp_getset*/
-        0,                      /*tp_base*/
-        0,                      /*tp_dict*/
-        0,                      /*tp_descr_get*/
-        0,                      /*tp_descr_set*/
-        0,                      /*tp_dictoffset*/
-        0,                      /*tp_init*/
-        0,                      /*tp_alloc*/
-        0,                      /*tp_new*/
-        0,                      /*tp_free*/
-        0,                      /*tp_is_gc*/
-};
+// forward declaration
+static PyTypeObject UCD_Type;
 
 static PyObject*
 new_previous_version(const char*name, const change_record* (*getrecord)(Py_UCS4),
                      Py_UCS4 (*normalization)(Py_UCS4))
 {
 	PreviousDBVersion *self;
-	self = PyObject_New(PreviousDBVersion, &Xxo_Type);
+	self = PyObject_New(PreviousDBVersion, &UCD_Type);
 	if (self == NULL)
 		return NULL;
 	self->name = name;
@@ -1163,7 +1116,52 @@
     {NULL, NULL}		/* sentinel */
 };
 
-
+static PyTypeObject UCD_Type = {
+	/* The ob_type field must be initialized in the module init function
+	 * to be portable to Windows without using C++. */
+	PyObject_HEAD_INIT(NULL)
+	0,			/*ob_size*/
+	"unicodedata.UCD",		/*tp_name*/
+	sizeof(PreviousDBVersion),	/*tp_basicsize*/
+	0,			/*tp_itemsize*/
+	/* methods */
+	(destructor)PyObject_Del, /*tp_dealloc*/
+	0,			/*tp_print*/
+	0,                      /*tp_getattr*/
+	0,			/*tp_setattr*/
+	0,			/*tp_compare*/
+	0,			/*tp_repr*/
+	0,			/*tp_as_number*/
+	0,			/*tp_as_sequence*/
+	0,			/*tp_as_mapping*/
+	0,			/*tp_hash*/
+        0,                      /*tp_call*/
+        0,                      /*tp_str*/
+        PyObject_GenericGetAttr,/*tp_getattro*/
+        0,                      /*tp_setattro*/
+        0,                      /*tp_as_buffer*/
+        Py_TPFLAGS_DEFAULT,     /*tp_flags*/
+        0,                      /*tp_doc*/
+        0,                      /*tp_traverse*/
+        0,                      /*tp_clear*/
+        0,                      /*tp_richcompare*/
+        0,                      /*tp_weaklistoffset*/
+        0,                      /*tp_iter*/
+        0,                      /*tp_iternext*/
+        unicodedata_functions,  /*tp_methods*/
+        DB_members,             /*tp_members*/
+        0,                      /*tp_getset*/
+        0,                      /*tp_base*/
+        0,                      /*tp_dict*/
+        0,                      /*tp_descr_get*/
+        0,                      /*tp_descr_set*/
+        0,                      /*tp_dictoffset*/
+        0,                      /*tp_init*/
+        0,                      /*tp_alloc*/
+        0,                      /*tp_new*/
+        0,                      /*tp_free*/
+        0,                      /*tp_is_gc*/
+};
 
 PyDoc_STRVAR(unicodedata_docstring,
 "This module provides access to the Unicode Character Database which\n\
@@ -1180,17 +1178,20 @@
 {
     PyObject *m, *v;
 
+    UCD_Type.ob_type = &PyType_Type;
+
     m = Py_InitModule3(
         "unicodedata", unicodedata_functions, unicodedata_docstring);
     if (!m)
         return;
 
     PyModule_AddStringConstant(m, "unidata_version", UNIDATA_VERSION);
+    PyModule_AddObject(m, "UCD", (PyObject*)&UCD_Type);
 
     /* Previous versions */
     v = new_previous_version("3.2.0", get_change_3_2_0, normalization_3_2_0);
     if (v != NULL)
-        PyModule_AddObject(m, "db_3_2_0", v);
+        PyModule_AddObject(m, "ucd_3_2_0", v);
 
     /* Export C API */
     v = PyCObject_FromVoidPtr((void *) &hashAPI, NULL);
