diff --git a/bikeshed/.classpath b/bikeshed/.classpath
index bf439c1..6386366 100644
--- a/bikeshed/.classpath
+++ b/bikeshed/.classpath
@@ -6,5 +6,6 @@
 	<classpathentry kind="con" path="com.google.gwt.eclipse.core.GWT_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="lib" path="war/WEB-INF/lib/gwt-servlet.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
 	<classpathentry kind="output" path="war/WEB-INF/classes"/>
 </classpath>
diff --git a/bikeshed/src/com/google/gwt/bikeshed/cells/client/CheckboxCell.java b/bikeshed/src/com/google/gwt/bikeshed/cells/client/CheckboxCell.java
index a085f46..fe98524 100644
--- a/bikeshed/src/com/google/gwt/bikeshed/cells/client/CheckboxCell.java
+++ b/bikeshed/src/com/google/gwt/bikeshed/cells/client/CheckboxCell.java
@@ -40,7 +40,7 @@
   @Override
   public void render(Boolean data, StringBuilder sb) {
     sb.append("<input type=\"checkbox\"");
-    if (data == Boolean.TRUE) {
+    if (data == true) {
       sb.append(" checked");
     }
     sb.append("/>");
diff --git a/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockSample.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockSample.java
index c2b6210..d74790a 100644
--- a/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockSample.java
+++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/client/StockSample.java
@@ -252,7 +252,7 @@
     
     // Create the transactions tree.
     transactionTree2 = new SideBySideTreeView(new TransactionTreeViewModel(favoritesListModel,
-        transactionListListModelsByTicker), null);
+        transactionListListModelsByTicker), null, 200, 200);
 
     Columns.favoriteColumn.setFieldUpdater(new FieldUpdater<StockQuote, Boolean>() {
       public void update(StockQuote object, Boolean value) {
diff --git a/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/server/StockServiceImpl.java b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/server/StockServiceImpl.java
index 332f0ed..8ee31cc 100644
--- a/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/server/StockServiceImpl.java
+++ b/bikeshed/src/com/google/gwt/bikeshed/sample/stocks/server/StockServiceImpl.java
@@ -51,7 +51,7 @@
   /**
    * The result of a query to the remote service that provides stock quotes.
    */
-  private class Result {
+  private static class Result {
     int numRows;
     StockQuoteList quotes;
 
@@ -91,7 +91,7 @@
       throws IllegalArgumentException {
 
     String query = request.getSearchQuery();
-    if (query == null | query.length() == 0) {
+    if (query == null || query.length() == 0) {
       query = ".*";
     }
     Range searchRange = request.getSearchRange();
diff --git a/bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/TreeSample.java b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/TreeSample.java
index 3063d4b..26c93be 100644
--- a/bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/TreeSample.java
+++ b/bikeshed/src/com/google/gwt/bikeshed/sample/tree/client/TreeSample.java
@@ -33,7 +33,7 @@
 
     RootPanel.get().add(new HTML("<hr>"));
     
-    SideBySideTreeView sstree = new SideBySideTreeView(new MyTreeViewModel(), "...");
+    SideBySideTreeView sstree = new SideBySideTreeView(new MyTreeViewModel(), "...", 100, 200);
     RootPanel.get().add(sstree);
   }
 }
diff --git a/bikeshed/src/com/google/gwt/bikeshed/tree/client/SideBySideTreeNodeView.java b/bikeshed/src/com/google/gwt/bikeshed/tree/client/SideBySideTreeNodeView.java
index 8ac9dd9..0e24b53 100644
--- a/bikeshed/src/com/google/gwt/bikeshed/tree/client/SideBySideTreeNodeView.java
+++ b/bikeshed/src/com/google/gwt/bikeshed/tree/client/SideBySideTreeNodeView.java
@@ -15,8 +15,6 @@
  */
 package com.google.gwt.bikeshed.tree.client;
 
-import static com.google.gwt.bikeshed.tree.client.SideBySideTreeView.COLUMN_WIDTH;
-
 import com.google.gwt.bikeshed.cells.client.Cell;
 import com.google.gwt.bikeshed.tree.client.TreeViewModel.NodeInfo;
 import com.google.gwt.dom.client.Document;
@@ -29,11 +27,15 @@
 
 /**
  * A tree view that displays each level in a side-by-side manner.
- * 
+ *
  * @param <T> the type that this {@link TreeNodeView} contains
  */
 public class SideBySideTreeNodeView<T> extends TreeNodeView<T> {
 
+  private int columnHeight;
+
+  private int columnWidth;
+
   private final int imageLeft;
 
   private int level;
@@ -42,7 +44,7 @@
 
   /**
    * Construct a {@link TreeNodeView}.
-   * 
+   *
    * @param tree the parent {@link TreeView}
    * @param parent the parent {@link TreeNodeView}
    * @param parentNodeInfo the {@link NodeInfo} of the parent
@@ -50,33 +52,38 @@
    * @param value the value of this node
    */
   SideBySideTreeNodeView(final TreeView tree, final SideBySideTreeNodeView<?> parent,
-      NodeInfo<T> parentNodeInfo, Element elem, T value, int level, String path) {
+      NodeInfo<T> parentNodeInfo, Element elem, T value, int level, String path,
+      int columnWidth, int columnHeight) {
     super(tree, parent, parentNodeInfo, value);
-    this.imageLeft = 85 - tree.getImageWidth();
+    this.imageLeft = columnWidth - 16 - tree.getImageWidth();
     this.level = level;
     this.path = path;
-    
+    this.columnWidth = columnWidth;
+    this.columnHeight = columnHeight;
+
     setElement(elem);
   }
 
   @Override
   protected <C> TreeNodeView<C> createTreeNodeView(NodeInfo<C> nodeInfo,
       Element childElem, C childValue, int idx) {
-    return new SideBySideTreeNodeView<C>(tree,
-        SideBySideTreeNodeView.this, nodeInfo, childElem, childValue,
-        level + 1, path + "-" + idx);
+    return new SideBySideTreeNodeView<C>(getTree(), this, nodeInfo, childElem,
+        childValue, level + 1, path + "-" + idx, columnWidth, columnHeight);
   }
-  
+
   @Override
-  protected <C> void emitHtml(StringBuilder sb, NodeInfo<C> nodeInfo,
-      List<C> childValues, List<TreeNodeView<?>> savedViews) {
+  protected <C> void emitHtml(StringBuilder sb, List<C> childValues,
+      List<TreeNodeView<?>> savedViews, Cell<C> cell) {
+    TreeView tree = getTree();
     TreeViewModel model = tree.getTreeViewModel();
     int imageWidth = tree.getImageWidth();
-    Cell<C> theCell = nodeInfo.getCell();
 
     int idx = 0;
     for (C childValue : childValues) {
-      sb.append("<div id=\"" + path + "-" + idx + "\" style=\"position:relative;padding-right:");
+      sb.append("<div id=\"" + path + "-" + idx +
+          "\" class=\"gwt-sstree-unselectedItem gwt-sstree-" +
+          ((idx % 2) == 0 ? "even" : "odd") + "Row\"" +
+          " style=\"position:relative;padding-right:");
       sb.append(imageWidth);
       sb.append("px;\">");
       if (savedViews.get(idx) != null) {
@@ -87,31 +94,32 @@
         sb.append(tree.getClosedImageHtml(imageLeft));
       }
       sb.append("<div class=\"gwt-sstree-cell\">");
-      theCell.render(childValue, sb);
+      cell.render(childValue, sb);
       sb.append("</div></div>");
-      
+
       idx++;
     }
   }
 
   /**
    * Ensure that the child container exists and return it.
-   * 
+   *
    * @return the child container
    */
   @Override
   protected Element ensureChildContainer() {
-    if (childContainer == null) {
+    if (getChildContainer() == null) {
       // Create the container within the top-level widget element.
       Element container = createContainer(level);
       container.setInnerHTML("");
       Element animFrame = container.appendChild(
           Document.get().createDivElement());
       animFrame.getStyle().setPosition(Position.RELATIVE);
-      childContainer = animFrame.appendChild(Document.get().createDivElement());
+      animFrame.setId("animFrame");
+      setChildContainer(animFrame.appendChild(Document.get().createDivElement()));
     }
 
-    return childContainer;
+    return getChildContainer();
   }
 
   /**
@@ -121,7 +129,12 @@
   protected Element getCellParent() {
     return getElement().getChild(1).cast();
   }
-  
+
+  @Override
+  protected Element getContainer() {
+    return getTree().getElement().getChild(level).cast();
+  }
+
   /**
    * @return the image element
    */
@@ -134,7 +147,7 @@
   protected int getImageLeft() {
     return imageLeft;
   }
-  
+
   @Override
   protected void postClose() {
     destroyContainer(level);
@@ -151,12 +164,14 @@
 
         TreeNodeView<?> sibling = parentNode.getChildTreeNodeView(i);
         if (sibling == this) {
-          container.setClassName("gwt-SideBySideTree-selectedItem");
+          container.setClassName("gwt-sstree-selectedItem");
         } else {
           if (sibling.getState()) {
             sibling.setState(false);
-            container.setClassName("gwt-SideBySideTree-unselectedItem");
           }
+
+          container.setClassName("gwt-sstree-unselectedItem " +
+              (((i % 2) == 0) ? "gwt-sstree-evenRow" : "gwt-sstree-oddRow"));
         }
       }
     }
@@ -167,22 +182,24 @@
    */
   private Element createContainer(int level) {
     // Resize the root element
-    Element rootElement = tree.getElement();
-    rootElement.getStyle().setWidth((level + 1) * COLUMN_WIDTH, Unit.PX);
-    
+    Element rootElement = getTree().getElement();
+    rootElement.getStyle().setWidth((level + 1) * columnWidth, Unit.PX);
+
     // Create children of the root container as needed.
     int childCount = rootElement.getChildCount();
     while (childCount <= level) {
       Element div = rootElement.appendChild(Document.get().createDivElement());
-      div.setClassName("gwt-SideBySideTreeColumn");
+      div.setClassName("gwt-sstree-column");
       Style style = div.getStyle();
       style.setPosition(Position.ABSOLUTE);
       style.setTop(0, Unit.PX);
-      style.setLeft(level * COLUMN_WIDTH, Unit.PX);
-      
+      style.setLeft(level * columnWidth, Unit.PX);
+      style.setWidth(columnWidth, Unit.PX);
+      style.setHeight(columnHeight, Unit.PX);
+
       childCount++;
     }
-    
+
     return rootElement.getChild(level).cast();
   }
 
@@ -192,16 +209,16 @@
    */
   private void destroyContainer(int level) {
     // Resize the root element
-    Element rootElement = tree.getElement();
-    rootElement.getStyle().setWidth((level + 1) * COLUMN_WIDTH, Unit.PX);
-    
+    Element rootElement = getTree().getElement();
+    rootElement.getStyle().setWidth((level + 1) * columnWidth, Unit.PX);
+
     // Create children of the root container as needed.
     int childCount = rootElement.getChildCount();
     while (childCount > level) {
       rootElement.removeChild(rootElement.getLastChild());
       childCount--;
     }
-    
-    childContainer = null;
+
+    setChildContainer(null);
   }
 }
diff --git a/bikeshed/src/com/google/gwt/bikeshed/tree/client/SideBySideTreeView.java b/bikeshed/src/com/google/gwt/bikeshed/tree/client/SideBySideTreeView.java
index cab7067..f8cd50d 100644
--- a/bikeshed/src/com/google/gwt/bikeshed/tree/client/SideBySideTreeView.java
+++ b/bikeshed/src/com/google/gwt/bikeshed/tree/client/SideBySideTreeView.java
@@ -27,27 +27,33 @@
  * A view of a tree.
  */
 public class SideBySideTreeView extends TreeView {
-  
-  protected static final int COLUMN_HEIGHT = 200;
 
-  protected static final int COLUMN_WIDTH = 100;
+  protected int columnHeight = 200;
+
+  protected int columnWidth = 100;
 
   /**
    * Construct a new {@link TreeView}.
-   * 
+   *
    * @param <T> the type of data in the root node
    * @param viewModel the {@link TreeViewModel} that backs the tree
    * @param rootValue the hidden root value of the tree
+   * @param columnWidth
+   * @param columnHeight
    */
-  public <T> SideBySideTreeView(TreeViewModel viewModel, T rootValue) {
+  public <T> SideBySideTreeView(TreeViewModel viewModel, T rootValue,
+      int columnWidth, int columnHeight) {
     super(viewModel);
-    
+
+    this.columnWidth = columnWidth;
+    this.columnHeight = columnHeight;
+
     Element rootElement = Document.get().createDivElement();
-    rootElement.setClassName("gwt-SideBySideTreeView");
+    rootElement.setClassName("gwt-sstree");
     Style style = rootElement.getStyle();
     style.setPosition(Position.RELATIVE);
-    style.setWidth(COLUMN_WIDTH, Unit.PX);
-    style.setHeight(COLUMN_HEIGHT, Unit.PX);
+    style.setWidth(columnWidth, Unit.PX);
+    style.setHeight(columnHeight, Unit.PX);
     setElement(rootElement);
 
     // Add event handlers.
@@ -55,7 +61,7 @@
 
     // Associate a view with the item.
     TreeNodeView<T> root = new SideBySideTreeNodeView<T>(this, null, null,
-        rootElement, rootValue, 0, "gwt-sstree");
+        rootElement, rootValue, 0, "gwt-sstree", columnWidth, columnHeight);
     setRootNode(root);
     root.setState(true);
   }
@@ -86,7 +92,7 @@
             id = id.substring(11);
             String[] path = id.split("-");
 
-            TreeNodeView<?> nodeView = rootNode;
+            TreeNodeView<?> nodeView = getRootNode();
             for (String s : path) {
               nodeView = nodeView.getChildTreeNodeView(Integer.parseInt(s));
             }
diff --git a/bikeshed/src/com/google/gwt/bikeshed/tree/client/StandardTreeNodeView.java b/bikeshed/src/com/google/gwt/bikeshed/tree/client/StandardTreeNodeView.java
index fcdb562..f7a53c4 100644
--- a/bikeshed/src/com/google/gwt/bikeshed/tree/client/StandardTreeNodeView.java
+++ b/bikeshed/src/com/google/gwt/bikeshed/tree/client/StandardTreeNodeView.java
@@ -26,14 +26,14 @@
 
 /**
  * A view of a tree node.
- * 
+ *
  * @param <T> the type that this {@link TreeNodeView} contains
  */
 public class StandardTreeNodeView<T> extends TreeNodeView<T> {
 
   /**
    * Construct a {@link TreeNodeView}.
-   * 
+   *
    * @param tree the parent {@link TreeView}
    * @param parent the parent {@link TreeNodeView}
    * @param parentNodeInfo the {@link NodeInfo} of the parent
@@ -46,26 +46,26 @@
     super(tree, parent, parentNodeInfo, value);
     setElement(elem);
   }
-  
+
   @Override
   protected void postClose() {
-    tree.maybeAnimateTreeNode(this);
+    getTree().maybeAnimateTreeNode(this);
   }
 
   @Override
   protected <C> TreeNodeView<C> createTreeNodeView(NodeInfo<C> nodeInfo,
       Element childElem, C childValue, int idx) {
-    return new StandardTreeNodeView<C>(tree, this, nodeInfo, childElem,
+    return new StandardTreeNodeView<C>(getTree(), this, nodeInfo, childElem,
         childValue);
   }
 
   @Override
-  protected <C> void emitHtml(StringBuilder sb, NodeInfo<C> nodeInfo,
-      List<C> childValues, List<TreeNodeView<?>> savedViews) {
+  protected <C> void emitHtml(StringBuilder sb, List<C> childValues,
+      List<TreeNodeView<?>> savedViews, Cell<C> cell) {
+    TreeView tree = getTree();
     TreeViewModel model = tree.getTreeViewModel();
     int imageWidth = tree.getImageWidth();
-    Cell<C> theCell = nodeInfo.getCell();
-    
+
     int idx = 0;
     for (C childValue : childValues) {
       sb.append("<div style=\"position:relative;padding-left:");
@@ -79,28 +79,28 @@
         sb.append(tree.getClosedImageHtml(0));
       }
       sb.append("<div>");
-      theCell.render(childValue, sb);
-      sb.append("</div>");
-      sb.append("</div>");
+      cell.render(childValue, sb);
+      sb.append("</div></div>");
     }
   }
 
   /**
    * Ensure that the child container exists and return it.
-   * 
+   *
    * @return the child container
    */
   @Override
   protected Element ensureChildContainer() {
-    if (childContainer == null) {
+    if (getChildContainer() == null) {
       // If this is a root node or the element does not exist, create it.
       Element animFrame = getElement().appendChild(
           Document.get().createDivElement());
       animFrame.getStyle().setPosition(Position.RELATIVE);
       animFrame.getStyle().setOverflow(Overflow.HIDDEN);
-      childContainer = animFrame.appendChild(Document.get().createDivElement());
+      animFrame.setId("animFrame");
+      setChildContainer(animFrame.appendChild(Document.get().createDivElement()));
     }
-    return childContainer;
+    return getChildContainer();
   }
 
   /**
@@ -110,7 +110,7 @@
   protected Element getCellParent() {
     return getElement().getChild(1).cast();
   }
-  
+
   /**
    * @return the image element
    */
diff --git a/bikeshed/src/com/google/gwt/bikeshed/tree/client/StandardTreeView.java b/bikeshed/src/com/google/gwt/bikeshed/tree/client/StandardTreeView.java
index 241cfcb..2a3665b 100644
--- a/bikeshed/src/com/google/gwt/bikeshed/tree/client/StandardTreeView.java
+++ b/bikeshed/src/com/google/gwt/bikeshed/tree/client/StandardTreeView.java
@@ -39,7 +39,7 @@
 
     /**
      * Create a new {@link RevealAnimation}.
-     * 
+     *
      * @return the new animation
      */
     public static RevealAnimation create() {
@@ -72,7 +72,7 @@
 
     /**
      * Animate a {@link TreeNodeView} into its new state.
-     * 
+     *
      * @param node the {@link TreeNodeView} to animate
      * @param isAnimationEnabled true to animate
      */
@@ -151,7 +151,7 @@
   public static class SlideAnimation extends RevealAnimation {
     /**
      * Create a new {@link RevealAnimation}.
-     * 
+     *
      * @return the new animation
      */
     public static SlideAnimation create() {
@@ -198,7 +198,7 @@
 
   /**
    * Construct a new {@link TreeView}.
-   * 
+   *
    * @param <T> the type of data in the root node
    * @param viewModel the {@link TreeViewModel} that backs the tree
    * @param rootValue the hidden root value of the tree
@@ -209,8 +209,8 @@
     setStyleName("gwt-TreeView");
 
     // We use one animation for the entire tree.
-    animation = SlideAnimation.create();
-    
+    setAnimation(SlideAnimation.create());
+
     // Add event handlers.
     sinkEvents(Event.ONCLICK | Event.ONMOUSEDOWN | Event.ONMOUSEUP);
 
@@ -230,7 +230,7 @@
         Element currentTarget = event.getCurrentEventTarget().cast();
         if (currentTarget == getElement()) {
           Element target = event.getEventTarget().cast();
-          elementClicked(target, event, rootNode);
+          elementClicked(target, event, getRootNode());
         }
         break;
     }
@@ -268,13 +268,13 @@
 
     return false;
   }
-  
+
   private TreeNodeView<?> findItemByChain(ArrayList<Element> chain, int idx,
       TreeNodeView<?> parent) {
     if (idx == chain.size()) {
       return parent;
     }
-  
+
     Element hCurElem = chain.get(idx);
     for (int i = 0, n = parent.getChildCount(); i < n; ++i) {
       TreeNodeView<?> child = parent.getChildTreeNodeView(i);
@@ -286,7 +286,7 @@
         return retItem;
       }
     }
-  
+
     return findItemByChain(chain, idx + 1, parent);
   }
 }
diff --git a/bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeNodeView.java b/bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeNodeView.java
index 1ba192c..87211c6 100644
--- a/bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeNodeView.java
+++ b/bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeNodeView.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.bikeshed.tree.client;
 
+import com.google.gwt.bikeshed.cells.client.Cell;
 import com.google.gwt.bikeshed.list.shared.ListEvent;
 import com.google.gwt.bikeshed.list.shared.ListHandler;
 import com.google.gwt.bikeshed.list.shared.ListModel;
@@ -35,7 +36,7 @@
 
 /**
  * A view of a tree node.
- * 
+ *
  * @param <T> the type that this {@link TreeNodeView} contains
  */
 public abstract class TreeNodeView<T> extends Composite implements TreeNode<T> {
@@ -43,55 +44,58 @@
   /**
    * The element used in place of an image when a node has no children.
    */
-  protected static final String LEAF_IMAGE = "<div style='position:absolute;display:none;'></div>";
-  
-  protected boolean animate;
+  public static final String LEAF_IMAGE = "<div style='position:absolute;display:none;'></div>";
 
   /**
    * A reference to the element that contains the children.
    */
-  protected Element childContainer;
+  private Element childContainer;
 
   /**
-   * The children of this {@link TreeNodeView}.
+   * True during the time a node should be animated.
    */
-  protected List<TreeNodeView<?>> children;
-  
+  private boolean animate;
+
+  /**
+   * A reference to the element that contains the children.
+   */
+  private List<TreeNodeView<?>> children;
+
   /**
    * The list registration for the list of children.
    */
-  protected ListRegistration listReg;
-  
+  private ListRegistration listReg;
+
   /**
    * The info about children of this node.
    */
-  protected NodeInfo<?> nodeInfo;
+  private NodeInfo<?> nodeInfo;
 
   /**
    * Indicates whether or not we've loaded the node info.
    */
-  protected boolean nodeInfoLoaded;
+  private boolean nodeInfoLoaded;
 
   /**
    * Indicates whether or not this node is open.
    */
-  protected boolean open;
-
-  /**
-   * The containing {@link TreeView}.
-   */
-  protected TreeView tree;
+  private boolean open;
 
   /**
    * The parent {@link SideBySideTreeNodeView}.
    */
-  private TreeNodeView<?> parentNode;
-  
+  private final TreeNodeView<?> parentNode;
+
+  /**
+   * The parent {@link SideBySideTreeNodeView}.
+   */
+  private final NodeInfo<T> parentNodeInfo;
+
   /**
    * The info about this node.
    */
-  private NodeInfo<T> parentNodeInfo;
-  
+  private final TreeView tree;
+
   /**
    * This node's value.
    */
@@ -103,7 +107,7 @@
     this.parentNodeInfo = parentNodeInfo;
     this.value = value;
   }
-  
+
   public int getChildCount() {
     return children == null ? 0 : children.size();
   }
@@ -126,7 +130,7 @@
 
   /**
    * Check whether or not this {@link TreeNodeView} is open.
-   * 
+   *
    * @return true if open, false if closed
    */
   public boolean getState() {
@@ -135,7 +139,7 @@
 
   /**
    * Get the value contained in this node.
-   * 
+   *
    * @return the value of the node
    */
   public T getValue() {
@@ -144,16 +148,16 @@
 
   /**
    * Check if this is a root node at the top of the tree.
-   * 
+   *
    * @return true if a root node, false if not
    */
   public boolean isRootNode() {
     return getParentNode() == null;
   }
-  
+
   /**
    * Sets whether this item's children are displayed.
-   * 
+   *
    * @param open whether the item is open
    */
   public void setState(boolean open) {
@@ -162,7 +166,7 @@
 
   /**
    * Sets whether this item's children are displayed.
-   * 
+   *
    * @param open whether the item is open
    * @param fireEvents <code>true</code> to allow open/close events to be
    */
@@ -173,7 +177,7 @@
     if (this.open == open) {
       return;
     }
-    
+
     this.animate = true;
     this.open = open;
     if (open) {
@@ -181,12 +185,12 @@
         nodeInfo = tree.getTreeViewModel().getNodeInfo(getValue(), this);
         nodeInfoLoaded = true;
       }
-      
+
       preOpen();
       // If we don't have any nodeInfo, we must be a leaf node.
       if (nodeInfo != null) {
         onOpen(nodeInfo);
-      } 
+      }
     } else {
       cleanup();
       postClose();
@@ -195,7 +199,7 @@
     // Update the image.
     updateImage();
   }
-  
+
   /**
    * Unregister the list handler and destroy all child nodes.
    */
@@ -205,7 +209,7 @@
       listReg.removeHandler();
       listReg = null;
     }
-  
+
     // Recursively kill children.
     if (children != null) {
       for (TreeNodeView<?> child : children) {
@@ -214,22 +218,44 @@
       children = null;
     }
   }
-  
+
   protected boolean consumeAnimate() {
     boolean hasAnimate = animate;
     animate = false;
     return hasAnimate;
   }
-  
+
+  /**
+   * Returns an instance of TreeNodeView of the same subclass as the
+   * calling object.
+   *
+   * @param <C> the data type of the node's children.
+   * @param nodeInfo a NodeInfo object describing the child nodes.
+   * @param childElem the DOM element used to parent the new TreeNodeView.
+   * @param childValue the child's value.
+   * @param idx the index of the child within its parent node.
+   * @return a TreeNodeView of suitable type.
+   */
   protected abstract <C> TreeNodeView<C> createTreeNodeView(NodeInfo<C> nodeInfo,
       Element childElem, C childValue, int idx);
 
-  protected abstract <C> void emitHtml(StringBuilder sb, NodeInfo<C> nodeInfo,
-      List<C> childValues, List<TreeNodeView<?>> savedViews);
+  /**
+   * Write the HTML for a list of child values into the given StringBuilder.
+   *
+   * @param <C> the data type of the child nodes.
+   * @param sb a StringBuilder to write to.
+   * @param childValues a List of child node values.
+   * @param savedViews a List of TreeNodeView instances corresponding to
+   *   the child values; a non-null value indicates a TreeNodeView previously
+   *   associated with a given child value.
+   * @param cell the Cell to use for rendering each child value.
+   */
+  protected abstract <C> void emitHtml(StringBuilder sb, List<C> childValues,
+      List<TreeNodeView<?>> savedViews, Cell<C> cell);
 
   /**
    * Ensure that the animation frame exists and return it.
-   * 
+   *
    * @return the animation frame
    */
   protected Element ensureAnimationFrame() {
@@ -238,14 +264,14 @@
 
   /**
    * Ensure that the child container exists and return it.
-   * 
+   *
    * @return the child container
    */
   protected abstract Element ensureChildContainer();
 
   /**
    * Fire an event to the {@link com.google.gwt.bikeshed.cells.client.Cell}.
-   * 
+   *
    * @param event the native event
    */
   protected void fireEventToCell(NativeEvent event) {
@@ -256,7 +282,7 @@
       Window.alert("parentNodeInfo == null");
     }
   }
-  
+
   /**
    * Returns the element that parents the cell contents of this node.
    */
@@ -268,7 +294,15 @@
   protected Element getChildContainer() {
     return childContainer;
   }
-  
+
+  /**
+   * Returns the element that contains this node.
+   * The default implementation returns the value of getElement().
+   */
+  protected Element getContainer() {
+    return getElement();
+  }
+
   /**
    * Returns the element corresponding to the open/close image.
    */
@@ -281,7 +315,7 @@
   protected int getImageLeft() {
     return 0;
   }
-  
+
   /**
    * Returns the nodeInfo for this node's parent.
    */
@@ -296,11 +330,11 @@
   protected Object getValueKey() {
     return getParentNodeInfo().getKey(getValue());
   }
-  
+
   /**
    * Set up the node when it is opened.  Delegates to createMap(), emitHtml(),
    * and createTreeNodeView() for subclass-specific functionality.
-   * 
+   *
    * @param nodeInfo the {@link NodeInfo} that provides information about the
    *          child values
    * @param <C> the child data type of the node.
@@ -309,11 +343,11 @@
     // Add a loading message.
     ensureChildContainer().setInnerHTML(tree.getLoadingHtml());
     ensureAnimationFrame().getStyle().setProperty("display", "");
-    
+
     // Get the node info.
     ListModel<C> listModel = nodeInfo.getListModel();
     listReg = listModel.addListHandler(new ListHandler<C>() {
-      public void onDataChanged(ListEvent<C> event) {    
+      public void onDataChanged(ListEvent<C> event) {
         // TODO - handle event start and length
 
         // Construct a map of former child views based on their value keys.
@@ -327,7 +361,7 @@
             }
           }
         }
-        
+
         // Hide the child container so we can animate it.
         if (tree.isAnimationEnabled()) {
           ensureAnimationFrame().getStyle().setDisplay(Display.NONE);
@@ -339,14 +373,14 @@
           // so the call to setInnerHtml will not destroy them
           TreeNodeView<?> savedView = map.get(nodeInfo.getKey(childValue));
           if (savedView != null) {
-            savedView.getElement().removeFromParent();
+            savedView.getContainer().getFirstChild().removeFromParent();
           }
           savedViews.add(savedView);
         }
 
         // Construct the child contents.
         StringBuilder sb = new StringBuilder();
-        emitHtml(sb, nodeInfo, event.getValues(), savedViews);
+        emitHtml(sb, event.getValues(), savedViews, nodeInfo.getCell());
         childContainer.setInnerHTML(sb.toString());
 
         // Create the child TreeNodeViews from the new elements.
@@ -367,12 +401,13 @@
             child.open = savedChild.getState();
 
             // Copy the child container element to the new child
-            child.getElement().appendChild(savedChild.childContainer.getParentElement());
+            // TODO(rice) clean up this expression
+            child.getContainer().appendChild(savedChild.childContainer.getParentElement());
           }
 
           children.add(child);
           childElem = childElem.getNextSiblingElement();
-          
+
           idx++;
         }
 
@@ -400,6 +435,10 @@
   protected void preOpen() {
   }
 
+  protected void setChildContainer(Element childContainer) {
+    this.childContainer = childContainer;
+  }
+
   /**
    * Update the image based on the current state.
    */
@@ -420,4 +459,8 @@
     Element imageElem = tmp.getFirstChildElement();
     getElement().replaceChild(imageElem, getImageElement());
   }
+
+  TreeView getTree() {
+    return tree;
+  }
 }
diff --git a/bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeView.java b/bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeView.java
index 17dd5c9..c29fa37 100644
--- a/bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeView.java
+++ b/bikeshed/src/com/google/gwt/bikeshed/tree/client/TreeView.java
@@ -44,7 +44,7 @@
 
     /**
      * Animate a {@link TreeNodeView} into its new state.
-     * 
+     *
      * @param node the {@link TreeNodeView} to animate
      * @param isAnimationEnabled true to animate
      */
@@ -54,12 +54,12 @@
     public int getDuration() {
       return duration;
     }
-    
+
     public void setDuration(int duration) {
       this.duration = duration;
     }
   }
-  
+
   /**
    * A ClientBundle that provides images for this widget.
    */
@@ -77,22 +77,17 @@
   }
 
   private static final Resources DEFAULT_RESOURCES = GWT.create(Resources.class);
- 
+
   /**
    * The animation.
    */
-  protected TreeNodeViewAnimation animation;
-  
-  /**
-   * The hidden root node in the tree.
-   */
-  protected TreeNodeView<?> rootNode;
+  private TreeNodeViewAnimation animation;
 
   /**
    * The HTML used to generate the closed image.
    */
   private String closedImageHtml;
-  
+
   /**
    * Indicates whether or not animations are enabled.
    */
@@ -113,10 +108,15 @@
    * The HTML used to generate the open image.
    */
   private String openImageHtml;
- 
+
+  /**
+   * The hidden root node in the tree.
+   */
+  private TreeNodeView<?> rootNode;
+
   /**
    * Construct a new {@link TreeView}.
-   * 
+   *
    * @param viewModel the {@link TreeViewModel} that backs the tree
    */
   public TreeView(TreeViewModel viewModel) {
@@ -126,14 +126,14 @@
   /**
    * Get the animation used to open and close nodes in this tree if animations
    * are enabled.
-   * 
+   *
    * @return the animation
    * @see #isAnimationEnabled()
    */
-  public Animation getAnimation() {
+  public TreeNodeViewAnimation getAnimation() {
     return animation;
   }
-  
+
   public TreeViewModel getTreeViewModel() {
     return model;
   }
@@ -141,11 +141,11 @@
   public boolean isAnimationEnabled() {
     return isAnimationEnabled;
   }
-  
+
   /**
    * Set the animation used to open and close nodes in this tree. You must call
    * {@link #setAnimationEnabled(boolean)} to enable or disable animation.
-   * 
+   *
    * @param animation a {@link TreeNodeViewAnimation}.
    * @see #setAnimationEnabled(boolean)
    */
@@ -153,7 +153,7 @@
     assert animation != null : "animation cannot be null";
     this.animation = animation;
   }
-  
+
   public void setAnimationEnabled(boolean enable) {
     this.isAnimationEnabled = enable;
     if (!enable && animation != null) {
@@ -177,7 +177,7 @@
 
   /**
    * Get the width required for the images.
-   * 
+   *
    * @return the maximum width required for images.
    */
   protected int getImageWidth() {
@@ -188,13 +188,13 @@
   /**
    * Get the HTML string that is displayed while nodes wait for their children
    * to load.
-   * 
+   *
    * @return the loading HTML string
    */
   protected String getLoadingHtml() {
     return loadingHtml;
   }
-  
+
   /**
    * @return the HTML to render the open image.
    */
@@ -210,9 +210,13 @@
     return openImageHtml;
   }
 
+  protected TreeNodeView<?> getRootNode() {
+    return rootNode;
+  }
+
   /**
    * Animate the current state of a {@link TreeNodeView} in this tree.
-   * 
+   *
    * @param node the node to animate
    */
   protected void maybeAnimateTreeNode(TreeNodeView<?> node) {
@@ -224,18 +228,14 @@
   /**
    * Set the HTML string that will be displayed when a node is waiting for its
    * child nodes to load.
-   * 
+   *
    * @param loadingHtml the HTML string
    */
   protected void setLoadingHtml(String loadingHtml) {
     this.loadingHtml = loadingHtml;
   }
 
-  TreeNodeView<?> getRootNode() {
-    return rootNode;
-  }
-
-  void setRootNode(TreeNodeView<?> rootNode) {
+  protected void setRootNode(TreeNodeView<?> rootNode) {
     this.rootNode = rootNode;
   }
 }
diff --git a/bikeshed/war/Stocks.css b/bikeshed/war/Stocks.css
index 37018e6..7a8f49d 100644
--- a/bikeshed/war/Stocks.css
+++ b/bikeshed/war/Stocks.css
@@ -1,25 +1,27 @@
 /** Add css rules here for your application. */
 
-div.gwt-SideBySideTreeColumn {
-  width: 100px;
-  height: 200px;
+div.gwt-sstree-column {
   overflow-y: scroll;
   overflow-x: auto;
   position: relative;
 }
 
-div.gwt-SideBySideTreeView {
+div.gwt-sstree {
   border: 2px solid black;
 }
 
-div.gwt-SideBySideTree-selectedItem {
+div.gwt-sstree-selectedItem {
   background-color: rgb(56, 117, 215);
 }
 
-div.gwt-SideBySideTree-unselectedItem {
+div.gwt-sstree-evenRow {
   background-color: rgb(255, 255, 255);
 }
 
+div.gwt-sstree-oddRow {
+    background-color: rgb(220, 220, 220);
+}
+
 /** Example rules used by the template application (remove for your app) */
 h1 {
   font-size: 2em;
diff --git a/bikeshed/war/Tree.css b/bikeshed/war/Tree.css
index 37018e6..7a8f49d 100644
--- a/bikeshed/war/Tree.css
+++ b/bikeshed/war/Tree.css
@@ -1,25 +1,27 @@
 /** Add css rules here for your application. */
 
-div.gwt-SideBySideTreeColumn {
-  width: 100px;
-  height: 200px;
+div.gwt-sstree-column {
   overflow-y: scroll;
   overflow-x: auto;
   position: relative;
 }
 
-div.gwt-SideBySideTreeView {
+div.gwt-sstree {
   border: 2px solid black;
 }
 
-div.gwt-SideBySideTree-selectedItem {
+div.gwt-sstree-selectedItem {
   background-color: rgb(56, 117, 215);
 }
 
-div.gwt-SideBySideTree-unselectedItem {
+div.gwt-sstree-evenRow {
   background-color: rgb(255, 255, 255);
 }
 
+div.gwt-sstree-oddRow {
+    background-color: rgb(220, 220, 220);
+}
+
 /** Example rules used by the template application (remove for your app) */
 h1 {
   font-size: 2em;
