diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceClassResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceClassResult.java
index 6751a2a..09db8bd 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceClassResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceClassResult.java
@@ -6,12 +6,13 @@
 
 import com.android.tools.r8.Keep;
 import com.android.tools.r8.references.TypeReference;
+import com.android.tools.r8.retrace.RetraceClassResult.Element;
 import java.util.List;
-import java.util.function.Consumer;
-import java.util.stream.Stream;
 
 @Keep
-public interface RetraceClassResult {
+public interface RetraceClassResult extends RetraceResult<Element> {
+
+  boolean hasRetraceResult();
 
   RetraceFieldResult lookupField(String fieldName);
 
@@ -29,14 +30,6 @@
   RetraceFrameResult lookupFrame(
       String methodName, int position, List<TypeReference> formalTypes, TypeReference returnType);
 
-  Stream<Element> stream();
-
-  RetraceClassResult forEach(Consumer<Element> resultConsumer);
-
-  boolean hasRetraceResult();
-
-  boolean isAmbiguous();
-
   @Keep
   interface Element {
 
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceFieldResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceFieldResult.java
index d3b6014..ef52314 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceFieldResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceFieldResult.java
@@ -5,17 +5,10 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.Keep;
-import java.util.function.Consumer;
-import java.util.stream.Stream;
+import com.android.tools.r8.retrace.RetraceFieldResult.Element;
 
 @Keep
-public interface RetraceFieldResult {
-
-  Stream<Element> stream();
-
-  RetraceFieldResult forEach(Consumer<Element> resultConsumer);
-
-  boolean isAmbiguous();
+public interface RetraceFieldResult extends RetraceResult<Element> {
 
   @Keep
   interface Element {
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceFrameResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceFrameResult.java
index b439d94..f390396 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceFrameResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceFrameResult.java
@@ -5,19 +5,12 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.Keep;
+import com.android.tools.r8.retrace.RetraceFrameResult.Element;
 import java.util.List;
 import java.util.function.BiConsumer;
-import java.util.function.Consumer;
-import java.util.stream.Stream;
 
 @Keep
-public interface RetraceFrameResult {
-
-  Stream<Element> stream();
-
-  RetraceFrameResult forEach(Consumer<Element> resultConsumer);
-
-  boolean isAmbiguous();
+public interface RetraceFrameResult extends RetraceResult<Element> {
 
   @Keep
   interface Element {
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceMethodResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceMethodResult.java
index 20c73e3..0a4bb50 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceMethodResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceMethodResult.java
@@ -5,20 +5,13 @@
 package com.android.tools.r8.retrace;
 
 import com.android.tools.r8.Keep;
-import java.util.function.Consumer;
-import java.util.stream.Stream;
+import com.android.tools.r8.retrace.RetraceMethodResult.Element;
 
 @Keep
-public interface RetraceMethodResult {
+public interface RetraceMethodResult extends RetraceResult<Element> {
 
   RetraceFrameResult narrowByPosition(int position);
 
-  Stream<Element> stream();
-
-  RetraceMethodResult forEach(Consumer<Element> resultConsumer);
-
-  boolean isAmbiguous();
-
   @Keep
   interface Element {
 
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceResult.java
new file mode 100644
index 0000000..0fe37a6
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceResult.java
@@ -0,0 +1,34 @@
+// Copyright (c) 2021, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package com.android.tools.r8.retrace;
+
+import com.android.tools.r8.Keep;
+import java.util.function.Consumer;
+import java.util.stream.Stream;
+
+/**
+ * Base interface for any retrace result.
+ *
+ * <p>The retracing of any given item may result in ambiguous results. This base type provides the
+ * contract for representing the ambiguity. Concretely an ambiguous result can be mapped over with
+ * each "element" representing one of the non-ambiguous possible retracings. The retrace result can
+ * itself provide methods for providing contextual information to further restrict the ambiguity of
+ * the result.
+ */
+@Keep
+public interface RetraceResult<E> {
+
+  /** Basic operation over 'elements' which represent a possible non-ambiguous retracing. */
+  Stream<E> stream();
+
+  /** A result is ambiguous iff the stream has two or more elements. */
+  default boolean isAmbiguous() {
+    return stream().findFirst().isPresent() && stream().skip(1).findFirst().isPresent();
+  }
+
+  /** Short-hand for iterating the elements. */
+  default void forEach(Consumer<E> action) {
+    stream().forEach(action);
+  }
+}
diff --git a/src/main/java/com/android/tools/r8/retrace/RetraceSourceFileResult.java b/src/main/java/com/android/tools/r8/retrace/RetraceSourceFileResult.java
index b2d4273..076d4da 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetraceSourceFileResult.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetraceSourceFileResult.java
@@ -6,6 +6,7 @@
 
 import com.android.tools.r8.Keep;
 
+// TODO: This does not seem to be a "result" per say, should this rather be a RetracedSourceFile?
 @Keep
 public interface RetraceSourceFileResult {
 
diff --git a/src/main/java/com/android/tools/r8/retrace/RetracedClass.java b/src/main/java/com/android/tools/r8/retrace/RetracedClass.java
index e66931e..23b5842 100644
--- a/src/main/java/com/android/tools/r8/retrace/RetracedClass.java
+++ b/src/main/java/com/android/tools/r8/retrace/RetracedClass.java
@@ -6,7 +6,6 @@
 
 import com.android.tools.r8.Keep;
 import com.android.tools.r8.references.ClassReference;
-import com.android.tools.r8.retrace.internal.RetracedTypeImpl;
 
 @Keep
 public interface RetracedClass {
@@ -15,7 +14,7 @@
 
   String getBinaryName();
 
-  RetracedTypeImpl getRetracedType();
+  RetracedType getRetracedType();
 
   ClassReference getClassReference();
 }
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceClassResultImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceClassResultImpl.java
index 6bbc26a..5028d84 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceClassResultImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceClassResultImpl.java
@@ -22,7 +22,6 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.function.BiFunction;
-import java.util.function.Consumer;
 import java.util.stream.Stream;
 
 public class RetraceClassResultImpl implements RetraceClassResult {
@@ -186,12 +185,6 @@
         mapper);
   }
 
-  @Override
-  public RetraceClassResultImpl forEach(Consumer<Element> resultConsumer) {
-    stream().forEach(resultConsumer);
-    return this;
-  }
-
   private interface ResultConstructor<T, R, D> {
     R create(
         RetraceClassResultImpl classResult,
@@ -200,12 +193,6 @@
         Retracer retracer);
   }
 
-  @Override
-  public boolean isAmbiguous() {
-    // Currently we have no way of producing ambiguous class results.
-    return false;
-  }
-
   public static class ElementImpl implements Element {
 
     private final RetraceClassResultImpl classResult;
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceFieldResultImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceFieldResultImpl.java
index 73b7dbd..4a82482 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceFieldResultImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceFieldResultImpl.java
@@ -13,7 +13,6 @@
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.Pair;
 import java.util.List;
-import java.util.function.Consumer;
 import java.util.stream.Stream;
 
 public class RetraceFieldResultImpl implements RetraceFieldResult {
@@ -79,12 +78,6 @@
   }
 
   @Override
-  public RetraceFieldResultImpl forEach(Consumer<Element> resultConsumer) {
-    stream().forEach(resultConsumer);
-    return this;
-  }
-
-  @Override
   public boolean isAmbiguous() {
     if (memberNamings.size() > 1) {
       return true;
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceFrameResultImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceFrameResultImpl.java
index 341ac8d..47635c7 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceFrameResultImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceFrameResultImpl.java
@@ -21,7 +21,6 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.function.BiConsumer;
-import java.util.function.Consumer;
 import java.util.stream.Stream;
 
 public class RetraceFrameResultImpl implements RetraceFrameResult {
@@ -116,12 +115,6 @@
         obfuscatedPosition);
   }
 
-  @Override
-  public RetraceFrameResultImpl forEach(Consumer<Element> resultConsumer) {
-    stream().forEach(resultConsumer);
-    return this;
-  }
-
   private RetracedMethodImpl getRetracedMethod(
       MethodReference methodReference, MappedRange mappedRange, int obfuscatedPosition) {
     if (mappedRange.minifiedRange == null) {
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceMethodResultImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceMethodResultImpl.java
index 46d63bc..7922955 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceMethodResultImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceMethodResultImpl.java
@@ -13,7 +13,6 @@
 import com.google.common.collect.ImmutableList;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.function.Consumer;
 import java.util.stream.Stream;
 
 public class RetraceMethodResultImpl implements RetraceMethodResult {
@@ -122,12 +121,6 @@
             });
   }
 
-  @Override
-  public RetraceMethodResultImpl forEach(Consumer<Element> resultConsumer) {
-    stream().forEach(resultConsumer);
-    return this;
-  }
-
   public static class ElementImpl implements RetraceMethodResult.Element {
 
     private final RetracedMethodImpl methodReference;
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceTypeResultImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceTypeResultImpl.java
index b48d5f3..2ec0529 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceTypeResultImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceTypeResultImpl.java
@@ -6,6 +6,7 @@
 
 import com.android.tools.r8.references.TypeReference;
 import com.android.tools.r8.retrace.RetraceTypeResult;
+import com.android.tools.r8.retrace.RetracedType;
 import com.android.tools.r8.retrace.Retracer;
 import java.util.function.Consumer;
 import java.util.stream.Stream;
@@ -55,14 +56,14 @@
 
   public static class ElementImpl implements RetraceTypeResult.Element {
 
-    private final RetracedTypeImpl retracedType;
+    private final RetracedType retracedType;
 
-    public ElementImpl(RetracedTypeImpl retracedType) {
+    public ElementImpl(RetracedType retracedType) {
       this.retracedType = retracedType;
     }
 
     @Override
-    public RetracedTypeImpl getType() {
+    public RetracedType getType() {
       return retracedType;
     }
   }
