The module generator now tells its object generators about the module name (through the new setmodulename() method). If the module name has been set the object generators output it as part of the tp_name field for the object type.
diff --git a/Tools/bgen/bgen/bgenModule.py b/Tools/bgen/bgen/bgenModule.py
index 5f94b90..ea1ea23 100644
--- a/Tools/bgen/bgen/bgenModule.py
+++ b/Tools/bgen/bgen/bgenModule.py
@@ -19,6 +19,7 @@
 	def addobject(self, od):
 		self.generators.append(od)
 		self.typeobjects.append(od)
+		od.setmodulename(self.name)
 
 	def generate(self):
 		OutHeader1("Module " + self.name)
diff --git a/Tools/bgen/bgen/bgenObjectDefinition.py b/Tools/bgen/bgen/bgenObjectDefinition.py
index 1d5cb22..71cf21d 100644
--- a/Tools/bgen/bgen/bgenObjectDefinition.py
+++ b/Tools/bgen/bgen/bgenObjectDefinition.py
@@ -22,6 +22,7 @@
 		self.typename = name + '_Type'
 		self.argref = ""	# set to "*" if arg to <type>_New should be pointer
 		self.static = "static " # set to "" to make <type>_New and <type>_Convert public
+		self.modulename = None
 
 	def add(self, g, dupcheck=0):
 		g.setselftype(self.objecttype, self.itselftype)
@@ -30,6 +31,9 @@
 	def reference(self):
 		# In case we are referenced from a module
 		pass
+		
+	def setmodulename(self, name):
+		self.modulename = name
 
 	def generate(self):
 		# XXX This should use long strings and %(varname)s substitution!
@@ -166,7 +170,10 @@
 		IndentLevel()
 		Output("PyObject_HEAD_INIT(NULL)")
 		Output("0, /*ob_size*/")
-		Output("\"%s\", /*tp_name*/", self.name)
+		if self.modulename:
+			Output("\"%s.%s\", /*tp_name*/", self.modulename, self.name)
+		else:
+			Output("\"%s\", /*tp_name*/", self.name)
 		Output("sizeof(%s), /*tp_basicsize*/", self.objecttype)
 		Output("0, /*tp_itemsize*/")
 		Output("/* methods */")