diff --git a/utils_api/bpy_introspect_ui.py b/utils_api/bpy_introspect_ui.py
index 73dd2acb7c4c940bd8040593b8c791340f6ef14f..b5aef2edb0220f6c3a19ac37376b0508ef90fc1b 100644
--- a/utils_api/bpy_introspect_ui.py
+++ b/utils_api/bpy_introspect_ui.py
@@ -50,7 +50,7 @@ class AttributeBuilder:
         data = [self._attr_single, self._args, [child._as_py() for child in self._attr_list]]
         return data
 
-    def _as_xml(self, indent="    "):
+    def _as_xml(self, indent="  "):
 
         def to_xml_str(value):
             if type(value) == str:
@@ -109,7 +109,12 @@ class AttributeBuilder:
         return self
 
     def __getattr__(self, attr):
-        attr_obj = NewAttr(self._attr + "." + attr, attr)
+        attr_next = self._attr + "." + attr
+        # Useful for debugging.
+        # print(attr_next)
+        attr_obj = _attribute_builder_overrides.get(attr_next, ...)
+        if attr_obj is ...:
+            attr_obj = NewAttr(attr_next, attr)
         self._attr_list.append(attr_obj)
         return attr_obj
 
@@ -177,10 +182,36 @@ class AttributeBuilder:
         return []
 
 
+class AttributeBuilder_Seq(AttributeBuilder):
+    def __len__(self):
+        return 0
+
+
+
+_attribute_builder_overrides = {
+    "context.gpencil.layers": AttributeBuilder_Seq("context.gpencil.layers", "layers"),
+    "context.gpencil_data.layers": AttributeBuilder_Seq("context.gpencil_data.layers", "layers"),
+    "context.object.material_slots": (),
+    "context.selected_nodes": (),
+    "context.selected_sequences": (),
+    "context.space_data.bookmarks": (),
+    "context.space_data.text.filepath": "",
+    "context.preferences.filepaths.script_directory": "",
+    "context.tool_settings.snap_elements": (True, ) * 3,
+    "context.selected_objects": (),
+    "context.tool_settings.mesh_select_mode": (True, ) * 3,
+    "context.mode": 'PAINT_TEXTURE',
+}
+
+
 def NewAttr(attr, attr_single):
     obj = AttributeBuilder(attr, attr_single)
     return obj
 
+def NewAttr_Seq(attr, attr_single):
+    obj = AttributeBuilder_Seq(attr, attr_single)
+    return obj
+
 
 class BaseFakeUI:
 
@@ -189,7 +220,10 @@ class BaseFakeUI:
 
 
 class Panel(BaseFakeUI):
-    pass
+
+    @property
+    def is_popover(self):
+        return False
 
 
 class UIList:
@@ -236,7 +270,6 @@ def fake_main():
     # Registerable Subclasses
     bpy.types = module_add("bpy.types")
     bpy.types.Panel = Panel
-    bpy.types.Panel.is_popover = False
     bpy.types.Header = Header
     bpy.types.Menu = Menu
     bpy.types.UIList = UIList
@@ -245,37 +278,39 @@ def fake_main():
 
     # ID Subclasses
     bpy.types.Armature = type("Armature", (), {})
-    bpy.types.Bone = type("Bone", (), {})
-    bpy.types.EditBone = type("EditBone", (), {})
-    bpy.types.FreestyleLineStyle = type("FreestyleLineStyle", (), {})
-    bpy.types.PoseBone = type("PoseBone", (), {})
-    bpy.types.Material = type("Material", (), {})
-    bpy.types.Light = type("Light", (), {})
+    bpy.types.Brush = type("Brush", (), {})
     bpy.types.Camera = type("Camera", (), {})
     bpy.types.Curve = type("Curve", (), {})
-    bpy.types.SurfaceCurve = type("SurfaceCurve", (), {})
-    bpy.types.TextCurve = type("SurfaceCurve", (), {})
+    bpy.types.GreasePencil = type("GreasePencil", (), {})
     bpy.types.Lattice = type("Lattice", (), {})
+    bpy.types.Light = type("Light", (), {})
+    bpy.types.Material = type("Material", (), {})
     bpy.types.Mesh = type("Mesh", (), {})
     bpy.types.MetaBall = type("MetaBall", (), {})
     bpy.types.Object = type("Object", (), {})
+    bpy.types.Object.bl_rna = NewAttr("bpy.types.Object.bl_rna", "bl_rna")
+    bpy.types.ParticleSettings = type("ParticleSettings", (), {})
+    bpy.types.Scene = type("Scene", (), {})
     bpy.types.Sequence = type("Sequence", (), {})
     bpy.types.Speaker = type("Speaker", (), {})
+    bpy.types.SurfaceCurve = type("SurfaceCurve", (), {})
+    bpy.types.TextCurve = type("SurfaceCurve", (), {})
     bpy.types.Texture = type("Texture", (), {})
-    bpy.types.GreasePencil = type("GreasePencil", (), {})
-    bpy.types.ParticleSettings = type("ParticleSettings", (), {})
-    bpy.types.World = type("World", (), {})
-    bpy.types.Theme = type("Theme", (), {})
-    bpy.types.Theme.bl_rna = NewAttr("bpy.types.Theme.bl_rna", "bl_rna")
-    bpy.types.Brush = type("Brush", (), {})
     bpy.types.WindowManager = type("WindowManager", (), {})
     bpy.types.WorkSpace = type("WorkSpace", (), {})
-    bpy.types.Scene = type("Scene", (), {})
-    bpy.types.Scene.EnumProperty = NewAttr("bpy.types.Scene.EnumProperty", "EnumProperty")
-    bpy.types.Scene.StringProperty = NewAttr("bpy.types.Scene.StringProperty", "StringProperty")
+    bpy.types.World = type("World", (), {})
+
+    # Other types
+    bpy.types.Bone = type("Bone", (), {})
+    bpy.types.EditBone = type("EditBone", (), {})
     bpy.types.Event = type("Event", (), {})
     bpy.types.Event.bl_rna = NewAttr("bpy.types.Event.bl_rna", "bl_rna")
-    bpy.types.OperatorFileListElement = type("OperatorFileListElement", (), {})
+    bpy.types.FreestyleLineStyle = type("FreestyleLineStyle", (), {})
+    bpy.types.PoseBone = type("PoseBone", (), {})
+    bpy.types.Theme = type("Theme", (), {})
+    bpy.types.Theme.bl_rna = NewAttr("bpy.types.Theme.bl_rna", "bl_rna")
+    bpy.types.ToolSettings = type("bpy.types.ToolSettings", (), {})
+    bpy.types.ToolSettings.bl_rna = NewAttr("bpy.types.ToolSettings.bl_rna", "bl_rna")
 
     bpy.props = module_add("bpy.props")
     bpy.props.StringProperty = dict
@@ -298,7 +333,7 @@ def fake_main():
     bpy.app.build_options.bullet = True
 
     bpy.app.translations = module_add("bpy.app.translations")
-    bpy.app.translations.pgettext_iface = lambda s: s
+    bpy.app.translations.pgettext_iface = lambda s, context="": s
     bpy.app.translations.pgettext_data = lambda s: s
     bpy.app.translations.pgettext_tip = lambda s: s
     # id's are chosen at random here...