diff --git a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
index 8e7ab7a..a79fb40 100644
--- a/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
+++ b/src/TulsiGenerator/Bazel/tulsi/tulsi_aspects.bzl
@@ -113,6 +113,28 @@
     "swiftmodule",
 ]
 
+TulsiSourcesAspectInfo = provider(
+    fields = {
+        "transitive_info_files": """
+The file actions used to save this rule's info and that of all of its transitive dependencies as
+well as any Info plists required for extensions.
+""",
+        "inheritable_attributes": """
+The inheritable attributes of this rule, expressed as a dict instead of a struct to allow easy
+joining.
+""",
+        "transitive_attributes": """
+Transitive attributes that should be applied to every rule that depends on this rule.
+""",
+        "artifacts": """
+Artifacts from this rule.
+""",
+        "filtering_info": """
+Filtering information for this target. Only for test target, otherwise is None.
+""",
+    },
+)
+
 TulsiOutputAspectInfo = provider(
     fields = {
         "transitive_generated_files": "Depset of tulsi generated files.",
@@ -357,7 +379,7 @@
         dep
         for dep in _getattr_as_list(rule_attr, attr_name)
         if type(dep) == "Target" and
-           (hasattr(dep, "tulsi_info_files") or TulsiOutputAspectInfo in dep)
+           (TulsiSourcesAspectInfo in dep or TulsiOutputAspectInfo in dep)
     ]
 
 def _collect_dependency_labels(rule, filter, attr_list):
@@ -568,15 +590,14 @@
     rule_attr = _get_opt_attr(rule, "attr")
     filter = _filter_for_rule(rule)
 
-    tulsi_info_files = depset()
+    transitive_info_files = depset()
     transitive_attributes = dict()
     for attr_name in _TULSI_COMPILE_DEPS:
         deps = _collect_dependencies(rule_attr, attr_name)
         for dep in _filter_deps(filter, deps):
-            if hasattr(dep, "tulsi_info_files"):
-                tulsi_info_files += dep.tulsi_info_files
-            if hasattr(dep, "transitive_attributes"):
-                transitive_attributes += dep.transitive_attributes
+            if TulsiSourcesAspectInfo in dep:
+                transitive_info_files += dep[TulsiSourcesAspectInfo].transitive_info_files
+                transitive_attributes += dep[TulsiSourcesAspectInfo].transitive_attributes
 
     artifacts = _get_opt_attr(target, "files")
     if artifacts:
@@ -777,32 +798,23 @@
     # Create an action to write out this target's info.
     output = ctx.new_file(target.label.name + ".tulsiinfo")
     ctx.file_action(output, info.to_json())
-    tulsi_info_files += depset([output])
+    transitive_info_files += depset([output])
 
     if infoplist:
-        tulsi_info_files += [infoplist]
+        transitive_info_files += [infoplist]
 
     artifacts_depset = depset(artifacts) if artifacts else depset()
 
-    return struct(
-        # Matches the --output_groups on the bazel commandline.
-        output_groups = {
-            "tulsi-info": tulsi_info_files,
-        },
-        # The file actions used to save this rule's info and that of all of its
-        # transitive dependencies.
-        tulsi_info_files = tulsi_info_files,
-        # The inheritable attributes of this rule, expressed as a dict instead of
-        # a struct to allow easy joining.
-        inheritable_attributes = inheritable_attributes,
-        # Transitive info that should be applied to every rule that depends on
-        # this rule.
-        transitive_attributes = transitive_attributes,
-        # Artifacts from this rule.
-        artifacts = artifacts_depset,
-        # Filtering information for this target.
-        filtering_info = _target_filtering_info(ctx),
-    )
+    return [
+        OutputGroupInfo(tulsi_info = transitive_info_files),
+        TulsiSourcesAspectInfo(
+            transitive_info_files = transitive_info_files,
+            inheritable_attributes = inheritable_attributes,
+            transitive_attributes = transitive_attributes,
+            artifacts = artifacts_depset,
+            filtering_info = _target_filtering_info(ctx),
+        ),
+    ]
 
 def _collect_bundle_info(target):
     """Returns Apple bundle info for the given target, None if not a bundle."""
@@ -883,7 +895,9 @@
 
     kept_deps = []
     for dep in deps:
-        info = dep.filtering_info
+        info = None
+        if TulsiSourcesAspectInfo in dep:
+            info = dep[TulsiSourcesAspectInfo].filtering_info
 
         # Only attempt to filter targets that support filtering.
         # test_suites in a test_suite are not filtered, but their
diff --git a/src/TulsiGenerator/BazelAspectInfoExtractor.swift b/src/TulsiGenerator/BazelAspectInfoExtractor.swift
index 62ecf3f..983d14a 100644
--- a/src/TulsiGenerator/BazelAspectInfoExtractor.swift
+++ b/src/TulsiGenerator/BazelAspectInfoExtractor.swift
@@ -229,7 +229,7 @@
         // Keep this consistent with bazel_build.py.
         "--aspects",
         "@tulsi//tulsi:tulsi_aspects.bzl%\(aspect)",
-        "--output_groups=tulsi-info,-_,-default",  // Build only the aspect artifacts.
+        "--output_groups=tulsi_info,-_,-default",  // Build only the aspect artifacts.
     ])
     arguments.append(contentsOf: targets)
 
