diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java
index 84308a2..03c4691 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TargetCompleteEvent.java
@@ -15,21 +15,23 @@
 package com.google.devtools.build.lib.analysis;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.EventReportingArtifacts;
 import com.google.devtools.build.lib.analysis.TopLevelArtifactHelper.ArtifactsInOutputGroup;
+import com.google.devtools.build.lib.buildeventstream.ArtifactGroupNamer;
 import com.google.devtools.build.lib.buildeventstream.BuildEventConverters;
 import com.google.devtools.build.lib.buildeventstream.BuildEventId;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos;
-import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.File;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.OutputGroup;
 import com.google.devtools.build.lib.buildeventstream.BuildEventWithOrderConstraint;
 import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent;
-import com.google.devtools.build.lib.buildeventstream.PathConverter;
 import com.google.devtools.build.lib.causes.Cause;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
+import com.google.devtools.build.lib.collect.nestedset.NestedSetView;
 import com.google.devtools.build.lib.collect.nestedset.Order;
 import com.google.devtools.build.lib.packages.AttributeMap;
 import com.google.devtools.build.lib.rules.test.TestProvider;
@@ -39,7 +41,8 @@
 import java.util.Collection;
 
 /** This event is fired as soon as a target is either built or fails. */
-public final class TargetCompleteEvent implements SkyValue, BuildEventWithOrderConstraint {
+public final class TargetCompleteEvent
+    implements SkyValue, BuildEventWithOrderConstraint, EventReportingArtifacts {
 
   private final ConfiguredTarget target;
   private final NestedSet<Cause> rootCauses;
@@ -134,13 +137,12 @@
 
   @Override
   public BuildEventStreamProtos.BuildEvent asStreamProto(BuildEventConverters converters) {
-    PathConverter pathConverter = converters.pathConverter();
     BuildEventStreamProtos.TargetComplete.Builder builder =
         BuildEventStreamProtos.TargetComplete.newBuilder();
 
     builder.setSuccess(!failed());
     builder.addAllTag(getTags());
-    builder.addAllOutputGroup(getOutputFilesByGroup(pathConverter));
+    builder.addAllOutputGroup(getOutputFilesByGroup(converters.artifactGroupNamer()));
 
     BuildEventStreamProtos.TargetComplete complete = builder.build();
     return GenericBuildEvent.protoChaining(this).setCompleted(complete).build();
@@ -151,6 +153,16 @@
     return postedAfter;
   }
 
+  @Override
+  public Collection<NestedSet<Artifact>> reportedArtifacts() {
+    ImmutableSet.Builder<NestedSet<Artifact>> builder =
+        new ImmutableSet.Builder<NestedSet<Artifact>>();
+    for (ArtifactsInOutputGroup artifactsInGroup : outputs) {
+      builder.add(artifactsInGroup.getArtifacts());
+    }
+    return builder.build();
+  }
+
   private Iterable<String> getTags() {
     // We are only interested in targets that are rules.
     if (!(target instanceof RuleConfiguredTarget)) {
@@ -161,19 +173,14 @@
     return attributes.get("tags", Type.STRING_LIST);
   }
 
-  private Iterable<OutputGroup> getOutputFilesByGroup(PathConverter pathConverter) {
+  private Iterable<OutputGroup> getOutputFilesByGroup(ArtifactGroupNamer namer) {
     ImmutableList.Builder<OutputGroup> groups = ImmutableList.builder();
     for (ArtifactsInOutputGroup artifactsInOutputGroup : outputs) {
       OutputGroup.Builder groupBuilder = OutputGroup.newBuilder();
       groupBuilder.setName(artifactsInOutputGroup.getOutputGroup());
-
-      File.Builder fileBuilder = File.newBuilder();
-      for (Artifact artifact : artifactsInOutputGroup.getArtifacts()) {
-        String name = artifact.getFilename();
-        String uri = pathConverter.apply(artifact.getPath());
-        groupBuilder.addOutputFile(fileBuilder.setName(name).setUri(uri).build());
-      }
-
+      groupBuilder.addFileSets(
+          namer.apply(
+              (new NestedSetView<Artifact>(artifactsInOutputGroup.getArtifacts())).identifier()));
       groups.add(groupBuilder.build());
     }
     return groups.build();
diff --git a/src/test/shell/integration/build_event_stream_test.sh b/src/test/shell/integration/build_event_stream_test.sh
index 4d9480e..01ed828 100755
--- a/src/test/shell/integration/build_event_stream_test.sh
+++ b/src/test/shell/integration/build_event_stream_test.sh
@@ -43,6 +43,7 @@
 exit 0
 EOF
   chmod 755 pkg/slowtest.sh
+  touch pkg/sourcefileA pkg/sourcefileB pkg/sourcefileC
   cat > pkg/BUILD <<EOF
 sh_test(
   name = "true",
@@ -82,6 +83,14 @@
    name = "extra",
    cmd = "echo Hello World",
 )
+filegroup(
+  name = "innergroup",
+  srcs = ["sourcefileA", "sourcefileB"],
+)
+filegroup(
+  name = "outergroup",
+  srcs = ["sourcefileC", ":innergroup"],
+)
 EOF
 cat > simpleaspect.bzl <<EOF
 def _simple_aspect_impl(target, ctx):
@@ -346,4 +355,14 @@
   expect_not_log 'aborted'
 }
 
+function test_artifact_dedup() {
+  bazel build --experimental_build_event_text_file=$TEST_log \
+      pkg:innergroup pkg:outergroup \
+  || fail "bazel build failed"
+  expect_log_once "name.*sourcefileA"
+  expect_log_once "name.*sourcefileB"
+  expect_log_once "name.*sourcefileC"
+  expect_not_log 'aborted'
+}
+
 run_suite "Integration tests for the build event stream"
