diff --git a/Makefile b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -12,7 +12,8 @@ BANK_SOURCES =			\
 	bank/bank.c		\
 	bank/bank-argument.c	\
 	bank/bank-info.c	\
-	bank/bank-repository.c
+	bank/bank-repository.c	\
+	bank/bank-gobject.c
 
 all: bank/repo.so
 
diff --git a/bank/bank-gobject.c b/bank/bank-gobject.c
new file mode 100644
--- /dev/null
+++ b/bank/bank-gobject.c
@@ -0,0 +1,19 @@
+#include "bank.h"
+#include <pygobject.h>
+
+
+PyObject *
+pyg_gobject_register_class (PyObject *self, PyObject *args)
+{
+    PyObject *dict, *pytype, *gtype;
+    GType type;
+    if (!PyArg_ParseTuple(args, "OOO:bank.repo.gobject_register_class", &dict, &pytype, &gtype))
+	return NULL;
+    /* FIXME: add type checking */
+
+    type = pyg_type_from_object (gtype);
+    pygobject_register_class (dict, NULL, type, (PyTypeObject *)pytype, NULL);
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
diff --git a/bank/bank.c b/bank/bank.c
--- a/bank/bank.c
+++ b/bank/bank.c
@@ -35,6 +35,7 @@
     REGISTER_TYPE(d, type, name)
 
 static PyMethodDef pybank_functions[] = {
+    { "gobject_register_class", pyg_gobject_register_class, METH_VARARGS },
     { NULL, NULL, 0 }
 };
 
diff --git a/bank/bank.h b/bank/bank.h
--- a/bank/bank.h
+++ b/bank/bank.h
@@ -77,3 +77,5 @@ GArgument pyg_argument_from_pyobject(PyO
 PyObject*  pyg_argument_to_pyobject(GArgument *arg,
 				    GITypeInfo *info);
 
+PyObject*  pyg_gobject_register_class (PyObject *self, PyObject *args);
+
diff --git a/bank/btypes.py b/bank/btypes.py
--- a/bank/btypes.py
+++ b/bank/btypes.py
@@ -23,6 +23,8 @@ from bank import repo
 
 from .repository import repository
 
+import gobject
+
 class Callable(object):
     
     # Types of callables
@@ -199,6 +201,9 @@ def getClass(info):
 
 def setupConstructors(className, cls, constructors):
     if not constructors:
+        def __new__ (cls, *args):
+            return gobject.new (cls.__gtype__.name)
+        cls.__new__ = classmethod(__new__)
         return
 
     if len(constructors) == 1:
@@ -232,6 +237,8 @@ def buildClass(info, bases):
     namespace['__info__'] = info
     namespace['__module__'] = namespaceName
     newType = type(className, bases, namespace)
+    gtype = gobject.GType (info.getTypeName())
+    repo.gobject_register_class (_classDict, newType, gtype)
 
     constructors = []
     for method in info.getMethods():
@@ -251,7 +258,7 @@ def buildClass(info, bases):
         pass
     newType.__init__ = new.instancemethod(__init__, None, newType)
 
-    _classDict[fullName] = newType
+#    _classDict[fullName] = newType
     
     return newType
 
diff --git a/bank/module.py b/bank/module.py
--- a/bank/module.py
+++ b/bank/module.py
@@ -114,13 +114,12 @@ class DynamicModule(object):
 
     def _create_object(self, object_info):
         name = object_info.getName()
+        type_name = object_info.getTypeName ()
 
-        namespace = repository.get_c_prefix(object_info.getNamespace())
-        full_name = namespace + name
         object_info.getGType()
         gtype = None
         try:
-            gtype = gobject.GType.from_name(full_name)
+            gtype = gobject.GType.from_name(type_name)
         except RuntimeError:
             pass
         else:
