diff --git a/baku-toolkit/lib/src/androidTest/java/io/v/baku/toolkit/bind/CollectionBindingTest.java b/baku-toolkit/lib/src/androidTest/java/io/v/baku/toolkit/bind/CollectionBindingTest.java
index 2b17d53..60ababf 100644
--- a/baku-toolkit/lib/src/androidTest/java/io/v/baku/toolkit/bind/CollectionBindingTest.java
+++ b/baku-toolkit/lib/src/androidTest/java/io/v/baku/toolkit/bind/CollectionBindingTest.java
@@ -37,7 +37,7 @@
                 mTable.put("Good morning", "starshine")));
 
         final ListView listView = new ListView(getContext());
-        try (final SyncbaseListAdapter<RxTable.Row<String>> adapter = CollectionBinding.builder()
+        try (final RxListAdapter<RxTable.Row<String>> adapter = CollectionBinding.builder()
                 .onError(t -> fail(Throwables.getStackTraceAsString(t)))
                 .viewAdapterContext(getContext())
                 .rxTable(mTable)
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/BaseBuilder.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/BaseBuilder.java
index 64ba08a..a0da69b 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/BaseBuilder.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/BaseBuilder.java
@@ -25,6 +25,7 @@
     protected Activity mActivity;
     protected RxTable mRxTable;
     protected CompositeSubscription mSubscriptionParent;
+    protected Subscription mLastSubscription;
     protected Action1<Throwable> mOnError;
 
     public T activity(final Activity activity) {
@@ -75,13 +76,21 @@
             mSubscriptionParent = new CompositeSubscription();
         }
         mSubscriptionParent.add(subscription);
+        mLastSubscription = subscription;
         return subscription;
     }
 
-    public Subscription getSubscription() {
+    /**
+     * @return the current subscription parent.
+     */
+    public CompositeSubscription getAllBindings() {
         return mSubscriptionParent;
     }
 
+    public Subscription getLastBinding() {
+        return mLastSubscription;
+    }
+
     public T onError(final Action1<Throwable> onError) {
         mOnError = onError;
         return mSelf;
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/CollectionAdapterBuilder.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/CollectionAdapterBuilder.java
index bbaf946..9a8c972 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/CollectionAdapterBuilder.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/CollectionAdapterBuilder.java
@@ -56,24 +56,24 @@
 
     public abstract Observable<? extends ListAccumulator<T>> buildListAccumulator();
 
-    public SyncbaseListAdapter<T> buildListAdapter() {
-        return subscribeAdapter(new SyncbaseListAdapter<>(
+    public RxListAdapter<T> buildListAdapter() {
+        return subscribeAdapter(new RxListAdapter<>(
                 buildListAccumulator(), getViewAdapter(), mBase.mOnError));
     }
 
-    public SyncbaseRecyclerAdapter<T, ?> buildRecyclerAdapter() {
-        return subscribeAdapter(new SyncbaseRecyclerAdapter<>(
+    public RxRecyclerAdapter<T, ?> buildRecyclerAdapter() {
+        return subscribeAdapter(new RxRecyclerAdapter<>(
                 buildListAccumulator(), getViewAdapter(), mBase.mOnError));
     }
 
-    public SyncbaseListAdapter<T> bindTo(final ListView listView) {
-        final SyncbaseListAdapter<T> adapter = buildListAdapter();
+    public RxListAdapter<T> bindTo(final ListView listView) {
+        final RxListAdapter<T> adapter = buildListAdapter();
         listView.setAdapter(adapter);
         return adapter;
     }
 
-    public SyncbaseRecyclerAdapter<T, ?> bindTo(final RecyclerView recyclerView) {
-        final SyncbaseRecyclerAdapter<T, ?> adapter = buildRecyclerAdapter();
+    public RxRecyclerAdapter<T, ?> bindTo(final RecyclerView recyclerView) {
+        final RxRecyclerAdapter<T, ?> adapter = buildRecyclerAdapter();
         recyclerView.setAdapter(adapter);
         return adapter;
     }
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/IdListAccumulator.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/IdListAccumulator.java
index b75997e..9ff9b85 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/IdListAccumulator.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/IdListAccumulator.java
@@ -48,4 +48,9 @@
         // TODO(rosswang): possibly index
         return mIds.indexOf(rowName);
     }
+
+    @Override
+    public ImmutableList<String> getListSnapshot() {
+        return mIds;
+    }
 }
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/LayoutAdapter.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/LayoutAdapter.java
new file mode 100644
index 0000000..eec0a29
--- /dev/null
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/LayoutAdapter.java
@@ -0,0 +1,30 @@
+// 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.toolkit.bind;
+
+import android.content.Context;
+import android.support.annotation.LayoutRes;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import lombok.RequiredArgsConstructor;
+
+@RequiredArgsConstructor
+public abstract class LayoutAdapter<T, VH extends ViewHolder> extends AbstractViewAdapter<T, VH> {
+
+    private final LayoutInflater mInflater;
+    @LayoutRes
+    private final int mResource;
+
+    public LayoutAdapter(final Context context, final @LayoutRes int resource) {
+        this(LayoutInflater.from(context), resource);
+    }
+
+    @Override
+    public View createView(final ViewGroup parent) {
+        return mInflater.inflate(mResource, parent, false);
+    }
+}
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulator.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulator.java
index b7d2f9c..2325e1b 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulator.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulator.java
@@ -4,6 +4,8 @@
 
 package io.v.baku.toolkit.bind;
 
+import com.google.common.collect.ImmutableList;
+
 public interface ListAccumulator<T> {
     boolean containsRow(String rowName);
     int getCount();
@@ -14,4 +16,6 @@
      *  not it has meaning) may vary by implementation.
      */
     int getRowIndex(String rowName);
+
+    ImmutableList<T> getListSnapshot();
 }
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulators.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulators.java
index f6737a4..babf78f 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulators.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/ListAccumulators.java
@@ -4,6 +4,8 @@
 
 package io.v.baku.toolkit.bind;
 
+import com.google.common.collect.ImmutableList;
+
 import java.util.NoSuchElementException;
 
 import io.v.rx.syncbase.RxTable;
@@ -33,6 +35,11 @@
         public int getRowIndex(final String rowName) {
             return -1;
         }
+
+        @Override
+        public ImmutableList<Object> getListSnapshot() {
+            return ImmutableList.of();
+        }
     };
 
     @SuppressWarnings("unchecked")
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/PrefixListAccumulator.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/PrefixListAccumulator.java
index af5bd6c..c03eece 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/PrefixListAccumulator.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/PrefixListAccumulator.java
@@ -4,6 +4,7 @@
 
 package io.v.baku.toolkit.bind;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Ordering;
 
 import java.util.ArrayList;
@@ -130,4 +131,9 @@
     public boolean containsRow(final String rowName) {
         return mRows.containsKey(rowName);
     }
+
+    @Override
+    public ImmutableList<RxTable.Row<T>> getListSnapshot() {
+        return ImmutableList.copyOf(mSorted);
+    }
 }
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SyncbaseListAdapter.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/RxListAdapter.java
similarity index 86%
rename from baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SyncbaseListAdapter.java
rename to baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/RxListAdapter.java
index 7877239..29b2f51 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SyncbaseListAdapter.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/RxListAdapter.java
@@ -17,7 +17,7 @@
 import rx.functions.Action1;
 
 @Accessors(prefix = "m")
-public class SyncbaseListAdapter<T> extends BaseAdapter
+public class RxListAdapter<T> extends BaseAdapter
         implements RangeAdapter, ListAccumulator<T> {
     private final ViewAdapter<? super T, ?> mViewAdapter;
     @Delegate
@@ -25,9 +25,9 @@
     @Getter
     private final Subscription mSubscription;
 
-    public SyncbaseListAdapter(final Observable<? extends ListAccumulator<T>> data,
-                               final ViewAdapter<? super T, ?> viewAdapter,
-                               final Action1<Throwable> onError) {
+    public RxListAdapter(final Observable<? extends ListAccumulator<T>> data,
+                         final ViewAdapter<? super T, ?> viewAdapter,
+                         final Action1<Throwable> onError) {
         mViewAdapter = viewAdapter;
         mSubscription = data
                 .observeOn(AndroidSchedulers.mainThread())
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SyncbaseRecyclerAdapter.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/RxRecyclerAdapter.java
similarity index 85%
rename from baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SyncbaseRecyclerAdapter.java
rename to baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/RxRecyclerAdapter.java
index 1bc4d83..34ee173 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/SyncbaseRecyclerAdapter.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/RxRecyclerAdapter.java
@@ -16,8 +16,8 @@
 import rx.functions.Action1;
 
 @Accessors(prefix = "m")
-public class SyncbaseRecyclerAdapter<T, VH extends ViewHolder>
-        extends RecyclerView.Adapter<SyncbaseRecyclerAdapter.ViewHolderAdapter<VH>>
+public class RxRecyclerAdapter<T, VH extends ViewHolder>
+        extends RecyclerView.Adapter<RxRecyclerAdapter.ViewHolderAdapter<VH>>
         implements RangeAdapter, ListAccumulator<T> {
 
     public static class ViewHolderAdapter<B extends ViewHolder> extends RecyclerView.ViewHolder {
@@ -34,9 +34,9 @@
     @Getter
     private final Subscription mSubscription;
 
-    public SyncbaseRecyclerAdapter(final Observable<? extends ListAccumulator<T>> data,
-                                   final ViewAdapter<? super T, VH> viewAdapter,
-                                   final Action1<Throwable> onError) {
+    public RxRecyclerAdapter(final Observable<? extends ListAccumulator<T>> data,
+                             final ViewAdapter<? super T, VH> viewAdapter,
+                             final Action1<Throwable> onError) {
         mViewAdapter = viewAdapter;
         mSubscription = data
                 .observeOn(AndroidSchedulers.mainThread())
diff --git a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/TextViewAdapter.java b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/TextViewAdapter.java
index a233704..9b77972 100644
--- a/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/TextViewAdapter.java
+++ b/baku-toolkit/lib/src/main/java/io/v/baku/toolkit/bind/TextViewAdapter.java
@@ -9,7 +9,6 @@
 import android.support.annotation.LayoutRes;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.ViewGroup;
 import android.widget.TextView;
 
 import java.util.Objects;
@@ -17,11 +16,8 @@
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import lombok.experimental.Accessors;
-import lombok.extern.slf4j.Slf4j;
 
-@RequiredArgsConstructor
-@Slf4j
-public class TextViewAdapter extends AbstractViewAdapter<Object, TextViewAdapter.ViewHolder> {
+public class TextViewAdapter extends LayoutAdapter<Object, TextViewAdapter.ViewHolder> {
     @Accessors(prefix = "m")
     @Getter
     @RequiredArgsConstructor
@@ -48,9 +44,6 @@
         }
     }
 
-    private final LayoutInflater mInflater;
-    @LayoutRes
-    private final int mResource;
     @IdRes
     private final int mFieldId;
 
@@ -67,9 +60,10 @@
         this(LayoutInflater.from(context), resource, textViewResourceId);
     }
 
-    @Override
-    public View createView(final ViewGroup parent) {
-        return mInflater.inflate(mResource, parent, false);
+    public TextViewAdapter(final LayoutInflater inflater, final @LayoutRes int resource,
+                           final @IdRes int textViewResourceId) {
+        super(inflater, resource);
+        mFieldId = textViewResourceId;
     }
 
     @Override
diff --git a/baku-toolkit/lib/src/main/java/io/v/rx/syncbase/RxTable.java b/baku-toolkit/lib/src/main/java/io/v/rx/syncbase/RxTable.java
index ead7b5f..ba7e941 100644
--- a/baku-toolkit/lib/src/main/java/io/v/rx/syncbase/RxTable.java
+++ b/baku-toolkit/lib/src/main/java/io/v/rx/syncbase/RxTable.java
@@ -326,8 +326,13 @@
     }
 
     public <T> Observable<Void> put(final String key, final T value,
+                                    final TypeToken<T> tt) {
+        return exec(t -> t.put(mVContext, key, value, tt.getType()));
+    }
+
+    public <T> Observable<Void> put(final String key, final T value,
                                     final Class<T> type) {
-        return exec(t -> t.put(mVContext, key, value, type));
+        return put(key, value, TypeToken.of(type));
     }
 
     @SuppressWarnings("unchecked")
@@ -336,11 +341,15 @@
     }
 
     @SuppressWarnings("unchecked")
-    public <T> Observable<T> get(final String key, final Class<? extends T> type) {
-        return exec(t -> t.get(mVContext, key, type))
+    public <T> Observable<T> get(final String key, final TypeToken<? extends T> tt) {
+        return exec(t -> t.get(mVContext, key, tt.getType()))
                 .map(x -> (T) x);
     }
 
+    public <T> Observable<T> get(final String key, final Class<? extends T> type) {
+        return get(key, TypeToken.of(type));
+    }
+
     public <T> Observable<T> get(final String key, final Class<? extends T> type,
                                  final T defaultValue) {
         return get(key, type).onErrorResumeNext(t -> t instanceof NoExistException ?
