diff --git a/user/test/com/google/gwt/emultest/BigDecimalSuite.java b/user/test/com/google/gwt/emultest/BigDecimalSuite.java
index b0479a3..210a47e 100644
--- a/user/test/com/google/gwt/emultest/BigDecimalSuite.java
+++ b/user/test/com/google/gwt/emultest/BigDecimalSuite.java
@@ -20,23 +20,20 @@
 import com.google.gwt.emultest.java.math.BigDecimalConstructorsTest;
 import com.google.gwt.emultest.java.math.BigDecimalConvertTest;
 import com.google.gwt.emultest.java.math.BigDecimalScaleOperationsTest;
-import com.google.gwt.junit.tools.GWTTestSuite;
 
-import junit.framework.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
 
 /**
  * Test JRE emulation of BigDecimal.
  */
-public class BigDecimalSuite {
-
-  /** Note: due to compiler error, only can use one Test Case at a time. */
-  public static Test suite() {
-    GWTTestSuite suite = new GWTTestSuite("Tests for BigDecimal");
-    suite.addTestSuite(BigDecimalArithmeticTest.class);
-    suite.addTestSuite(BigDecimalCompareTest.class);
-    suite.addTestSuite(BigDecimalConstructorsTest.class);
-    suite.addTestSuite(BigDecimalConvertTest.class);
-    suite.addTestSuite(BigDecimalScaleOperationsTest.class);
-    return suite;
-  }
-}
+@RunWith(Suite.class)
+@SuiteClasses({
+  BigDecimalArithmeticTest.class,
+  BigDecimalCompareTest.class,
+  BigDecimalConstructorsTest.class,
+  BigDecimalConvertTest.class,
+  BigDecimalScaleOperationsTest.class,
+})
+public class BigDecimalSuite { }
diff --git a/user/test/com/google/gwt/emultest/BigIntegerSuite.java b/user/test/com/google/gwt/emultest/BigIntegerSuite.java
index 35e3ab0..c44c0ba 100644
--- a/user/test/com/google/gwt/emultest/BigIntegerSuite.java
+++ b/user/test/com/google/gwt/emultest/BigIntegerSuite.java
@@ -29,32 +29,29 @@
 import com.google.gwt.emultest.java.math.BigIntegerSubtractTest;
 import com.google.gwt.emultest.java.math.BigIntegerToStringTest;
 import com.google.gwt.emultest.java.math.BigIntegerXorTest;
-import com.google.gwt.junit.tools.GWTTestSuite;
 
-import junit.framework.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
 
 /**
  * Test JRE emulation of BigInteger.
  */
-public class BigIntegerSuite {
-
-  /** Note: due to compiler error, only can use one Test Case at a time. */
-  public static Test suite() {
-    GWTTestSuite suite = new GWTTestSuite("Tests for BigInteger");
-    suite.addTestSuite(BigIntegerAddTest.class);
-    suite.addTestSuite(BigIntegerAndTest.class);
-    suite.addTestSuite(BigIntegerCompareTest.class);
-    suite.addTestSuite(BigIntegerConstructorsTest.class);
-    suite.addTestSuite(BigIntegerDivideTest.class);
-    suite.addTestSuite(BigIntegerHashCodeTest.class);
-    suite.addTestSuite(BigIntegerModPowTest.class);
-    suite.addTestSuite(BigIntegerMultiplyTest.class);
-    suite.addTestSuite(BigIntegerNotTest.class);
-    suite.addTestSuite(BigIntegerOperateBitsTest.class);
-    suite.addTestSuite(BigIntegerOrTest.class);
-    suite.addTestSuite(BigIntegerSubtractTest.class);
-    suite.addTestSuite(BigIntegerToStringTest.class);
-    suite.addTestSuite(BigIntegerXorTest.class);
-    return suite;
-  }
-}
+@RunWith(Suite.class)
+@SuiteClasses({
+  BigIntegerAddTest.class,
+  BigIntegerAndTest.class,
+  BigIntegerCompareTest.class,
+  BigIntegerConstructorsTest.class,
+  BigIntegerDivideTest.class,
+  BigIntegerHashCodeTest.class,
+  BigIntegerModPowTest.class,
+  BigIntegerMultiplyTest.class,
+  BigIntegerNotTest.class,
+  BigIntegerOperateBitsTest.class,
+  BigIntegerOrTest.class,
+  BigIntegerSubtractTest.class,
+  BigIntegerToStringTest.class,
+  BigIntegerXorTest.class,
+})
+public class BigIntegerSuite { }
diff --git a/user/test/com/google/gwt/emultest/CollectionsSuite.java b/user/test/com/google/gwt/emultest/CollectionsSuite.java
index 6d69a38..e078443 100644
--- a/user/test/com/google/gwt/emultest/CollectionsSuite.java
+++ b/user/test/com/google/gwt/emultest/CollectionsSuite.java
@@ -35,45 +35,49 @@
 import com.google.gwt.emultest.java.util.PriorityQueueTest;
 import com.google.gwt.emultest.java.util.RandomTest;
 import com.google.gwt.emultest.java.util.StackTest;
+import com.google.gwt.emultest.java.util.TreeMapIntegerDoubleTest;
+import com.google.gwt.emultest.java.util.TreeMapIntegerDoubleWithComparatorTest;
+import com.google.gwt.emultest.java.util.TreeMapStringStringTest;
+import com.google.gwt.emultest.java.util.TreeMapStringStringWithComparatorTest;
+import com.google.gwt.emultest.java.util.TreeSetIntegerTest;
+import com.google.gwt.emultest.java.util.TreeSetIntegerWithComparatorTest;
 import com.google.gwt.emultest.java.util.VectorTest;
-import com.google.gwt.junit.tools.GWTTestSuite;
 
-import junit.framework.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
 
-/**
- * Test JRE Collections emulation.
- */
-public class CollectionsSuite {
+/** Test JRE Collections emulation. */
+@RunWith(Suite.class)
+@SuiteClasses({
+  ArrayDequeTest.class,
+  ArrayListTest.class,
+  ArraysTest.class,
+  BitSetTest.class,
+  CollectionsTest.class,
+  ComparatorTest.class,
+  DateTest.class,
+  EnumMapTest.class,
+  EnumSetTest.class,
+  HashMapTest.class,
+  HashSetTest.class,
+  IdentityHashMapTest.class,
+  LinkedHashMapTest.class,
+  LinkedHashSetTest.class,
+  LinkedListTest.class,
+  ObjectsTest.class,
+  PriorityQueueTest.class,
+  RandomTest.class,
+  StackTest.class,
+  VectorTest.class,
+  TreeMapStringStringTest.class,
+  TreeMapStringStringWithComparatorTest.class,
+  TreeMapIntegerDoubleTest.class,
+  TreeMapIntegerDoubleWithComparatorTest.class,
+  TreeSetIntegerTest.class,
+  TreeSetIntegerWithComparatorTest.class,
 
-  public static Test suite() {
-    GWTTestSuite suite = new GWTTestSuite("Tests for emulation of Java Collections");
-
-    // $JUnit-BEGIN$
-    suite.addTestSuite(ArrayDequeTest.class);
-    suite.addTestSuite(ArrayListTest.class);
-    suite.addTestSuite(ArraysTest.class);
-    suite.addTestSuite(BitSetTest.class);
-    suite.addTestSuite(CollectionsTest.class);
-    suite.addTestSuite(ComparatorTest.class);
-    suite.addTestSuite(DateTest.class);
-    suite.addTestSuite(EnumMapTest.class);
-    suite.addTestSuite(EnumSetTest.class);
-    suite.addTestSuite(HashMapSmokeTest.class);
-    suite.addTestSuite(HashMapTest.class);
-    suite.addTestSuite(HashSetTest.class);
-    suite.addTestSuite(IdentityHashMapTest.class);
-    suite.addTestSuite(LinkedHashMapTest.class);
-    suite.addTestSuite(LinkedHashSetTest.class);
-    suite.addTestSuite(LinkedListTest.class);
-    suite.addTestSuite(ObjectsTest.class);
-    suite.addTestSuite(PriorityQueueTest.class);
-    suite.addTestSuite(RandomTest.class);
-    suite.addTestSuite(StackTest.class);
-    suite.addTestSuite(VectorTest.class);
-    suite.addTest(TreeMapSuiteSub.suite());
-    suite.addTest(TreeSetSuiteSub.suite());
-    // $JUnit-END$
-
-    return suite;
-  }
-}
+  // Put last to reduce number of times the test framework switches modules
+  HashMapSmokeTest.class,
+})
+public class CollectionsSuite { }
diff --git a/user/test/com/google/gwt/emultest/EmulJava8Suite.java b/user/test/com/google/gwt/emultest/EmulJava8Suite.java
index 572eb86..abab98a 100644
--- a/user/test/com/google/gwt/emultest/EmulJava8Suite.java
+++ b/user/test/com/google/gwt/emultest/EmulJava8Suite.java
@@ -48,59 +48,53 @@
 import com.google.gwt.emultest.java8.util.stream.LongStreamTest;
 import com.google.gwt.emultest.java8.util.stream.StreamSupportTest;
 import com.google.gwt.emultest.java8.util.stream.StreamTest;
-import com.google.gwt.junit.tools.GWTTestSuite;
 
-import junit.framework.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
 
-/**
- * Test Java8 JRE emulations.
- */
-public class EmulJava8Suite {
+/** Test JRE emulations. */
+@RunWith(Suite.class)
+@SuiteClasses({
+  //-- java.lang
+  DoubleTest.class,
+  FloatTest.class,
+  MathTest.class,
+  StringTest.class,
 
-  public static Test suite() {
-    GWTTestSuite suite = new GWTTestSuite("Tests for com.google.gwt.emul.java8");
+  //-- java.math
+  BigIntegerConvertTest.class,
 
-    //-- java.lang
-    suite.addTestSuite(DoubleTest.class);
-    suite.addTestSuite(FloatTest.class);
-    suite.addTestSuite(MathTest.class);
-    suite.addTestSuite(StringTest.class);
+  //-- java.util
+  ArraysTest.class,
+  ArrayListTest.class,
+  LinkedListTest.class,
+  ListTest.class,
+  VectorTest.class,
+  ComparatorTest.class,
+  MapTest.class,
+  MapEntryTest.class,
+  HashMapTest.class,
+  IdentityHashMapTest.class,
+  LinkedHashMapTest.class,
+  TreeMapTest.class,
+  OptionalTest.class,
+  OptionalIntTest.class,
+  OptionalLongTest.class,
+  OptionalDoubleTest.class,
+  PrimitiveIteratorTest.class,
+  SpliteratorsTest.class,
+  StringJoinerTest.class,
+  DoubleSummaryStatisticsTest.class,
+  IntSummaryStatisticsTest.class,
+  LongSummaryStatisticsTest.class,
 
-    //-- java.math
-    suite.addTestSuite(BigIntegerConvertTest.class);
-
-    //-- java.util
-    suite.addTestSuite(ArraysTest.class);
-    suite.addTestSuite(ArrayListTest.class);
-    suite.addTestSuite(LinkedListTest.class);
-    suite.addTestSuite(ListTest.class);
-    suite.addTestSuite(VectorTest.class);
-    suite.addTestSuite(ComparatorTest.class);
-    suite.addTestSuite(MapTest.class);
-    suite.addTestSuite(MapEntryTest.class);
-    suite.addTestSuite(HashMapTest.class);
-    suite.addTestSuite(IdentityHashMapTest.class);
-    suite.addTestSuite(LinkedHashMapTest.class);
-    suite.addTestSuite(TreeMapTest.class);
-    suite.addTestSuite(OptionalTest.class);
-    suite.addTestSuite(OptionalIntTest.class);
-    suite.addTestSuite(OptionalLongTest.class);
-    suite.addTestSuite(OptionalDoubleTest.class);
-    suite.addTestSuite(PrimitiveIteratorTest.class);
-    suite.addTestSuite(SpliteratorsTest.class);
-    suite.addTestSuite(StringJoinerTest.class);
-    suite.addTestSuite(DoubleSummaryStatisticsTest.class);
-    suite.addTestSuite(IntSummaryStatisticsTest.class);
-    suite.addTestSuite(LongSummaryStatisticsTest.class);
-
-    //-- java.util.stream
-    suite.addTestSuite(CollectorsTest.class);
-    suite.addTestSuite(DoubleStreamTest.class);
-    suite.addTestSuite(IntStreamTest.class);
-    suite.addTestSuite(LongStreamTest.class);
-    suite.addTestSuite(StreamTest.class);
-    suite.addTestSuite(StreamSupportTest.class);
-
-    return suite;
-  }
-}
+  //-- java.util.stream
+  CollectorsTest.class,
+  DoubleStreamTest.class,
+  IntStreamTest.class,
+  LongStreamTest.class,
+  StreamTest.class,
+  StreamSupportTest.class,
+})
+public class EmulJava8Suite { }
diff --git a/user/test/com/google/gwt/emultest/EmulSuite.java b/user/test/com/google/gwt/emultest/EmulSuite.java
index 1e82a93..483ae7a 100644
--- a/user/test/com/google/gwt/emultest/EmulSuite.java
+++ b/user/test/com/google/gwt/emultest/EmulSuite.java
@@ -50,70 +50,66 @@
 import com.google.gwt.emultest.java.sql.SqlDateTest;
 import com.google.gwt.emultest.java.sql.SqlTimeTest;
 import com.google.gwt.emultest.java.sql.SqlTimestampTest;
-import com.google.gwt.junit.tools.GWTTestSuite;
 
-import junit.framework.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
 
 /**
  * Test JRE emulations.
  */
-public class EmulSuite {
+@RunWith(Suite.class)
+@SuiteClasses({
+  CoercionsTest.class,
 
-  /**
-   * Note: due to compiler error, only can use one Test Case at a time.
-   */
-  public static Test suite() {
-    GWTTestSuite suite = new GWTTestSuite("Tests for com.google.gwt.emul.java");
+  //-- java.io
+  ByteArrayInputStreamTest.class,
+  ByteArrayOutputStreamTest.class,
+  FilterInputStreamTest.class,
+  FilterOutputStreamTest.class,
+  InputStreamTest.class,
+  OutputStreamTest.class,
 
-    // $JUnit-BEGIN$
-    suite.addTestSuite(CoercionsTest.class);
-    //-- java.io
-    suite.addTestSuite(ByteArrayInputStreamTest.class);
-    suite.addTestSuite(ByteArrayOutputStreamTest.class);
-    suite.addTestSuite(FilterInputStreamTest.class);
-    suite.addTestSuite(FilterOutputStreamTest.class);
-    suite.addTestSuite(InputStreamTest.class);
-    suite.addTestSuite(OutputStreamTest.class);
-    //-- java.lang
-    suite.addTestSuite(BooleanTest.class);
-    suite.addTestSuite(ByteTest.class);
-    suite.addTestSuite(CharacterTest.class);
-    suite.addTestSuite(CompilerConstantStringTest.class);
-    suite.addTestSuite(DoubleTest.class);
-    suite.addTestSuite(FloatTest.class);
-    suite.addTestSuite(IntegerTest.class);
-    suite.addTestSuite(JsExceptionTest.class);
-    suite.addTestSuite(LongTest.class);
-    suite.addTestSuite(MathTest.class);
-    suite.addTestSuite(NullPointerExceptionTest.class);
-    suite.addTestSuite(ObjectTest.class);
-    suite.addTestSuite(ShortTest.class);
-    suite.addTestSuite(StringBufferTest.class);
-    suite.addTestSuite(StringTest.class);
-    suite.addTestSuite(SystemTest.class);
-    suite.addTestSuite(ThrowableTest.class);
-    suite.addTestSuite(ThrowableStackTraceEmulTest.class);
-    suite.addTestSuite(TypeTest.class);
-    //-- java.math
-    // BigDecimal is tested in {@link BigDecimalSuite}
-    // BigInteger is tested in {@link BigIntegerSuite}
-    suite.addTestSuite(RoundingModeTest.class);
-    suite.addTestSuite(MathContextTest.class);
-    suite.addTestSuite(MathContextWithObfuscatedEnumsTest.class);
+  //-- java.lang
+  BooleanTest.class,
+  ByteTest.class,
+  CharacterTest.class,
+  CompilerConstantStringTest.class,
+  DoubleTest.class,
+  FloatTest.class,
+  IntegerTest.class,
+  JsExceptionTest.class,
+  LongTest.class,
+  MathTest.class,
+  NullPointerExceptionTest.class,
+  ObjectTest.class,
+  ShortTest.class,
+  StringBufferTest.class,
+  StringTest.class,
+  SystemTest.class,
+  ThrowableTest.class,
+  ThrowableStackTraceEmulTest.class,
+  TypeTest.class,
 
-    //-- java.nio
-    suite.addTestSuite(CharsetTest.class);
-    suite.addTestSuite(StandardCharsetsTest.class);
+  //-- java.math
+  // BigDecimal is tested in {@link BigDecimalSuite}
+  // BigInteger is tested in {@link BigIntegerSuite}
+  RoundingModeTest.class,
+  MathContextTest.class,
 
-    //-- java.security
-    suite.addTestSuite(MessageDigestTest.class);
+  //-- java.nio
+  CharsetTest.class,
+  StandardCharsetsTest.class,
 
-    //-- java.sql
-    suite.addTestSuite(SqlDateTest.class);
-    suite.addTestSuite(SqlTimeTest.class);
-    suite.addTestSuite(SqlTimestampTest.class);
-    // $JUnit-END$
+  //-- java.security
+  MessageDigestTest.class,
 
-    return suite;
-  }
-}
+  //-- java.sql
+  SqlDateTest.class,
+  SqlTimeTest.class,
+  SqlTimestampTest.class,
+
+  // Put last to reduce number of times the test framework switches modules
+  MathContextWithObfuscatedEnumsTest.class,
+})
+public class EmulSuite { }
diff --git a/user/test/com/google/gwt/emultest/TreeMapSuiteSub.java b/user/test/com/google/gwt/emultest/TreeMapSuiteSub.java
deleted file mode 100644
index 2f0e804..0000000
--- a/user/test/com/google/gwt/emultest/TreeMapSuiteSub.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2008 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.emultest;
-
-import com.google.gwt.emultest.java.util.TreeMapIntegerDoubleTest;
-import com.google.gwt.emultest.java.util.TreeMapIntegerDoubleWithComparatorTest;
-import com.google.gwt.emultest.java.util.TreeMapStringStringTest;
-import com.google.gwt.emultest.java.util.TreeMapStringStringWithComparatorTest;
-import com.google.gwt.junit.tools.GWTTestSuite;
-
-import junit.framework.Test;
-
-/**
- * Tests <code>TreeMap</code>.
- */
-public class TreeMapSuiteSub {
-  public static Test suite() {
-    GWTTestSuite suite = new GWTTestSuite("Tests for com.google.gwt.emul.java.util.TreeMap");
-    suite.addTestSuite(TreeMapStringStringTest.class);
-    suite.addTestSuite(TreeMapStringStringWithComparatorTest.class);
-    suite.addTestSuite(TreeMapIntegerDoubleTest.class);
-    suite.addTestSuite(TreeMapIntegerDoubleWithComparatorTest.class);
-    return suite;
-  }
-}
diff --git a/user/test/com/google/gwt/emultest/TreeSetSuiteSub.java b/user/test/com/google/gwt/emultest/TreeSetSuiteSub.java
deleted file mode 100644
index a7cf7d1..0000000
--- a/user/test/com/google/gwt/emultest/TreeSetSuiteSub.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2008 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.emultest;
-
-import com.google.gwt.emultest.java.util.TreeSetIntegerTest;
-import com.google.gwt.emultest.java.util.TreeSetIntegerWithComparatorTest;
-import com.google.gwt.junit.tools.GWTTestSuite;
-
-import junit.framework.Test;
-
-/**
- * Tests <code>TreeSet</code>.
- */
-public class TreeSetSuiteSub {
-  public static Test suite() {
-    GWTTestSuite suite = new GWTTestSuite("Tests for com.google.gwt.emul.java.util.TreeSet");
-    suite.addTestSuite(TreeSetIntegerTest.class);
-    suite.addTestSuite(TreeSetIntegerWithComparatorTest.class);
-    return suite;
-  }
-}
