diff --git a/lib/main.dart b/lib/main.dart
index 18790b9..8c1c226 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -18,27 +18,27 @@
       child: new MyButton(
         child: new Text('Engage'),
         onPressed: _handleOnPressedCallback,
-        onScrollStart: _handleOnScrollStartCallback,
-        onScrollUpdate: _handleOnScrollUpdateCallback
+        onPointerDown: _handleOnPointerDownCallback,
+        onPointerMove: _handleOnPointerMoveCallback
       ),
-      transform: new vector_math.Matrix4.identity().translate(-dx, dy)
+      transform: new vector_math.Matrix4.identity().translate(dx, dy)
     );
   }
 
   void _handleOnPressedCallback(sky.Event e) {
     setState(() {
       counter++;
-      sky.GestureEvent ge = e as sky.GestureEvent;
+      sky.PointerEvent ge = e as sky.PointerEvent;
       debug = '(${ge.x.toStringAsFixed(3)}, ${ge.y.toStringAsFixed(3)})';//ge.toString();
     });
   }
 
-  void _handleOnScrollStartCallback(sky.Event e) {
+  void _handleOnPointerDownCallback(sky.Event e) {
     setState(() {
       counter2++;
       //dx = 0.0;
       //dy = 0.0;
-      //sky.GestureEvent ge = e as sky.GestureEvent;
+      //sky.PointerEvent ge = e as sky.PointerEvent;
       //debug2 = '${ge.x} ${ge.y}';
       // The field names were found from here: https://github.com/domokit/sky_engine/blob/01ff5c383fc88647c08f11a0d3392238b8bc99de/sky/engine/core/events/GestureEvent.h
       //'${ge.x} ${ge.y}';
@@ -47,9 +47,9 @@
     });
   }
 
-  void _handleOnScrollUpdateCallback(sky.Event e) {
+  void _handleOnPointerMoveCallback(sky.Event e) {
     setState(() {
-      sky.GestureEvent ge = e as sky.GestureEvent;
+      sky.PointerEvent ge = e as sky.PointerEvent;
       dx += ge.dx;
       dy += ge.dy;
       // debug3 = '${ge.dx} ${ge.dy}'; // Was this one for scroll update then?
diff --git a/lib/my_button.dart b/lib/my_button.dart
index 132a141..22408a0 100644
--- a/lib/my_button.dart
+++ b/lib/my_button.dart
@@ -12,10 +12,10 @@
 class MyButton extends Component {
   final Widget child;
   final Function onPressed;
-  final Function onScrollStart;
-  final Function onScrollUpdate;
+  final Function onPointerDown;
+  final Function onPointerMove;
 
-  MyButton({this.child, this.onPressed, this.onScrollStart, this.onScrollUpdate});
+  MyButton({this.child, this.onPressed, this.onPointerDown, this.onPointerMove});
 
   Container makeContainer() {
     return new Container(
@@ -38,16 +38,16 @@
           this.onPressed(e);
         }
       },
-      onGestureScrollStart: (e) {
+      onPointerDown: (e) {
         print('MyButton was scrolled!');
-        if (this.onScrollStart != null) {
-          this.onScrollStart(e);
+        if (this.onPointerDown != null) {
+          this.onPointerDown(e);
         }
       },
-      onGestureScrollUpdate: (e) {
+      onPointerMove: (e) {
         print('MyButton continues to be scrolled!');
-        if (this.onScrollUpdate != null) {
-          this.onScrollUpdate(e);
+        if (this.onPointerMove != null) {
+          this.onPointerMove(e);
         }
       },
       child: makeContainer()
