diff --git a/user/src/com/google/gwt/http/client/UrlBuilder.java b/user/src/com/google/gwt/http/client/UrlBuilder.java
index 5d954cd..5e80bdc 100644
--- a/user/src/com/google/gwt/http/client/UrlBuilder.java
+++ b/user/src/com/google/gwt/http/client/UrlBuilder.java
@@ -50,11 +50,11 @@
     StringBuilder url = new StringBuilder();
 
     // http://
-    url.append(protocol).append("://");
+    url.append(URL.encode(protocol)).append("://");
 
     // http://www.google.com
     if (host != null) {
-      url.append(host);
+      url.append(URL.encode(host));
     }
 
     // http://www.google.com:80
@@ -64,7 +64,7 @@
 
     // http://www.google.com:80/path/to/file.html
     if (path != null && !"".equals(path)) {
-      url.append("/").append(path);
+      url.append("/").append(URL.encode(path));
     }
 
     // Generate the query string.
@@ -72,9 +72,12 @@
     char prefix = '?';
     for (Map.Entry<String, String[]> entry : listParamMap.entrySet()) {
       for (String val : entry.getValue()) {
-        url.append(prefix).append(entry.getKey()).append('=');
+        url.append(prefix)
+            .append(URL.encodeQueryString(entry.getKey()))
+            .append('=');
         if (val != null) {
-          url.append(val);
+          // Also encodes +,& etc.
+          url.append(URL.encodeQueryString(val));
         }
         prefix = '&';
       }
@@ -82,10 +85,10 @@
 
     // http://www.google.com:80/path/to/file.html?k0=v0&k1=v1#token
     if (hash != null) {
-      url.append("#").append(hash);
+      url.append("#").append(URL.encode(hash));
     }
 
-    return URL.encode(url.toString());
+    return url.toString();
   }
 
   /**
diff --git a/user/test/com/google/gwt/http/client/UrlBuilderTest.java b/user/test/com/google/gwt/http/client/UrlBuilderTest.java
index e072e14..0a510d6 100644
--- a/user/test/com/google/gwt/http/client/UrlBuilderTest.java
+++ b/user/test/com/google/gwt/http/client/UrlBuilderTest.java
@@ -38,8 +38,25 @@
     builder.setHost("google.com");
     builder.setPath("path to file");
     builder.setParameter("the key", "the value");
-    assertEquals("http://google.com/path%20to%20file?the%20key=the%20value",
+    assertEquals("http://google.com/path%20to%20file?the+key=the+value",
         builder.buildString());
+
+    builder = new UrlBuilder();
+    builder.setHost("google.com");
+    builder.setPath("path");
+    builder.setHash("hash");
+
+    builder.setParameter("a_b", "a+b");
+    assertEquals("http://google.com/path?a_b=a%2Bb#hash",
+                 builder.buildString());
+
+    builder.setParameter("a_b", "a&b");
+    assertEquals("http://google.com/path?a_b=a%26b#hash",
+                 builder.buildString());
+
+    builder.setParameter("a_b", "a%b");
+    assertEquals("http://google.com/path?a_b=a%25b#hash",
+                 builder.buildString());
   }
 
   public void testBuildStringEntireUrl() {
diff --git a/user/test/com/google/gwt/user/client/WindowTest.java b/user/test/com/google/gwt/user/client/WindowTest.java
index 800122f..ca21f4d 100644
--- a/user/test/com/google/gwt/user/client/WindowTest.java
+++ b/user/test/com/google/gwt/user/client/WindowTest.java
@@ -20,6 +20,7 @@
 import com.google.gwt.event.logical.shared.ResizeHandler;
 import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.http.client.UrlBuilder;
+import com.google.gwt.http.client.URL;
 import com.google.gwt.junit.DoNotRunWith;
 import com.google.gwt.junit.Platform;
 import com.google.gwt.junit.client.GWTTestCase;
@@ -120,7 +121,9 @@
         assertEquals(expectedPairs.length, actualPairs.length);
         for (String actualPair : actualPairs) {
           String[] kv = actualPair.split("=");
-          assertEquals(Location.getParameter(kv[0]), kv.length > 1 ? kv[1] : "");
+          assertEquals(Location.getParameter(kv[0]),
+                       // has a URL encoded ':' in a parameter
+                       kv.length > 1 ? URL.decodeQueryString(kv[1]) : "");
         }
       }
       expected = expectedParts[0];
