diff --git a/bikeshed/scripts/maven_script.sh b/bikeshed/scripts/maven_script.sh
old mode 100644
new mode 100755
diff --git a/bikeshed/src/com/google/gwt/input/shared/BooleanParser.java b/bikeshed/src/com/google/gwt/app/client/BooleanParser.java
similarity index 69%
rename from bikeshed/src/com/google/gwt/input/shared/BooleanParser.java
rename to bikeshed/src/com/google/gwt/app/client/BooleanParser.java
index 7d4a905..d9f064c 100644
--- a/bikeshed/src/com/google/gwt/input/shared/BooleanParser.java
+++ b/bikeshed/src/com/google/gwt/app/client/BooleanParser.java
@@ -13,10 +13,16 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.input.shared;
+package com.google.gwt.app.client;
+
+import com.google.gwt.text.shared.Parser;
 
 /**
- * A no-op renderer.
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
+ * An unlocalized simple parser based on {@link Boolean#valueOf}.
  */
 public class BooleanParser implements Parser<Boolean> {
 
@@ -35,7 +41,7 @@
   protected BooleanParser() {
   }
 
-  public Boolean parse(String object) {
-    return Boolean.valueOf(object);
+  public Boolean parse(CharSequence object) {
+    return Boolean.valueOf(object.toString());
   }
 }
diff --git a/bikeshed/src/com/google/gwt/input/shared/BooleanRenderer.java b/bikeshed/src/com/google/gwt/app/client/BooleanRenderer.java
similarity index 69%
rename from bikeshed/src/com/google/gwt/input/shared/BooleanRenderer.java
rename to bikeshed/src/com/google/gwt/app/client/BooleanRenderer.java
index 86168f4..c8a2695 100644
--- a/bikeshed/src/com/google/gwt/input/shared/BooleanRenderer.java
+++ b/bikeshed/src/com/google/gwt/app/client/BooleanRenderer.java
@@ -13,12 +13,19 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.input.shared;
+package com.google.gwt.app.client;
+
+import com.google.gwt.text.shared.AbstractRenderer;
+import com.google.gwt.text.shared.Renderer;
 
 /**
- * Renderer of Boolean values.
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
+ * Simple unlocalized renderer of Boolean values.
  */
-public class BooleanRenderer implements Renderer<Boolean> {
+public class BooleanRenderer extends AbstractRenderer<Boolean> {
   private static BooleanRenderer INSTANCE;
 
   /**
diff --git a/bikeshed/src/com/google/gwt/app/client/CellListPlacePickerView.java b/bikeshed/src/com/google/gwt/app/client/CellListPlacePickerView.java
index 5f455d2..6de1206 100644
--- a/bikeshed/src/com/google/gwt/app/client/CellListPlacePickerView.java
+++ b/bikeshed/src/com/google/gwt/app/client/CellListPlacePickerView.java
@@ -18,7 +18,7 @@
 import com.google.gwt.app.place.Place;
 import com.google.gwt.app.place.PlacePickerView;
 import com.google.gwt.cell.client.AbstractCell;
-import com.google.gwt.input.shared.Renderer;
+import com.google.gwt.text.shared.Renderer;
 import com.google.gwt.user.cellview.client.CellList;
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.view.client.SingleSelectionModel;
diff --git a/bikeshed/src/com/google/gwt/user/client/ui/DoubleBox.java b/bikeshed/src/com/google/gwt/app/client/DoubleBox.java
similarity index 78%
rename from bikeshed/src/com/google/gwt/user/client/ui/DoubleBox.java
rename to bikeshed/src/com/google/gwt/app/client/DoubleBox.java
index d7e2b7f..43ab5cf 100644
--- a/bikeshed/src/com/google/gwt/user/client/ui/DoubleBox.java
+++ b/bikeshed/src/com/google/gwt/app/client/DoubleBox.java
@@ -13,13 +13,16 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.user.client.ui;
+package com.google.gwt.app.client;
 
 import com.google.gwt.dom.client.Document;
-import com.google.gwt.input.shared.DoubleParser;
-import com.google.gwt.input.shared.DoubleRenderer;
+import com.google.gwt.user.client.ui.ValueBox;
 
 /**
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
  * A ValueBox that uses {@link DoubleParser} and {@link DoubleRenderer}.
  */
 public class DoubleBox extends ValueBox<Double> {
diff --git a/bikeshed/src/com/google/gwt/input/shared/DoubleParser.java b/bikeshed/src/com/google/gwt/app/client/DoubleParser.java
similarity index 61%
rename from bikeshed/src/com/google/gwt/input/shared/DoubleParser.java
rename to bikeshed/src/com/google/gwt/app/client/DoubleParser.java
index 9c6d651..b9f3e14 100644
--- a/bikeshed/src/com/google/gwt/input/shared/DoubleParser.java
+++ b/bikeshed/src/com/google/gwt/app/client/DoubleParser.java
@@ -1,27 +1,35 @@
 /*
  * Copyright 2010 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.input.shared;
+package com.google.gwt.app.client;
+
+import com.google.gwt.text.shared.Parser;
+
+import java.text.ParseException;
 
 /**
- * A no-op renderer.
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
+ * Simple unlocalized parser of Double that wraps {@link Double#valueOf(String)}.
  */
 public class DoubleParser implements Parser<Double> {
 
   private static DoubleParser INSTANCE;
-  
+
   /**
    * @return the instance of the no-op renderer
    */
@@ -31,15 +39,15 @@
     }
     return INSTANCE;
   }
-  
+
   protected DoubleParser() {
   }
 
-  public Double parse(String object) {
+  public Double parse(CharSequence object) throws ParseException {
     try {
-      return Double.valueOf(object);
-    } catch (NumberFormatException e) { 
-      throw new ParseException(e);
+      return Double.valueOf(object.toString());
+    } catch (NumberFormatException e) {
+      throw new ParseException(e.getMessage(), 0);
     }
   }
 }
diff --git a/bikeshed/src/com/google/gwt/input/shared/DoubleRenderer.java b/bikeshed/src/com/google/gwt/app/client/DoubleRenderer.java
similarity index 69%
rename from bikeshed/src/com/google/gwt/input/shared/DoubleRenderer.java
rename to bikeshed/src/com/google/gwt/app/client/DoubleRenderer.java
index 6cb9936..9ceaf21 100644
--- a/bikeshed/src/com/google/gwt/input/shared/DoubleRenderer.java
+++ b/bikeshed/src/com/google/gwt/app/client/DoubleRenderer.java
@@ -13,12 +13,19 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.input.shared;
+package com.google.gwt.app.client;
+
+import com.google.gwt.text.shared.AbstractRenderer;
+import com.google.gwt.text.shared.Renderer;
 
 /**
- * Renderer of Long values.
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
+ * A simple unlocalized renderer of Long values.
  */
-public class DoubleRenderer implements Renderer<Double> {
+public class DoubleRenderer extends AbstractRenderer<Double> {
   private static DoubleRenderer INSTANCE;
 
   /**
diff --git a/bikeshed/src/com/google/gwt/app/client/EditorSupport.java b/bikeshed/src/com/google/gwt/app/client/EditorSupport.java
index 7b3bbd0..fb26b55 100644
--- a/bikeshed/src/com/google/gwt/app/client/EditorSupport.java
+++ b/bikeshed/src/com/google/gwt/app/client/EditorSupport.java
@@ -15,9 +15,9 @@
  */
 package com.google.gwt.app.client;
 
+import com.google.gwt.app.place.RecordEditView;
 import com.google.gwt.valuestore.shared.Property;
 import com.google.gwt.valuestore.shared.Record;
-import com.google.gwt.valuestore.ui.RecordEditView;
 
 import java.util.Map;
 import java.util.Set;
diff --git a/bikeshed/src/com/google/gwt/user/client/ui/IntegerBox.java b/bikeshed/src/com/google/gwt/app/client/IntegerBox.java
similarity index 78%
rename from bikeshed/src/com/google/gwt/user/client/ui/IntegerBox.java
rename to bikeshed/src/com/google/gwt/app/client/IntegerBox.java
index e120918..3e762ff 100644
--- a/bikeshed/src/com/google/gwt/user/client/ui/IntegerBox.java
+++ b/bikeshed/src/com/google/gwt/app/client/IntegerBox.java
@@ -13,13 +13,16 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.user.client.ui;
+package com.google.gwt.app.client;
 
 import com.google.gwt.dom.client.Document;
-import com.google.gwt.input.shared.IntegerParser;
-import com.google.gwt.input.shared.IntegerRenderer;
+import com.google.gwt.user.client.ui.ValueBox;
 
 /**
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
  * A ValueBox that uses {@link IntegerParser} and {@link IntegerRenderer}.
  */
 public class IntegerBox extends ValueBox<Integer> {
diff --git a/bikeshed/src/com/google/gwt/input/shared/IntegerParser.java b/bikeshed/src/com/google/gwt/app/client/IntegerParser.java
similarity index 65%
rename from bikeshed/src/com/google/gwt/input/shared/IntegerParser.java
rename to bikeshed/src/com/google/gwt/app/client/IntegerParser.java
index e7338fc..43751da 100644
--- a/bikeshed/src/com/google/gwt/input/shared/IntegerParser.java
+++ b/bikeshed/src/com/google/gwt/app/client/IntegerParser.java
@@ -13,10 +13,18 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.input.shared;
+package com.google.gwt.app.client;
+
+import com.google.gwt.text.shared.Parser;
+
+import java.text.ParseException;
 
 /**
- * A no-op renderer.
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
+ * A simple unlocalized parser based on {@link Integer#valueOf(String)}.
  */
 public class IntegerParser implements Parser<Integer> {
 
@@ -35,11 +43,11 @@
   protected IntegerParser() {
   }
 
-  public Integer parse(String object) {
+  public Integer parse(CharSequence object) throws ParseException {
     try {
-      return Integer.valueOf(object);
+      return Integer.valueOf(object.toString());
     } catch (NumberFormatException e) { 
-      throw new ParseException(e);
+      throw new ParseException(e.getMessage(), 0);
     }
   }
 }
diff --git a/bikeshed/src/com/google/gwt/input/shared/IntegerRenderer.java b/bikeshed/src/com/google/gwt/app/client/IntegerRenderer.java
similarity index 72%
rename from bikeshed/src/com/google/gwt/input/shared/IntegerRenderer.java
rename to bikeshed/src/com/google/gwt/app/client/IntegerRenderer.java
index 249895c..b52be11 100644
--- a/bikeshed/src/com/google/gwt/input/shared/IntegerRenderer.java
+++ b/bikeshed/src/com/google/gwt/app/client/IntegerRenderer.java
@@ -13,12 +13,19 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.input.shared;
+package com.google.gwt.app.client;
+
+import com.google.gwt.text.shared.AbstractRenderer;
+import com.google.gwt.text.shared.Renderer;
 
 /**
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
  * Renderer of Integer values.
  */
-public class IntegerRenderer implements Renderer<Integer> {
+public class IntegerRenderer extends AbstractRenderer<Integer> {
   private static IntegerRenderer INSTANCE;
 
   /**
diff --git a/bikeshed/src/com/google/gwt/user/client/ui/LongBox.java b/bikeshed/src/com/google/gwt/app/client/LongBox.java
similarity index 77%
rename from bikeshed/src/com/google/gwt/user/client/ui/LongBox.java
rename to bikeshed/src/com/google/gwt/app/client/LongBox.java
index eaf5b57..a4e2d70 100644
--- a/bikeshed/src/com/google/gwt/user/client/ui/LongBox.java
+++ b/bikeshed/src/com/google/gwt/app/client/LongBox.java
@@ -13,13 +13,16 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.user.client.ui;
+package com.google.gwt.app.client;
 
 import com.google.gwt.dom.client.Document;
-import com.google.gwt.input.shared.LongParser;
-import com.google.gwt.input.shared.LongRenderer;
+import com.google.gwt.user.client.ui.ValueBox;
 
 /**
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
  * A ValueBox that uses {@link LongParser} and {@link LongRenderer}.
  */
 public class LongBox extends ValueBox<Long> {
diff --git a/bikeshed/src/com/google/gwt/input/shared/LongParser.java b/bikeshed/src/com/google/gwt/app/client/LongParser.java
similarity index 69%
rename from bikeshed/src/com/google/gwt/input/shared/LongParser.java
rename to bikeshed/src/com/google/gwt/app/client/LongParser.java
index 76ba205..49d1a87 100644
--- a/bikeshed/src/com/google/gwt/input/shared/LongParser.java
+++ b/bikeshed/src/com/google/gwt/app/client/LongParser.java
@@ -13,9 +13,17 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.input.shared;
+package com.google.gwt.app.client;
+
+import com.google.gwt.text.shared.Parser;
+
+import java.text.ParseException;
 
 /**
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
  * A no-op renderer.
  */
 public class LongParser implements Parser<Long> {
@@ -35,11 +43,11 @@
   protected LongParser() {
   }
 
-  public Long parse(String object) {
+  public Long parse(CharSequence object) throws ParseException {
     try {
-      return Long.valueOf(object);
+      return Long.valueOf(object.toString());
     } catch (NumberFormatException e) { 
-      throw new ParseException(e);
+      throw new ParseException(e.getMessage(), 0);
     }
   }
 }
diff --git a/bikeshed/src/com/google/gwt/input/shared/LongRenderer.java b/bikeshed/src/com/google/gwt/app/client/LongRenderer.java
similarity index 72%
rename from bikeshed/src/com/google/gwt/input/shared/LongRenderer.java
rename to bikeshed/src/com/google/gwt/app/client/LongRenderer.java
index 1b8c896..297d624 100644
--- a/bikeshed/src/com/google/gwt/input/shared/LongRenderer.java
+++ b/bikeshed/src/com/google/gwt/app/client/LongRenderer.java
@@ -13,12 +13,19 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.input.shared;
+package com.google.gwt.app.client;
+
+import com.google.gwt.text.shared.AbstractRenderer;
+import com.google.gwt.text.shared.Renderer;
 
 /**
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
  * Renderer of Long values.
  */
-public class LongRenderer implements Renderer<Long> {
+public class LongRenderer extends AbstractRenderer<Long> {
   private static LongRenderer INSTANCE;
 
   /**
diff --git a/bikeshed/src/com/google/gwt/app/place/AbstractRecordEditActivity.java b/bikeshed/src/com/google/gwt/app/place/AbstractRecordEditActivity.java
index 2dba31a..6da56eb 100644
--- a/bikeshed/src/com/google/gwt/app/place/AbstractRecordEditActivity.java
+++ b/bikeshed/src/com/google/gwt/app/place/AbstractRecordEditActivity.java
@@ -22,7 +22,6 @@
 import com.google.gwt.valuestore.shared.Record;
 import com.google.gwt.valuestore.shared.SyncResult;
 import com.google.gwt.valuestore.shared.Value;
-import com.google.gwt.valuestore.ui.RecordEditView;
 
 import java.util.Set;
 
diff --git a/bikeshed/src/com/google/gwt/app/place/AbstractRecordListActivity.java b/bikeshed/src/com/google/gwt/app/place/AbstractRecordListActivity.java
index 10ae125..63f78f4 100644
--- a/bikeshed/src/com/google/gwt/app/place/AbstractRecordListActivity.java
+++ b/bikeshed/src/com/google/gwt/app/place/AbstractRecordListActivity.java
@@ -19,7 +19,6 @@
 import com.google.gwt.requestfactory.shared.RecordListRequest;
 import com.google.gwt.valuestore.shared.Record;
 import com.google.gwt.valuestore.shared.WriteOperation;
-import com.google.gwt.valuestore.ui.RecordListView;
 import com.google.gwt.view.client.ListView;
 import com.google.gwt.view.client.PagingListView;
 import com.google.gwt.view.client.Range;
diff --git a/bikeshed/src/com/google/gwt/valuestore/ui/AbstractRecordListView.java b/bikeshed/src/com/google/gwt/app/place/AbstractRecordListView.java
similarity index 98%
rename from bikeshed/src/com/google/gwt/valuestore/ui/AbstractRecordListView.java
rename to bikeshed/src/com/google/gwt/app/place/AbstractRecordListView.java
index 07dc460..7f4a37e 100644
--- a/bikeshed/src/com/google/gwt/valuestore/ui/AbstractRecordListView.java
+++ b/bikeshed/src/com/google/gwt/app/place/AbstractRecordListView.java
@@ -13,7 +13,7 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.valuestore.ui;
+package com.google.gwt.app.place;
 
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
diff --git a/bikeshed/src/com/google/gwt/app/place/Activity.java b/bikeshed/src/com/google/gwt/app/place/Activity.java
index 8bb212c..c72abd0 100644
--- a/bikeshed/src/com/google/gwt/app/place/Activity.java
+++ b/bikeshed/src/com/google/gwt/app/place/Activity.java
@@ -15,7 +15,6 @@
  */
 package com.google.gwt.app.place;
 
-import com.google.gwt.user.client.ui.IsWidget;
 
 /**
  * <p>
diff --git a/bikeshed/src/com/google/gwt/app/place/ActivityManager.java b/bikeshed/src/com/google/gwt/app/place/ActivityManager.java
index 75215ec..e595583 100644
--- a/bikeshed/src/com/google/gwt/app/place/ActivityManager.java
+++ b/bikeshed/src/com/google/gwt/app/place/ActivityManager.java
@@ -17,7 +17,6 @@
 
 import com.google.gwt.app.place.Activity.Display;
 import com.google.gwt.event.shared.HandlerManager;
-import com.google.gwt.user.client.ui.IsWidget;
 
 /**
  * <p>
diff --git a/bikeshed/src/com/google/gwt/user/client/ui/IsWidget.java b/bikeshed/src/com/google/gwt/app/place/IsWidget.java
similarity index 77%
rename from bikeshed/src/com/google/gwt/user/client/ui/IsWidget.java
rename to bikeshed/src/com/google/gwt/app/place/IsWidget.java
index 14718bc..38fd4e7 100644
--- a/bikeshed/src/com/google/gwt/user/client/ui/IsWidget.java
+++ b/bikeshed/src/com/google/gwt/app/place/IsWidget.java
@@ -13,9 +13,15 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.user.client.ui;
+package com.google.gwt.app.place;
+
+import com.google.gwt.user.client.ui.Widget;
 
 /**
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
  * Extended by View interfaces that are likely to be implemented by Widgets.
  * Provides access to that widget, if it exists, without compromising the
  * ability to provide mock view instance in JRE unit tests.
diff --git a/bikeshed/src/com/google/gwt/app/place/PlacePicker.java b/bikeshed/src/com/google/gwt/app/place/PlacePicker.java
index 9984b99..1832af1 100644
--- a/bikeshed/src/com/google/gwt/app/place/PlacePicker.java
+++ b/bikeshed/src/com/google/gwt/app/place/PlacePicker.java
@@ -15,7 +15,7 @@
  */
 package com.google.gwt.app.place;
 
-import com.google.gwt.input.shared.Renderer;
+import com.google.gwt.text.shared.Renderer;
 
 import java.util.List;
 
diff --git a/bikeshed/src/com/google/gwt/app/place/PlacePickerView.java b/bikeshed/src/com/google/gwt/app/place/PlacePickerView.java
index cc70b2f..c82bb99 100644
--- a/bikeshed/src/com/google/gwt/app/place/PlacePickerView.java
+++ b/bikeshed/src/com/google/gwt/app/place/PlacePickerView.java
@@ -15,8 +15,7 @@
  */
 package com.google.gwt.app.place;
 
-import com.google.gwt.input.shared.Renderer;
-import com.google.gwt.user.client.ui.IsWidget;
+import com.google.gwt.text.shared.Renderer;
 import com.google.gwt.user.client.ui.Widget;
 
 import java.util.List;
diff --git a/bikeshed/src/com/google/gwt/valuestore/ui/PropertyColumn.java b/bikeshed/src/com/google/gwt/app/place/PropertyColumn.java
similarity index 92%
rename from bikeshed/src/com/google/gwt/valuestore/ui/PropertyColumn.java
rename to bikeshed/src/com/google/gwt/app/place/PropertyColumn.java
index c8b640f..1cc44d4 100644
--- a/bikeshed/src/com/google/gwt/valuestore/ui/PropertyColumn.java
+++ b/bikeshed/src/com/google/gwt/app/place/PropertyColumn.java
@@ -13,10 +13,10 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.valuestore.ui;
+package com.google.gwt.app.place;
 
-import com.google.gwt.input.shared.PassthroughRenderer;
-import com.google.gwt.input.shared.Renderer;
+import com.google.gwt.text.shared.PassthroughRenderer;
+import com.google.gwt.text.shared.Renderer;
 import com.google.gwt.user.cellview.client.TextColumn;
 import com.google.gwt.valuestore.shared.Property;
 import com.google.gwt.valuestore.shared.Record;
diff --git a/bikeshed/src/com/google/gwt/valuestore/ui/PropertyView.java b/bikeshed/src/com/google/gwt/app/place/PropertyView.java
similarity index 96%
rename from bikeshed/src/com/google/gwt/valuestore/ui/PropertyView.java
rename to bikeshed/src/com/google/gwt/app/place/PropertyView.java
index 9828574..81f34da 100644
--- a/bikeshed/src/com/google/gwt/valuestore/ui/PropertyView.java
+++ b/bikeshed/src/com/google/gwt/app/place/PropertyView.java
@@ -13,7 +13,7 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.valuestore.ui;
+package com.google.gwt.app.place;
 
 import com.google.gwt.valuestore.shared.Property;
 import com.google.gwt.valuestore.shared.Record;
diff --git a/bikeshed/src/com/google/gwt/valuestore/ui/RecordDetailsView.java b/bikeshed/src/com/google/gwt/app/place/RecordDetailsView.java
similarity index 93%
rename from bikeshed/src/com/google/gwt/valuestore/ui/RecordDetailsView.java
rename to bikeshed/src/com/google/gwt/app/place/RecordDetailsView.java
index 53194d4..91d9d8d 100644
--- a/bikeshed/src/com/google/gwt/valuestore/ui/RecordDetailsView.java
+++ b/bikeshed/src/com/google/gwt/app/place/RecordDetailsView.java
@@ -13,9 +13,8 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.valuestore.ui;
+package com.google.gwt.app.place;
 
-import com.google.gwt.user.client.ui.IsWidget;
 import com.google.gwt.user.client.ui.TakesValue;
 
 /**
diff --git a/bikeshed/src/com/google/gwt/valuestore/ui/RecordEditView.java b/bikeshed/src/com/google/gwt/app/place/RecordEditView.java
similarity index 94%
rename from bikeshed/src/com/google/gwt/valuestore/ui/RecordEditView.java
rename to bikeshed/src/com/google/gwt/app/place/RecordEditView.java
index 7c442dd..6d4ef98 100644
--- a/bikeshed/src/com/google/gwt/valuestore/ui/RecordEditView.java
+++ b/bikeshed/src/com/google/gwt/app/place/RecordEditView.java
@@ -13,9 +13,8 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.valuestore.ui;
+package com.google.gwt.app.place;
 
-import com.google.gwt.user.client.ui.IsWidget;
 import com.google.gwt.user.client.ui.TakesValue;
 import com.google.gwt.valuestore.shared.DeltaValueStore;
 import com.google.gwt.valuestore.shared.Record;
diff --git a/bikeshed/src/com/google/gwt/valuestore/ui/RecordListView.java b/bikeshed/src/com/google/gwt/app/place/RecordListView.java
similarity index 94%
rename from bikeshed/src/com/google/gwt/valuestore/ui/RecordListView.java
rename to bikeshed/src/com/google/gwt/app/place/RecordListView.java
index ca108f1..6e9e48c 100644
--- a/bikeshed/src/com/google/gwt/valuestore/ui/RecordListView.java
+++ b/bikeshed/src/com/google/gwt/app/place/RecordListView.java
@@ -13,9 +13,8 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.valuestore.ui;
+package com.google.gwt.app.place;
 
-import com.google.gwt.user.client.ui.IsWidget;
 import com.google.gwt.valuestore.shared.Record;
 import com.google.gwt.view.client.PagingListView;
 
diff --git a/bikeshed/src/com/google/gwt/input/shared/ParseException.java b/bikeshed/src/com/google/gwt/input/shared/ParseException.java
deleted file mode 100644
index 41a0cdf..0000000
--- a/bikeshed/src/com/google/gwt/input/shared/ParseException.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2010 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.input.shared;
-
-/**
- * Exception class indicating parsing errors.
- */
-public class ParseException extends RuntimeException {
-
-  private final String rawInput;
-  private final int offset;
-
-  public ParseException(Throwable e) {
-    this("", "", 0, e);
-  }
-
-  public ParseException(String rawInput) {
-    this("", rawInput, 0, null);
-  }
-
-  public ParseException(String rawInput, int offset) {
-    this("", rawInput, offset, null);
-  }
-
-  public ParseException(String message, String rawInput, int offset) {
-    this(message, rawInput, offset, null);
-  }
-
-  public ParseException(String message, String rawInput, int offset, Throwable e) {
-    super(message, e);
-    this.rawInput = rawInput;
-    this.offset = offset;
-  }
-
-  public String getInput() {
-    return rawInput;
-  }
-  
-  public int getOffset() {
-    return offset;
-  }
-}
\ No newline at end of file
diff --git a/bikeshed/src/com/google/gwt/input/shared/Renderer.java b/bikeshed/src/com/google/gwt/input/shared/Renderer.java
deleted file mode 100644
index cfe0ea3..0000000
--- a/bikeshed/src/com/google/gwt/input/shared/Renderer.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2010 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.input.shared;
-
-/**
- * An object that can render other objects of a particular type into plain-text
- * form.
- * <p>
- * TODO: steal the slightly richer version from Guava
- *
- * @param <T> the type to render
- */
-public interface Renderer<T> {
-  /**
-   * Renders {@code object} as plain text.
-   */
-  String render(T object);
-}
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/Scaffold.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/Scaffold.java
index e1e2c59..813eceb 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/Scaffold.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/Scaffold.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.app.place.Activity;
 import com.google.gwt.app.place.ActivityManager;
+import com.google.gwt.app.place.IsWidget;
 import com.google.gwt.app.place.PlaceController;
 import com.google.gwt.app.place.PlacePicker;
 import com.google.gwt.core.client.EntryPoint;
@@ -32,7 +33,6 @@
 import com.google.gwt.sample.expenses.gwt.request.ExpensesRequestFactory;
 import com.google.gwt.sample.expenses.gwt.ui.ListActivitiesMapper;
 import com.google.gwt.sample.expenses.gwt.ui.ScaffoldListPlaceRenderer;
-import com.google.gwt.user.client.ui.IsWidget;
 import com.google.gwt.user.client.ui.RootLayoutPanel;
 import com.google.gwt.valuestore.shared.Record;
 
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ScaffoldMobile.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ScaffoldMobile.java
index 3e32528..bd3b881 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ScaffoldMobile.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ScaffoldMobile.java
@@ -18,6 +18,7 @@
 import com.google.gwt.app.place.Activity;
 import com.google.gwt.app.place.ActivityManager;
 import com.google.gwt.app.place.ActivityMapper;
+import com.google.gwt.app.place.IsWidget;
 import com.google.gwt.app.place.PlaceController;
 import com.google.gwt.app.place.PlacePicker;
 import com.google.gwt.core.client.EntryPoint;
@@ -31,7 +32,6 @@
 import com.google.gwt.sample.expenses.gwt.request.ExpensesRequestFactory;
 import com.google.gwt.sample.expenses.gwt.ui.ListActivitiesMapper;
 import com.google.gwt.sample.expenses.gwt.ui.ScaffoldListPlaceRenderer;
-import com.google.gwt.user.client.ui.IsWidget;
 import com.google.gwt.user.client.ui.RootLayoutPanel;
 import com.google.gwt.valuestore.shared.Record;
 
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/ScaffoldListPlaceRenderer.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/ScaffoldListPlaceRenderer.java
index ad1e975..7336c68 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/ScaffoldListPlaceRenderer.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/ScaffoldListPlaceRenderer.java
@@ -15,16 +15,16 @@
  */
 package com.google.gwt.sample.expenses.gwt.ui;
 
-import com.google.gwt.input.shared.Renderer;
 import com.google.gwt.sample.expenses.gwt.client.place.ListScaffoldPlace;
 import com.google.gwt.sample.expenses.gwt.request.EmployeeRecord;
 import com.google.gwt.sample.expenses.gwt.request.ReportRecord;
+import com.google.gwt.text.shared.AbstractRenderer;
 import com.google.gwt.valuestore.shared.Record;
 
 /**
  * Renders {@link ListScaffoldPlace}s for display to users.
  */
-public class ScaffoldListPlaceRenderer implements Renderer<ListScaffoldPlace> {
+public class ScaffoldListPlaceRenderer extends AbstractRenderer<ListScaffoldPlace> {
 
   public String render(ListScaffoldPlace object) {
     // TODO These class comparisons are gross, find a cleaner way.
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsActivity.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsActivity.java
index e1c8ae8..9b62034 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsActivity.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsActivity.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.app.place.AbstractActivity;
 import com.google.gwt.app.place.PlaceController;
+import com.google.gwt.app.place.RecordDetailsView;
 import com.google.gwt.requestfactory.shared.Receiver;
 import com.google.gwt.sample.expenses.gwt.client.place.EmployeeScaffoldPlace;
 import com.google.gwt.sample.expenses.gwt.client.place.ScaffoldPlace;
@@ -26,7 +27,6 @@
 import com.google.gwt.valuestore.shared.DeltaValueStore;
 import com.google.gwt.valuestore.shared.SyncResult;
 import com.google.gwt.valuestore.shared.Value;
-import com.google.gwt.valuestore.ui.RecordDetailsView;
 
 import java.util.Set;
 
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsView.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsView.java
index f8b6aca..c1eddbc 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsView.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsView.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.sample.expenses.gwt.ui.employee;
 
+import com.google.gwt.app.place.RecordDetailsView;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.SpanElement;
 import com.google.gwt.event.dom.client.ClickEvent;
@@ -27,7 +28,6 @@
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.HTMLPanel;
 import com.google.gwt.user.client.ui.Widget;
-import com.google.gwt.valuestore.ui.RecordDetailsView;
 
 /**
  * Details view for employee records.
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditActivity.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditActivity.java
index 001b488..509ca40 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditActivity.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditActivity.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.app.place.AbstractRecordEditActivity;
 import com.google.gwt.app.place.PlaceController;
+import com.google.gwt.app.place.RecordEditView;
 import com.google.gwt.requestfactory.shared.Receiver;
 import com.google.gwt.sample.expenses.gwt.client.place.EmployeeScaffoldPlace;
 import com.google.gwt.sample.expenses.gwt.client.place.ScaffoldPlace;
@@ -24,7 +25,6 @@
 import com.google.gwt.sample.expenses.gwt.request.EmployeeRecord;
 import com.google.gwt.sample.expenses.gwt.request.ExpensesRequestFactory;
 import com.google.gwt.valuestore.shared.Value;
-import com.google.gwt.valuestore.ui.RecordEditView;
 
 /**
  * An activity that requests all info on an employee, allows the user to edit
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditView.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditView.java
index d5d648f..593464e 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditView.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditView.java
@@ -16,6 +16,7 @@
 package com.google.gwt.sample.expenses.gwt.ui.employee;
 
 import com.google.gwt.app.client.EditorSupport;
+import com.google.gwt.app.place.RecordEditView;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.DivElement;
 import com.google.gwt.dom.client.Element;
@@ -32,7 +33,6 @@
 import com.google.gwt.user.client.ui.TextBox;
 import com.google.gwt.valuestore.shared.DeltaValueStore;
 import com.google.gwt.valuestore.shared.Property;
-import com.google.gwt.valuestore.ui.RecordEditView;
 
 import java.util.Map;
 import java.util.Set;
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeListActivity.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeListActivity.java
index 9bf0883..8d3ce2b 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeListActivity.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeListActivity.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.app.place.AbstractRecordListActivity;
 import com.google.gwt.app.place.PlaceController;
+import com.google.gwt.app.place.RecordListView;
 import com.google.gwt.event.shared.HandlerManager;
 import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.requestfactory.shared.Receiver;
@@ -27,7 +28,6 @@
 import com.google.gwt.sample.expenses.gwt.request.EmployeeRecord;
 import com.google.gwt.sample.expenses.gwt.request.EmployeeRecordChanged;
 import com.google.gwt.sample.expenses.gwt.request.ExpensesRequestFactory;
-import com.google.gwt.valuestore.ui.RecordListView;
 import com.google.gwt.view.client.Range;
 
 /**
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeListView.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeListView.java
index dd08e28..65af62b 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeListView.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeListView.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.sample.expenses.gwt.ui.employee;
 
+import com.google.gwt.app.place.AbstractRecordListView;
+import com.google.gwt.app.place.PropertyColumn;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.sample.expenses.gwt.request.EmployeeRecord;
 import com.google.gwt.uibinder.client.UiBinder;
@@ -22,8 +24,6 @@
 import com.google.gwt.user.cellview.client.CellTable;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.HTMLPanel;
-import com.google.gwt.valuestore.ui.AbstractRecordListView;
-import com.google.gwt.valuestore.ui.PropertyColumn;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsActivity.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsActivity.java
index eb26387..5e0a020 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsActivity.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsActivity.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.app.place.AbstractActivity;
 import com.google.gwt.app.place.PlaceController;
+import com.google.gwt.app.place.RecordDetailsView;
 import com.google.gwt.requestfactory.shared.Receiver;
 import com.google.gwt.sample.expenses.gwt.client.place.ReportScaffoldPlace;
 import com.google.gwt.sample.expenses.gwt.client.place.ScaffoldPlace;
@@ -26,7 +27,6 @@
 import com.google.gwt.valuestore.shared.DeltaValueStore;
 import com.google.gwt.valuestore.shared.SyncResult;
 import com.google.gwt.valuestore.shared.Value;
-import com.google.gwt.valuestore.ui.RecordDetailsView;
 
 import java.util.Set;
 
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsView.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsView.java
index a936856..171fa31 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsView.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsView.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.sample.expenses.gwt.ui.report;
 
+import com.google.gwt.app.place.RecordDetailsView;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.SpanElement;
 import com.google.gwt.event.dom.client.ClickEvent;
@@ -28,7 +29,6 @@
 import com.google.gwt.user.client.ui.Composite;
 import com.google.gwt.user.client.ui.HTMLPanel;
 import com.google.gwt.user.client.ui.Widget;
-import com.google.gwt.valuestore.ui.RecordDetailsView;
 
 /**
  * Details view for employee records.
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditActivity.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditActivity.java
index 4921a8f..9fa5505 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditActivity.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditActivity.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.app.place.AbstractRecordEditActivity;
 import com.google.gwt.app.place.PlaceController;
+import com.google.gwt.app.place.RecordEditView;
 import com.google.gwt.requestfactory.shared.Receiver;
 import com.google.gwt.sample.expenses.gwt.client.place.ReportScaffoldPlace;
 import com.google.gwt.sample.expenses.gwt.client.place.ScaffoldPlace;
@@ -24,7 +25,6 @@
 import com.google.gwt.sample.expenses.gwt.request.ExpensesRequestFactory;
 import com.google.gwt.sample.expenses.gwt.request.ReportRecord;
 import com.google.gwt.valuestore.shared.Value;
-import com.google.gwt.valuestore.ui.RecordEditView;
 
 /**
  * An activity that requests all info on a report, allows the user to edit it,
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditView.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditView.java
index 4a260b6..4525bdc 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditView.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditView.java
@@ -16,6 +16,7 @@
 package com.google.gwt.sample.expenses.gwt.ui.report;
 
 import com.google.gwt.app.client.EditorSupport;
+import com.google.gwt.app.place.RecordEditView;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.DivElement;
 import com.google.gwt.dom.client.Element;
@@ -33,7 +34,6 @@
 import com.google.gwt.user.datepicker.client.DateBox;
 import com.google.gwt.valuestore.shared.DeltaValueStore;
 import com.google.gwt.valuestore.shared.Property;
-import com.google.gwt.valuestore.ui.RecordEditView;
 
 import java.util.Map;
 import java.util.Set;
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportListActivity.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportListActivity.java
index 224835b..bfcebb2 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportListActivity.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportListActivity.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.app.place.AbstractRecordListActivity;
 import com.google.gwt.app.place.PlaceController;
+import com.google.gwt.app.place.RecordListView;
 import com.google.gwt.event.shared.HandlerManager;
 import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.requestfactory.shared.Receiver;
@@ -27,7 +28,6 @@
 import com.google.gwt.sample.expenses.gwt.request.ExpensesRequestFactory;
 import com.google.gwt.sample.expenses.gwt.request.ReportRecord;
 import com.google.gwt.sample.expenses.gwt.request.ReportRecordChanged;
-import com.google.gwt.valuestore.ui.RecordListView;
 import com.google.gwt.view.client.Range;
 
 /**
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportListView.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportListView.java
index c48e65d..7fa5d2b 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportListView.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportListView.java
@@ -15,17 +15,17 @@
  */
 package com.google.gwt.sample.expenses.gwt.ui.report;
 
+import com.google.gwt.app.place.AbstractRecordListView;
+import com.google.gwt.app.place.PropertyColumn;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.i18n.client.DateTimeFormat;
-import com.google.gwt.input.shared.DateTimeFormatRenderer;
+import com.google.gwt.i18n.client.DateTimeFormatRenderer;
 import com.google.gwt.sample.expenses.gwt.request.ReportRecord;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
 import com.google.gwt.user.cellview.client.CellTable;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.HTMLPanel;
-import com.google.gwt.valuestore.ui.AbstractRecordListView;
-import com.google.gwt.valuestore.ui.PropertyColumn;
 
 import java.util.ArrayList;
 import java.util.Date;
diff --git a/bikeshed/src/com/google/gwt/user/User.gwt.xml b/bikeshed/src/com/google/gwt/user/User.gwt.xml
deleted file mode 100644
index eb25a15..0000000
--- a/bikeshed/src/com/google/gwt/user/User.gwt.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-  Copyright 2008 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.
--->
-
-<!-- Combines all user facilities into a single module for convenience.     -->
-<!-- Most new code should inherit this module.                              -->
-<!--                                                                        -->
-<module>
-   <inherits name="com.google.gwt.input.Input"/>
-   <inherits name="com.google.gwt.core.Core"/>
-   <inherits name="com.google.gwt.event.Event"/>
-   <inherits name="com.google.gwt.animation.Animation"/>
-   <inherits name="com.google.gwt.resources.Resources"/>
-   <inherits name="com.google.gwt.layout.Layout"/>
-   <inherits name="com.google.gwt.uibinder.UiBinder"/>
-   <inherits name="com.google.gwt.user.AsyncProxy"/>
-   <inherits name="com.google.gwt.user.RemoteService"/>
-   <inherits name="com.google.gwt.user.DocumentRoot" />
-   <inherits name="com.google.gwt.user.DOM"/>
-   <inherits name="com.google.gwt.user.Window" />
-   <inherits name="com.google.gwt.user.HTTPRequest"/>
-   <inherits name="com.google.gwt.user.History"/>
-   <inherits name="com.google.gwt.i18n.I18N"/>
-   <inherits name="com.google.gwt.user.Popup"/>
-   <inherits name="com.google.gwt.user.Form"/>
-   <inherits name="com.google.gwt.user.TextBox"/>
-   <inherits name="com.google.gwt.user.Focus"/>
-   <inherits name="com.google.gwt.user.ImageBundle"/>  
-   <inherits name="com.google.gwt.user.ClippedImage"/>
-   <inherits name="com.google.gwt.user.RichText"/>
-   <inherits name="com.google.gwt.user.SplitPanel"/>
-   <inherits name="com.google.gwt.user.CaptionPanel" />
-   <inherits name="com.google.gwt.user.Window" />
-   <inherits name="com.google.gwt.user.Tree"/>
-   <inherits name="com.google.gwt.user.Hyperlink"/>
-   <inherits name="com.google.gwt.user.FileUpload"/>
-   <inherits name="com.google.gwt.user.datepicker.DatePicker"/>
-   <inherits name="com.google.gwt.user.cellview.CellView"/>
-
-   <super-source path="translatable"/>
-   <source path="client"/>
-</module>
diff --git a/bikeshed/src/com/google/gwt/user/client/ui/HasValue.java b/bikeshed/src/com/google/gwt/user/client/ui/HasValue.java
deleted file mode 100644
index 46eed6c..0000000
--- a/bikeshed/src/com/google/gwt/user/client/ui/HasValue.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright 2008 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.user.client.ui;
-
-import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
-
-/**
- * Extends {@link TakesValue} to allow the value to be pulled back out, and to
- * throw {@link com.google.gwt.event.logical.shared.ValueChangeEvent
- * ValueChangeEvent} events.
- * <p>
- * An object that implements this interface should be a user input widget, where
- * the user and programmer can both set and get the object's value. It is
- * intended to provide a unified interface to widgets with "atomic" values, like
- * Strings and Dates.
- *
- * @param <T> the type of value
- */
-public interface HasValue<T> extends TakesValue<T>, HasValueChangeHandlers<T> {
-
-  /**
-   * Gets this object's value.
-   *
-   * @return the object's value
-   */
-  T getValue();
-
-  /**
-   * Sets this object's value without firing any events. This should be
-   * identical to calling setValue(value, false).
-   * <p>
-   * It is acceptable to fail assertions or throw (documented) unchecked
-   * exceptions in response to bad values.
-   * <p>
-   * By convention, GWT widgets that can be cleared accept null for
-   * <code>value</code>, but it is acceptable for widgets that cannot be cleared
-   * to throw an exception for null values.
-   *
-   * @param value the object's new value
-   */
-  void setValue(T value);
-
-  /**
-   * Sets this object's value. Fires
-   * {@link com.google.gwt.event.logical.shared.ValueChangeEvent} when
-   * fireEvents is true and the new value does not equal the existing value.
-   * <p>
-   * It is acceptable to fail assertions or throw (documented) unchecked
-   * exceptions in response to bad values.
-   *
-   * @param value the object's new value
-   * @param fireEvents fire events if true and value is new
-   */
-  void setValue(T value, boolean fireEvents);
-}
diff --git a/bikeshed/src/com/google/gwt/user/client/ui/TextBoxBase.java b/bikeshed/src/com/google/gwt/user/client/ui/TextBoxBase.java
deleted file mode 100644
index 0afbe61..0000000
--- a/bikeshed/src/com/google/gwt/user/client/ui/TextBoxBase.java
+++ /dev/null
@@ -1,76 +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.user.client.ui;
-
-import com.google.gwt.dom.client.Element;
-import com.google.gwt.input.shared.PassthroughParser;
-import com.google.gwt.input.shared.PassthroughRenderer;
-
-/**
- * Legacy abstract base class for all text entry widgets.
- */
-public class TextBoxBase extends ValueBoxBase<String>  {
-
-  /**
-   * Text alignment constant, used in
-   * {@link TextBoxBase#setTextAlignment(TextBoxBase.TextAlignConstant)}.
-   */
-  public static class TextAlignConstant {
-    private String textAlignString;
-
-    private TextAlignConstant(String textAlignString) {
-      this.textAlignString = textAlignString;
-    }
-
-    String getTextAlignString() {
-      return textAlignString;
-    }
-  }
-
-  /**
-   * Center the text.
-   */
-  public static final TextAlignConstant ALIGN_CENTER = new TextAlignConstant(
-      "center");
-
-  /**
-   * Justify the text.
-   */
-  public static final TextAlignConstant ALIGN_JUSTIFY = new TextAlignConstant(
-      "justify");
-
-  /**
-   * Align the text to the left edge.
-   */
-  public static final TextAlignConstant ALIGN_LEFT = new TextAlignConstant(
-      "left");
-
-  /**
-   * Align the text to the right.
-   */
-  public static final TextAlignConstant ALIGN_RIGHT = new TextAlignConstant(
-      "right");
-
-  /**
-   * Creates a text box that wraps the given browser element handle. This is
-   * only used by subclasses.
-   * 
-   * @param elem the browser element to wrap
-   */
-  protected TextBoxBase(Element elem) {
-    super(elem, PassthroughRenderer.instance(), PassthroughParser.instance());
-  }
-}
diff --git a/bikeshed/src/com/google/gwt/user/client/ui/package.html b/bikeshed/src/com/google/gwt/user/client/ui/package.html
deleted file mode 100644
index fbf661f..0000000
--- a/bikeshed/src/com/google/gwt/user/client/ui/package.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html>
-<body>
-Widgets, Panels, and other user-interface classes.
-
-This package contains all of the high-level user-interface Widgets, along with
-panels and event interfaces. These classes form the bulk of the client-side
-libraries used by GWT applications.
-</body>
-</html>
diff --git a/bikeshed/test/com/google/gwt/app/place/ActivityManagerTest.java b/bikeshed/test/com/google/gwt/app/place/ActivityManagerTest.java
index 102dafe..1faf89f 100644
--- a/bikeshed/test/com/google/gwt/app/place/ActivityManagerTest.java
+++ b/bikeshed/test/com/google/gwt/app/place/ActivityManagerTest.java
@@ -16,7 +16,6 @@
 package com.google.gwt.app.place;
 
 import com.google.gwt.event.shared.HandlerManager;
-import com.google.gwt.user.client.ui.IsWidget;
 import com.google.gwt.user.client.ui.Widget;
 
 import junit.framework.TestCase;
diff --git a/bikeshed/src/com/google/gwt/input/shared/DateTimeFormatRenderer.java b/user/src/com/google/gwt/i18n/client/DateTimeFormatRenderer.java
similarity index 84%
rename from bikeshed/src/com/google/gwt/input/shared/DateTimeFormatRenderer.java
rename to user/src/com/google/gwt/i18n/client/DateTimeFormatRenderer.java
index f8357ed..6887d89 100644
--- a/bikeshed/src/com/google/gwt/input/shared/DateTimeFormatRenderer.java
+++ b/user/src/com/google/gwt/i18n/client/DateTimeFormatRenderer.java
@@ -13,17 +13,16 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.input.shared;
+package com.google.gwt.i18n.client;
 
-import com.google.gwt.i18n.client.DateTimeFormat;
-import com.google.gwt.i18n.client.TimeZone;
+import com.google.gwt.text.shared.AbstractRenderer;
 
 import java.util.Date;
 
 /**
  * Renders {@link Date} objects with a {@link DateTimeFormat}.
  */
-public class DateTimeFormatRenderer implements Renderer<Date> {
+public class DateTimeFormatRenderer extends AbstractRenderer<Date> {
   private final DateTimeFormat format;
   private final TimeZone timeZone;
 
diff --git a/bikeshed/src/com/google/gwt/input/Input.gwt.xml b/user/src/com/google/gwt/text/Text.gwt.xml
similarity index 92%
rename from bikeshed/src/com/google/gwt/input/Input.gwt.xml
rename to user/src/com/google/gwt/text/Text.gwt.xml
index 618ee19..b841ec9 100644
--- a/bikeshed/src/com/google/gwt/input/Input.gwt.xml
+++ b/user/src/com/google/gwt/text/Text.gwt.xml
@@ -14,5 +14,6 @@
   the License.
 -->
 <module>
+   <inherits name="com.google.gwt.core.Core"/>
    <source path="shared"/>
 </module>
diff --git a/user/src/com/google/gwt/text/shared/AbstractRenderer.java b/user/src/com/google/gwt/text/shared/AbstractRenderer.java
new file mode 100644
index 0000000..3c69c9e
--- /dev/null
+++ b/user/src/com/google/gwt/text/shared/AbstractRenderer.java
@@ -0,0 +1,34 @@
+/*
+ * 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.text.shared;
+
+import java.io.IOException;
+
+/**
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
+ * Abstract implementation of a renderer to make implementation of rendering
+ * simpler.
+ * 
+ * @param <T> the type to render
+ */
+public abstract class AbstractRenderer<T> implements Renderer<T> {
+  public void render(T object, Appendable appendable) throws IOException {
+    appendable.append(render(object));
+  }
+}
\ No newline at end of file
diff --git a/bikeshed/src/com/google/gwt/input/shared/Parser.java b/user/src/com/google/gwt/text/shared/Parser.java
similarity index 70%
rename from bikeshed/src/com/google/gwt/input/shared/Parser.java
rename to user/src/com/google/gwt/text/shared/Parser.java
index 91b1c46..ba25b95 100644
--- a/bikeshed/src/com/google/gwt/input/shared/Parser.java
+++ b/user/src/com/google/gwt/text/shared/Parser.java
@@ -13,13 +13,19 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.input.shared;
+package com.google.gwt.text.shared;
+
+import java.text.ParseException;
 
 /**
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
  * An object that can parse text and return a value.
  *
  * @param <T> the type to parse
  */
 public interface Parser<T> {
-  T parse(String s) throws ParseException;
+  T parse(CharSequence text) throws ParseException;
 }
diff --git a/bikeshed/src/com/google/gwt/input/shared/PassthroughParser.java b/user/src/com/google/gwt/text/shared/PassthroughParser.java
similarity index 75%
rename from bikeshed/src/com/google/gwt/input/shared/PassthroughParser.java
rename to user/src/com/google/gwt/text/shared/PassthroughParser.java
index 6464a42..5e3ecc9 100644
--- a/bikeshed/src/com/google/gwt/input/shared/PassthroughParser.java
+++ b/user/src/com/google/gwt/text/shared/PassthroughParser.java
@@ -13,10 +13,14 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.input.shared;
+package com.google.gwt.text.shared;
 
 /**
- * A no-op renderer.
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
+ * A no-op String parser.
  */
 public class PassthroughParser implements Parser<String> {
 
@@ -35,7 +39,7 @@
   protected PassthroughParser() {
   }
 
-  public String parse(String object) {
-    return object;
+  public String parse(CharSequence object) {
+    return object.toString();
   }
 }
diff --git a/bikeshed/src/com/google/gwt/input/shared/PassthroughRenderer.java b/user/src/com/google/gwt/text/shared/PassthroughRenderer.java
similarity index 75%
rename from bikeshed/src/com/google/gwt/input/shared/PassthroughRenderer.java
rename to user/src/com/google/gwt/text/shared/PassthroughRenderer.java
index 6f475e2..1385061 100644
--- a/bikeshed/src/com/google/gwt/input/shared/PassthroughRenderer.java
+++ b/user/src/com/google/gwt/text/shared/PassthroughRenderer.java
@@ -13,12 +13,17 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.input.shared;
+package com.google.gwt.text.shared;
+
 
 /**
- * A no-op renderer.
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
+ * A no-op String renderer.
  */
-public class PassthroughRenderer implements Renderer<String> {
+public class PassthroughRenderer extends AbstractRenderer<String> {
 
   private static PassthroughRenderer INSTANCE;
   
diff --git a/user/src/com/google/gwt/text/shared/Renderer.java b/user/src/com/google/gwt/text/shared/Renderer.java
new file mode 100644
index 0000000..431307a
--- /dev/null
+++ b/user/src/com/google/gwt/text/shared/Renderer.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2007 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.text.shared;
+
+import java.io.IOException;
+
+/**
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
+ * An object that can render other objects of a particular type into plain-text
+ * form. Allows decoupling that is useful for a dependency-injection
+ * architecture.
+ * 
+ * @param <T> the type to render
+ */
+public interface Renderer<T> {
+
+  /**
+   * Renders {@code object} as plain text. Should never throw any exceptions!
+   */
+  String render(T object);
+
+  /**
+   * Renders {@code object} as plain text, appended directly to {@code
+   * appendable}. Should never throw any exceptions except if {@code appendable}
+   * throws an {@code IOException}.
+   */
+  void render(T object, Appendable appendable) throws IOException;
+}
diff --git a/user/src/com/google/gwt/user/User.gwt.xml b/user/src/com/google/gwt/user/User.gwt.xml
index 606d0eb..6d0c941 100644
--- a/user/src/com/google/gwt/user/User.gwt.xml
+++ b/user/src/com/google/gwt/user/User.gwt.xml
@@ -19,6 +19,7 @@
 <!--                                                                        -->
 <module>
    <inherits name="com.google.gwt.core.Core"/>
+   <inherits name="com.google.gwt.text.Text"/>
    <inherits name="com.google.gwt.event.Event"/>
    <inherits name="com.google.gwt.animation.Animation"/>
    <inherits name="com.google.gwt.resources.Resources"/>
diff --git a/user/src/com/google/gwt/user/client/ui/HasValue.java b/user/src/com/google/gwt/user/client/ui/HasValue.java
index d8ec389..46eed6c 100644
--- a/user/src/com/google/gwt/user/client/ui/HasValue.java
+++ b/user/src/com/google/gwt/user/client/ui/HasValue.java
@@ -1,12 +1,12 @@
 /*
  * Copyright 2008 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
@@ -18,18 +18,22 @@
 import com.google.gwt.event.logical.shared.HasValueChangeHandlers;
 
 /**
- * An object that implements this interface should be a user input
- * widget, where the user and programmer can both set and get the
- * object's value. It is intended to provide a unified interface to
- * widgets with "atomic" values, like Strings and Dates.
- * 
- * @param <T> the type of value.
+ * Extends {@link TakesValue} to allow the value to be pulled back out, and to
+ * throw {@link com.google.gwt.event.logical.shared.ValueChangeEvent
+ * ValueChangeEvent} events.
+ * <p>
+ * An object that implements this interface should be a user input widget, where
+ * the user and programmer can both set and get the object's value. It is
+ * intended to provide a unified interface to widgets with "atomic" values, like
+ * Strings and Dates.
+ *
+ * @param <T> the type of value
  */
-public interface HasValue<T> extends HasValueChangeHandlers<T> {
+public interface HasValue<T> extends TakesValue<T>, HasValueChangeHandlers<T> {
 
   /**
    * Gets this object's value.
-   * 
+   *
    * @return the object's value
    */
   T getValue();
@@ -42,9 +46,9 @@
    * exceptions in response to bad values.
    * <p>
    * By convention, GWT widgets that can be cleared accept null for
-   * <code>value</code>, but it is acceptable for widgets that cannot
-   * be cleared to throw an exception for null values.
-   * 
+   * <code>value</code>, but it is acceptable for widgets that cannot be cleared
+   * to throw an exception for null values.
+   *
    * @param value the object's new value
    */
   void setValue(T value);
@@ -56,7 +60,7 @@
    * <p>
    * It is acceptable to fail assertions or throw (documented) unchecked
    * exceptions in response to bad values.
-   * 
+   *
    * @param value the object's new value
    * @param fireEvents fire events if true and value is new
    */
diff --git a/bikeshed/src/com/google/gwt/user/client/ui/TakesValue.java b/user/src/com/google/gwt/user/client/ui/TakesValue.java
similarity index 83%
rename from bikeshed/src/com/google/gwt/user/client/ui/TakesValue.java
rename to user/src/com/google/gwt/user/client/ui/TakesValue.java
index c64e17f..5a94f49 100644
--- a/bikeshed/src/com/google/gwt/user/client/ui/TakesValue.java
+++ b/user/src/com/google/gwt/user/client/ui/TakesValue.java
@@ -16,6 +16,10 @@
 package com.google.gwt.user.client.ui;
 
 /**
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
  * Implemented by objects that hold a value.
  *
  * @param <V> value type
diff --git a/user/src/com/google/gwt/user/client/ui/TextBoxBase.java b/user/src/com/google/gwt/user/client/ui/TextBoxBase.java
index 18bc451..eab38ab 100644
--- a/user/src/com/google/gwt/user/client/ui/TextBoxBase.java
+++ b/user/src/com/google/gwt/user/client/ui/TextBoxBase.java
@@ -15,24 +15,14 @@
  */
 package com.google.gwt.user.client.ui;
 
-import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.Element;
-import com.google.gwt.event.dom.client.ChangeEvent;
-import com.google.gwt.event.dom.client.ChangeHandler;
-import com.google.gwt.event.dom.client.HasChangeHandlers;
-import com.google.gwt.event.logical.shared.ValueChangeEvent;
-import com.google.gwt.event.logical.shared.ValueChangeHandler;
-import com.google.gwt.event.shared.HandlerRegistration;
-import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.ui.impl.TextBoxImpl;
+import com.google.gwt.text.shared.PassthroughParser;
+import com.google.gwt.text.shared.PassthroughRenderer;
 
 /**
- * Abstract base class for all text entry widgets.
+ * Legacy abstract base class for all text entry widgets.
  */
-@SuppressWarnings("deprecation")
-public class TextBoxBase extends FocusWidget implements SourcesChangeEvents,
-    HasChangeHandlers, HasText, HasName, HasValue<String> {
+public class TextBoxBase extends ValueBoxBase<String>  {
 
   /**
    * Text alignment constant, used in
@@ -45,7 +35,7 @@
       this.textAlignString = textAlignString;
     }
 
-    private String getTextAlignString() {
+    String getTextAlignString() {
       return textAlignString;
     }
   }
@@ -74,11 +64,6 @@
   public static final TextAlignConstant ALIGN_RIGHT = new TextAlignConstant(
       "right");
 
-  private static TextBoxImpl impl = GWT.create(TextBoxImpl.class);
-
-  private Event currentEvent;
-  private boolean valueChangeHandlerInitialized;
-
   /**
    * Creates a text box that wraps the given browser element handle. This is
    * only used by subclasses.
@@ -86,251 +71,15 @@
    * @param elem the browser element to wrap
    */
   protected TextBoxBase(Element elem) {
-    super(elem);
-  }
-
-  public HandlerRegistration addChangeHandler(ChangeHandler handler) {
-    return addDomHandler(handler, ChangeEvent.getType());
+    super(elem, PassthroughRenderer.instance(), PassthroughParser.instance());
   }
 
   /**
-   * @deprecated Use {@link #addChangeHandler} instead
+   * Overridden to return "" from an empty text box.
    */
-  @Deprecated
-  public void addChangeListener(ChangeListener listener) {
-    addChangeHandler(new ListenerWrapper.WrappedChangeListener(listener));
-  }
-
-  public HandlerRegistration addValueChangeHandler(
-      ValueChangeHandler<String> handler) {
-    // Initialization code
-    if (!valueChangeHandlerInitialized) {
-      valueChangeHandlerInitialized = true;
-      addChangeHandler(new ChangeHandler() {
-        public void onChange(ChangeEvent event) {
-          ValueChangeEvent.fire(TextBoxBase.this, getText());
-        }
-      });
-    }
-    return addHandler(handler, ValueChangeEvent.getType());
-  }
-
-  /**
-   * If a keyboard event is currently being handled on this text box, calling
-   * this method will suppress it. This allows listeners to easily filter
-   * keyboard input.
-   */
-  public void cancelKey() {
-    if (currentEvent != null) {
-      DOM.eventPreventDefault(currentEvent);
-    }
-  }
-
-  /**
-   * Gets the current position of the cursor (this also serves as the beginning
-   * of the text selection).
-   * 
-   * @return the cursor's position
-   */
-  public int getCursorPos() {
-    return impl.getCursorPos(getElement());
-  }
-
-  public String getName() {
-    return DOM.getElementProperty(getElement(), "name");
-  }
-
-  /**
-   * Gets the text currently selected within this text box.
-   * 
-   * @return the selected text, or an empty string if none is selected
-   */
-  public String getSelectedText() {
-    int start = getCursorPos();
-    if (start < 0) {
-      return "";
-    }
-    int length = getSelectionLength();
-    return getText().substring(start, start + length);
-  }
-
-  /**
-   * Gets the length of the current text selection.
-   * 
-   * @return the text selection length
-   */
-  public int getSelectionLength() {
-    return impl.getSelectionLength(getElement());
-  }
-
-  public String getText() {
-    return DOM.getElementProperty(getElement(), "value");
-  }
-
-  public String getValue() {
-    return getText();
-  }
-
-  /**
-   * Determines whether or not the widget is read-only.
-   * 
-   * @return <code>true</code> if the widget is currently read-only,
-   *         <code>false</code> if the widget is currently editable
-   */
-  public boolean isReadOnly() {
-    return DOM.getElementPropertyBoolean(getElement(), "readOnly");
-  }
-
   @Override
-  public void onBrowserEvent(Event event) {
-    int type = DOM.eventGetType(event);
-    if ((type & Event.KEYEVENTS) != 0) {
-      // Fire the keyboard event. Hang on to the current event object so that
-      // cancelKey() and setKey() can be implemented.
-      currentEvent = event;
-      // Call the superclass' onBrowserEvent as that includes the key event
-      // handlers.
-      super.onBrowserEvent(event);
-      currentEvent = null;
-    } else {
-      // Handles Focus and Click events.
-      super.onBrowserEvent(event);
-    }
-  }
-
-  /**
-   * @deprecated Use the {@link HandlerRegistration#removeHandler} method on 
-   * the object returned by {@link #addChangeHandler} instead
-   */
-  @Deprecated
-  public void removeChangeListener(ChangeListener listener) {
-    ListenerWrapper.WrappedChangeListener.remove(this, listener);
-  }
-
-  /**
-   * Selects all of the text in the box.
-   * 
-   * This will only work when the widget is attached to the document and not
-   * hidden.
-   */
-  public void selectAll() {
-    int length = getText().length();
-    if (length > 0) {
-      setSelectionRange(0, length);
-    }
-  }
-
-  /**
-   * Sets the cursor position.
-   * 
-   * This will only work when the widget is attached to the document and not
-   * hidden.
-   * 
-   * @param pos the new cursor position
-   */
-  public void setCursorPos(int pos) {
-    setSelectionRange(pos, 0);
-  }
-
-  /**
-   * If a keyboard event is currently being handled by the text box, this method
-   * replaces the unicode character or key code associated with it. This allows
-   * listeners to easily filter keyboard input.
-   * 
-   * @param key the new key value
-   * @deprecated this method only works in IE and should not have been added to
-   *             the API
-   */
-  @Deprecated
-  public void setKey(char key) {
-    if (currentEvent != null) {
-      DOM.eventSetKeyCode(currentEvent, key);
-    }
-  }
-
-  public void setName(String name) {
-    DOM.setElementProperty(getElement(), "name", name);
-  }
-
-  /**
-   * Turns read-only mode on or off.
-   * 
-   * @param readOnly if <code>true</code>, the widget becomes read-only; if
-   *          <code>false</code> the widget becomes editable
-   */
-  public void setReadOnly(boolean readOnly) {
-    DOM.setElementPropertyBoolean(getElement(), "readOnly", readOnly);
-    String readOnlyStyle = "readonly";
-    if (readOnly) {
-      addStyleDependentName(readOnlyStyle);
-    } else {
-      removeStyleDependentName(readOnlyStyle);
-    }
-  }
-
-  /**
-   * Sets the range of text to be selected.
-   * 
-   * This will only work when the widget is attached to the document and not
-   * hidden.
-   * 
-   * @param pos the position of the first character to be selected
-   * @param length the number of characters to be selected
-   */
-  public void setSelectionRange(int pos, int length) {
-    // Setting the selection range will not work for unattached elements.
-    if (!isAttached()) {
-      return;
-    }
-
-    if (length < 0) {
-      throw new IndexOutOfBoundsException(
-          "Length must be a positive integer. Length: " + length);
-    }
-    if ((pos < 0) || (length + pos > getText().length())) {
-      throw new IndexOutOfBoundsException("From Index: " + pos + "  To Index: "
-          + (pos + length) + "  Text Length: " + getText().length());
-    }
-    impl.setSelectionRange(getElement(), pos, length);
-  }
-
-  /**
-   * Sets this object's text.  Note that some browsers will manipulate the text
-   * before adding it to the widget.  For example, most browsers will strip all
-   * <code>\r</code> from the text, except IE which will add a <code>\r</code>
-   * before each <code>\n</code>.  Use {@link #getText()} to get the text
-   * directly from the widget.
-   * 
-   * @param text the object's new text
-   */
-  public void setText(String text) {
-    DOM.setElementProperty(getElement(), "value", text != null ? text : "");
-  }
-
-  /**
-   * Sets the alignment of the text in the text box.
-   * 
-   * @param align the text alignment (as specified by {@link #ALIGN_CENTER},
-   *          {@link #ALIGN_JUSTIFY}, {@link #ALIGN_LEFT}, and
-   *          {@link #ALIGN_RIGHT})
-   */
-  public void setTextAlignment(TextAlignConstant align) {
-    DOM.setStyleAttribute(getElement(), "textAlign", align.getTextAlignString());
-  }
-
-  public void setValue(String value) {
-    setValue(value, false);
-  }
-
-  public void setValue(String value, boolean fireEvents) {
-    String oldValue = getText();
-    setText(value);
-    if (fireEvents) {
-      ValueChangeEvent.fireIfNotEqual(this, oldValue, value);
-    }
-  }
-
-  protected TextBoxImpl getImpl() {
-    return impl;
+  public String getValue() {
+    String raw = super.getValue();
+    return raw == null ? "" : raw;
   }
 }
diff --git a/bikeshed/src/com/google/gwt/user/client/ui/ValueBox.java b/user/src/com/google/gwt/user/client/ui/ValueBox.java
similarity index 78%
rename from bikeshed/src/com/google/gwt/user/client/ui/ValueBox.java
rename to user/src/com/google/gwt/user/client/ui/ValueBox.java
index af47e7d..09afe21 100644
--- a/bikeshed/src/com/google/gwt/user/client/ui/ValueBox.java
+++ b/user/src/com/google/gwt/user/client/ui/ValueBox.java
@@ -20,34 +20,22 @@
 import com.google.gwt.dom.client.InputElement;
 import com.google.gwt.i18n.client.BidiUtils;
 import com.google.gwt.i18n.client.HasDirection;
-import com.google.gwt.input.shared.Parser;
-import com.google.gwt.input.shared.Renderer;
+import com.google.gwt.text.shared.Parser;
+import com.google.gwt.text.shared.Renderer;
 
 /**
- * A standard single-line text box.
- * 
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
  * <p>
- * <img class='gallery' src='doc-files/TextBox.png'/>
- * </p>
- * 
- * <h3>CSS Style Rules</h3>
- * <ul class='css'>
- * <li>.gwt-TextBox { primary style }</li>
- * <li>.gwt-TextBox-readonly { dependent style set when the text box is
- * read-only }</li>
- * </ul>
- * 
- * <p>
- * <h3>Example</h3>
- * {@example com.google.gwt.examples.TextBoxExample}
- * </p>
+ * A text box able to parse its displayed value.
  * 
  * @param <T> the value type
  */
 public class ValueBox<T> extends ValueBoxBase<T> implements HasDirection {
 
   /**
-   * Creates a TextBox widget that wraps an existing &lt;input type='text'&gt;
+   * Creates a ValueBox widget that wraps an existing &lt;input type='text'&gt;
    * element.
    * 
    * This element must already be attached to the document. If the element is
@@ -86,7 +74,7 @@
   }
 
   /**
-   * Gets the maximum allowable length of the text box.
+   * Gets the maximum allowable length.
    * 
    * @return the maximum length, in characters
    */
@@ -95,7 +83,7 @@
   }
 
   /**
-   * Gets the number of visible characters in the text box.
+   * Gets the number of visible characters.
    * 
    * @return the number of visible characters
    */
@@ -108,7 +96,7 @@
   }
 
   /**
-   * Sets the maximum allowable length of the text box.
+   * Sets the maximum allowable length.
    * 
    * @param length the maximum length, in characters
    */
@@ -117,7 +105,7 @@
   }
 
   /**
-   * Sets the number of visible characters in the text box.
+   * Sets the number of visible characters.
    * 
    * @param length the number of visible characters
    */
diff --git a/bikeshed/src/com/google/gwt/user/client/ui/ValueBoxBase.java b/user/src/com/google/gwt/user/client/ui/ValueBoxBase.java
similarity index 95%
rename from bikeshed/src/com/google/gwt/user/client/ui/ValueBoxBase.java
rename to user/src/com/google/gwt/user/client/ui/ValueBoxBase.java
index 4f59bf1..10e7199 100644
--- a/bikeshed/src/com/google/gwt/user/client/ui/ValueBoxBase.java
+++ b/user/src/com/google/gwt/user/client/ui/ValueBoxBase.java
@@ -23,15 +23,20 @@
 import com.google.gwt.event.logical.shared.ValueChangeEvent;
 import com.google.gwt.event.logical.shared.ValueChangeHandler;
 import com.google.gwt.event.shared.HandlerRegistration;
-import com.google.gwt.input.shared.ParseException;
-import com.google.gwt.input.shared.Parser;
-import com.google.gwt.input.shared.Renderer;
+import com.google.gwt.text.shared.Parser;
+import com.google.gwt.text.shared.Renderer;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.TextBoxBase.TextAlignConstant;
 import com.google.gwt.user.client.ui.impl.TextBoxImpl;
 
+import java.text.ParseException;
+
 /**
+ * <span style="color:red">Experimental API: This class is still under rapid
+ * development, and is very likely to be deleted. Use it at your own risk.
+ * </span>
+ * <p>
  * Abstract base class for all text entry widgets.
  * 
  * @param <T> the value type
@@ -49,7 +54,7 @@
   private boolean valueChangeHandlerInitialized;
 
   /**
-   * Creates a text box that wraps the given browser element handle. This is
+   * Creates a value box that wraps the given browser element handle. This is
    * only used by subclasses.
    * 
    * @param elem the browser element to wrap
@@ -151,7 +156,7 @@
   /**
    * Return the parsed value, or null if the field is empty.
    * 
-   * @throws ParseException if the value cannot be parsed
+   * @throws ParseFailedException if the value cannot be parsed
    */
   public T getValueOrThrow() throws ParseException {
     String text = getText().trim();
diff --git a/bikeshed/src/com/google/gwt/user/client/ui/IsWidget.java b/user/super/com/google/gwt/emul/java/text/ParseException.java
similarity index 64%
copy from bikeshed/src/com/google/gwt/user/client/ui/IsWidget.java
copy to user/super/com/google/gwt/emul/java/text/ParseException.java
index 14718bc..25b7f52 100644
--- a/bikeshed/src/com/google/gwt/user/client/ui/IsWidget.java
+++ b/user/super/com/google/gwt/emul/java/text/ParseException.java
@@ -13,13 +13,23 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-package com.google.gwt.user.client.ui;
+
+package java.text;
 
 /**
- * Extended by View interfaces that are likely to be implemented by Widgets.
- * Provides access to that widget, if it exists, without compromising the
- * ability to provide mock view instance in JRE unit tests.
+ * Emulation of {@code java.text.ParseException}.
  */
-public interface IsWidget {
-  Widget asWidget();
+public class ParseException extends Exception {
+
+  private final int errorOffset;
+
+  public ParseException(String s, int errorOffset) {
+    super(s);
+    this.errorOffset = errorOffset;
+  }
+
+  public int getErrorOffset() {
+    return errorOffset;
+  }
 }
+
