diff --git a/kdlibcpp b/kdlibcpp
index 107f991..6f96e04 160000
--- a/kdlibcpp
+++ b/kdlibcpp
@@ -1 +1 @@
-Subproject commit 107f991bb61245de85862717550cb365d54de2b0
+Subproject commit 6f96e046f3e79bc464759c6729d6d344083587e4
diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp
index d265da9..c5cac9e 100644
--- a/pykd/pymod.cpp
+++ b/pykd/pymod.cpp
@@ -127,7 +127,7 @@ void uninitialize()
 
 }
 
-BOOST_PYTHON_MODULE( pykd )
+void pykd_init()
 {
     python::scope().attr("__version__") = pykdVersion;
     python::scope().attr("version") = pykdVersion;
@@ -1370,7 +1370,7 @@ BOOST_PYTHON_MODULE( pykd )
         .value("FinalBreak", kdlib::FinalBreak)
         .value("PreferDml", kdlib::PreferDml)
         ;
-
+
     python::enum_<kdlib::BreakpointAccess>("breakpointAccess", "Breakpoint access types")
         .value("Read", kdlib::Read)
         .value("Write", kdlib::Write)
@@ -1382,3 +1382,59 @@ BOOST_PYTHON_MODULE( pykd )
 }
 
 //////////////////////////////////////////////////////////////////////////////////
+
+#if PY_VERSION_HEX >= 0x03000000
+
+void pykd_deinit(void*)
+{
+    if ( kdlib::isInintilized() )
+        kdlib::uninitialize();
+}
+
+PyMODINIT_FUNC
+PyInit_pykd(void)
+{
+    static PyModuleDef_Base initial_base = {
+        PyObject_HEAD_INIT(NULL)
+        0, /* m_init */
+        0, /* m_index */
+        0 /* m_copy */
+    };
+
+    static PyMethodDef initial_methods[] = { { 0, 0, 0, 0 } };
+
+    static struct PyModuleDef moduledef = { \
+        initial_base,
+        "pykd",
+        0, /* m_doc */
+        -1, /* m_size */
+        initial_methods,
+        0,  /* m_reload */
+        0, /* m_traverse */
+        0, /* m_clear */
+        pykd_deinit
+    };
+
+    return boost::python::detail::init_module(moduledef, pykd_init);
+}
+#else
+
+void pykd_deinit(PyObject*)
+{
+    if (kdlib::isInintilized())
+        kdlib::uninitialize();
+}
+
+PyMODINIT_FUNC
+initpykd()
+{
+    PyObject* moduleObj = boost::python::detail::init_module("pykd", pykd_init);
+
+    PyObject* moduleDeiniter = PyCapsule_New( (void*)1, "pykd.__deinit__", pykd_deinit);
+
+    PyModule_AddObject(moduleObj, "pykd.__deinit__", moduleDeiniter);
+}
+
+#endif
+//////////////////////////////////////////////////////////////////////////////////
+