diff --git a/user/src/com/google/gwt/uibinder/elementparsers/IsRenderableInterpreter.java b/user/src/com/google/gwt/uibinder/elementparsers/IsRenderableInterpreter.java
index 7758b03..3a0b328 100644
--- a/user/src/com/google/gwt/uibinder/elementparsers/IsRenderableInterpreter.java
+++ b/user/src/com/google/gwt/uibinder/elementparsers/IsRenderableInterpreter.java
@@ -22,9 +22,9 @@
 import com.google.gwt.uibinder.rebind.XMLElement;
 
 /**
- * Used by {@link AttachableHTMLPanelParser} to interpret renderable elements.
+ * Used by {@link RenderablePanelParser} to interpret renderable elements.
  * Declares the appropriate {@link IsRenderable}, and returns the correct HTML
- * to be inlined in the AttachableHTMLPanel.
+ * to be inlined in the {@link RenderablePanel}.
  */
 class IsRenderableInterpreter implements XMLElement.Interpreter<String> {
 
diff --git a/user/src/com/google/gwt/uibinder/elementparsers/AttachableHTMLPanelParser.java b/user/src/com/google/gwt/uibinder/elementparsers/RenderablePanelParser.java
similarity index 90%
rename from user/src/com/google/gwt/uibinder/elementparsers/AttachableHTMLPanelParser.java
rename to user/src/com/google/gwt/uibinder/elementparsers/RenderablePanelParser.java
index 4a640d8..820e82b 100644
--- a/user/src/com/google/gwt/uibinder/elementparsers/AttachableHTMLPanelParser.java
+++ b/user/src/com/google/gwt/uibinder/elementparsers/RenderablePanelParser.java
@@ -24,9 +24,9 @@
 import com.google.gwt.uibinder.rebind.messages.PlaceholderInterpreter;
 
 /**
- * Parses {@link com.google.gwt.user.client.ui.AttachableHTMLPanel} widgets.
+ * Parses {@link com.google.gwt.user.client.ui.RenderablePanel} widgets.
  */
-public class AttachableHTMLPanelParser implements ElementParser {
+public class RenderablePanelParser implements ElementParser {
 
   public void parse(XMLElement elem, String fieldName, JClassType type,
       final UiBinderWriter writer) throws UnableToCompleteException {
@@ -64,17 +64,17 @@
     writer.endAttachedSection();
 
     /*
-     * AttachableHTMLPanel has no no-arg ctor, so we have to generate our own, using the
+     * RenderablePanel has no no-arg ctor, so we have to generate our own, using the
      * element's innerHTML and perhaps its tag attribute. Do this in a way that
      * will not break subclasses if they happen to have the same constructor
      * signature (by passing in type).
      */
     String customTag = elem.consumeStringAttribute("tag", null);
 
-    // TODO(rdcastro): Add support for custom tags in AttachableHTMLPanel.
+    // TODO(rdcastro): Add support for custom tags in RenderablePanel.
     if (customTag != null) {
       writer.getLogger().die(
-          "AttachableHTMLPanel does not support custom root elements yet.");
+          "RenderablePanel does not support custom root elements yet.");
     }
 
     writer.setFieldInitializerAsConstructor(fieldName, type, writer.declareTemplateCall(html));
diff --git a/user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java b/user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java
index 8eb5814..507305c 100644
--- a/user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java
+++ b/user/src/com/google/gwt/uibinder/rebind/AbstractFieldWriter.java
@@ -23,7 +23,7 @@
 import com.google.gwt.core.ext.typeinfo.TypeOracle;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.uibinder.rebind.model.OwnerField;
-import com.google.gwt.user.client.ui.AttachableHTMLPanel;
+import com.google.gwt.user.client.ui.RenderablePanel;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -190,11 +190,11 @@
       boolean useLazyWidgetBuilders)
       throws UnableToCompleteException {
 
-    JClassType attachableHTMLPanelType = typeOracle.findType(
-        AttachableHTMLPanel.class.getName());
+    JClassType renderablePanelType = typeOracle.findType(
+        RenderablePanel.class.getName());
     boolean outputAttachDetachCallbacks = useLazyWidgetBuilders
         && getAssignableType() != null
-        && getAssignableType().isAssignableTo(attachableHTMLPanelType);
+        && getAssignableType().isAssignableTo(renderablePanelType);
 
     // Check initializer.
     if (initializer == null) {
@@ -250,7 +250,7 @@
       w.newline();
       w.write("// Attach section.");
       if (outputAttachDetachCallbacks) {
-        // TODO(rdcastro): This is too coupled with AttachableHTMLPanel.
+        // TODO(rdcastro): This is too coupled with RenderablePanel.
         // Make this nicer.
         w.write("%s.wrapInitializationCallback = ", getName());
         w.indent();
diff --git a/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java b/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java
index d572241..1891ce8 100644
--- a/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java
+++ b/user/src/com/google/gwt/uibinder/rebind/UiBinderWriter.java
@@ -1187,7 +1187,7 @@
         FieldWriter cssField = fieldManager.require(fieldName);
         cssField.addStatement("%s.ensureInjected();", fieldName);
       }
-      writeBinderForAttachableStrategy(niceWriter, rootField);
+      writeBinderForRenderableStrategy(niceWriter, rootField);
     } else {
       writeBinder(niceWriter, rootField);
     }
@@ -1253,7 +1253,7 @@
     addWidgetParser("NumberLabel");
     if (useLazyWidgetBuilders) {
       addWidgetParser("LazyPanel");
-      addWidgetParser("AttachableHTMLPanel");
+      addWidgetParser("RenderablePanel");
     }
   }
 
@@ -1319,10 +1319,10 @@
   }
 
   /**
-   * Writes a different optimized UiBinder's source for the attachable
+   * Writes a different optimized UiBinder's source for the renderable
    * strategy.
    */
-  private void writeBinderForAttachableStrategy(
+  private void writeBinderForRenderableStrategy(
       IndentedWriter w, String rootField) throws UnableToCompleteException {
     writePackage(w);
 
diff --git a/user/src/com/google/gwt/user/client/ui/RenderableComposite.java b/user/src/com/google/gwt/user/client/ui/RenderableComposite.java
index e9a30f3..cfb36a2 100644
--- a/user/src/com/google/gwt/user/client/ui/RenderableComposite.java
+++ b/user/src/com/google/gwt/user/client/ui/RenderableComposite.java
@@ -32,8 +32,6 @@
  * itself, but is still under active development.
  * The only reason why this isn't a subclass of {@link Composite} is to avoid
  * messing up it's API, since {@link Composite} is very often subclassed.
- *
- * TODO(rdcastro): Rename this RenderableComposite.
  */
 public abstract class RenderableComposite extends Widget implements IsRenderable {
 
@@ -46,7 +44,7 @@
 
   private Widget widget;
 
-  private IsRenderable attachable;
+  private IsRenderable renderable;
 
   private Element elementToWrap;
 
@@ -81,9 +79,9 @@
 
   @Override
   public void performDetachedInitialization() {
-    if (attachable != null) {
+    if (renderable != null) {
       assert (initFinished == false);
-      attachable.performDetachedInitialization();
+      renderable.performDetachedInitialization();
       initWidgetInternal();
     } else {
       elementToWrap.getParentNode().replaceChild(widget.getElement(), elementToWrap);
@@ -92,8 +90,8 @@
 
   @Override
   public SafeHtml render(String id) {
-    if (attachable != null) {
-      return attachable.render(id);
+    if (renderable != null) {
+      return renderable.render(id);
     } else {
       SafeHtmlBuilder builder = new SafeHtmlBuilder();
       render(id, builder);
@@ -103,8 +101,8 @@
 
   @Override
   public void render(String id, SafeHtmlBuilder builder) {
-    if (attachable != null) {
-      attachable.render(id, builder);
+    if (renderable != null) {
+      renderable.render(id, builder);
     } else {
       builder.append(TEMPLATE.renderWithId(id));
     }
@@ -120,9 +118,9 @@
 
   @Override
   public void wrapElement(Element element) {
-    if (attachable != null) {
+    if (renderable != null) {
       assert (initFinished == false);
-      attachable.wrapElement(element);
+      renderable.wrapElement(element);
     } else {
       this.elementToWrap = element;
     }
@@ -161,7 +159,7 @@
     if (widget instanceof IsRenderable) {
       // In case the Widget being wrapped is an IsRenderable, we delay finishing
       // the initialization until the performDetachedInitialization() is called.
-      this.attachable = (IsRenderable) widget;
+      this.renderable = (IsRenderable) widget;
       return;
     }
 
diff --git a/user/src/com/google/gwt/user/client/ui/AttachableHTMLPanel.java b/user/src/com/google/gwt/user/client/ui/RenderablePanel.java
similarity index 92%
rename from user/src/com/google/gwt/user/client/ui/AttachableHTMLPanel.java
rename to user/src/com/google/gwt/user/client/ui/RenderablePanel.java
index a79c64c..fbd7a6a 100644
--- a/user/src/com/google/gwt/user/client/ui/AttachableHTMLPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/RenderablePanel.java
@@ -26,15 +26,13 @@
 /**
  * EXPERIMENTAL and subject to change. Do not use this in production code.
  * <p>
- * An {@link Attachable} version of {@link HTMLPanel}. This class is a stepping
- * in our transition to the Attachable strategy. Eventually this functionality
+ * An {@link IsRenderable} version of {@link HTMLPanel}. This class is a stepping
+ * in our transition to the Renderable strategy. Eventually this functionality
  * should be merged into {@link HTMLPanel}.
  * The only reason this class doesn't extend {@link HTMLPanel} is because it
  * doesn't provide any way to build the panel lazily (which is needed here).
- *
- * TODO(rdcastro): Rename this RenderablePanel.
  */
-public class AttachableHTMLPanel extends ComplexPanel implements IsRenderable {
+public class RenderablePanel extends ComplexPanel implements IsRenderable {
 
   private static Element hiddenDiv;
 
@@ -76,7 +74,7 @@
    *
    * @param html the panel's HTML
    */
-  public AttachableHTMLPanel(String html) {
+  public RenderablePanel(String html) {
     this(new SafeHtmlBuilder().appendHtmlConstant(html).toSafeHtml());
   }
 
@@ -87,7 +85,7 @@
    *
    * @param safeHtml the html to set.
    */
-  public AttachableHTMLPanel(SafeHtml safeHtml) {
+  public RenderablePanel(SafeHtml safeHtml) {
     this.html = safeHtml;
   }
 
@@ -159,15 +157,15 @@
    * Adopts the given, but doesn't change anything about its DOM element.
    * Should only be used for widgets with elements that are children of this
    * panel's element.
-   * No-op if called with an Attachable that isn't also IsWidget,
+   * No-op if called with an {@link IsRenderable} that isn't also IsWidget,
    * but safe to call with such as a convenience.
    */
-  public void logicalAdd(IsRenderable attachable) {
-    if (!(attachable instanceof IsWidget)) {
+  public void logicalAdd(IsRenderable renderable) {
+    if (!(renderable instanceof IsWidget)) {
       // Nothing to do if not a Widget.
       return;
     }
-    Widget widget = ((IsWidget) attachable).asWidget();
+    Widget widget = ((IsWidget) renderable).asWidget();
     getChildren().add(widget);
     adopt(widget);
   }
