diff --git a/dev/build.xml b/dev/build.xml
index a301c4e..7c3219b 100755
--- a/dev/build.xml
+++ b/dev/build.xml
@@ -60,7 +60,8 @@
           <include name="eclipse/jdtCompilerAdapter-3.8.3.v20130121-145325.jar" />
           <include name="guava/guava-15.0/guava-15.0-rebased.jar" />
           <include name="icu4j/50.1.1/icu4j.jar" />
-          <include name="jetty/jetty-6.1.11.jar" />
+          <include name="jetty/jetty-8.1.12.v20130726/jetty-8.1.12.v20130726.jar" />
+          <include name="jetty/jetty-8.1.12.v20130726/servlet-api-3.0-NoMetaInf.jar" />
           <include name="jscomp/20131014/compiler-rebased.jar" />
           <include name="jscomp/20131014/sourcemap-rebased.jar" />
           <include name="jsr305/jsr305.jar" />
@@ -73,23 +74,23 @@
           <!-- dependencies needed for JSP support in DevMode: END -->
           <include name="apache/commons/commons-collections-3.2.1.jar" />
           <!-- htmlunit dependencies not already included: BEGIN -->
-          <include name="apache/http/httpclient-4.1.2.jar" />
-          <include name="apache/http/httpcore-4.1.2.jar" />
-          <include name="apache/http/httpmime-4.1.2.jar" />
+          <include name="apache/http/httpclient-4.3.1.jar" />
+          <include name="apache/http/httpcore-4.3.jar" />
+          <include name="apache/http/httpmime-4.3.1.jar" />
           <include name="apache/james/apache-mime4j-0.6.jar" />
-          <include name="apache/commons/commons-codec-1.3.jar" />
-          <include name="apache/commons/commons-io-1.4.jar" />
-          <include name="apache/commons/commons-lang-2.6.jar" />
-          <include name="apache/commons/commons-logging-1.1.1.jar" />
-          <include name="cssparser/cssparser-0.9.5.jar" />
-          <include name="htmlunit/htmlunit-2.9/htmlunit-v2.9.jar" />
-          <include name="htmlunit/htmlunit-2.9/htmlunit-core-js-v2.9.jar" />
-          <include name="nekohtml/nekohtml-1.9.15.jar" />
+          <include name="apache/commons/commons-codec-1.8.jar" />
+          <include name="apache/commons/commons-io-2.4.jar" />
+          <include name="apache/commons/commons-lang3-3.1.jar" />
+          <include name="apache/commons/commons-logging-1.1.3.jar" />
+          <include name="cssparser/cssparser-0.9.11.jar" />
+          <include name="htmlunit/htmlunit-2.13/htmlunit-2.13.jar" />
+          <include name="htmlunit/htmlunit-2.13/htmlunit-core-js-2.13.jar" />
+          <include name="nekohtml/nekohtml-1.9.19.jar" />
           <include name="cup/java-cup-11a.jar" />
           <include name="xalan/xalan-2.7.1-nocup.jar" />
-          <include name="xerces/xerces-2_9_1/serializer.jar" />
-          <include name="xerces/xerces-2_9_1/xercesImpl-NoMetaInf.jar" />
-          <include name="xerces/xerces-2_9_1/xml-apis.jar" />
+          <include name="xerces/xerces-2_11_0/serializer-2.7.1.jar" />
+          <include name="xerces/xerces-2_11_0/xercesImpl-2.11.0.jar" />
+          <include name="xerces/xerces-2_11_0/xml-apis-1.4.01.jar" />
           <include name="w3c/sac/sac-1.3.jar" />
           <!-- htmlunit dependencies not already included: END -->
           <include name="sun/swingworker/swing-worker-1.1.jar" />
@@ -110,7 +111,8 @@
           <zipfileset src="${gwt.tools.lib}/eclipse/jdtCompilerAdapter-3.8.3.v20130121-145325.jar" />
           <zipfileset src="${gwt.tools.lib}/guava/guava-15.0/guava-15.0-rebased.jar" />
           <zipfileset src="${gwt.tools.lib}/icu4j/50.1.1/icu4j.jar" />
-          <zipfileset src="${gwt.tools.lib}/jetty/jetty-6.1.11.jar" />
+          <zipfileset src="${gwt.tools.lib}/jetty/jetty-8.1.12.v20130726/jetty-8.1.12.v20130726.jar" />
+          <zipfileset src="${gwt.tools.lib}/jetty/jetty-8.1.12.v20130726/servlet-api-3.0-NoMetaInf.jar" />
           <zipfileset src="${gwt.tools.lib}/jscomp/20131014/compiler-rebased.jar" />
           <zipfileset src="${gwt.tools.lib}/jscomp/20131014/sourcemap-rebased.jar" />
           <zipfileset src="${gwt.tools.lib}/jsr305/jsr305.jar" />
@@ -123,23 +125,23 @@
           <!-- dependencies needed for JSP support in DevMode: END -->
           <zipfileset src="${gwt.tools.lib}/apache/commons/commons-collections-3.2.1.jar" />
           <!-- htmlunit dependencies not already included: BEGIN -->
-          <zipfileset src="${gwt.tools.lib}/apache/http/httpclient-4.1.2.jar" />
-          <zipfileset src="${gwt.tools.lib}/apache/http/httpcore-4.1.2.jar" />
-          <zipfileset src="${gwt.tools.lib}/apache/http/httpmime-4.1.2.jar" />
+          <zipfileset src="${gwt.tools.lib}/apache/http/httpclient-4.3.1.jar" />
+          <zipfileset src="${gwt.tools.lib}/apache/http/httpcore-4.3.jar" />
+          <zipfileset src="${gwt.tools.lib}/apache/http/httpmime-4.3.1.jar" />
           <zipfileset src="${gwt.tools.lib}/apache/james/apache-mime4j-0.6.jar" />
-          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-codec-1.3.jar" />
-          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-io-1.4.jar" />
-          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-lang-2.6.jar" />
-          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-logging-1.1.1.jar" />
-          <zipfileset src="${gwt.tools.lib}/cssparser/cssparser-0.9.5.jar" />
-          <zipfileset src="${gwt.tools.lib}/htmlunit/htmlunit-2.9/htmlunit-2.9.jar" />
-          <zipfileset src="${gwt.tools.lib}/htmlunit/htmlunit-2.9/htmlunit-core-js-2.9.jar" />
-          <zipfileset src="${gwt.tools.lib}/nekohtml/nekohtml-1.9.15.jar" />
+          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-codec-1.8.jar" />
+          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-io-2.4.jar" />
+          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-lang3-3.1.jar" />
+          <zipfileset src="${gwt.tools.lib}/apache/commons/commons-logging-1.1.3.jar" />
+          <zipfileset src="${gwt.tools.lib}/cssparser/cssparser-0.9.11.jar" />
+          <zipfileset src="${gwt.tools.lib}/htmlunit/htmlunit-2.13/htmlunit-2.13.jar" />
+          <zipfileset src="${gwt.tools.lib}/htmlunit/htmlunit-2.13/htmlunit-core-js-2.13.jar" />
+          <zipfileset src="${gwt.tools.lib}/nekohtml/nekohtml-1.9.19.jar" />
           <zipfileset src="${gwt.tools.lib}/cup/java-cup-11a.jar" />
           <zipfileset src="${gwt.tools.lib}/xalan/xalan-2.7.1-nocup.jar" />
-          <zipfileset src="${gwt.tools.lib}/xerces/xerces-2_9_1/serializer.jar" />
-          <zipfileset src="${gwt.tools.lib}/xerces/xerces-2_9_1/xercesImpl-NoMetaInf.jar" />
-          <zipfileset src="${gwt.tools.lib}/xerces/xerces-2_9_1/xml-apis.jar" />
+          <zipfileset src="${gwt.tools.lib}/xerces/xerces-2_11_0/serializer-2.7.1.jar" />
+          <zipfileset src="${gwt.tools.lib}/xerces/xerces-2_11_0/xercesImpl-2.11.0.jar" />
+          <zipfileset src="${gwt.tools.lib}/xerces/xerces-2_11_0/xml-apis-1.4.01.jar" />
           <zipfileset src="${gwt.tools.lib}/w3c/sac/sac-1.3.jar" />
           <!-- htmlunit dependencies not already included: END -->
           <zipfileset src="${gwt.tools.lib}/sun/swingworker/swing-worker-1.1.jar" />
diff --git a/dev/codeserver/build.xml b/dev/codeserver/build.xml
index 52af07f..3c523e4 100755
--- a/dev/codeserver/build.xml
+++ b/dev/codeserver/build.xml
@@ -22,8 +22,8 @@
         <include name="**/*.java"/>
       </fileset>
     </copy>
-    <replace dir="${src}" token="com.google.gwt.thirdparty.org.mortbay."
-             value="org.mortbay."/>
+    <replace dir="${src}" token="com.google.gwt.thirdparty.org.eclipse.jetty."
+             value="org.eclipse.jetty."/>
   </target>
 
   <target name="compile" depends="preprocess">
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/WebServer.java b/dev/codeserver/java/com/google/gwt/dev/codeserver/WebServer.java
index d443ea9..6699312 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/WebServer.java
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/WebServer.java
@@ -20,17 +20,16 @@
 import com.google.gwt.core.ext.UnableToCompleteException;
 import com.google.gwt.dev.json.JsonArray;
 import com.google.gwt.dev.json.JsonObject;
-import com.google.gwt.thirdparty.org.mortbay.io.Buffer;
-import com.google.gwt.thirdparty.org.mortbay.jetty.HttpConnection;
-import com.google.gwt.thirdparty.org.mortbay.jetty.MimeTypes;
-import com.google.gwt.thirdparty.org.mortbay.jetty.Request;
-import com.google.gwt.thirdparty.org.mortbay.jetty.Server;
-import com.google.gwt.thirdparty.org.mortbay.jetty.handler.AbstractHandler;
-import com.google.gwt.thirdparty.org.mortbay.jetty.nio.SelectChannelConnector;
-import com.google.gwt.thirdparty.org.mortbay.jetty.servlet.FilterHolder;
-import com.google.gwt.thirdparty.org.mortbay.jetty.servlet.ServletHandler;
-import com.google.gwt.thirdparty.org.mortbay.jetty.servlet.ServletHolder;
-import com.google.gwt.thirdparty.org.mortbay.servlet.GzipFilter;
+import com.google.gwt.thirdparty.org.eclipse.jetty.http.MimeTypes;
+import com.google.gwt.thirdparty.org.eclipse.jetty.io.Buffer;
+import com.google.gwt.thirdparty.org.eclipse.jetty.server.AbstractHttpConnection;
+import com.google.gwt.thirdparty.org.eclipse.jetty.server.Request;
+import com.google.gwt.thirdparty.org.eclipse.jetty.server.Server;
+import com.google.gwt.thirdparty.org.eclipse.jetty.server.nio.SelectChannelConnector;
+import com.google.gwt.thirdparty.org.eclipse.jetty.servlet.FilterHolder;
+import com.google.gwt.thirdparty.org.eclipse.jetty.servlet.ServletContextHandler;
+import com.google.gwt.thirdparty.org.eclipse.jetty.servlet.ServletHolder;
+import com.google.gwt.thirdparty.org.eclipse.jetty.servlets.GzipFilter;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -39,12 +38,14 @@
 import java.io.InputStream;
 import java.io.PrintWriter;
 import java.util.Date;
+import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import javax.servlet.ServletException;
+import javax.servlet.DispatcherType;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -115,17 +116,17 @@
     Server server = new Server();
     server.addConnector(connector);
 
-    ServletHandler servletHandler = new ServletHandler();
-    servletHandler.addServletWithMapping(new ServletHolder(new HttpServlet() {
+    ServletContextHandler handler = new ServletContextHandler(ServletContextHandler.SESSIONS);
+    handler.setContextPath("/");
+    handler.addServlet(new ServletHolder(new HttpServlet() {
       @Override
       protected void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
         handleRequest(request.getPathInfo(), request, response);
       }
     }), "/*");
-    servletHandler.addFilterWithMapping(new FilterHolder(GzipFilter.class),
-        "/*", AbstractHandler.DEFAULT);
-    server.addHandler(servletHandler);
+    handler.addFilter(GzipFilter.class, "/*", EnumSet.allOf(DispatcherType.class));
+    server.setHandler(handler);
     try {
       server.start();
     } catch (Exception e) {
@@ -505,7 +506,7 @@
 
   private static void setHandled(HttpServletRequest request) {
     Request baseRequest = (request instanceof Request) ? (Request) request :
-        HttpConnection.getCurrentConnection().getRequest();
+        AbstractHttpConnection.getCurrentConnection().getRequest();
     baseRequest.setHandled(true);
   }
 }
diff --git a/dev/core/src/com/google/gwt/dev/shell/HtmlUnitSessionHandler.java b/dev/core/src/com/google/gwt/dev/shell/HtmlUnitSessionHandler.java
index 4b6942b..f391985 100644
--- a/dev/core/src/com/google/gwt/dev/shell/HtmlUnitSessionHandler.java
+++ b/dev/core/src/com/google/gwt/dev/shell/HtmlUnitSessionHandler.java
@@ -32,6 +32,7 @@
 import com.gargoylesoftware.htmlunit.javascript.SimpleScriptableProxy;
 import com.gargoylesoftware.htmlunit.javascript.host.Window;
 
+import net.sourceforge.htmlunit.corejs.javascript.ConsString;
 import net.sourceforge.htmlunit.corejs.javascript.Context;
 import net.sourceforge.htmlunit.corejs.javascript.Function;
 import net.sourceforge.htmlunit.corejs.javascript.JavaScriptException;
@@ -210,7 +211,7 @@
       if (args.length == 1
           && methodName.indexOf(REPLACE_METHOD_SIGNATURE) != -1) {
         // getUrl() is not visible
-        String currentUrl = window.jsxGet_location().toString();
+        String currentUrl = window.getLocation().toString();
         currentUrl = getUrlBeforeHash(currentUrl);
         String newUrl = getUrlBeforeHash((String) args[0].getValue());
         if (!newUrl.equals(currentUrl)) {
@@ -303,6 +304,9 @@
       returnVal.setJsObject(new JsObjectRef(refId));
       return returnVal;
     }
+    if (value instanceof ConsString) {
+      return new Value(value.toString());
+    }
     if (value instanceof Number) {
       return new Value(convertNumberFromJsval(((Number) value)));
     }
diff --git a/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java b/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java
index b282825..7e4e3ee 100644
--- a/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java
+++ b/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java
@@ -24,20 +24,22 @@
 
 import org.apache.tools.ant.taskdefs.Javac;
 import org.eclipse.jdt.core.JDTCompilerAdapter;
-import org.mortbay.component.AbstractLifeCycle;
-import org.mortbay.jetty.AbstractConnector;
-import org.mortbay.jetty.HttpFields.Field;
-import org.mortbay.jetty.Request;
-import org.mortbay.jetty.RequestLog;
-import org.mortbay.jetty.Response;
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.handler.RequestLogHandler;
-import org.mortbay.jetty.nio.SelectChannelConnector;
-import org.mortbay.jetty.security.SslSocketConnector;
-import org.mortbay.jetty.webapp.WebAppClassLoader;
-import org.mortbay.jetty.webapp.WebAppContext;
-import org.mortbay.log.Log;
-import org.mortbay.log.Logger;
+import org.eclipse.jetty.http.HttpFields;
+import org.eclipse.jetty.http.HttpFields.Field;
+import org.eclipse.jetty.server.AbstractConnector;
+import org.eclipse.jetty.server.AbstractHttpConnection;
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.RequestLog;
+import org.eclipse.jetty.server.Response;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.RequestLogHandler;
+import org.eclipse.jetty.server.nio.SelectChannelConnector;
+import org.eclipse.jetty.server.ssl.SslSocketConnector;
+import org.eclipse.jetty.util.component.AbstractLifeCycle;
+import org.eclipse.jetty.util.log.Log;
+import org.eclipse.jetty.util.log.Logger;
+import org.eclipse.jetty.webapp.WebAppClassLoader;
+import org.eclipse.jetty.webapp.WebAppContext;
 
 import java.io.File;
 import java.io.IOException;
@@ -46,7 +48,6 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
-import java.util.Iterator;
 
 import javax.imageio.ImageIO;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -139,25 +140,21 @@
             + " - " + request.getMethod() + ' ' + request.getUri() + " ("
             + userString + request.getRemoteHost() + ')' + bytesString);
         if (branch.isLoggable(logHeaders)) {
-          // Request headers
-          TreeLogger headers = branch.branch(logHeaders, "Request headers");
-          Iterator<Field> headerFields = request.getConnection().getRequestFields().getFields();
-          while (headerFields.hasNext()) {
-            Field headerField = headerFields.next();
-            headers.log(logHeaders, headerField.getName() + ": "
-                + headerField.getValue());
-          }
-          // Response headers
-          headers = branch.branch(logHeaders, "Response headers");
-          headerFields = response.getHttpFields().getFields();
-          while (headerFields.hasNext()) {
-            Field headerField = headerFields.next();
-            headers.log(logHeaders, headerField.getName() + ": "
-                + headerField.getValue());
-          }
+          AbstractHttpConnection connection = request.getConnection();
+          logHeaders(branch.branch(logHeaders, "Request headers"), logHeaders,
+              connection.getRequestFields());
+          logHeaders(branch.branch(logHeaders, "Response headers"), logHeaders,
+              connection.getResponseFields());
         }
       }
     }
+
+    private void logHeaders(TreeLogger logger, TreeLogger.Type logLevel, HttpFields fields) {
+      for (int i = 0; i < fields.size(); ++i) {
+        Field field = fields.getField(i);
+        logger.log(logLevel, field.getName() + ": " + field.getValue());
+      }
+    }
   }
 
   /**
@@ -178,9 +175,9 @@
       this.logger = logger;
     }
 
-    public void debug(String msg, Object arg0, Object arg1) {
+    public void debug(String msg, Object... args) {
       if (logger.isLoggable(TreeLogger.SPAM)) {
-        logger.log(TreeLogger.SPAM, format(msg, arg0, arg1));
+        logger.log(TreeLogger.SPAM, format(msg, args));
       }
     }
 
@@ -188,16 +185,32 @@
       logger.log(TreeLogger.SPAM, msg, th);
     }
 
+    public void debug(Throwable th) {
+      logger.log(TreeLogger.SPAM, "", th);
+    }
+
     public Logger getLogger(String name) {
       return this;
     }
 
-    public void info(String msg, Object arg0, Object arg1) {
+    public String getName() {
+      return "";
+    }
+
+    public void info(String msg, Object... args) {
       if (logger.isLoggable(TreeLogger.TRACE)) {
-        logger.log(TreeLogger.TRACE, format(msg, arg0, arg1));
+        logger.log(TreeLogger.TRACE, format(msg, args));
       }
     }
 
+    public void info(String msg, Throwable th) {
+      logger.log(TreeLogger.TRACE, msg, th);
+    }
+
+    public void info(Throwable th) {
+      logger.log(TreeLogger.TRACE, "", th);
+    }
+
     public boolean isDebugEnabled() {
       return logger.isLoggable(TreeLogger.SPAM);
     }
@@ -206,9 +219,9 @@
       // ignored
     }
 
-    public void warn(String msg, Object arg0, Object arg1) {
+    public void warn(String msg, Object... args) {
       if (logger.isLoggable(TreeLogger.WARN)) {
-        logger.log(TreeLogger.WARN, format(msg, arg0, arg1));
+        logger.log(TreeLogger.WARN, format(msg, args));
       }
     }
 
@@ -216,20 +229,42 @@
       logger.log(TreeLogger.WARN, msg, th);
     }
 
-    /**
-     * Copied from org.mortbay.log.StdErrLog.
-     */
-    private String format(String msg, Object arg0, Object arg1) {
-      int i0 = msg.indexOf("{}");
-      int i1 = i0 < 0 ? -1 : msg.indexOf("{}", i0 + 2);
+    public void warn(Throwable th) {
+      logger.log(TreeLogger.WARN, "", th);
+    }
 
-      if (arg1 != null && i1 >= 0) {
-        msg = msg.substring(0, i1) + arg1 + msg.substring(i1 + 2);
+    public void ignore(Throwable th) {
+      logger.log(TreeLogger.SPAM, "IGNORE", th);
+    }
+
+    /**
+     * Copied from org.eclipse.log.StdErrLog.
+     */
+    private String format(String msg, Object... args) {
+      if (msg == null) {
+        msg = "";
+        for (int i = 0; i < args.length; i++) {
+          msg += "{} ";
+        }
       }
-      if (arg0 != null && i0 >= 0) {
-        msg = msg.substring(0, i0) + arg0 + msg.substring(i0 + 2);
+      String braces = "{}";
+      int start = 0;
+      StringBuilder builder = new StringBuilder();
+      for (Object arg : args) {
+        int bracesIndex = msg.indexOf(braces, start);
+        if (bracesIndex < 0) {
+          builder.append(msg.substring(start));
+          builder.append(" ");
+          builder.append(arg);
+          start = msg.length();
+        } else {
+          builder.append(msg.substring(start, bracesIndex));
+          builder.append(String.valueOf(arg));
+          start = bracesIndex + braces.length();
+        }
       }
-      return msg;
+      builder.append(msg.substring(start));
+      return builder.toString();
     }
   }
 
@@ -335,7 +370,7 @@
 
         // For a system path, load from the outside world.
         URL found;
-        if (isSystemPath(checkName)) {
+        if (isSystemClass(checkName.replace('/', '.'))) {
           found = systemClassLoader.getResource(name);
           if (found != null) {
             return found;
@@ -364,23 +399,10 @@
         return super.findResource(name);
       }
 
-      /**
-       * Override to additionally consider the most commonly available JSP and
-       * XML implementation as system resources. (In fact, Jasper is in gwt-dev
-       * via embedded Tomcat, so we always hit this case.)
-       */
-      @Override
-      public boolean isSystemPath(String name) {
-        name = name.replace('/', '.');
-        return super.isSystemPath(name)
-            || name.startsWith("org.apache.jasper.")
-            || name.startsWith("org.apache.xerces.");
-      }
-
       @Override
       protected Class<?> findClass(String name) throws ClassNotFoundException {
         // For system path, always prefer the outside world.
-        if (isSystemPath(name)) {
+        if (isSystemClass(name)) {
           try {
             return systemClassLoader.loadClass(name);
           } catch (ClassNotFoundException e) {
@@ -391,7 +413,7 @@
           return super.findClass(name);
         } catch (ClassNotFoundException e) {
           // Don't allow server classes to be loaded from the outside.
-          if (isServerPath(name)) {
+          if (isServerClass(name)) {
             throw e;
           }
         }
@@ -464,8 +486,6 @@
      */
     private final ClassLoader systemClassLoader = Thread.currentThread().getContextClassLoader();
 
-    private WebAppClassLoaderExtension classLoader;
-
     @SuppressWarnings("unchecked")
     private WebAppContextWithReload(TreeLogger logger, String webApp,
         String contextPath) {
@@ -474,16 +494,27 @@
 
       // Prevent file locking on Windows; pick up file changes.
       getInitParams().put(
-          "org.mortbay.jetty.servlet.Default.useFileMappedBuffer", "false");
+          "org.eclipse.jetty.servlet.Default.useFileMappedBuffer", "false");
 
       // Since the parent class loader is bootstrap-only, prefer it first.
       setParentLoaderPriority(true);
     }
 
+    /**
+     * Override to additionally consider the most commonly available JSP and
+     * XML implementation as system resources. (In fact, Jasper is in gwt-dev
+     * via embedded Tomcat, so we always hit this case.)
+     */
+    @Override
+    public boolean isSystemClass(String name) {
+      return super.isSystemClass(name)
+          || name.startsWith("org.apache.jasper.")
+          || name.startsWith("org.apache.xerces.");
+    }
+
     @Override
     protected void doStart() throws Exception {
-      classLoader = new WebAppClassLoaderExtension();
-      setClassLoader(classLoader);
+      setClassLoader(new WebAppClassLoaderExtension());
       super.doStart();
     }
 
@@ -491,12 +522,12 @@
     protected void doStop() throws Exception {
       super.doStop();
       
-      Class<?> jdbcUnloader = classLoader.loadClass("com.google.gwt.dev.shell.jetty.JDBCUnloader");
+      Class<?> jdbcUnloader =
+          getClassLoader().loadClass("com.google.gwt.dev.shell.jetty.JDBCUnloader");
       java.lang.reflect.Method unload = jdbcUnloader.getMethod("unload");
       unload.invoke(null);
       
       setClassLoader(null);
-      classLoader.destroy();
     }
   }
 
@@ -516,10 +547,6 @@
   private static final String PROPERTY_NOWARN_WEBAPP_CLASSPATH = "gwt.nowarn.webapp.classpath";
 
   static {
-    // Suppress spammy Jetty log initialization.
-    System.setProperty("org.mortbay.log.class", JettyNullLogger.class.getName());
-    Log.getLog();
-
     /*
      * Make JDT the default Ant compiler so that JSP compilation just works
      * out-of-the-box. If we don't set this, it's very, very difficult to make
@@ -672,7 +699,7 @@
     jreLeakPrevention(logger);
     
     // Turn off XML validation.
-    System.setProperty("org.mortbay.xml.XmlParser.Validating", "false");
+    System.setProperty("org.eclipse.jetty.xml.XmlParser.Validating", "false");
 
     Server server = new Server();
 
@@ -704,7 +731,6 @@
         branch.log(TreeLogger.TRACE, "Connection is null");
       }
     }
-
     return createServletContainer(logger, appRootDir, server, wac,
         connectorPort);
   }
@@ -715,8 +741,7 @@
   }
 
   protected WebAppContext createWebAppContext(TreeLogger logger, File appRootDir) {
-    return new WebAppContextWithReload(logger, appRootDir.getAbsolutePath(),
-        "/");
+    return new WebAppContextWithReload(logger, appRootDir.getAbsolutePath(), "/");
   }
 
   protected AbstractConnector getConnector(TreeLogger logger) {
diff --git a/dev/core/src/com/google/gwt/dev/shell/jetty/JettyNullLogger.java b/dev/core/src/com/google/gwt/dev/shell/jetty/JettyNullLogger.java
deleted file mode 100644
index 81418ad..0000000
--- a/dev/core/src/com/google/gwt/dev/shell/jetty/JettyNullLogger.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2009 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.dev.shell.jetty;
-
-import org.mortbay.log.Logger;
-
-/**
- * A Jetty {@link Logger} that suppresses all output.
- */
-public class JettyNullLogger implements Logger {
-
-  public void debug(String msg, Throwable th) {
-  }
-
-  public void debug(String msg, Object arg0, Object arg1) {
-  }
-
-  public Logger getLogger(String name) {
-    return this;
-  }
-
-  public void info(String msg, Object arg0, Object arg1) {
-  }
-
-  public boolean isDebugEnabled() {
-    return false;
-  }
-
-  public void setDebugEnabled(boolean enabled) {
-  }
-
-  public void warn(String msg, Throwable th) {
-  }
-
-  public void warn(String msg, Object arg0, Object arg1) {
-  }
-}
diff --git a/eclipse/user/.classpath b/eclipse/user/.classpath
index c857194..b168113 100644
--- a/eclipse/user/.classpath
+++ b/eclipse/user/.classpath
@@ -8,25 +8,25 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry exported="true" kind="var" path="GWT_TOOLS/lib/apache/tapestry-util-text-4.0.2.jar" sourcepath="/GWT_TOOLS/lib/apache/tapestry-util-text-4.0.2-src.zip"/>
 	<classpathentry exported="true" kind="var" path="GWT_TOOLS/lib/junit/junit-4.8.2.jar" sourcepath="/GWT_TOOLS/lib/junit/junit-4.8.2-src.jar"/>
-	<classpathentry exported="true" kind="var" path="GWT_TOOLS/lib/tomcat/servlet-api-2.5.jar"/>
-  <classpathentry kind="var" path="GWT_TOOLS/lib/jsr305/jsr305.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/http/httpclient-4.1.2.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/http/httpcore-4.1.2.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/http/httpmime-4.1.2.jar"/>
+	<classpathentry exported="true" kind="var" path="GWT_TOOLS/lib/jetty-8.1.12.v20130726/servlet-api-3.0-NoMetaInf.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/jsr305/jsr305.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/http/httpclient-4.3.1.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/http/httpcore-4.3.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/http/httpmime-4.3.1.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/james/apache-mime4j-0.6.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/commons/commons-codec-1.3.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/commons/commons-codec-1.8.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/tomcat/commons-collections-3.1.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/commons/commons-lang-2.6.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/tomcat/commons-logging-1.0.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/commons/commons-io-1.4.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/cssparser/cssparser-0.9.5.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/nekohtml/nekohtml-1.9.15.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/commons/commons-lang3-3.1.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/commons/commons-logging-1.1.1.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/commons/commons-io-2.4.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/cssparser/cssparser-0.9.11.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/nekohtml/nekohtml-1.9.19.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/selenium/selenium-java-client-driver.jar" sourcepath="/GWT_TOOLS/lib/selenium/selenium-java-client-driver-sources.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/cup/java-cup-11a.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/xalan/xalan-2.7.1-nocup.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/xerces/xerces-2_9_1/serializer.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/xerces/xerces-2_9_1/xercesImpl-NoMetaInf.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/xerces/xerces-2_9_1/xml-apis.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/xerces/xerces-2_11_0/serializer-2.7.1.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/xerces/xerces-2_11_0/xercesImpl-2.11.0.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/xerces/xerces-2_11_0/xml-apis-1.4.01.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/w3c/sac/sac-1.3.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/w3c/flute/flute-1.3-gg2.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/cglib/cglib-2.2.jar"/>
@@ -34,12 +34,12 @@
 	<classpathentry kind="var" path="GWT_TOOLS/lib/easymock/easymock-3.0.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/objectweb/asm-3.1.jar"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/gwt-dev"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/htmlunit/htmlunit-2.9/htmlunit-2.9.jar" sourcepath="/GWT_TOOLS/lib/htmlunit/htmlunit-2.9/htmlunit-2.9-sources.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/htmlunit/htmlunit-2.9/htmlunit-core-js-2.9.jar" sourcepath="/GWT_TOOLS/lib/htmlunit/htmlunit-2.9/htmlunit-core-js-2.9-sources.jar"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/htmlunit/htmlunit-2.13/htmlunit-2.13.jar" />
+	<classpathentry kind="var" path="GWT_TOOLS/lib/htmlunit/htmlunit-2.13/htmlunit-core-js-2.13.jar" />
 	<classpathentry kind="var" path="GWT_TOOLS/redist/json/r2_20080312/json-1.5.jar" sourcepath="/GWT_TOOLS/redist/json/r2_20080312/json-src.jar"/>
 	<classpathentry exported="true" kind="var" path="GWT_TOOLS/lib/javax/validation/validation-api-1.0.0.GA.jar" sourcepath="/GWT_TOOLS/lib/javax/validation/validation-api-1.0.0.GA-sources.jar"/>
 	<classpathentry exported="true" kind="var" path="GWT_TOOLS/lib/javax/validation/validation-api-1.0.0.GA-sources.jar"/>
-	<classpathentry kind="var" path="GWT_TOOLS/lib/jetty/jetty-6.1.11.jar" sourcepath="/GWT_TOOLS/lib/jetty/jetty-6.1.11-src.zip"/>
+	<classpathentry kind="var" path="GWT_TOOLS/lib/jetty/jetty-8.1.12.v20130726/jetty-8.1.12.v20130726.jar" />
 	<classpathentry kind="var" path="GWT_TOOLS/lib/hibernate/validator/hibernate-validator-4.1.0.Final-sources.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/hibernate/validator/hibernate-validator-4.1.0.Final.jar" sourcepath="/GWT_TOOLS/lib/hibernate/validator/hibernate-validator-4.1.0.Final-sources.jar"/>
 	<classpathentry kind="var" path="GWT_TOOLS/lib/apache/log4j/log4j-1.2.16.jar"/>
diff --git a/requestfactory/build.xml b/requestfactory/build.xml
index 2da2feb..40ea109 100755
--- a/requestfactory/build.xml
+++ b/requestfactory/build.xml
@@ -132,7 +132,7 @@
       classname="com.google.web.bindery.requestfactory.vm.RequestFactoryJreSuite">
       <jvmarg value="-Xss8m" />
       <classpath>
-        <fileset dir="${gwt.tools.lib}" includes="tomcat/servlet-api-2.5.jar" />
+        <fileset dir="${gwt.tools.lib}" includes="jetty/jetty-8.1.12.v20130726/servlet-api-3.0-NoMetaInf.jar" />
         <fileset dir="${gwt.tools.lib}" includes="apache/log4j/log4j-1.2.16.jar" />
         <fileset dir="${gwt.tools.lib}" includes="slf4j/slf4j-api/slf4j-api-1.6.1.jar" />
         <fileset dir="${gwt.tools.lib}" includes="slf4j/slf4j-log4j12/slf4j-log4j12-1.6.1.jar" />
diff --git a/user/build.xml b/user/build.xml
index 42a0758..1a77b29 100755
--- a/user/build.xml
+++ b/user/build.xml
@@ -90,7 +90,7 @@
     <mkdir dir="${javac.out}" />
     <gwt.javac excludes="**/super/**">
       <classpath>
-        <pathelement location="${gwt.tools.lib}/tomcat/servlet-api-2.5.jar" />
+        <pathelement location="${gwt.tools.lib}/jetty/jetty-8.1.12.v20130726/servlet-api-3.0-NoMetaInf.jar" />
         <pathelement location="${gwt.tools.lib}/junit/junit-4.8.2.jar" />
         <pathelement location="${gwt.tools.lib}/jfreechart/jfreechart-1.0.3.jar" />
         <pathelement location="${gwt.tools.lib}/selenium/selenium-java-client-driver.jar" />
@@ -210,7 +210,7 @@
       <fileset dir="src" excludes="**/package.html" />
       <fileset dir="super" excludes="**/package.html" />
       <fileset dir="${javac.out}" />
-      <zipfileset src="${gwt.tools.lib}/tomcat/servlet-api-2.5.jar" excludes="**/*.java"/>
+      <zipfileset src="${gwt.tools.lib}/jetty/jetty-8.1.12.v20130726/servlet-api-3.0-NoMetaInf.jar" excludes="**/*.java"/>
       <zipfileset src="${gwt.tools.lib}/w3c/sac/sac-1.3.jar" />
       <zipfileset src="${gwt.tools.lib}/w3c/flute/flute-1.3-gg2.jar" />
       <zipfileset src="${gwt.tools.lib}/streamhtmlparser/streamhtmlparser-jsilver-r10/streamhtmlparser-jsilver-r10-1.5-rebased.jar" />
diff --git a/user/src/com/google/gwt/junit/JUnitShell.java b/user/src/com/google/gwt/junit/JUnitShell.java
index 5c12917..ffcfe98 100644
--- a/user/src/com/google/gwt/junit/JUnitShell.java
+++ b/user/src/com/google/gwt/junit/JUnitShell.java
@@ -73,8 +73,8 @@
 import junit.framework.TestCase;
 import junit.framework.TestResult;
 
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.webapp.WebAppContext;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.webapp.WebAppContext;
 
 import java.io.File;
 import java.lang.reflect.Constructor;
@@ -606,7 +606,7 @@
         {
           // Prevent file locking on Windows; pick up file changes.
           getInitParams().put(
-              "org.mortbay.jetty.servlet.Default.useFileMappedBuffer", "false");
+              "org.eclipse.jetty.servlet.Default.useFileMappedBuffer", "false");
 
           // Prefer the parent class loader so that JUnit works.
           setParentLoaderPriority(true);
@@ -1144,10 +1144,9 @@
       path = '/' + module.getName() + path;
       if (!servletClass.equals(loadedServletsByPath.get(path))) {
         try {
-          Class<?> clazz = wac.loadClass(servletClass);
-          wac.addServlet(clazz, path);
+          wac.addServlet(servletClass, path);
           loadedServletsByPath.put(path, servletClass);
-        } catch (ClassNotFoundException e) {
+        } catch (Exception e) {
           getTopLogger().log(
               TreeLogger.WARN,
               "Failed to load servlet class '" + servletClass
diff --git a/user/src/com/google/gwt/junit/RunStyleHtmlUnit.java b/user/src/com/google/gwt/junit/RunStyleHtmlUnit.java
index 93d2dbb..e81f885c 100644
--- a/user/src/com/google/gwt/junit/RunStyleHtmlUnit.java
+++ b/user/src/com/google/gwt/junit/RunStyleHtmlUnit.java
@@ -35,9 +35,6 @@
 
 import net.sourceforge.htmlunit.corejs.javascript.ScriptableObject;
 
-import org.w3c.css.sac.CSSParseException;
-import org.w3c.css.sac.ErrorHandler;
-
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
@@ -99,28 +96,9 @@
     public void run() {
       WebClient webClient = new WebClient(browser);
       webClient.setAlertHandler(this);
-      // Adding a handler that ignores errors to work-around
-      // https://sourceforge.net/tracker/?func=detail&aid=3090806&group_id=47038&atid=448266
-      webClient.setCssErrorHandler(new ErrorHandler() {
-
-        public void error(CSSParseException exception) {
-          // ignore
-        }
-
-        public void fatalError(CSSParseException exception) {
-          treeLogger.log(TreeLogger.WARN,
-              "CSS fatal error: " + exception.getURI() + " ["
-                  + exception.getLineNumber() + ":"
-                  + exception.getColumnNumber() + "] " + exception.getMessage());
-        }
-
-        public void warning(CSSParseException exception) {
-          // ignore
-        }
-      });
       webClient.setIncorrectnessListener(this);
-      webClient.setThrowExceptionOnFailingStatusCode(false);
-      webClient.setThrowExceptionOnScriptError(true);
+      webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
+      webClient.getOptions().setThrowExceptionOnScriptError(true);
       webClient.setOnbeforeunloadHandler(this);
       webClient.setJavaScriptErrorListener(new JavaScriptErrorListener() {
 
@@ -237,8 +215,8 @@
   private static Map<String, BrowserVersion> createBrowserMap() {
     Map<String, BrowserVersion> browserMap = new HashMap<String, BrowserVersion>();
     for (BrowserVersion browser : new BrowserVersion[] {
-        BrowserVersion.FIREFOX_3, BrowserVersion.FIREFOX_3_6, BrowserVersion.INTERNET_EXPLORER_6,
-        BrowserVersion.INTERNET_EXPLORER_7}) {
+        BrowserVersion.FIREFOX_17, BrowserVersion.INTERNET_EXPLORER_8,
+        BrowserVersion.INTERNET_EXPLORER_9, BrowserVersion.CHROME}) {
       browserMap.put(browser.getNickname(), browser);
     }
     return Collections.unmodifiableMap(browserMap);
@@ -263,8 +241,8 @@
   @Override
   public int initialize(String args) {
     if (args == null || args.length() == 0) {
-      // If no browsers specified, default to Firefox 3.
-      args = "FF3";
+      // If no browsers specified, default to Firefox 17.
+      args = "FF17";
     }
     Set<BrowserVersion> browserSet = new HashSet<BrowserVersion>();
     for (String browserName : args.split(",")) {
diff --git a/user/test/com/google/gwt/user/server/rpc/LogFilterServletContext.java b/user/test/com/google/gwt/user/server/rpc/LogFilterServletContext.java
index 6ebaa39..6caa54b 100644
--- a/user/test/com/google/gwt/user/server/rpc/LogFilterServletContext.java
+++ b/user/test/com/google/gwt/user/server/rpc/LogFilterServletContext.java
@@ -19,12 +19,21 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Enumeration;
+import java.util.EventListener;
+import java.util.Map;
 import java.util.Set;
 
+import javax.servlet.Filter;
+import javax.servlet.FilterRegistration;
+import javax.servlet.FilterRegistration.Dynamic;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.Servlet;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+import javax.servlet.SessionCookieConfig;
+import javax.servlet.SessionTrackingMode;
+import javax.servlet.descriptor.JspConfigDescriptor;
 
 @SuppressWarnings(value = {"deprecation", "unchecked"})
 abstract class LogFilterServletContext implements ServletContext {
@@ -140,5 +149,110 @@
     realContext.setAttribute(name, object);
   }
 
+  public Dynamic addFilter(String arg0, Class<? extends Filter> arg1) {
+    return realContext.addFilter(arg0, arg1);
+  }
+
+  public Dynamic addFilter(String arg0, Filter arg1) {
+    return realContext.addFilter(arg0, arg1);
+  }
+
+  public Dynamic addFilter(String arg0, String arg1) {
+    return realContext.addFilter(arg0, arg1);
+  }
+
+  public void addListener(Class<? extends EventListener> arg0) {
+    realContext.addListener(arg0);
+  }
+
+  public void addListener(String arg0) {
+    realContext.addListener(arg0);
+  }
+
+  public <T extends EventListener> void addListener(T arg0) {
+    realContext.addListener(arg0);
+  }
+
+  public javax.servlet.ServletRegistration.Dynamic addServlet(
+      String arg0, Class<? extends Servlet> arg1) {
+    return realContext.addServlet(arg0, arg1);
+  }
+
+  public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, Servlet arg1) {
+    return realContext.addServlet(arg0, arg1);
+  }
+
+  public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, String arg1) {
+    return realContext.addServlet(arg0, arg1);
+  }
+
+  public <T extends Filter> T createFilter(Class<T> arg0) throws ServletException {
+    return realContext.createFilter(arg0);
+  }
+
+  public <T extends EventListener> T createListener(Class<T> arg0) throws ServletException {
+    return realContext.createListener(arg0);
+  }
+
+  public <T extends Servlet> T createServlet(Class<T> arg0) throws ServletException {
+    return realContext.createServlet(arg0);
+  }
+
+  public void declareRoles(String... arg0) {
+    realContext.declareRoles(arg0);
+  }
+
+  public ClassLoader getClassLoader() {
+    return realContext.getClassLoader();
+  }
+
+  public Set<SessionTrackingMode> getDefaultSessionTrackingModes() {
+    return realContext.getDefaultSessionTrackingModes();
+  }
+
+  public int getEffectiveMajorVersion() {
+    return realContext.getEffectiveMajorVersion();
+  }
+
+  public int getEffectiveMinorVersion() {
+    return realContext.getEffectiveMinorVersion();
+  }
+
+  public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() {
+    return realContext.getEffectiveSessionTrackingModes();
+  }
+
+  public FilterRegistration getFilterRegistration(String arg0) {
+    return realContext.getFilterRegistration(arg0);
+  }
+
+  public Map<String, ? extends FilterRegistration> getFilterRegistrations() {
+    return realContext.getFilterRegistrations();
+  }
+
+  public JspConfigDescriptor getJspConfigDescriptor() {
+    return realContext.getJspConfigDescriptor();
+  }
+
+  public ServletRegistration getServletRegistration(String arg0) {
+    return realContext.getServletRegistration(arg0);
+  }
+
+  public Map<String, ? extends ServletRegistration> getServletRegistrations() {
+    return realContext.getServletRegistrations();
+  }
+
+  public SessionCookieConfig getSessionCookieConfig() {
+    return realContext.getSessionCookieConfig();
+  }
+
+  public boolean setInitParameter(String arg0, String arg1) {
+    return realContext.setInitParameter(arg0, arg1);
+  }
+
+  public void setSessionTrackingModes(Set<SessionTrackingMode> arg0) {
+    realContext.setSessionTrackingModes(arg0);
+  }
+
   protected abstract boolean shouldLog(Throwable t, String msg);
 }
\ No newline at end of file
diff --git a/user/test/com/google/gwt/user/server/rpc/MockHttpServletRequest.java b/user/test/com/google/gwt/user/server/rpc/MockHttpServletRequest.java
index 865c48c..1772c68 100644
--- a/user/test/com/google/gwt/user/server/rpc/MockHttpServletRequest.java
+++ b/user/test/com/google/gwt/user/server/rpc/MockHttpServletRequest.java
@@ -18,21 +18,38 @@
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.security.Principal;
+import java.util.Collection;
 import java.util.Enumeration;
 import java.util.Locale;
 import java.util.Map;
 
+import javax.servlet.AsyncContext;
+import javax.servlet.DispatcherType;
 import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
 import javax.servlet.ServletInputStream;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
+import javax.servlet.http.Part;
 
 /**
  * A dummy class for testing methods that require an HttpServletRequest.
  */
 public class MockHttpServletRequest implements HttpServletRequest {
 
+  public boolean authenticate(HttpServletResponse arg0) throws IOException, ServletException {
+    throw new UnsupportedOperationException();
+  }
+
+  public AsyncContext getAsyncContext() {
+    throw new UnsupportedOperationException();
+  }
+
   public Object getAttribute(String arg0) {
     throw new UnsupportedOperationException();
   }
@@ -69,6 +86,10 @@
     throw new UnsupportedOperationException();
   }
 
+  public DispatcherType getDispatcherType() {
+    throw new UnsupportedOperationException();
+  }
+
   public String getHeader(String arg0) {
     throw new UnsupportedOperationException();
   }
@@ -129,6 +150,14 @@
     throw new UnsupportedOperationException();
   }
 
+  public Part getPart(String arg0) throws IOException, ServletException {
+    throw new UnsupportedOperationException();
+  }
+
+  public Collection<Part> getParts() throws IOException, ServletException {
+    throw new UnsupportedOperationException();
+  }
+
   public String getPathInfo() {
     throw new UnsupportedOperationException();
   }
@@ -197,6 +226,10 @@
     throw new UnsupportedOperationException();
   }
 
+  public ServletContext getServletContext() {
+    throw new UnsupportedOperationException();
+  }
+
   public String getServletPath() {
     throw new UnsupportedOperationException();
   }
@@ -213,6 +246,14 @@
     throw new UnsupportedOperationException();
   }
 
+  public boolean isAsyncStarted() {
+    throw new UnsupportedOperationException();
+  }
+
+  public boolean isAsyncSupported() {
+    throw new UnsupportedOperationException();
+  }
+
   public boolean isRequestedSessionIdFromCookie() {
     throw new UnsupportedOperationException();
   }
@@ -237,6 +278,14 @@
     throw new UnsupportedOperationException();
   }
 
+  public void login(String arg0, String arg1) throws ServletException {
+    throw new UnsupportedOperationException();
+  }
+
+  public void logout() throws ServletException {
+    throw new UnsupportedOperationException();
+  }
+
   public void removeAttribute(String arg0) {
     throw new UnsupportedOperationException();
   }
@@ -248,4 +297,13 @@
   public void setCharacterEncoding(String arg0) {
     throw new UnsupportedOperationException();
   }
+
+  public AsyncContext startAsync() throws IllegalStateException {
+    throw new UnsupportedOperationException();
+  }
+
+  public AsyncContext startAsync(ServletRequest arg0, ServletResponse arg1)
+      throws IllegalStateException {
+    throw new UnsupportedOperationException();
+  }
 }
diff --git a/user/test/com/google/gwt/user/server/rpc/RemoteServiceServletTest.java b/user/test/com/google/gwt/user/server/rpc/RemoteServiceServletTest.java
index 6ab9605..518cc4a 100644
--- a/user/test/com/google/gwt/user/server/rpc/RemoteServiceServletTest.java
+++ b/user/test/com/google/gwt/user/server/rpc/RemoteServiceServletTest.java
@@ -27,13 +27,22 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Enumeration;
+import java.util.EventListener;
+import java.util.Map;
 import java.util.Set;
 
+import javax.servlet.Filter;
+import javax.servlet.FilterRegistration;
+import javax.servlet.FilterRegistration.Dynamic;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.Servlet;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+import javax.servlet.SessionCookieConfig;
+import javax.servlet.SessionTrackingMode;
+import javax.servlet.descriptor.JspConfigDescriptor;
 
 /**
  * Test some of the failure modes associated with
@@ -168,7 +177,7 @@
       throw new UnsupportedOperationException();
     }
 
-    public Enumeration<String> getServlets() {
+    public Enumeration<Servlet> getServlets() {
       throw new UnsupportedOperationException();
     }
 
@@ -190,6 +199,111 @@
     public void setAttribute(String arg0, Object arg1) {
       throw new UnsupportedOperationException();
     }
+
+    public Dynamic addFilter(String arg0, String arg1) {
+      throw new UnsupportedOperationException();
+    }
+
+    public Dynamic addFilter(String arg0, Filter arg1) {
+      throw new UnsupportedOperationException();
+    }
+
+    public Dynamic addFilter(String arg0, Class<? extends Filter> arg1) {
+      throw new UnsupportedOperationException();
+    }
+
+    public void addListener(String arg0) {
+      throw new UnsupportedOperationException();
+    }
+
+    public <T extends EventListener> void addListener(T arg0) {
+      throw new UnsupportedOperationException();
+    }
+
+    public void addListener(Class<? extends EventListener> arg0) {
+      throw new UnsupportedOperationException();
+    }
+
+    public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, String arg1) {
+      throw new UnsupportedOperationException();
+    }
+
+    public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, Servlet arg1) {
+      throw new UnsupportedOperationException();
+    }
+
+    public javax.servlet.ServletRegistration.Dynamic addServlet(
+        String arg0, Class<? extends Servlet> arg1) {
+      throw new UnsupportedOperationException();
+    }
+
+    public <T extends Filter> T createFilter(Class<T> arg0) throws ServletException {
+      throw new UnsupportedOperationException();
+    }
+
+    public <T extends EventListener> T createListener(Class<T> arg0) throws ServletException {
+      throw new UnsupportedOperationException();
+    }
+
+    public <T extends Servlet> T createServlet(Class<T> arg0) throws ServletException {
+      throw new UnsupportedOperationException();
+    }
+
+    public void declareRoles(String... arg0) {
+      throw new UnsupportedOperationException();
+    }
+
+    public ClassLoader getClassLoader() {
+      throw new UnsupportedOperationException();
+    }
+
+    public Set<SessionTrackingMode> getDefaultSessionTrackingModes() {
+      throw new UnsupportedOperationException();
+    }
+
+    public int getEffectiveMajorVersion() {
+      throw new UnsupportedOperationException();
+    }
+
+    public int getEffectiveMinorVersion() {
+      throw new UnsupportedOperationException();
+    }
+
+    public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() {
+      throw new UnsupportedOperationException();
+    }
+
+    public FilterRegistration getFilterRegistration(String arg0) {
+      throw new UnsupportedOperationException();
+    }
+
+    public Map<String, ? extends FilterRegistration> getFilterRegistrations() {
+      throw new UnsupportedOperationException();
+    }
+
+    public JspConfigDescriptor getJspConfigDescriptor() {
+      throw new UnsupportedOperationException();
+    }
+
+    public ServletRegistration getServletRegistration(String arg0) {
+      throw new UnsupportedOperationException();
+    }
+
+    public Map<String, ? extends ServletRegistration> getServletRegistrations() {
+      throw new UnsupportedOperationException();
+    }
+
+    public SessionCookieConfig getSessionCookieConfig() {
+      throw new UnsupportedOperationException();
+    }
+
+    public boolean setInitParameter(String arg0, String arg1) {
+      throw new UnsupportedOperationException();
+    }
+
+    public void setSessionTrackingModes(Set<SessionTrackingMode> arg0) {
+      throw new UnsupportedOperationException();
+    }
   }
 
   public void testDoGetSerializationPolicy_FailToOpenMD5Resource()
diff --git a/user/test/com/google/web/bindery/requestfactory/server/RequestFactoryTestServer.java b/user/test/com/google/web/bindery/requestfactory/server/RequestFactoryTestServer.java
index 3f51bd5..cf6d44b 100644
--- a/user/test/com/google/web/bindery/requestfactory/server/RequestFactoryTestServer.java
+++ b/user/test/com/google/web/bindery/requestfactory/server/RequestFactoryTestServer.java
@@ -15,12 +15,15 @@
  */
 package com.google.web.bindery.requestfactory.server;
 
-import org.mortbay.jetty.Handler;
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.bio.SocketConnector;
-import org.mortbay.jetty.servlet.Context;
-import org.mortbay.jetty.servlet.SessionHandler;
-import org.mortbay.servlet.GzipFilter;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.bio.SocketConnector;
+import org.eclipse.jetty.server.session.SessionHandler;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlets.GzipFilter;
+
+import java.util.EnumSet;
+
+import javax.servlet.DispatcherType;
 
 /**
  * A utility class for hosting an instance of {@link RequestFactoryServlet}.
@@ -33,13 +36,15 @@
     connector.setPort(9999);
     server.addConnector(connector);
 
-    Context ctx = new Context();
-    ctx.addServlet(RequestFactoryServlet.class, "/gwtRequest");
-    ctx.addFilter(GzipFilter.class, "*", Handler.DEFAULT);
+    ServletContextHandler handler = new ServletContextHandler(ServletContextHandler.SESSIONS);
+    handler.setContextPath("/");
+    handler.addServlet(RequestFactoryServlet.class, "/gwtRequest");
+    handler.addFilter(GzipFilter.class, "/*", EnumSet.allOf(DispatcherType.class));
+
     SessionHandler sessionHandler = new SessionHandler();
     sessionHandler.getSessionManager().setMaxInactiveInterval(5);
-    ctx.setSessionHandler(sessionHandler);
-    server.addHandler(ctx);
+    handler.setSessionHandler(sessionHandler);
+    server.setHandler(handler);
 
     try {
       server.start();
