diff --git a/sky/engine/core/painting/Size.dart b/sky/engine/core/painting/Size.dart
index f2d43a6..4b364bb 100644
--- a/sky/engine/core/painting/Size.dart
+++ b/sky/engine/core/painting/Size.dart
@@ -13,6 +13,9 @@
 
   const Size.infinite() : width = double.INFINITY, height = double.INFINITY;
 
+  const Size.fromWidth(this.width) : height = double.INFINITY;
+  const Size.fromHeight(this.height) : width = double.INFINITY;
+
   bool operator ==(other) {
     if (!(other is Size)) return false;
     return width == other.width && height == other.height;
diff --git a/sky/examples/stocks2/lib/stock_app.dart b/sky/examples/stocks2/lib/stock_app.dart
index c9f8de2..6f72f8c 100644
--- a/sky/examples/stocks2/lib/stock_app.dart
+++ b/sky/examples/stocks2/lib/stock_app.dart
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-// import 'package:sky/framework/components2/tool_bar.dart';
+import 'package:sky/framework/components2/tool_bar.dart';
 // import 'package:sky/framework/components2/drawer.dart';
 // import 'package:sky/framework/components2/drawer_header.dart';
 // import 'package:sky/framework/components2/floating_action_button.dart';
 // import 'package:sky/framework/components2/icon.dart';
-// import 'package:sky/framework/components2/icon_button.dart';
+import 'package:sky/framework/components2/icon_button.dart';
 // import 'package:sky/framework/components2/input.dart';
 // import 'package:sky/framework/components2/menu_divider.dart';
 // import 'package:sky/framework/components2/menu_item.dart';
@@ -19,18 +19,17 @@
 import 'package:sky/framework/theme/typography.dart' as typography;
 import 'package:sky/framework/theme/colors.dart';
 import 'stock_data.dart';
+import 'package:sky/framework/rendering/box.dart';
 // import 'stock_list.dart';
 // import 'stock_menu.dart';
 
 import 'dart:async';
+import 'dart:sky' as sky;
 
 enum StockMode { Optimistic, Pessimistic }
 
 class StocksApp extends App {
 
-  // static final Style _toolBarStyle = new Style('''
-  //   background-color: ${Purple[500]};''');
-
   // static final Style _searchBarStyle = new Style('''
   //   background-color: ${Grey[50]};''');
 
@@ -161,24 +160,21 @@
   // }
 
   UINode buildToolBar() {
-    return new Rectangle(0xFF00FF00);
-    // return new StyleNode(
-    //   new ToolBar(
-    //     left: new IconButton(
-    //       icon: 'navigation/menu_white',
-    //       onGestureTap: _drawerController.toggle),
-    //     center: new Container(
-    //       style: _titleStyle,
-    //       children: [new Text('Stocks')]),
-    //     right: [
-    //       new IconButton(
-    //         icon: 'action/search_white',
-    //         onGestureTap: _handleSearchBegin),
-    //       new IconButton(
-    //         icon: 'navigation/more_vert_white',
-    //         onGestureTap: _handleMenuShow)
-    //     ]),
-    //   _toolBarStyle);
+    return new ToolBar(
+        left: new IconButton(
+          icon: 'navigation/menu_white',
+          onGestureTap: (_) => true), // _drawerController.toggle),
+        center: new Text('Stocks'),
+        right: [
+          new IconButton(
+            icon: 'action/search_white',
+            onGestureTap: _handleSearchBegin),
+          new IconButton(
+            icon: 'navigation/more_vert_white',
+            onGestureTap: _handleMenuShow)
+        ],
+        backgroundColor: colorFromCSSHexColorString(Purple[500])
+      );
   }
 
   // TODO(abarth): Should we factor this into a SearchBar in the framework?
@@ -210,16 +206,22 @@
   UINode build() {
     // List<UINode> overlays = [];
     // addMenuToOverlays(overlays);
+    return new Container(
+      child: new BlockContainer(children: [buildToolBar()]),
+      decoration: new BoxDecoration(
+        backgroundColor: 0xFFFFFFFF
+      )
+    );
 
-    return new Scaffold(
-       toolbar: _isSearching ? buildSearchBar() : buildToolBar()
+    // return new Scaffold(
+    //    toolbar: _isSearching ? buildSearchBar() : buildToolBar()
     // ,
     //   body: new Stocklist(stocks: _stocks, query: _searchQuery),
     //   floatingActionButton: new FloatingActionButton(
     //     content: new Icon(type: 'content/add_white', size: 24), level: 3),
     //   drawer: _drawerShowing ? buildDrawer() : null,
     //   overlays: overlays
-    );
+    // );
   }
 }
 
diff --git a/sky/sdk/lib/framework/components2/icon.dart b/sky/sdk/lib/framework/components2/icon.dart
index 460ad8a..08913b0 100644
--- a/sky/sdk/lib/framework/components2/icon.dart
+++ b/sky/sdk/lib/framework/components2/icon.dart
@@ -2,7 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'dart:sky' as sky;
 import '../fn2.dart';
+import '../rendering/box.dart';
 
 // TODO(eseidel): This should use package:.
 const String kAssetBase = '/packages/sky/assets/material-design-icons';
@@ -25,8 +27,12 @@
       category = parts[0];
       subtype = parts[1];
     }
-
-    return new Image(width: size, height: size,
-      src: '${kAssetBase}/${category}/2x_web/ic_${subtype}_${size}dp.png');
+    // TODO(jackson): Use a real image.
+    return new Container(
+      desiredSize: new sky.Size(size.toDouble(), size.toDouble()),
+      decoration: new BoxDecoration(backgroundColor: 0xFFFF0000)
+    );
+    // return new Image(width: size, height: size,
+    //   src: '${kAssetBase}/${category}/2x_web/ic_${subtype}_${size}dp.png');
   }
 }
diff --git a/sky/sdk/lib/framework/components2/icon_button.dart b/sky/sdk/lib/framework/components2/icon_button.dart
index 765f75b..9fc79de 100644
--- a/sky/sdk/lib/framework/components2/icon_button.dart
+++ b/sky/sdk/lib/framework/components2/icon_button.dart
@@ -7,9 +7,6 @@
 import 'icon.dart';
 
 class IconButton extends Component {
-  static Style _style = new Style('''
-    padding: 8px;''');
-
   String icon;
   GestureEventListener onGestureTap;
 
@@ -18,7 +15,9 @@
 
   UINode build() {
     return new EventListenerNode(
-      new StyleNode(new Icon(type: icon, size: 24), _style),
+      new Padding(
+        child: new Icon(type: icon, size: 24),
+        padding: const EdgeDims.all(8.0)),
       onGestureTap: onGestureTap);
   }
 }
diff --git a/sky/sdk/lib/framework/components2/tool_bar.dart b/sky/sdk/lib/framework/components2/tool_bar.dart
index f0f3ee4..7b8b252 100644
--- a/sky/sdk/lib/framework/components2/tool_bar.dart
+++ b/sky/sdk/lib/framework/components2/tool_bar.dart
@@ -2,44 +2,48 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'dart:sky' as sky;
 import '../fn2.dart';
 import '../theme/view_configuration.dart';
-import 'material.dart';
+import '../rendering/box.dart';
+import '../rendering/flex.dart';
+// import 'material.dart';
 
 class ToolBar extends Component {
-  static final Style _style = new Style('''
-    align-items: center;
-    height: 56px;
-    padding: 0 8px;
-    transition: background-color 0.3s;
-    padding-top: ${kStatusBarHeight}px;''');
-
-  static Style _centerStyle = new Style('''
-    padding-left: 24px;''');
-
-  static FlexBoxParentData _centerLayoutSettings = new FlexBoxParentData()..flex = 1;
-
   UINode left;
   UINode center;
   List<UINode> right;
+  sky.Color backgroundColor;
 
   ToolBar({
     String key,
     this.left,
     this.center,
-    this.right
+    this.right,
+    this.backgroundColor
   }) : super(key: key);
 
   UINode build() {
-    List<UINode> children = [left, new StyleNode(new ParentDataNode(center, _centerLayoutSettings), _centerStyle)];
+    List<UINode> children = [
+      left,
+      new FlexExpandingChild(
+        new Padding(
+          child: center,
+          padding: new EdgeDims.onlyLeft(24.0)
+        ))
+    ];
 
     if (right != null)
       children.addAll(right);
 
-    return new Material(
-      content: new FlexContainer(
+    return new Container(
+      child: new FlexContainer(
         children: children,
-        direction: FlexDirection.Row),
-      level: 2);
+        direction: FlexDirection.Horizontal
+      ),
+      desiredSize: new sky.Size.fromHeight(56.0),
+      // padding: new EdgeDims(kStatusBarHeight.toDouble(), 8.0, 0.0, 8.0),
+      decoration: new BoxDecoration(backgroundColor: backgroundColor.value)
+    );
   }
 }
diff --git a/sky/sdk/lib/framework/fn2.dart b/sky/sdk/lib/framework/fn2.dart
index d1f66af..427f58b 100644
--- a/sky/sdk/lib/framework/fn2.dart
+++ b/sky/sdk/lib/framework/fn2.dart
@@ -577,7 +577,7 @@
 
 class Paragraph extends RenderNodeWrapper {
   RenderParagraph root;
-  RenderParagraph createNode() => new RenderParagraph(text);
+  RenderParagraph createNode() => new RenderParagraph(text: text);
 
   final String text;
 
@@ -926,40 +926,3 @@
   bool get interchangeable => true;
   UINode build() => new Paragraph(text: data);
 }
-
-
-// for now, but only for now:
-
-class RenderSolidColor extends RenderDecoratedBox {
-  final sky.Size desiredSize;
-  final int backgroundColor;
-
-  RenderSolidColor(int backgroundColor, { this.desiredSize })
-      : backgroundColor = backgroundColor,
-        super(decoration: new BoxDecoration(backgroundColor: backgroundColor));
-
-  sky.Size getIntrinsicDimensions(BoxConstraints constraints) {
-    return constraints.constrain(desiredSize);
-  }
-
-  void performLayout() {
-    size = constraints.constrain(desiredSize);
-  }
-
-  void handlePointer(sky.PointerEvent event) {
-    if (event.type == 'pointerdown')
-      decoration = new BoxDecoration(backgroundColor: 0xFFFF0000);
-    else if (event.type == 'pointerup')
-      decoration = new BoxDecoration(backgroundColor: backgroundColor);
-  }
-}
-
-class Rectangle extends RenderNodeWrapper {
-  RenderSolidColor root;
-  RenderSolidColor createNode() =>
-      new RenderSolidColor(color, desiredSize: new sky.Size(40.0, 130.0));
-
-  final int color;
-
-  Rectangle(this.color, { Object key }) : super(key: key);
-}
diff --git a/sky/sdk/lib/framework/rendering/box.dart b/sky/sdk/lib/framework/rendering/box.dart
index b3ee6cd..803c85b 100644
--- a/sky/sdk/lib/framework/rendering/box.dart
+++ b/sky/sdk/lib/framework/rendering/box.dart
@@ -14,6 +14,15 @@
   const EdgeDims.all(double value)
       : top = value, right = value, bottom = value, left = value;
 
+  const EdgeDims.onlyLeft(double value)
+      : top = 0.0, right = 0.0, bottom = 0.0, left = value;
+  const EdgeDims.onlyRight(double value)
+    : top = 0.0, right = value, bottom = 0.0, left = 0.0;
+  const EdgeDims.onlyTop(double value)
+    : top = value, right = 0.0, bottom = 0.0, left = 0.0;
+  const EdgeDims.onlyBottom(double value)
+    : top = 0.0, right = 0.0, bottom = value, left = 0.0;
+
   final double top;
   final double right;
   final double bottom;
@@ -148,7 +157,7 @@
 class RenderSizedBox extends RenderProxyBox {
 
   RenderSizedBox({
-    RenderBox child, 
+    RenderBox child,
     sky.Size desiredSize: const sky.Size.infinite()
   }) : super(child) {
     assert(desiredSize != null);
diff --git a/sky/sdk/lib/framework/theme/colors.dart b/sky/sdk/lib/framework/theme/colors.dart
index e7abfbc..73f2c19 100644
--- a/sky/sdk/lib/framework/theme/colors.dart
+++ b/sky/sdk/lib/framework/theme/colors.dart
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+import 'dart:sky' as sky;
+
 const Map<int, String> Red = const {
    50: '#FFEBEE',
   100: '#FFCDD2',
@@ -248,3 +250,7 @@
   800: '#37474F',
   900: '#263238',
 };
+
+sky.Color colorFromCSSHexColorString(String colorString) {
+  return new sky.Color(int.parse("FF" + colorString.substring(1), radix: 16));
+}
\ No newline at end of file
