diff --git a/examples/hellobaku/android/app/src/main/AndroidManifest.xml b/examples/hellobaku/android/app/src/main/AndroidManifest.xml
index 40fdc1f..f3d2c93 100644
--- a/examples/hellobaku/android/app/src/main/AndroidManifest.xml
+++ b/examples/hellobaku/android/app/src/main/AndroidManifest.xml
@@ -16,6 +16,24 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
+        <activity
+            android:name=".HelloActivityComposition"
+            android:label="@string/comp_label" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <activity
+            android:name=".HelloActivityALaCarte"
+            android:label="@string/alacarte_label" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
     </application>
 
 </manifest>
diff --git a/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivity.java b/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivity.java
index 4e3623e..7c12d40 100644
--- a/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivity.java
+++ b/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivity.java
@@ -10,7 +10,7 @@
 
 public class HelloActivity extends BakuActivity {
     @Override
-    protected void onCreate(Bundle savedInstanceState) {
+    protected void onCreate(final Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_hello);
 
diff --git a/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivityALaCarte.java b/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivityALaCarte.java
new file mode 100644
index 0000000..f34b6e6
--- /dev/null
+++ b/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivityALaCarte.java
@@ -0,0 +1,60 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package io.v.baku.hellobaku;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import io.v.baku.toolkit.VAndroidContextMixin;
+import io.v.baku.toolkit.VAndroidContextTrait;
+import io.v.baku.toolkit.bind.SyncbaseBinding;
+import io.v.rx.syncbase.GlobalUserSyncgroup;
+import io.v.rx.syncbase.RxDb;
+import io.v.rx.syncbase.RxSyncbase;
+import rx.Subscription;
+
+public class HelloActivityALaCarte extends Activity {
+    private RxSyncbase mSb;
+    private Subscription mActivityDataBindings;
+
+    @Override
+    protected void onCreate(final Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_hello);
+
+        final VAndroidContextTrait<HelloActivityALaCarte> vActivity =
+                VAndroidContextMixin.withDefaults(this, savedInstanceState);
+
+        mSb = new RxSyncbase(vActivity);
+        final RxDb db = mSb.rxApp("app").rxDb("db");
+
+        // We want these data bindings to share the lifecycle of the Activity from onCreate to
+        // onDestroy, so keep track of their CompositeSubscription and unsubscribe in onDestroy.
+        mActivityDataBindings = SyncbaseBinding.builder()
+                .activity(vActivity)
+                .rxTable(db.rxTable("t"))
+
+                .key("text")
+                .bindTo(R.id.textView)
+                .bindTo(R.id.editText)
+
+                .getSubscription();
+
+        GlobalUserSyncgroup.builder()
+                .activity(vActivity)
+                .syncbase(mSb).db(db)
+                .prefix("t")
+                .sgSuffix("myGlobalUserSyncgroup")
+                .build()
+                .join();
+    }
+
+    @Override
+    protected void onDestroy() {
+        mActivityDataBindings.unsubscribe();
+        mSb.close();
+        super.onDestroy();
+    }
+}
diff --git a/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivityComposition.java b/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivityComposition.java
new file mode 100644
index 0000000..6aa337a
--- /dev/null
+++ b/examples/hellobaku/android/app/src/main/java/io/v/baku/hellobaku/HelloActivityComposition.java
@@ -0,0 +1,33 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package io.v.baku.hellobaku;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+import io.v.baku.toolkit.BakuActivityMixin;
+import io.v.baku.toolkit.BakuActivityTrait;
+
+public class HelloActivityComposition extends Activity {
+    private BakuActivityTrait<HelloActivityComposition> mBaku;
+
+    @Override
+    protected void onCreate(final Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_hello);
+
+        mBaku = new BakuActivityMixin<>(this, savedInstanceState);
+
+        mBaku.binder().key("text")
+                .bindTo(R.id.textView)
+                .bindTo(R.id.editText);
+    }
+
+    @Override
+    protected void onDestroy() {
+        mBaku.close();
+        super.onDestroy();
+    }
+}
diff --git a/examples/hellobaku/android/app/src/main/res/values/strings.xml b/examples/hellobaku/android/app/src/main/res/values/strings.xml
index 778a970..b3c397f 100644
--- a/examples/hellobaku/android/app/src/main/res/values/strings.xml
+++ b/examples/hellobaku/android/app/src/main/res/values/strings.xml
@@ -1,6 +1,5 @@
 <resources>
     <string name="app_name">Hello Baku</string>
-
-    <string name="hello_world">Hello world!</string>
-    <string name="action_settings">Settings</string>
+    <string name="comp_label">Hello Baku - Composition</string>
+    <string name="alacarte_label">Hello Baku - À la Carte</string>
 </resources>
