diff --git a/projects/dice_roller/app/src/main/java/v/io/diceroller/MainActivity.java b/projects/dice_roller/app/src/main/java/v/io/diceroller/MainActivity.java
index cb789e8..0473891 100644
--- a/projects/dice_roller/app/src/main/java/v/io/diceroller/MainActivity.java
+++ b/projects/dice_roller/app/src/main/java/v/io/diceroller/MainActivity.java
@@ -65,22 +65,25 @@
                 final Collection userdata = Syncbase.database().getUserdataCollection();
 
                 // On dice roll, put a random number into the userdata collection under RESULT_KEY.
-                final Button button = (Button) findViewById(R.id.buttonRoll);
+                final View button = findViewById(R.id.buttonRoll);
                 if (button == null) {
                     Log.e(TAG, "Resource not found: " + R.id.buttonRoll);
-                } else {
-                    button.setEnabled(true);
-                    button.setOnClickListener(new View.OnClickListener() {
-                        public void onClick(View v) {
-                            int randomNumber = new Random().nextInt(6) + 1;
-                            try {
-                                userdata.put(RESULT_KEY, randomNumber);
-                            } catch (SyncbaseException e) {
-                                Log.e(TAG, e.toString());
-                            }
-                        }
-                    });
+                    return;
                 }
+                button.setEnabled(true);
+                button.setOnClickListener(new View.OnClickListener() {
+                    private Random random = new Random();
+
+                    @Override
+                    public void onClick(View v) {
+                        int randomNumber = random.nextInt(6) + 1;
+                        try {
+                            userdata.put(RESULT_KEY, randomNumber);
+                        } catch (SyncbaseException e) {
+                            Log.e(TAG, "put error", e);
+                        }
+                    }
+                });
 
                 Syncbase.database().addWatchChangeHandler(new Database.WatchChangeHandler() {
                     @Override
@@ -95,13 +98,13 @@
 
                     @Override
                     public void onError(Throwable e) {
-                        Log.e(TAG, "onError: " + e.toString());
+                        Log.e(TAG, "watch error", e);
                     }
 
                     private void onChange(Iterator<WatchChange> changes) {
                         while (changes.hasNext()) {
                             WatchChange watchChange = changes.next();
-                            Log.i(TAG, watchChange.toString());
+                            Log.i(TAG, "Received watch change: " + watchChange);
                             if (watchChange.getCollectionId().getName().equals(
                                     Syncbase.USERDATA_NAME) &&
                                     watchChange.getEntityType() == WatchChange.EntityType.ROW &&
@@ -110,7 +113,7 @@
                                 try {
                                     updateResult(watchChange.getValue(Integer.class));
                                 } catch (SyncbaseException e) {
-                                    Log.e(TAG, e.toString());
+                                    Log.e(TAG, "watch change error", e);
                                 }
                             }
                         }
@@ -123,7 +126,7 @@
 
         @Override
         public void onError(Throwable e) {
-            Log.e(TAG, "LoginCallback: onError: " + e.toString());
+            Log.e(TAG, "LoginCallback: onError", e);
         }
     }
 
