diff --git a/examples/README.md b/examples/README.md
index deb0f3c..7068ad2 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -1,7 +1,7 @@
-Sky Examples
-============
+Flutter Examples
+================
 
-This directory contains several examples of using Sky.  Each of these is an
+This directory contains several examples of using Flutter.  Each of these is an
 individual Dart application package.  If you wish to run them with `sky_tool`
 then you will want to run `pub get` inside their directory before running
 `./packages/sky/sky_tool start`.
@@ -10,7 +10,7 @@
    the text "hello, world."
 
 2. *Stocks.* The [stocks app](stocks) is an example of a typical mobile app
-   built using Sky. The app shows a list of all the stocks in the NASDAQ.
+   built using Flutter. The app shows a list of all the stocks in the NASDAQ.
 
-3. *Widgets.* The [widgets app](widgets) contains a number of Sky widgets so
+3. *Widgets.* The [widgets app](widgets) contains a number of Flutter widgets so
    you can experiment with them in a simple container.
diff --git a/examples/rendering/align_items.dart b/examples/rendering/align_items.dart
index 0c71057..8cf517a 100644
--- a/examples/rendering/align_items.dart
+++ b/examples/rendering/align_items.dart
@@ -42,5 +42,5 @@
     child: new RenderPadding(child: table, padding: new EdgeDims.symmetric(vertical: 50.0))
   );
 
-  new SkyBinding(root: root);
+  new FlutterBinding(root: root);
 }
diff --git a/examples/rendering/baseline.dart b/examples/rendering/baseline.dart
index 683964f..9237c91 100644
--- a/examples/rendering/baseline.dart
+++ b/examples/rendering/baseline.dart
@@ -72,5 +72,5 @@
     direction: FlexDirection.vertical,
     alignItems: FlexAlignItems.stretch
   );
-  new SkyBinding(root: root);
+  new FlutterBinding(root: root);
 }
diff --git a/examples/rendering/borders.dart b/examples/rendering/borders.dart
index 020278f..1f5777a 100644
--- a/examples/rendering/borders.dart
+++ b/examples/rendering/borders.dart
@@ -73,5 +73,5 @@
     ],
     direction: FlexDirection.vertical
   );
-  new SkyBinding(root: root);
+  new FlutterBinding(root: root);
 }
diff --git a/examples/rendering/flex.dart b/examples/rendering/flex.dart
index 96811e8..f0ca8da 100644
--- a/examples/rendering/flex.dart
+++ b/examples/rendering/flex.dart
@@ -51,5 +51,5 @@
 }
 
 void main() {
-  new SkyBinding(root: buildFlexExample());
+  new FlutterBinding(root: buildFlexExample());
 }
diff --git a/examples/rendering/interactive_flex.dart b/examples/rendering/interactive_flex.dart
index ed50e79..cfebd7c 100644
--- a/examples/rendering/interactive_flex.dart
+++ b/examples/rendering/interactive_flex.dart
@@ -98,6 +98,6 @@
   );
 
   updateTaskDescription('Interactive Flex', topColor);
-  new SkyBinding(root: root);
+  new FlutterBinding(root: root);
   sky.view.setEventCallback(handleEvent);
 }
diff --git a/examples/rendering/justify_content.dart b/examples/rendering/justify_content.dart
index 653a9c4..908bd42 100644
--- a/examples/rendering/justify_content.dart
+++ b/examples/rendering/justify_content.dart
@@ -36,5 +36,5 @@
     child: new RenderPadding(child: table, padding: new EdgeDims.symmetric(vertical: 50.0))
   );
 
-  new SkyBinding(root: root);
+  new FlutterBinding(root: root);
 }
diff --git a/examples/rendering/render_grid.dart b/examples/rendering/render_grid.dart
index 7a4af71..a2e31cf 100644
--- a/examples/rendering/render_grid.dart
+++ b/examples/rendering/render_grid.dart
@@ -23,4 +23,4 @@
   return new RenderGrid(children: children, maxChildExtent: 100.0);
 }
 
-main() => new SkyBinding(root: buildGridExample());
+main() => new FlutterBinding(root: buildGridExample());
diff --git a/examples/rendering/render_paragraph.dart b/examples/rendering/render_paragraph.dart
index 71989ea..e4ab3b4 100644
--- a/examples/rendering/render_paragraph.dart
+++ b/examples/rendering/render_paragraph.dart
@@ -35,5 +35,5 @@
   flexRoot.add(child);
   child.parentData.flex = 1;
 
-  new SkyBinding(root: root);
+  new FlutterBinding(root: root);
 }
diff --git a/examples/rendering/sector_layout.dart b/examples/rendering/sector_layout.dart
index 7aca5de..d57cb2a 100644
--- a/examples/rendering/sector_layout.dart
+++ b/examples/rendering/sector_layout.dart
@@ -549,5 +549,5 @@
 }
 
 void main() {
-  new SkyBinding(root: buildSectorExample());
+  new FlutterBinding(root: buildSectorExample());
 }
diff --git a/examples/rendering/shadowed_box.dart b/examples/rendering/shadowed_box.dart
index 7546c56..b48c532 100644
--- a/examples/rendering/shadowed_box.dart
+++ b/examples/rendering/shadowed_box.dart
@@ -18,7 +18,7 @@
   var paddedBox = new RenderPadding(
     padding: const EdgeDims.all(50.0),
     child: coloredBox);
-  new SkyBinding(root: new RenderDecoratedBox(
+  new FlutterBinding(root: new RenderDecoratedBox(
     decoration: const BoxDecoration(
       backgroundColor: const Color(0xFFFFFFFF)
     ),
diff --git a/examples/rendering/simple_autolayout.dart b/examples/rendering/simple_autolayout.dart
index 336afa7..c8b65b9 100644
--- a/examples/rendering/simple_autolayout.dart
+++ b/examples/rendering/simple_autolayout.dart
@@ -59,5 +59,5 @@
     (p4.verticalCenter == p2.height / al.cm(2.0)) as al.Constraint,
   ]);
 
-  new SkyBinding(root: root);
+  new FlutterBinding(root: root);
 }
diff --git a/examples/rendering/spinning_flex.dart b/examples/rendering/spinning_flex.dart
index b2fc6e8..db2055c 100644
--- a/examples/rendering/spinning_flex.dart
+++ b/examples/rendering/spinning_flex.dart
@@ -29,7 +29,7 @@
 
   RenderPadding root = new RenderPadding(padding: new EdgeDims.all(20.0), child: transformBox);
 
-  new SkyBinding(root: root);
+  new FlutterBinding(root: root);
 
   scheduler.addPersistentFrameCallback(rotate);
 }
diff --git a/examples/rendering/touch_demo.dart b/examples/rendering/touch_demo.dart
index ece221b..f00a781 100644
--- a/examples/rendering/touch_demo.dart
+++ b/examples/rendering/touch_demo.dart
@@ -84,5 +84,5 @@
   // that it doesn't eat events.
   paragraph.parentData..top = 40.0
                       ..left = 20.0;
-  new SkyBinding(root: stack);
+  new FlutterBinding(root: stack);
 }
diff --git a/examples/rendering/transform.dart b/examples/rendering/transform.dart
index e185c4e..4e67532 100644
--- a/examples/rendering/transform.dart
+++ b/examples/rendering/transform.dart
@@ -24,5 +24,5 @@
 
   RenderFlex flex = new RenderFlex();
   flex.add(spin);
-  new SkyBinding(root: flex);
+  new FlutterBinding(root: flex);
 }
diff --git a/examples/widgets/spinning_mixed.dart b/examples/widgets/spinning_mixed.dart
index 6d0b047..9317390 100644
--- a/examples/widgets/spinning_mixed.dart
+++ b/examples/widgets/spinning_mixed.dart
@@ -70,12 +70,12 @@
 
 void main() {
   // Because we're going to use Widgets, we want to initialise its
-  // SkyBinding, not use the default one. We don't really need to do
+  // FlutterBinding, not use the default one. We don't really need to do
   // this, because RenderBoxToWidgetAdapter does it for us, but
   // it's good practice in case we happen to not have a
   // RenderBoxToWidgetAdapter in our tree at startup, or in case we
   // want a renderViewOverride.
-  WidgetSkyBinding.initWidgetSkyBinding();
+  WidgetFlutterBinding.initWidgetFlutterBinding();
 
   RenderProxyBox proxy = new RenderProxyBox();
   new RenderBoxToWidgetAdapter(proxy, builder); // adds itself to proxy
@@ -88,6 +88,6 @@
   transformBox = new RenderTransform(child: flexRoot, transform: new Matrix4.identity());
   RenderPadding root = new RenderPadding(padding: new EdgeDims.all(80.0), child: transformBox);
 
-  SkyBinding.instance.renderView.child = root;
+  FlutterBinding.instance.renderView.child = root;
   scheduler.addPersistentFrameCallback(rotate);
 }
diff --git a/packages/flutter/README.md b/packages/flutter/README.md
index 6272937..b728b85 100644
--- a/packages/flutter/README.md
+++ b/packages/flutter/README.md
@@ -6,4 +6,4 @@
 focused on low-latency input and high frame rates on Android and iOS.
 
 See the [getting started guide](https://flutter.github.io/getting-started/) for
-information about using Sky.
+information about using Flutter.
diff --git a/packages/flutter/lib/painting.dart b/packages/flutter/lib/painting.dart
index 390f7b4..f252a26 100644
--- a/packages/flutter/lib/painting.dart
+++ b/packages/flutter/lib/painting.dart
@@ -4,7 +4,7 @@
 
 /// The Flutter painting library
 ///
-/// This library includes a variety of classes that wrap the Sky
+/// This library includes a variety of classes that wrap the Flutter
 /// engine's painting API for more specialised purposes, such as painting scaled
 /// images, interpolating between shadows, painting borders around boxes, etc.
 ///
diff --git a/packages/flutter/lib/rendering.dart b/packages/flutter/lib/rendering.dart
index f3405e2..15ed29a 100644
--- a/packages/flutter/lib/rendering.dart
+++ b/packages/flutter/lib/rendering.dart
@@ -20,7 +20,7 @@
 export 'package:sky/src/rendering/paragraph.dart';
 export 'package:sky/src/rendering/proxy_box.dart';
 export 'package:sky/src/rendering/shifted_box.dart';
-export 'package:sky/src/rendering/sky_binding.dart';
+export 'package:sky/src/rendering/binding.dart';
 export 'package:sky/src/rendering/stack.dart';
 export 'package:sky/src/rendering/toggleable.dart';
 export 'package:sky/src/rendering/view.dart';
diff --git a/packages/flutter/lib/src/fn3/binding.dart b/packages/flutter/lib/src/fn3/binding.dart
index f832aec..ccf83ea 100644
--- a/packages/flutter/lib/src/fn3/binding.dart
+++ b/packages/flutter/lib/src/fn3/binding.dart
@@ -6,7 +6,7 @@
 import 'package:sky/rendering.dart';
 import 'package:sky/src/fn3/framework.dart';
 
-class WidgetFlutterBinding extends SkyBinding {
+class WidgetFlutterBinding extends FlutterBinding {
 
   WidgetFlutterBinding() {
     BuildableElement.scheduleBuildFor = scheduleBuildFor;
@@ -14,14 +14,14 @@
     _renderViewElement.mount(null, null);
   }
 
-  /// Ensures that there is a SkyBinding object instantiated.
+  /// Ensures that there is a FlutterBinding object instantiated.
   static void initBinding() {
-    if (SkyBinding.instance == null)
+    if (FlutterBinding.instance == null)
       new WidgetFlutterBinding();
-    assert(SkyBinding.instance is WidgetFlutterBinding);
+    assert(FlutterBinding.instance is WidgetFlutterBinding);
   }
 
-  static WidgetFlutterBinding get instance => SkyBinding.instance;
+  static WidgetFlutterBinding get instance => FlutterBinding.instance;
 
   /// The [Element] that is at the root of the hierarchy (and which wraps the
   /// [RenderView] object at the root of the rendering hierarchy).
diff --git a/packages/flutter/lib/src/fn3/gesture_detector.dart b/packages/flutter/lib/src/fn3/gesture_detector.dart
index 0544602..b15c122 100644
--- a/packages/flutter/lib/src/fn3/gesture_detector.dart
+++ b/packages/flutter/lib/src/fn3/gesture_detector.dart
@@ -7,7 +7,7 @@
 import 'package:sky/gestures.dart';
 import 'package:sky/src/fn3/basic.dart';
 import 'package:sky/src/fn3/framework.dart';
-import 'package:sky/src/rendering/sky_binding.dart';
+import 'package:sky/src/rendering/binding.dart';
 
 class GestureDetector extends StatefulComponent {
   const GestureDetector({
@@ -60,7 +60,7 @@
     didUpdateConfig(null);
   }
 
-  final PointerRouter _router = SkyBinding.instance.pointerRouter;
+  final PointerRouter _router = FlutterBinding.instance.pointerRouter;
 
   TapGestureRecognizer _tap;
   TapGestureRecognizer _ensureTap() {
diff --git a/packages/flutter/lib/src/rendering/sky_binding.dart b/packages/flutter/lib/src/rendering/binding.dart
similarity index 94%
rename from packages/flutter/lib/src/rendering/sky_binding.dart
rename to packages/flutter/lib/src/rendering/binding.dart
index bab387b..3f3835b 100644
--- a/packages/flutter/lib/src/rendering/sky_binding.dart
+++ b/packages/flutter/lib/src/rendering/binding.dart
@@ -32,7 +32,7 @@
 
 typedef void EventListener(sky.Event event);
 
-/// A hit test entry used by [SkyBinding]
+/// A hit test entry used by [FlutterBinding]
 class BindingHitTestEntry extends HitTestEntry {
   const BindingHitTestEntry(HitTestTarget target, this.result) : super(target);
 
@@ -42,9 +42,9 @@
 
 /// The glue between the render tree and the sky engine
 // TODO(ianh): rename this class FlutterBinding
-class SkyBinding extends HitTestTarget {
+class FlutterBinding extends HitTestTarget {
 
-  SkyBinding({ RenderBox root: null, RenderView renderViewOverride }) {
+  FlutterBinding({ RenderBox root: null, RenderView renderViewOverride }) {
     assert(_instance == null);
     _instance = this;
 
@@ -66,8 +66,8 @@
   }
 
   /// The singleton instance of the binding
-  static SkyBinding get instance => _instance;
-  static SkyBinding _instance;
+  static FlutterBinding get instance => _instance;
+  static FlutterBinding _instance;
 
   /// The render tree that's attached to the output surface
   RenderView get renderView => _renderView;
@@ -175,5 +175,5 @@
 
 /// Prints a textual representation of the entire render tree
 void debugDumpRenderTree() {
-  SkyBinding.instance.renderView.toStringDeep().split('\n').forEach(print);
+  FlutterBinding.instance.renderView.toStringDeep().split('\n').forEach(print);
 }
diff --git a/packages/flutter/lib/src/rendering/object.dart b/packages/flutter/lib/src/rendering/object.dart
index 828850d..7abdacf 100644
--- a/packages/flutter/lib/src/rendering/object.dart
+++ b/packages/flutter/lib/src/rendering/object.dart
@@ -585,7 +585,7 @@
   /// information is cleaned prior to painting so that render objects will
   /// appear on screen in their up-to-date locations.
   ///
-  /// See [SkyBinding] for an example of how this function is used.
+  /// See [FlutterBinding] for an example of how this function is used.
   static void flushLayout() {
     sky.tracing.begin('RenderObject.flushLayout');
     _debugDoingLayout = true;
@@ -906,7 +906,7 @@
   /// Painting occurs after layout and before the scene is recomposited so that
   /// scene is composited with up-to-date display lists for every render object.
   ///
-  /// See [SkyBinding] for an example of how this function is used.
+  /// See [FlutterBinding] for an example of how this function is used.
   static void flushPaint() {
     sky.tracing.begin('RenderObject.flushPaint');
     _debugDoingPaint = true;
diff --git a/packages/flutter/lib/src/rendering/toggleable.dart b/packages/flutter/lib/src/rendering/toggleable.dart
index 82dba9a..56a0763 100644
--- a/packages/flutter/lib/src/rendering/toggleable.dart
+++ b/packages/flutter/lib/src/rendering/toggleable.dart
@@ -6,7 +6,7 @@
 
 import 'package:sky/animation.dart';
 import 'package:sky/gestures.dart';
-import 'package:sky/src/rendering/sky_binding.dart';
+import 'package:sky/src/rendering/binding.dart';
 import 'package:sky/src/rendering/box.dart';
 import 'package:sky/src/rendering/object.dart';
 import 'package:sky/src/rendering/proxy_box.dart';
@@ -41,7 +41,7 @@
   void attach() {
     super.attach();
     _tap = new TapGestureRecognizer(
-      router: SkyBinding.instance.pointerRouter,
+      router: FlutterBinding.instance.pointerRouter,
       onTap: _handleTap
     );
   }
diff --git a/packages/flutter/lib/src/widgets/drag_target.dart b/packages/flutter/lib/src/widgets/drag_target.dart
index 191fd48..245cabc 100644
--- a/packages/flutter/lib/src/widgets/drag_target.dart
+++ b/packages/flutter/lib/src/widgets/drag_target.dart
@@ -90,7 +90,7 @@
   }
 
   void update(Point globalPosition) {
-    HitTestResult result = SkyBinding.instance.hitTest(globalPosition);
+    HitTestResult result = FlutterBinding.instance.hitTest(globalPosition);
     DragTarget target = _getDragTarget(result.path);
     if (target == _activeTarget)
       return;
diff --git a/packages/flutter/lib/src/widgets/framework.dart b/packages/flutter/lib/src/widgets/framework.dart
index b3f01df..0fa3a3e 100644
--- a/packages/flutter/lib/src/widgets/framework.dart
+++ b/packages/flutter/lib/src/widgets/framework.dart
@@ -1477,15 +1477,15 @@
 
 }
 
-class WidgetSkyBinding extends SkyBinding {
+class WidgetFlutterBinding extends FlutterBinding {
 
-  WidgetSkyBinding({ RenderView renderViewOverride: null })
+  WidgetFlutterBinding({ RenderView renderViewOverride: null })
       : super(renderViewOverride: renderViewOverride);
 
-  static void initWidgetSkyBinding({ RenderView renderViewOverride: null }) {
-    if (SkyBinding.instance == null)
-      new WidgetSkyBinding(renderViewOverride: renderViewOverride);
-    assert(SkyBinding.instance is WidgetSkyBinding);
+  static void initWidgetFlutterBinding({ RenderView renderViewOverride: null }) {
+    if (FlutterBinding.instance == null)
+      new WidgetFlutterBinding(renderViewOverride: renderViewOverride);
+    assert(FlutterBinding.instance is WidgetFlutterBinding);
   }
 
   void handleEvent(sky.Event event, BindingHitTestEntry entry) {
@@ -1518,12 +1518,12 @@
 
   void didMount() {
     super.didMount();
-    SkyBinding.instance.addEventListener(_handleEvent);
+    FlutterBinding.instance.addEventListener(_handleEvent);
   }
 
   void didUnmount() {
     super.didUnmount();
-    SkyBinding.instance.removeEventListener(_handleEvent);
+    FlutterBinding.instance.removeEventListener(_handleEvent);
   }
 
   void syncConstructorArguments(Component source) { }
@@ -1559,12 +1559,12 @@
 class RenderViewWrapper extends OneChildRenderObjectWrapper {
   RenderViewWrapper({ Key key, Widget child }) : super(key: key, child: child);
   RenderView get renderObject => super.renderObject;
-  RenderView createNode() => SkyBinding.instance.renderView;
+  RenderView createNode() => FlutterBinding.instance.renderView;
 }
 
 class AppContainer extends AbstractWidgetRoot {
   AppContainer(this.app) {
-    assert(SkyBinding.instance is WidgetSkyBinding);
+    assert(FlutterBinding.instance is WidgetFlutterBinding);
   }
   final App app;
   Widget build() => new RenderViewWrapper(child: app);
@@ -1572,7 +1572,7 @@
 
 AppContainer _container;
 void runApp(App app, { RenderView renderViewOverride, bool enableProfilingLoop: false }) {
-  WidgetSkyBinding.initWidgetSkyBinding(renderViewOverride: renderViewOverride);
+  WidgetFlutterBinding.initWidgetFlutterBinding(renderViewOverride: renderViewOverride);
   _container = new AppContainer(app);
   if (enableProfilingLoop) {
     new Timer.periodic(const Duration(milliseconds: 20), (_) {
diff --git a/packages/flutter/lib/src/widgets/gesture_detector.dart b/packages/flutter/lib/src/widgets/gesture_detector.dart
index 04aba9f..ffd393d 100644
--- a/packages/flutter/lib/src/widgets/gesture_detector.dart
+++ b/packages/flutter/lib/src/widgets/gesture_detector.dart
@@ -5,7 +5,7 @@
 import 'dart:sky' as sky;
 
 import 'package:sky/gestures.dart';
-import 'package:sky/src/rendering/sky_binding.dart';
+import 'package:sky/src/rendering/binding.dart';
 import 'package:sky/src/widgets/framework.dart';
 
 class GestureDetector extends StatefulComponent {
@@ -70,7 +70,7 @@
     _syncGestureListeners();
   }
 
-  final PointerRouter _router = SkyBinding.instance.pointerRouter;
+  final PointerRouter _router = FlutterBinding.instance.pointerRouter;
 
   TapGestureRecognizer _tap;
   TapGestureRecognizer _ensureTap() {
diff --git a/packages/unit/test/fn3/widget_tester.dart b/packages/unit/test/fn3/widget_tester.dart
index 855013f..81a2801 100644
--- a/packages/unit/test/fn3/widget_tester.dart
+++ b/packages/unit/test/fn3/widget_tester.dart
@@ -46,7 +46,7 @@
     }
     return result;
   }
-  List<Layer> get layers => _layers(SkyBinding.instance.renderView.layer);
+  List<Layer> get layers => _layers(FlutterBinding.instance.renderView.layer);
 
 
   void walkElements(ElementVisitor visitor) {
diff --git a/packages/unit/test/widget/widget_tester.dart b/packages/unit/test/widget/widget_tester.dart
index 75b6864..9511545 100644
--- a/packages/unit/test/widget/widget_tester.dart
+++ b/packages/unit/test/widget/widget_tester.dart
@@ -45,7 +45,7 @@
     }
     return result;
   }
-  List<Layer> get layers => _layers(SkyBinding.instance.renderView.layer);
+  List<Layer> get layers => _layers(FlutterBinding.instance.renderView.layer);
 
   void walkWidgets(WidgetTreeWalker walker) {
     void walk(Widget widget) {
@@ -103,10 +103,10 @@
     return _getWidgetPoint(widget, (Size size) => size.bottomRight(Point.origin));
   }
 
-  HitTestResult _hitTest(Point location) => SkyBinding.instance.hitTest(location);
+  HitTestResult _hitTest(Point location) => FlutterBinding.instance.hitTest(location);
 
   void _dispatchEvent(sky.Event event, HitTestResult result) {
-    SkyBinding.instance.dispatchEvent(event, result);
+    FlutterBinding.instance.dispatchEvent(event, result);
   }
 
   void tap(Widget widget, { int pointer: 1 }) {
