diff --git a/lib/components/card.dart b/lib/components/card.dart
index cc71917..e3dbd89 100644
--- a/lib/components/card.dart
+++ b/lib/components/card.dart
@@ -121,21 +121,20 @@
     widgets.Widget image = new widgets.Opacity(
         opacity: config.visible ? 1.0 : 0.0,
         child: new widgets.Transform(
-            child: _imageFromCard(config.card, config.faceUp),
+            child: _imageFromCard(config.card, config.faceUp, config.width, config.height),
             transform:
                 new vector_math.Matrix4.identity().rotateZ(config.rotation),
             alignment: new FractionalOffset(0.5, 0.5)));
 
-    return new widgets.Container(
-        width: config.width, height: config.height, child: image);
+    return image;
   }
 }
 
-widgets.Widget _imageFromCard(logic_card.Card c, bool faceUp) {
+widgets.Widget _imageFromCard(logic_card.Card c, bool faceUp, double width, double height) {
   // TODO(alexfandrianto): Instead of 'default', what if we were told which theme to use?
   String imageName =
       "images/default/${c.deck}/${faceUp ? 'up' : 'down'}/${c.identifier}.png";
-  return new widgets.NetworkImage(src: imageName);
+  return new widgets.AssetImage(name: imageName, width: width, height: height);
 }
 
 class _ZCardState extends widgets.State<ZCard> {
@@ -232,20 +231,16 @@
 
   widgets.Widget build(widgets.BuildContext context) {
     widgets.Widget image = new widgets.Transform(
-        child: _imageFromCard(config.card, config.faceUp),
+        child: _imageFromCard(config.card, config.faceUp, config.width, config.height),
         transform: new vector_math.Matrix4.identity().rotateZ(config.rotation),
         alignment: new FractionalOffset(0.5, 0.5));
 
-    // Size the card appropriately.
-    widgets.Widget containedCard = new widgets.Container(
-        width: config.width, height: config.height, child: image);
-
     // Set up the slide transition.
     // During animation, we must ignore all events.
     widgets.Widget retWidget = new widgets.SlideTransition(
         performance: _performance.view,
         position: _performance.variable,
-        child: containedCard);
+        child: image);
 
     return retWidget;
   }
diff --git a/lib/components/card_collection.dart b/lib/components/card_collection.dart
index 480aa3d..2248fba 100644
--- a/lib/components/card_collection.dart
+++ b/lib/components/card_collection.dart
@@ -190,11 +190,9 @@
           child: new Center(
               child: new Opacity(
                   opacity: 0.45,
-                  child: new Container(
-                      height: config.heightCard,
-                      child: emptyBackgroundImage == ""
-                          ? null
-                          : new NetworkImage(src: emptyBackgroundImage)))));
+                  child: emptyBackgroundImage == ""
+                      ? null
+                      : new AssetImage(name: emptyBackgroundImage, fit: ImageFit.scaleDown, height: config.heightCard))));
     }
 
     double w = config.width ?? config.widthCard * 5;
diff --git a/lib/components/croupier_profile.dart b/lib/components/croupier_profile.dart
index cf3de40..d8fe840 100644
--- a/lib/components/croupier_profile.dart
+++ b/lib/components/croupier_profile.dart
@@ -15,6 +15,6 @@
         decoration:
             new BoxDecoration(backgroundColor: new Color(settings.color)),
         child: new Column(
-            [new NetworkImage(src: CroupierSettings.makeAvatarUrl(settings.avatar)), new Text(settings.name)]));
+            [new AssetImage(name: CroupierSettings.makeAvatarUrl(settings.avatar)), new Text(settings.name)]));
   }
 }
diff --git a/lib/components/croupier_settings.dart b/lib/components/croupier_settings.dart
index d34bc2e..fe6f194 100644
--- a/lib/components/croupier_settings.dart
+++ b/lib/components/croupier_settings.dart
@@ -61,7 +61,7 @@
   }
 
   Widget _makeImageButton(String url, NoArgCb cb) {
-    return new FlatButton(child: new NetworkImage(src: CroupierSettings.makeAvatarUrl(url)), onPressed: cb);
+    return new FlatButton(child: new AssetImage(name: CroupierSettings.makeAvatarUrl(url)), onPressed: cb);
   }
 
   Widget build(BuildContext context) {
@@ -70,7 +70,7 @@
     w.add(_makeButtonRow(
         colorKey, _makeColoredRectangle(config.settings.color, "", null)));
     w.add(_makeButtonRow(
-        avatarKey, new NetworkImage(src: CroupierSettings.makeAvatarUrl(config.settings.avatar))));
+        avatarKey, new AssetImage(name: CroupierSettings.makeAvatarUrl(config.settings.avatar))));
 
     w.add(new FlatButton(child: new Text("Return"), onPressed: config.backCb));
     return new Column(w);
diff --git a/lib/src/syncbase/log_writer.dart b/lib/src/syncbase/log_writer.dart
index e7f6b9f..90fedc3 100644
--- a/lib/src/syncbase/log_writer.dart
+++ b/lib/src/syncbase/log_writer.dart
@@ -81,7 +81,7 @@
 
     // Start to watch the stream.
     Stream<WatchChange> watchStream =
-        db.watch(tbName, this.logPrefix, await db.getResumeMarker());
+        db.watch(tbName, this.logPrefix, UTF8.encode("now"));
     _startWatch(watchStream); // Don't wait for this future.
   }
 
diff --git a/lib/src/syncbase/settings_manager.dart b/lib/src/syncbase/settings_manager.dart
index dbfed6f..66fccee 100644
--- a/lib/src/syncbase/settings_manager.dart
+++ b/lib/src/syncbase/settings_manager.dart
@@ -60,7 +60,7 @@
 
     // Start to watch the stream for the shared settings table.
     Stream<sc.WatchChange> watchStream = db.watch(util.tableNameSettings,
-        _settingsWatchSyncPrefix, await db.getResumeMarker());
+        _settingsWatchSyncPrefix, UTF8.encode("now"));
     _startWatchSettings(watchStream); // Don't wait for this future.
     _loadSettings(tb); // Don't wait for this future.
   }
@@ -181,7 +181,7 @@
 
     // Watch for the players in the game.
     Stream<sc.WatchChange> watchStream = db.watch(util.tableNameGames,
-        util.syncgamePrefix(gameID) + "/players", await db.getResumeMarker());
+        util.syncgamePrefix(gameID) + "/players", UTF8.encode("now"));
     _startWatchPlayers(watchStream); // Don't wait for this future.
 
     print("Now writing to some rows of ${gameID}");
@@ -214,7 +214,7 @@
 
     // Watch for the players in the game.
     Stream<sc.WatchChange> watchStream = db.watch(util.tableNameGames,
-        util.syncgamePrefix(gameID) + "/players", await db.getResumeMarker());
+        util.syncgamePrefix(gameID) + "/players", UTF8.encode("now"));
     _startWatchPlayers(watchStream); // Don't wait for this future.
 
     // Also write yourself to the table as player |NUM_PLAYERS - 1|
