diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/LegacyLoadingPhaseRunner.java b/src/main/java/com/google/devtools/build/lib/pkgcache/LegacyLoadingPhaseRunner.java
index 9b6b684..7fda021 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/LegacyLoadingPhaseRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/LegacyLoadingPhaseRunner.java
@@ -281,7 +281,8 @@
   private void postLoadingLogging(EventBus eventBus, ImmutableSet<Target> originalTargetsToLoad,
       ImmutableSet<Target> expandedTargetsToLoad, Stopwatch timer) {
     Set<Target> testSuiteTargets = Sets.difference(originalTargetsToLoad, expandedTargetsToLoad);
-    eventBus.post(new LoadingPhaseCompleteEvent(expandedTargetsToLoad, testSuiteTargets,
+    eventBus.post(new LoadingPhaseCompleteEvent(
+        expandedTargetsToLoad, ImmutableSet.copyOf(testSuiteTargets),
         packageManager.getStatistics(), timer.stop().elapsed(TimeUnit.MILLISECONDS)));
     LOG.info("Loading phase finished"); 
   }
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseCompleteEvent.java
index 914ce3b..4f42c0f 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseCompleteEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseCompleteEvent.java
@@ -14,18 +14,18 @@
 package com.google.devtools.build.lib.pkgcache;
 
 import com.google.common.base.Function;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.packages.Target;
 
-import java.util.Collection;
-
 /**
  * This event is fired after the loading phase is complete.
  */
-public class LoadingPhaseCompleteEvent {
-  private final Collection<Target> targets;
-  private final Collection<Target> filteredTargets;
+public final class LoadingPhaseCompleteEvent {
+  private final ImmutableSet<Target> targets;
+  private final ImmutableSet<Target> filteredTargets;
   private final PackageManager.PackageManagerStatistics pkgManagerStats;
   private final long timeInMs;
 
@@ -35,11 +35,12 @@
    * @param targets the set of active targets that remain
    * @param pkgManagerStats statistics about the package cache
    */
-  public LoadingPhaseCompleteEvent(Collection<Target> targets, Collection<Target> filteredTargets,
-      PackageManager.PackageManagerStatistics pkgManagerStats, long timeInMs) {
-    this.targets = targets;
-    this.filteredTargets = filteredTargets;
-    this.pkgManagerStats = pkgManagerStats;
+  public LoadingPhaseCompleteEvent(ImmutableSet<Target> targets,
+      ImmutableSet<Target> filteredTargets, PackageManager.PackageManagerStatistics pkgManagerStats,
+      long timeInMs) {
+    this.targets = Preconditions.checkNotNull(targets);
+    this.filteredTargets = Preconditions.checkNotNull(filteredTargets);
+    this.pkgManagerStats = Preconditions.checkNotNull(pkgManagerStats);
     this.timeInMs = timeInMs;
   }
 
@@ -47,14 +48,14 @@
    * @return The set of active targets remaining, which is a subset of the
    *         targets we attempted to load.
    */
-  public Collection<Target> getTargets() {
+  public ImmutableSet<Target> getTargets() {
     return targets;
   }
 
   /**
    * @return The set of filtered targets.
    */
-  public Collection<Target> getFilteredTargets() {
+  public ImmutableSet<Target> getFilteredTargets() {
     return filteredTargets;
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 12c38a8..92c6804 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -1728,7 +1728,6 @@
    * Skyframe-based implementation of {@link LoadingPhaseRunner} based on {@link
    * TargetPatternPhaseFunction}.
    */
-  // TODO(ulfjack): This is still incomplete.
   final class SkyframeLoadingPhaseRunner extends LoadingPhaseRunner {
     private final TargetPatternEvaluator targetPatternEvaluator;
     private final Set<String> ruleClassNames;
@@ -1785,17 +1784,14 @@
       long time = timer.stop().elapsed(TimeUnit.MILLISECONDS);
 
       TargetPatternPhaseValue patternParsingValue = evalResult.get(key);
-      // TODO(ulfjack): The first event should be pre-test_suite expansion, the second post.
-      eventBus.post(new TargetParsingCompleteEvent(patternParsingValue.getTargets(),
+      eventBus.post(new TargetParsingCompleteEvent(patternParsingValue.getOriginalTargets(),
           patternParsingValue.getFilteredTargets(), patternParsingValue.getTestFilteredTargets(),
           time));
       if (callback != null) {
         callback.notifyTargets(patternParsingValue.getTargets());
       }
       eventBus.post(new LoadingPhaseCompleteEvent(
-          /*was expandedTargetsToLoad*/patternParsingValue.getTargets(),
-          // TODO(ulfjack): Should be: Sets.difference(originalTargetsToLoad, expandedTargetsToLoad)
-          /*was testSuiteTargets*/ImmutableSet.<Target>of(),
+          patternParsingValue.getTargets(), patternParsingValue.getTestSuiteTargets(),
           packageManager.getStatistics(), /*timeInMs=*/0));
       return patternParsingValue.toLoadingResult();
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
index ea30c05..9608878 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
@@ -159,9 +159,12 @@
         expandedTargetsBuilder.add(target);
       }
     }
-    targets = expandedTargetsBuilder.build();
-    return new TargetPatternPhaseValue(targets.getTargets(), testsToRun, preExpansionError,
-        targets.hasError(), filteredTargets, testFilteredTargets);
+    ResolvedTargets<Target> expandedTargets = expandedTargetsBuilder.build();
+    Set<Target> testSuiteTargets =
+        Sets.difference(targets.getTargets(), expandedTargets.getTargets());
+    return new TargetPatternPhaseValue(expandedTargets.getTargets(), testsToRun, preExpansionError,
+        expandedTargets.hasError(), filteredTargets, testFilteredTargets,
+        targets.getTargets(), ImmutableSet.copyOf(testSuiteTargets));
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java
index becc737..4c864db 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java
@@ -52,15 +52,23 @@
   private final ImmutableSet<Target> filteredTargets;
   private final ImmutableSet<Target> testFilteredTargets;
 
+  // These two fields are only for the purposes of generating the TargetParsingCompleteEvent.
+  // TODO(ulfjack): Support EventBus event posting in Skyframe, and remove this code again.
+  private final ImmutableSet<Target> originalTargets;
+  private final ImmutableSet<Target> testSuiteTargets;
+
   TargetPatternPhaseValue(ImmutableSet<Target> targets, @Nullable ImmutableSet<Target> testsToRun,
       boolean hasError, boolean hasPostExpansionError, ImmutableSet<Target> filteredTargets,
-      ImmutableSet<Target> testFilteredTargets) {
+      ImmutableSet<Target> testFilteredTargets, ImmutableSet<Target> originalTargets,
+      ImmutableSet<Target> testSuiteTargets) {
     this.targets = Preconditions.checkNotNull(targets);
     this.testsToRun = testsToRun;
     this.hasError = hasError;
     this.hasPostExpansionError = hasPostExpansionError;
     this.filteredTargets = Preconditions.checkNotNull(filteredTargets);
     this.testFilteredTargets = Preconditions.checkNotNull(testFilteredTargets);
+    this.originalTargets = Preconditions.checkNotNull(originalTargets);
+    this.testSuiteTargets = Preconditions.checkNotNull(testSuiteTargets);
   }
 
   public ImmutableSet<Target> getTargets() {
@@ -88,6 +96,14 @@
     return testFilteredTargets;
   }
 
+  public ImmutableSet<Target> getOriginalTargets() {
+    return originalTargets;
+  }
+
+  public ImmutableSet<Target> getTestSuiteTargets() {
+    return testSuiteTargets;
+  }
+
   public LoadingResult toLoadingResult() {
     return new LoadingResult(hasError(), hasPostExpansionError(), getTargets(), getTestsToRun(),
         ImmutableMap.<PackageIdentifier, Path>of());
