Index: /trunk/src/libs/xpcom18a4/python/server/loader.py
===================================================================
--- /trunk/src/libs/xpcom18a4/python/server/loader.py	(revision 50709)
+++ /trunk/src/libs/xpcom18a4/python/server/loader.py	(revision 50710)
@@ -58,9 +58,13 @@
     comps = []
     for name, object in py_module.__dict__.items():
-        if type(object)==types.ClassType and \
-           _has_good_attr(object, "_com_interfaces_") and \
-           _has_good_attr(object, "_reg_clsid_") and \
-           _has_good_attr(object, "_reg_contractid_"):
-            comps.append(object)
+        try:
+            if (type(object) == types.ClassType or issubclass(object, object)) and \
+               _has_good_attr(object, "_com_interfaces_") and \
+               _has_good_attr(object, "_reg_clsid_") and \
+               _has_good_attr(object, "_reg_contractid_"):
+                comps.append(object)
+        except TypeError:
+            # The issubclass call raises TypeError when the obj is not a class.
+            pass;
     return comps
 
Index: /trunk/src/libs/xpcom18a4/python/src/PyGBase.cpp
===================================================================
--- /trunk/src/libs/xpcom18a4/python/src/PyGBase.cpp	(revision 50709)
+++ /trunk/src/libs/xpcom18a4/python/src/PyGBase.cpp	(revision 50710)
@@ -196,5 +196,6 @@
 {
 	NS_PRECONDITION(ppret!=NULL, "null pointer when wrapping a Python instance!");
-	NS_PRECONDITION(ob && PyInstance_Check(ob), "AutoWrapPythonInstance is expecting an non-NULL instance!");
+	NS_PRECONDITION(ob && PyObject_HasAttrString(ob, "__class__"),
+			"AutoWrapPythonInstance is expecting an non-NULL instance!");
 	PRBool ok = PR_FALSE;
     // XXX - todo - this static object leaks! (but Python on Windows leaks 2000+ objects as it is ;-)
Index: /trunk/src/libs/xpcom18a4/python/src/PyIID.cpp
===================================================================
--- /trunk/src/libs/xpcom18a4/python/src/PyIID.cpp	(revision 50709)
+++ /trunk/src/libs/xpcom18a4/python/src/PyIID.cpp	(revision 50710)
@@ -115,5 +115,5 @@
 	} else if (ob->ob_type == &type) {
 		iid = ((Py_nsIID *)ob)->m_iid;
-	} else if (PyInstance_Check(ob)) {
+	} else if (PyObject_HasAttrString(ob, "__class__")) {
 		// Get the _iidobj_ attribute
 		PyObject *use_ob = PyObject_GetAttrString(ob, "_iidobj_");
Index: /trunk/src/libs/xpcom18a4/python/src/PyISupports.cpp
===================================================================
--- /trunk/src/libs/xpcom18a4/python/src/PyISupports.cpp	(revision 50709)
+++ /trunk/src/libs/xpcom18a4/python/src/PyISupports.cpp	(revision 50710)
@@ -322,5 +322,5 @@
 	if (iid.Equals(NS_GET_IID(nsIVariant)) || iid.Equals(NS_GET_IID(nsIWritableVariant))) {
 		// Check it is not already nsIVariant
-		if (PyInstance_Check(ob)) {
+		if (PyObject_HasAttrString(ob, "__class__")) {
 			PyObject *sub_ob = PyObject_GetAttrString(ob, "_comobj_");
 			if (sub_ob==NULL) {
@@ -345,5 +345,5 @@
 	// end of variant support.
 
-	if (PyInstance_Check(ob)) {
+	if (PyObject_HasAttrString(ob, "__class__")) {
 		// Get the _comobj_ attribute
 		PyObject *use_ob = PyObject_GetAttrString(ob, "_comobj_");
