diff --git a/Doc/ext/noddy.c b/Doc/ext/noddy.c
index 23f26ef..1988de6 100644
--- a/Doc/ext/noddy.c
+++ b/Doc/ext/noddy.c
@@ -1,66 +1,66 @@
 #include <Python.h>
 
-static PyTypeObject noddy_NoddyType;
-
 typedef struct {
     PyObject_HEAD
     /* Type-specific fields go here. */
 } noddy_NoddyObject;
 
-static PyObject*
-noddy_new_noddy(PyObject* self, PyObject* args)
-{
-    noddy_NoddyObject* noddy;
-
-    noddy = PyObject_New(noddy_NoddyObject, &noddy_NoddyType);
-
-    /* Initialize type-specific fields here. */
-
-    return (PyObject*)noddy;
-}
-
-static void
-noddy_noddy_dealloc(PyObject* self)
-{
-    /* Free any external resources here;
-     * if the instance owns references to any Python
-     * objects, call Py_DECREF() on them here.
-     */
-    PyObject_Del(self);
-}
-
 static PyTypeObject noddy_NoddyType = {
     PyObject_HEAD_INIT(NULL)
-    0,
-    "Noddy",
-    sizeof(noddy_NoddyObject),
-    0,
-    noddy_noddy_dealloc, /*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,                         /*ob_size*/
+    "noddy.Noddy",             /*tp_name*/
+    sizeof(noddy_NoddyObject), /*tp_basicsize*/
+    0,                         /*tp_itemsize*/
+    0,                         /*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*/
+    0,                         /*tp_getattro*/
+    0,                         /*tp_setattro*/
+    0,                         /*tp_as_buffer*/
+    Py_TPFLAGS_DEFAULT,        /*tp_flags*/
+    "Noddy objects",           /* tp_doc */
+    0,		               /* tp_traverse */
+    0,		               /* tp_clear */
+    0,		               /* tp_richcompare */
+    0,		               /* tp_weaklistoffset */
+    0,		               /* tp_iter */
+    0,		               /* tp_iternext */
+    0,		               /* tp_methods */
+    0,                         /* 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 */
+    PyType_GenericNew,         /* tp_new */
 };
 
 static PyMethodDef noddy_methods[] = {
-    {"new_noddy", noddy_new_noddy, METH_NOARGS,
-     "Create a new Noddy object."},
-
     {NULL}  /* Sentinel */
 };
 
 PyMODINIT_FUNC
 initnoddy(void) 
 {
-    noddy_NoddyType.ob_type = &PyType_Type;
-    if (PyType_Ready(&noddy_NoddyType))
+    PyObject* m;
+
+    if (PyType_Ready(&noddy_NoddyType) < 0)
         return;
 
-    Py_InitModule3("noddy", noddy_methods
-                   "Example module that creates an extension type.");
+    m = Py_InitModule3("noddy", noddy_methods,
+                       "Example module that creates an extension type.");
+
+    PyModule_AddObject(m, "Noddy", (PyObject *)&noddy_NoddyType);
 }
