diff --git a/user/super/com/google/gwt/emul/java/util/stream/Collector.java b/user/super/com/google/gwt/emul/java/util/stream/Collector.java
index c3907ef..4e58835 100644
--- a/user/super/com/google/gwt/emul/java/util/stream/Collector.java
+++ b/user/super/com/google/gwt/emul/java/util/stream/Collector.java
@@ -17,8 +17,6 @@
 
 import static javaemul.internal.InternalPreconditions.checkNotNull;
 
-import java.util.Collections;
-import java.util.EnumSet;
 import java.util.Set;
 import java.util.function.BiConsumer;
 import java.util.function.BinaryOperator;
@@ -53,13 +51,7 @@
     checkNotNull(combiner);
     checkNotNull(finisher);
     checkNotNull(characteristics);
-    return new CollectorImpl<>(
-        supplier,
-        accumulator,
-        combiner,
-        finisher,
-        characteristics
-    );
+    return new CollectorImpl<>(supplier, accumulator, combiner, finisher, characteristics);
   }
 
   static <T, R> Collector<T, R, R> of(
@@ -72,12 +64,7 @@
     checkNotNull(combiner);
     checkNotNull(characteristics);
     return new CollectorImpl<T, R, R>(
-        supplier,
-        accumulator,
-        combiner,
-        Function.identity(),
-        Collections.unmodifiableSet(EnumSet.of(Characteristics.IDENTITY_FINISH, characteristics))
-    );
+        supplier, accumulator, combiner, Function.identity(), characteristics);
   }
 
   Supplier<A> supplier();
@@ -89,4 +76,4 @@
   BinaryOperator<A> combiner();
 
   Function<A,R> finisher();
-}
\ No newline at end of file
+}
diff --git a/user/super/com/google/gwt/emul/java/util/stream/CollectorImpl.java b/user/super/com/google/gwt/emul/java/util/stream/CollectorImpl.java
index 9202a28..1ff23d1 100644
--- a/user/super/com/google/gwt/emul/java/util/stream/CollectorImpl.java
+++ b/user/super/com/google/gwt/emul/java/util/stream/CollectorImpl.java
@@ -16,7 +16,6 @@
 package java.util.stream;
 
 import java.util.Collections;
-import java.util.EnumSet;
 import java.util.Set;
 import java.util.function.BiConsumer;
 import java.util.function.BinaryOperator;
@@ -41,31 +40,11 @@
       Characteristics... characteristics) {
     this.supplier = supplier;
     this.accumulator = accumulator;
-    if (characteristics.length == 0) {
-      this.characteristics = Collections.emptySet();
-    } else if (characteristics.length == 1) {
-      this.characteristics = Collections.singleton(characteristics[0]);
-    } else {
-      this.characteristics =
-          Collections.unmodifiableSet(EnumSet.of(characteristics[0], characteristics));
-    }
+    this.characteristics = Collections.emptySet();
     this.combiner = combiner;
     this.finisher = finisher;
   }
 
-  public CollectorImpl(
-      Supplier<A> supplier,
-      BiConsumer<A, T> accumulator,
-      BinaryOperator<A> combiner,
-      Function<A, R> finisher,
-      Set<Characteristics> characteristics) {
-    this.supplier = supplier;
-    this.accumulator = accumulator;
-    this.combiner = combiner;
-    this.finisher = finisher;
-    this.characteristics = characteristics;
-  }
-
   @Override
   public Supplier<A> supplier() {
     return supplier;
diff --git a/user/super/com/google/gwt/emul/java/util/stream/Collectors.java b/user/super/com/google/gwt/emul/java/util/stream/Collectors.java
index 65edfa5..d19f64c 100644
--- a/user/super/com/google/gwt/emul/java/util/stream/Collectors.java
+++ b/user/super/com/google/gwt/emul/java/util/stream/Collectors.java
@@ -18,10 +18,8 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.DoubleSummaryStatistics;
-import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.IntSummaryStatistics;
@@ -68,8 +66,7 @@
         downstream.supplier(),
         downstream.accumulator(),
         downstream.combiner(),
-        downstream.finisher().andThen(finisher),
-        removeIdentFinisher(downstream.characteristics()));
+        downstream.finisher().andThen(finisher));
   }
 
   public static <T> Collector<T,?,Long> counting() {
@@ -170,8 +167,7 @@
               downstream.accumulator().accept(a, mapper.apply(t));
             },
         downstream.combiner(),
-        downstream.finisher(),
-        downstream.characteristics());
+        downstream.finisher());
   }
 
   public static <T> Collector<T,?,Optional<T>> maxBy(Comparator<? super T> comparator) {
@@ -361,21 +357,6 @@
     );
   }
 
-  private static Set<Collector.Characteristics> removeIdentFinisher(
-      Set<Collector.Characteristics> characteristics) {
-    if (!characteristics.contains(Collector.Characteristics.IDENTITY_FINISH)) {
-      return characteristics;
-    }
-
-    if (characteristics.size() == 1) {
-      return Collections.emptySet();
-    }
-
-    EnumSet<Collector.Characteristics> result = EnumSet.copyOf(characteristics);
-    result.remove(Collector.Characteristics.IDENTITY_FINISH);
-    return Collections.unmodifiableSet(result);
-  }
-
   private static <T, D, A> D streamAndCollect(Collector<? super T, A, D> downstream, List<T> list) {
     A a = downstream.supplier().get();
     for (T t : list) {
