diff --git a/scripts/bp2build-progress/bp2build-progress.py b/scripts/bp2build-progress/bp2build-progress.py
index 49a299d..1cb9431 100755
--- a/scripts/bp2build-progress/bp2build-progress.py
+++ b/scripts/bp2build-progress/bp2build-progress.py
@@ -142,7 +142,7 @@
 
   make_node = lambda module, color: \
       ('"{name}" [label="{name}\\n{kind}" color=black, style=filled, '
-       'fillcolor={color}]').format(name=module.name, kind=module.kind, color=color)
+       "fillcolor={color}]").format(name=module.name, kind=module.kind, color=color)
   make_edge = lambda module, dep: \
       '"%s" -> "%s"' % (module.name, dep)
 
@@ -187,6 +187,7 @@
   all_unconverted_modules = collections.defaultdict(int)
 
   dirs_with_unconverted_modules = set()
+  kind_of_unconverted_modules = set()
 
   for module, deps in sorted(modules.items()):
     unconverted_deps = set(dep for dep in deps if dep not in converted)
@@ -202,6 +203,7 @@
           unconverted_deps=", ".join(sorted(unconverted_deps)))
       blocked_modules[unconverted_count].append(report_entry)
       dirs_with_unconverted_modules.add(module.dirname)
+      kind_of_unconverted_modules.add(module.kind)
 
   for count, modules in sorted(blocked_modules.items()):
     report_lines.append("\n%d unconverted deps remaining:" % count)
@@ -220,6 +222,10 @@
       sorted(dirs_with_unconverted_modules))))
 
   report_lines.append("\n")
+  report_lines.append("Kinds with unconverted modules:\n\n{}".format("\n".join(
+      sorted(kind_of_unconverted_modules))))
+
+  report_lines.append("\n")
   report_lines.append("# Converted modules:\n\n%s" %
                       "\n".join(sorted(converted)))
 
@@ -227,9 +233,8 @@
   report_lines.append(
       "Generated by: https://cs.android.com/android/platform/superproject/+/master:build/bazel/scripts/bp2build-progress/bp2build-progress.py"
   )
-  report_lines.append(
-      "Generated at: %s" %
-      datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S %z"))
+  report_lines.append("Generated at: %s" %
+                      datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S %z"))
   print("\n".join(report_lines))
 
 
@@ -243,7 +248,7 @@
   # Do a single pass to find all top-level modules to be ignored
   for module in module_graph:
     name = module["Name"]
-    if module["Type"] in IGNORED_KINDS:
+    if ignore_kind(module["Type"]):
       ignored.add(module["Name"])
       continue
     name_to_info[name] = _ModuleInfo(
@@ -274,6 +279,10 @@
   return module_adjacency_list
 
 
+def ignore_kind(kind):
+  return kind in IGNORED_KINDS or "defaults" in kind
+
+
 def bazel_target_to_dir(full_target):
   dirname, _ = full_target.split(":")
   return dirname[2:]
@@ -291,29 +300,39 @@
   name_with_variant_to_name = dict()
 
   for module in module_graph:
+    ignore = False
     if module.tag != "rule":
       continue
     kind = module.attrib["class"]
     name_with_variant = module.attrib["name"]
+    name = None
+    variant = ""
     for attr in module:
       attr_name = attr.attrib["name"]
       if attr_name == "soong_module_name":
         name = attr.attrib["value"]
-        if kind in IGNORED_KINDS:
-          ignored.add(name_with_variant)
-        else:
-          name_with_variant_to_name.setdefault(name_with_variant, name)
-          name_to_info.setdefault(
-              name,
-              _ModuleInfo(
-                  name=name,
-                  kind=kind,
-                  dirname=bazel_target_to_dir(name_with_variant),
-              ))
       elif attr_name == "soong_module_variant":
         variant = attr.attrib["value"]
-        if variant.startswith("windows"):
-          ignored.add(name_with_variant)
+      elif attr_name == "soong_module_type" and kind == "generic_soong_module":
+        kind = attr.attrib["value"]
+      # special handling for filegroup srcs, if a source has the same name as
+      # the module, we don't convert it
+      elif kind == "filegroup" and attr_name == "srcs":
+        for item in attr:
+          if item.attrib["value"] == name:
+            ignore = True
+
+    if ignore_kind(kind) or variant.startswith("windows") or ignore:
+      ignored.add(name_with_variant)
+    else:
+      name_with_variant_to_name.setdefault(name_with_variant, name)
+      name_to_info.setdefault(
+          name,
+          _ModuleInfo(
+              name=name,
+              kind=kind,
+              dirname=bazel_target_to_dir(name_with_variant),
+          ))
 
   # An adjacency list for all modules in the transitive closure, excluding ignored modules.
   module_adjacency_list = dict()
@@ -364,9 +383,9 @@
     module_graph, converted = generate_module_info(top_level_module,
                                                    use_queryview)
   except subprocess.CalledProcessError as err:
-    print("Error running: '%s':", ' '.join(err.cmd))
-    print("Output:\n%s" % err.output.decode('utf-8'))
-    print("Error:\n%s" % err.stderr.decode('utf-8'))
+    print("Error running: '%s':", " ".join(err.cmd))
+    print("Output:\n%s" % err.output.decode("utf-8"))
+    print("Error:\n%s" % err.stderr.decode("utf-8"))
     sys.exit(-1)
 
   module_adjacency_list = None
