diff --git a/user/src/com/google/gwt/junit/BatchingStrategy.java b/user/src/com/google/gwt/junit/BatchingStrategy.java
index 96551e4..df9cec2 100644
--- a/user/src/com/google/gwt/junit/BatchingStrategy.java
+++ b/user/src/com/google/gwt/junit/BatchingStrategy.java
@@ -71,6 +71,15 @@
     toExecute.removeAll(toRemove);
     return toExecute;
   }
+
+  /**
+   * Returns the multiplicative factor for adjusting the timeout. Default value
+   * of 1 for no batching.
+   */
+  protected int getTimeoutMultiplier() {
+    return 1;
+  }
+
 }
 
 /**
@@ -130,6 +139,11 @@
   public boolean isSingleTestOnly() {
     return false;
   }
+  
+  @Override
+  protected int getTimeoutMultiplier() {
+    return 4;
+  }
 }
 
 /**
@@ -151,4 +165,9 @@
   public boolean isSingleTestOnly() {
     return false;
   }
+  
+  @Override
+  protected int getTimeoutMultiplier() {
+    return 4;
+  }
 }
diff --git a/user/src/com/google/gwt/junit/JUnitShell.java b/user/src/com/google/gwt/junit/JUnitShell.java
index b859554..d832f46 100644
--- a/user/src/com/google/gwt/junit/JUnitShell.java
+++ b/user/src/com/google/gwt/junit/JUnitShell.java
@@ -330,9 +330,9 @@
   /**
    * The amount of time to wait for all clients to complete a single test
    * method, in milliseconds, measured from when the <i>last</i> client connects
-   * (and thus starts the test). 20 minutes.
+   * (and thus starts the test). default of 5 minutes.
    */
-  private static final long TEST_METHOD_TIMEOUT_MILLIS = 4 * 300000;
+  private static final long TEST_METHOD_TIMEOUT_MILLIS = 300000;
 
   /**
    * Singleton object for hosting unit tests. All test case instances executed
@@ -529,6 +529,11 @@
    * Determines how to batch up tests for execution.
    */
   private BatchingStrategy batchingStrategy = new NoBatchingStrategy();
+  
+  /**
+   * Timeout in presence of batching. reassigned later.
+   */
+  private long testBatchingMethodTimeoutMillis = TEST_METHOD_TIMEOUT_MILLIS;
 
   /**
    * Determines how modules are compiled.
@@ -729,13 +734,13 @@
        */
       lastModule = currentModule;
       if (testMethodTimeout == 0) {
-        testMethodTimeout = currentTimeMillis + TEST_METHOD_TIMEOUT_MILLIS;
+        testMethodTimeout = currentTimeMillis + testBatchingMethodTimeoutMillis;
       } else if (testMethodTimeout < currentTimeMillis) {
         double elapsed = (currentTimeMillis - testBeginTime) / 1000.0;
         throw new TimeoutException(
             "The browser did not complete the test method "
                 + currentTestInfo.toString() + " in "
-                + TEST_METHOD_TIMEOUT_MILLIS
+                + testBatchingMethodTimeoutMillis
                 + "ms.\n  We have no results from:\n"
                 + messageQueue.getWorkingClients(currentTestInfo)
                 + "Actual time elapsed: " + elapsed + " seconds.\n");
@@ -915,6 +920,8 @@
   private void runTestImpl(GWTTestCase testCase, TestResult testResult)
       throws UnableToCompleteException {
 
+    testBatchingMethodTimeoutMillis = batchingStrategy.getTimeoutMultiplier()
+        * TEST_METHOD_TIMEOUT_MILLIS; 
     if (mustNotExecuteTest(getBannedPlatforms(testCase.getClass(),
         testCase.getName()))) {
       return;
