diff --git a/lib/components/card.dart b/lib/components/card.dart
index 8fb5c7b..e6723f2 100644
--- a/lib/components/card.dart
+++ b/lib/components/card.dart
@@ -3,10 +3,11 @@
 import 'package:sky/widgets.dart' as widgets;
 import 'package:sky/theme/colors.dart' as colors;
 import 'dart:sky' as sky;
+import 'package:vector_math/vector_math.dart' as vector_math;
 
 class CardComponent extends widgets.StatefulComponent {
-  final Card card;
-  final bool faceUp;
+  Card card;
+  bool faceUp;
 
   widgets.DragController dragController;
   widgets.Offset displacement = widgets.Offset.zero;
@@ -18,6 +19,8 @@
     //assert(false); // Why do we need to do this?
     //dragController = other.dragController;
     //displacement = other.displacement;
+    card = other.card;
+    faceUp = other.faceUp;
   }
 
   widgets.Widget build() {
@@ -27,8 +30,8 @@
       onPointerCancel: _cancelDrag,
       onPointerUp: _drop,
       child: new widgets.Container(
-        width: card_constants.CARD_WIDTH,
-        height: card_constants.CARD_HEIGHT,
+        //width: card_constants.CARD_WIDTH,
+        //height: card_constants.CARD_HEIGHT,
         child: new widgets.Container(
           decoration: new widgets.BoxDecoration(
             border: new widgets.Border.all(
@@ -37,10 +40,13 @@
             ),
             backgroundColor: dragController == null ? colors.Orange[500] : colors.Brown[500]
           ),
-          child: new widgets.Flex([
-            imageFromCard(card, faceUp),
-            new widgets.Text(status)
-          ], direction: widgets.FlexDirection.vertical)
+          child: new widgets.Transform(
+            transform: new vector_math.Matrix4.identity().translate(displacement.dx, displacement.dy),
+            child: new widgets.Flex([
+              imageFromCard(card, faceUp),
+              new widgets.Text(status)
+            ], direction: widgets.FlexDirection.vertical)
+          )
         )
       )
     );
@@ -64,7 +70,6 @@
 
   widgets.EventDisposition _updateDrag(sky.PointerEvent event) {
     setState(() {
-      dragController = new widgets.DragController(new CardDragData(this.card));
       dragController.update(new widgets.Point(event.x, event.y));
       displacement += new widgets.Offset(event.dx, event.dy);
       status = 'dragU ${event.x.toStringAsFixed(0)} ${event.y.toStringAsFixed(0)}';
@@ -103,4 +108,8 @@
   final Card card;
 
   CardDragData(this.card);
+
+  String toString() {
+    return card.toString();
+  }
 }
\ No newline at end of file
diff --git a/lib/components/card_collection.dart b/lib/components/card_collection.dart
index 056cded..d041951 100644
--- a/lib/components/card_collection.dart
+++ b/lib/components/card_collection.dart
@@ -11,34 +11,62 @@
 }
 
 class CardCollectionComponent extends StatefulComponent {
-  final List<Card> cards;
-  final Orientation orientation;
-  final bool faceUp;
-  final Function parentHandleAccept;
+  List<Card> cards;
+  Orientation orientation;
+  bool faceUp;
+  Function parentCallback;
 
   String status = 'bar';
 
-  CardCollectionComponent(this.cards, this.faceUp, this.orientation, this.parentHandleAccept);
+  CardCollectionComponent(this.cards, this.faceUp, this.orientation, this.parentCallback);
 
   void syncFields(CardCollectionComponent other) {
     //assert(false); // Why do we need to do this?
+    //status = other.status;
+    cards = other.cards;
+    orientation = other.orientation;
+    faceUp = other.faceUp;
+    parentCallback = other.parentCallback;
   }
 
   void _handleAccept(CardDragData data) {
     setState(() {
-      status = 'ACCEPT';
+      status = 'ACCEPT ${data.card.toString()}';
+      parentCallback(data.card, this.cards);
     });
-    this.parentHandleAccept(data.card, this.cards);
+  }
+
+  List<Widget> flexCards(List<Widget> cardWidgets) {
+    List<Widget> flexWidgets = new List<Widget>();
+    cardWidgets.forEach((cardWidget) => flexWidgets.add(new Flexible(child: cardWidget)));
+    return flexWidgets;
+  }
+
+  Widget wrapCards(List<Widget> cardWidgets) {
+    switch (this.orientation) {
+      case Orientation.vert:
+        return new Flex(flexCards(cardWidgets), direction: FlexDirection.vertical);
+      case Orientation.horz:
+        return new Flex(flexCards(cardWidgets));
+      case Orientation.fan:
+        // unimplemented, so we'll fall through to show1, for now.
+        // Probably a Stack + Positioned
+      case Orientation.show1:
+        return new Stack(cardWidgets);
+      default:
+        assert(false);
+        return null;
+    }
   }
 
   Widget build() {
     // Let's just do horizontal for now, it's too complicated otherwise.
 
-    double cardDelta = card_constants.CARD_WIDTH;
+    /*double cardDelta = card_constants.CARD_WIDTH;
     if (cards.length > 6) {
       //cardDelta = card_constants.CARD_WIDTH / cards.length; // just make it tiny
       cardDelta -= card_constants.CARD_WIDTH * (cards.length - 6) / cards.length;
-    }
+    }*/
 
     List<Widget> cardComponents = new List<Widget>();
     cardComponents.add(new Text(status));
@@ -49,10 +77,11 @@
         // left: i * cardDelta,
         child: new CardComponent(cards[i], faceUp)
       ));*/
-      cardComponents.add(new Transform(
+      /*cardComponents.add(new Transform(
         transform: new vector_math.Matrix4.identity().translate(i * cardDelta, 40.0),
         child: new CardComponent(cards[i], faceUp)
-      ));
+      ));*/
+      cardComponents.add(new CardComponent(cards[i], faceUp)); // flex
     }
 
 
@@ -70,6 +99,8 @@
     return new DragTarget<CardDragData>(
       onAccept: _handleAccept,
       builder: (List<CardDragData> data, _) {
+        print(this.cards.length);
+        print(data);
         return new Container(
           decoration: new BoxDecoration(
             border: new Border.all(
@@ -78,9 +109,9 @@
             ),
             backgroundColor: data.isEmpty ? colors.Grey[500] : colors.Green[500]
           ),
-          height: 150.0,
+          height: 100.0,
           margin: new EdgeDims.all(10.0),
-          child: new Stack(cardComponents)
+          child: wrapCards(cardComponents)//new Stack(cardComponents)
         );
       }
     );
diff --git a/lib/components/game.dart b/lib/components/game.dart
index 626434c..246393b 100644
--- a/lib/components/game.dart
+++ b/lib/components/game.dart
@@ -7,11 +7,13 @@
 import 'package:vector_math/vector_math.dart' as vector_math;
 
 class GameComponent extends StatefulComponent {
-  final Game game;
+  Game game;
 
   GameComponent(this.game);
 
-  void syncFields(GameComponent other) {}
+  void syncFields(GameComponent other) {
+    this.game = other.game;
+  }
 
   Widget build() {
     switch (game.gameType) {
@@ -22,38 +24,43 @@
     }
   }
 
-  void _parentHandleAccept(Card card, List<Card> toList) {
-    // That means that this card was dragged to this other Card collection component.
+  _updateGameCallback(Card card, List<Card> dest) {
     setState(() {
-      game.move(card, toList);
+      game.move(card, dest);
     });
   }
 
   Widget buildHearts() {
     List<Widget> cardCollections = new List<Widget>();
+
+    // debugString
+    cardCollections.add(new Text(game.debugString));
+
     for (int i = 0; i < 4; i++) {
       List<Card> cards = game.cardCollections[i];
-      CardCollectionComponent c = new CardCollectionComponent(cards, true, Orientation.horz, _parentHandleAccept);
+      CardCollectionComponent c = new CardCollectionComponent(cards, true, Orientation.horz, _updateGameCallback);
 
-      cardCollections.add(new Positioned(
+      /*cardCollections.add(new Positioned(
         top: i * (card_constants.CARD_HEIGHT + 20.0),
         child: c
-      ));
+      ));*/
 
       /*cardCollections.add(new Transform(
         transform: new vector_math.Matrix4.identity().translate(0.0, i * (card_constants.CARD_HEIGHT + 20.0)),
         child: c
       ));*/
+
+      cardCollections.add(c); // flex
     }
 
     // game.cardCollections[4] is a discard pile
-    cardCollections.add(new Transform(
+    /*cardCollections.add(new Transform(
       transform: new vector_math.Matrix4.identity().translate(0.0, 4 * (card_constants.CARD_HEIGHT + 20.0)),
       child: new Container(
         decoration: new BoxDecoration(backgroundColor: colors.Green[500], borderRadius: 5.0),
         child: new CardCollectionComponent(game.cardCollections[4], true, Orientation.horz, _parentHandleAccept)
       )
-    ));
+    ));*/
     /*cardCollections.add(new Positioned(
       top: 4 * (card_constants.CARD_HEIGHT + 20.0),
       child: new Container(
@@ -62,11 +69,17 @@
       )
     ));*/
 
+    cardCollections.add(new Container(
+      decoration: new BoxDecoration(backgroundColor: colors.Green[500], borderRadius: 5.0),
+      child: new CardCollectionComponent(game.cardCollections[4], true, Orientation.show1, _updateGameCallback)
+    ));
+
     // game.cardCollections[5] is just not shown
 
+
     return new Container(
       decoration: new BoxDecoration(backgroundColor: colors.Pink[500]),
-      child: new Stack(cardCollections)
+      child: new Flex(cardCollections, direction: FlexDirection.vertical)//new Stack(cardCollections)
     );
   }
 }
\ No newline at end of file
diff --git a/lib/logic/game.dart b/lib/logic/game.dart
index 8329ec9..0aeaf9d 100644
--- a/lib/logic/game.dart
+++ b/lib/logic/game.dart
@@ -66,6 +66,7 @@
   ];
 
   final Random random = new Random();
+  String debugString = 'hello?';
 
   Game.hearts(int playerNumber) : gameType = GameType.Hearts {
     // playerNumber would be used in a real game, but I have to ignore it for debugging.
@@ -90,15 +91,21 @@
   void move(Card card, List<Card> dest) {
     // The first step is to find the card. Where is it?
     // then we can remove it and add to the dest.
+    debugString = 'Moving... ${card.toString()}';
     int i = findCard(card);
-    assert(i != -1);
+    if (i == -1) {
+      debugString = 'NO... ${card.toString()}';
+      return;
+    }
     cardCollections[i].remove(card);
     dest.add(card);
+    debugString = 'Move ${i} ${card.toString()}';
+    print(debugString);
   }
 
   // Which card collection has the card?
   int findCard(Card card) {
-    for (var i = 0; i < cardCollections; i++) {
+    for (int i = 0; i < cardCollections.length; i++) {
       if (cardCollections[i].contains(card)) {
         return i;
       }
