diff --git a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/gaerequest/client/GaeAuthRequestTransport.java b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/gaerequest/client/GaeAuthRequestTransport.java
index ffccb90..3c87b17 100644
--- a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/gaerequest/client/GaeAuthRequestTransport.java
+++ b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/gaerequest/client/GaeAuthRequestTransport.java
@@ -17,10 +17,11 @@
 
 import com.google.gwt.event.shared.EventBus;
 import com.google.gwt.http.client.Request;
+import com.google.gwt.http.client.RequestBuilder;
 import com.google.gwt.http.client.RequestCallback;
 import com.google.gwt.http.client.Response;
 import com.google.gwt.sample.gaerequest.shared.GaeHelper;
-import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.Window.Location;
 import com.google.web.bindery.requestfactory.gwt.client.DefaultRequestTransport;
 import com.google.web.bindery.requestfactory.shared.ServerFailure;
 
@@ -36,14 +37,29 @@
   }
 
   @Override
+  protected void configureRequestBuilder(RequestBuilder builder) {
+    super.configureRequestBuilder(builder);
+
+    /*
+     * Add the redirect URL in case the user is logged out.
+     * 
+     * /MobileWebApp.html?parem0=value0&param1=value1#hash
+     */
+    String redirectUrl = Location.getPath() + Location.getQueryString() + Location.getHash();
+    builder.setHeader(GaeHelper.REDIRECT_URL_HTTP_HEADER_NAME, redirectUrl);
+  }
+
+  @Override
   protected RequestCallback createRequestCallback(final TransportReceiver receiver) {
     final RequestCallback superCallback = super.createRequestCallback(receiver);
 
     return new RequestCallback() {
+      @Override
       public void onError(Request request, Throwable exception) {
         superCallback.onError(request, exception);
       }
 
+      @Override
       public void onResponseReceived(Request request, Response response) {
         /*
          * The GaeAuthFailure filter responds with Response.SC_UNAUTHORIZED and
@@ -51,15 +67,11 @@
          * receive that combo, post an event so that the app can handle things
          * as it sees fit.
          */
-
         if (Response.SC_UNAUTHORIZED == response.getStatusCode()) {
           String loginUrl = response.getHeader("login");
           if (loginUrl != null) {
-            // Replace the redirect url placeholder with the current url.
-            loginUrl = loginUrl.replace(GaeHelper.REDIRECT_URL_TOKEN, Window.Location.getHref());
-
             /*
-             * Hand the receiver a non-fatal callback, so that *
+             * Hand the receiver a non-fatal callback, so that
              * com.google.web.bindery.requestfactory.shared.Receiver will not
              * post a runtime exception.
              */
diff --git a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/gaerequest/server/GaeAuthFilter.java b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/gaerequest/server/GaeAuthFilter.java
index 0a8ad39..0bdea8e 100644
--- a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/gaerequest/server/GaeAuthFilter.java
+++ b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/gaerequest/server/GaeAuthFilter.java
@@ -35,9 +35,11 @@
  */
 public class GaeAuthFilter implements Filter {
 
+  @Override
   public void destroy() {
   }
 
+  @Override
   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
       FilterChain filterChain) throws IOException, ServletException {
     UserService userService = UserServiceFactory.getUserService();
@@ -45,7 +47,12 @@
     HttpServletResponse response = (HttpServletResponse) servletResponse;
 
     if (!userService.isUserLoggedIn()) {
-      response.setHeader("login", userService.createLoginURL(GaeHelper.REDIRECT_URL_TOKEN));
+      String redirectUrl = request.getHeader(GaeHelper.REDIRECT_URL_HTTP_HEADER_NAME);
+      if (redirectUrl == null || redirectUrl.length() == 0) {
+        // Default to the root page if the redirecturl isn't specified in the request.
+        redirectUrl = "/";
+      }
+      response.setHeader("login", userService.createLoginURL(redirectUrl));
       response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
       return;
     }
@@ -53,6 +60,7 @@
     filterChain.doFilter(request, response);
   }
 
+  @Override
   public void init(FilterConfig config) {
   }
 }
diff --git a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/gaerequest/shared/GaeHelper.java b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/gaerequest/shared/GaeHelper.java
index c5c0b7d..3c7e48b 100644
--- a/samples/mobilewebapp/src/main/java/com/google/gwt/sample/gaerequest/shared/GaeHelper.java
+++ b/samples/mobilewebapp/src/main/java/com/google/gwt/sample/gaerequest/shared/GaeHelper.java
@@ -21,9 +21,8 @@
 public interface GaeHelper {
 
   /**
-   * The placeholder token added to the login URL. The client replaces the token
-   * with the current href, which only the client knows.
+   * The name of the HTTP header name used to specify the redirct url when login
+   * is required.
    */
-  /* Prefixed with http:// to ensure that GAE doesn't automatically prefix it. */
-  String REDIRECT_URL_TOKEN = "http%3A%2F%2FREDIRECTURL";
+  String REDIRECT_URL_HTTP_HEADER_NAME = "redirecturl";
 }
