diff --git a/tools/api-checker/config/gwt25_26userApi.conf b/tools/api-checker/config/gwt25_26userApi.conf
index e8c0fed..4528771 100644
--- a/tools/api-checker/config/gwt25_26userApi.conf
+++ b/tools/api-checker/config/gwt25_26userApi.conf
@@ -143,5 +143,10 @@
 # Removed an internal method of GWTTestCase
 com.google.gwt.junit.client.GWTTestCase::__getOrCreateTestResult() MISSING
 
+# Removed deprecated 'checkpoints' functionality in GWTTestCase
+com.google.gwt.junit.client.GWTTestCase::addCheckpoint(Ljava/lang/String;) MISSING
+com.google.gwt.junit.client.GWTTestCase::clearCheckpoints() MISSING
+com.google.gwt.junit.client.GWTTestCase::getCheckpoints() MISSING
+
 # Removed deprecated benchmark infra
 com.google.gwt.benchmarks.client MISSING
diff --git a/user/src/com/google/gwt/junit/client/GWTTestCase.java b/user/src/com/google/gwt/junit/client/GWTTestCase.java
index a254db9..1958c0c 100644
--- a/user/src/com/google/gwt/junit/client/GWTTestCase.java
+++ b/user/src/com/google/gwt/junit/client/GWTTestCase.java
@@ -172,15 +172,6 @@
   }
 
   /**
-   * Does nothing.
-   *
-   * @deprecated implementation removed
-   */
-  @Deprecated
-  public final void addCheckpoint(String msg) {
-  }
-
-  /**
    * Determines whether or not exceptions will be caught by the test fixture.
    * Override this method and return <code>false</code> to let exceptions escape
    * to the browser. This will break the normal JUnit reporting functionality,
@@ -195,25 +186,6 @@
   }
 
   /**
-   * Does nothing.
-   *
-   * @deprecated implementation removed
-   */
-  @Deprecated
-  public final void clearCheckpoints() {
-  }
-
-  /**
-   * Returns a zero-length array.
-   *
-   * @deprecated implementation removed
-   */
-  @Deprecated
-  public final String[] getCheckpoints() {
-    return new String[0];
-  }
-
-  /**
    * Specifies a module to use when running this test case. Subclasses must
    * return the name of a module that will cause the source for that subclass to
    * be included.
diff --git a/user/super/com/google/gwt/junit/translatable/com/google/gwt/junit/client/GWTTestCase.java b/user/super/com/google/gwt/junit/translatable/com/google/gwt/junit/client/GWTTestCase.java
index fcd6e7c..fd0c49a 100644
--- a/user/super/com/google/gwt/junit/translatable/com/google/gwt/junit/client/GWTTestCase.java
+++ b/user/super/com/google/gwt/junit/translatable/com/google/gwt/junit/client/GWTTestCase.java
@@ -154,23 +154,10 @@
   }
   // CHECKSTYLE_ON
 
-  @Deprecated
-  public void addCheckpoint(String msg) {
-  }
-
   public boolean catchExceptions() {
     return true;
   }
 
-  @Deprecated
-  public void clearCheckpoints() {
-  }
-
-  @Deprecated
-  public String[] getCheckpoints() {
-    return new String[0];
-  }
-
   public abstract String getModuleName();
 
   public boolean isPureJava() {
diff --git a/user/test/com/google/gwt/i18n/client/DateTimeParse_zh_CN_Test.java b/user/test/com/google/gwt/i18n/client/DateTimeParse_zh_CN_Test.java
index 3db507e..e76aedf 100644
--- a/user/test/com/google/gwt/i18n/client/DateTimeParse_zh_CN_Test.java
+++ b/user/test/com/google/gwt/i18n/client/DateTimeParse_zh_CN_Test.java
@@ -64,11 +64,8 @@
       Date expectedDate = new Date(expectedTimeUTC);
 
       // Compare the actual and expected results.
-      addCheckpoint("2a");
       assertEquals(expectedDate.getYear(), date.getYear());
-      addCheckpoint("2b");
       assertEquals(expectedDate.getMonth(), date.getMonth());
-      addCheckpoint("2c");
       assertEquals(expectedDate.getDate(), date.getDate());
     }
 
@@ -84,11 +81,8 @@
       Date expectedDate = new Date(expectedTimeUTC);
 
       // Compare the actual and expected results.
-      addCheckpoint("3a");
       assertEquals(expectedDate.getYear(), date.getYear());
-      addCheckpoint("3b");
       assertEquals(expectedDate.getMonth(), date.getMonth());
-      addCheckpoint("3c");
       assertEquals(expectedDate.getDate(), date.getDate());
     }
   }
