diff --git a/app/build.gradle b/app/build.gradle
index ee29892f92c50a6faabeba2912400801a3eed023..4fd33973823acc5c952040eafb835338b40590e8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -94,10 +94,7 @@ android {
         targetSdkVersion 24
         versionCode versionBuild
         versionName rawVersionName + " Build #" + versionBuild
-        buildConfigField "String", "GitHash", "\"${getGitHash()}\""
-    }
-    dataBinding {
-        enabled = true
+        buildConfigField "String", "VERSION_HASH", "\"${getGitHash()}\""
     }
     defaultConfig {
         vectorDrawables.useSupportLibrary = true
@@ -133,6 +130,11 @@ android {
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
         }
     }
+    applicationVariants.all { variant ->
+        variant.resValue "string", "versionName", variant.versionName
+        variant.resValue "string", "versionCode", String.valueOf(versionBuild)
+        variant.resValue "string", "versionHash", getGitHash()
+    }
     compileOptions {
         sourceCompatibility JavaVersion.VERSION_1_8
         targetCompatibility JavaVersion.VERSION_1_7
diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/Buffer.java b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/Buffer.java
index 67ec5c9b4bda8a7db42ccec01c877e7285d5191d..f1f404a9a83e6e2e5a5359ea1b2b442a3f578995 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/Buffer.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/Buffer.java
@@ -21,11 +21,11 @@
 
 package de.kuschku.libquassel.localtypes.buffers;
 
-import android.databinding.ObservableField;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 
 import de.kuschku.libquassel.primitives.types.BufferInfo;
+import de.kuschku.util.observables.lists.ObservableElement;
 
 public interface Buffer {
     @NonNull
@@ -37,7 +37,7 @@ public interface Buffer {
     String getName();
 
     @NonNull
-    ObservableField<BufferInfo.BufferStatus> getStatus();
+    ObservableElement<BufferInfo.BufferStatus> getStatus();
 
     void renameBuffer(@NonNull String newName);
 
diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/ChannelBuffer.java b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/ChannelBuffer.java
index 162909106142c4cdf719f9ecf9a0fe0af8ef1d23..b68a12f341299a92d95a02a3a67702f54f2a277f 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/ChannelBuffer.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/ChannelBuffer.java
@@ -21,18 +21,18 @@
 
 package de.kuschku.libquassel.localtypes.buffers;
 
-import android.databinding.ObservableField;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 
 import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.primitives.types.BufferInfo;
 import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel;
+import de.kuschku.util.observables.lists.ObservableElement;
 
 public class ChannelBuffer implements Buffer {
     @NonNull
     private final Client client;
-    private final ObservableField<BufferInfo.BufferStatus> status = new ObservableField<>();
+    private final ObservableElement<BufferInfo.BufferStatus> status = new ObservableElement<>();
     @NonNull
     private BufferInfo info;
 
@@ -60,7 +60,7 @@ public class ChannelBuffer implements Buffer {
 
     @NonNull
     @Override
-    public ObservableField<BufferInfo.BufferStatus> getStatus() {
+    public ObservableElement<BufferInfo.BufferStatus> getStatus() {
         // FIXME: Make this dynamic
         status.set(getChannel() == null ? BufferInfo.BufferStatus.OFFLINE : BufferInfo.BufferStatus.ONLINE);
         return status;
diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/QueryBuffer.java b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/QueryBuffer.java
index 5b3fc8d9aead95d48bfe1ffc043ffeefc2c1149a..abba42b89345f0a093756b6f795cfca4a4da227b 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/QueryBuffer.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/QueryBuffer.java
@@ -21,18 +21,18 @@
 
 package de.kuschku.libquassel.localtypes.buffers;
 
-import android.databinding.ObservableField;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 
 import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.primitives.types.BufferInfo;
 import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser;
+import de.kuschku.util.observables.lists.ObservableElement;
 
 public class QueryBuffer implements Buffer {
     @NonNull
     private final Client client;
-    private final ObservableField<BufferInfo.BufferStatus> status = new ObservableField<>();
+    private final ObservableElement<BufferInfo.BufferStatus> status = new ObservableElement<>();
     @NonNull
     private BufferInfo info;
 
@@ -60,7 +60,7 @@ public class QueryBuffer implements Buffer {
 
     @NonNull
     @Override
-    public ObservableField<BufferInfo.BufferStatus> getStatus() {
+    public ObservableElement<BufferInfo.BufferStatus> getStatus() {
         // FIXME: Make this dynamic
         status.set((getUser() == null) ? BufferInfo.BufferStatus.OFFLINE :
                 (getUser().isAway()) ? BufferInfo.BufferStatus.AWAY :
diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/StatusBuffer.java b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/StatusBuffer.java
index fd3158ee54a6c651989ec2cda6864061c99101e4..f1b8ce7baa55f40cd5d775d073ea4d106262f224 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/StatusBuffer.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/buffers/StatusBuffer.java
@@ -21,18 +21,18 @@
 
 package de.kuschku.libquassel.localtypes.buffers;
 
-import android.databinding.ObservableField;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 
 import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.primitives.types.BufferInfo;
 import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
+import de.kuschku.util.observables.lists.ObservableElement;
 
 public class StatusBuffer implements Buffer {
     @NonNull
     private final Client client;
-    private final ObservableField<BufferInfo.BufferStatus> status = new ObservableField<>();
+    private final ObservableElement<BufferInfo.BufferStatus> status = new ObservableElement<>();
     @NonNull
     private BufferInfo info;
 
@@ -68,7 +68,7 @@ public class StatusBuffer implements Buffer {
 
     @NonNull
     @Override
-    public ObservableField<BufferInfo.BufferStatus> getStatus() {
+    public ObservableElement<BufferInfo.BufferStatus> getStatus() {
         updateStatus();
         return status;
     }
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferSyncer.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferSyncer.java
index 915c6df82669657e76db58a9de44ea1b43203661..6ad4f4980f51214e43a396d50ceaa60bc64abbb7 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferSyncer.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferSyncer.java
@@ -21,7 +21,6 @@
 
 package de.kuschku.libquassel.syncables.types.impl;
 
-import android.databinding.ObservableInt;
 import android.support.annotation.NonNull;
 import android.util.SparseArray;
 import android.util.SparseIntArray;
@@ -39,6 +38,7 @@ import de.kuschku.libquassel.syncables.types.interfaces.QBacklogManager;
 import de.kuschku.libquassel.syncables.types.interfaces.QBufferSyncer;
 import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig;
 import de.kuschku.util.observables.lists.ObservableComparableSortedList;
+import de.kuschku.util.observables.lists.ObservableElement;
 import de.kuschku.util.observables.lists.ObservableSet;
 import de.kuschku.util.observables.lists.ObservableSortedList;
 
@@ -47,7 +47,7 @@ import static de.kuschku.util.AndroidAssert.assertNotNull;
 public class BufferSyncer extends ABufferSyncer {
 
     @NonNull
-    private final SparseArray<ObservableInt> activities = new SparseArray<>();
+    private final SparseArray<ObservableElement<Integer>> activities = new SparseArray<>();
     @NonNull
     private SparseIntArray lastSeenMsgs = new SparseIntArray();
     @NonNull
@@ -211,7 +211,7 @@ public class BufferSyncer extends ABufferSyncer {
         _update();
     }
 
-    public ObservableInt activity(int bufferid) {
+    public ObservableElement<Integer> activity(int bufferid) {
         assertNotNull(activities);
         ensureExistingActivity(bufferid);
 
@@ -227,7 +227,7 @@ public class BufferSyncer extends ABufferSyncer {
 
     private void ensureExistingActivity(int bufferid) {
         if (activities.get(bufferid) == null)
-            activities.put(bufferid, new ObservableInt());
+            activities.put(bufferid, new ObservableElement<>(0));
     }
 
     public void addActivity(int bufferid, int activity) {
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferSyncer.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferSyncer.java
index 2cba3c90380d62f0fc185f02e5906a86c8448464..e9874cfda506064d170546df161a72eb93bb7b26 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferSyncer.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferSyncer.java
@@ -21,11 +21,11 @@
 
 package de.kuschku.libquassel.syncables.types.interfaces;
 
-import android.databinding.ObservableInt;
 import android.util.SparseIntArray;
 
 import de.kuschku.libquassel.message.Message;
 import de.kuschku.libquassel.syncables.Synced;
+import de.kuschku.util.observables.lists.ObservableElement;
 import de.kuschku.util.observables.lists.ObservableSet;
 
 public interface QBufferSyncer extends QObservable<QBufferSyncer> {
@@ -99,7 +99,7 @@ public interface QBufferSyncer extends QObservable<QBufferSyncer> {
     void _markBufferAsRead(int buffer);
 
 
-    ObservableInt activity(int bufferid);
+    ObservableElement<Integer> activity(int bufferid);
 
     void setActivity(int bufferid, int activity);
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/ViewIntBinder.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/ViewIntBinder.java
index 34c679c3e94f629e092712627d90534b2ec04327..afb336b43fc7c6f493a216e60e6a001153a11b63 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/ViewIntBinder.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/ViewIntBinder.java
@@ -21,8 +21,6 @@
 
 package de.kuschku.quasseldroid_ng.ui;
 
-import android.databinding.Observable;
-import android.databinding.ObservableInt;
 import android.view.View;
 import android.widget.TextView;
 
@@ -31,41 +29,32 @@ import com.google.common.base.Function;
 import java.util.HashSet;
 import java.util.Set;
 
+import de.kuschku.util.observables.callbacks.GeneralCallback;
+import de.kuschku.util.observables.lists.ObservableElement;
+
 public class ViewIntBinder {
-    private final ObservableInt field;
-    private final Set<Observable.OnPropertyChangedCallback> callbacks = new HashSet<>();
+    private final ObservableElement<Integer> field;
+    private final Set<GeneralCallback<Integer>> callbacks = new HashSet<>();
 
-    public ViewIntBinder(ObservableInt field) {
+    public ViewIntBinder(ObservableElement<Integer> field) {
         this.field = field;
     }
 
     public void bindBackgroundColor(View v, Function<Integer, Integer> mapper) {
         v.setBackgroundColor(mapper.apply(field.get()));
-        Observable.OnPropertyChangedCallback callback = new Observable.OnPropertyChangedCallback() {
-            @Override
-            public void onPropertyChanged(Observable sender, int propertyId) {
-                v.setBackgroundColor(mapper.apply(field.get()));
-            }
-        };
+        GeneralCallback<Integer> callback = object -> v.setBackgroundColor(mapper.apply(object));
         callbacks.add(callback);
-        field.addOnPropertyChangedCallback(callback);
+        field.addCallback(callback);
     }
 
     public void bindTextColor(TextView v, Function<Integer, Integer> mapper) {
         v.setTextColor(mapper.apply(field.get()));
-        Observable.OnPropertyChangedCallback callback = new Observable.OnPropertyChangedCallback() {
-            @Override
-            public void onPropertyChanged(Observable sender, int propertyId) {
-                v.setTextColor(mapper.apply(field.get()));
-            }
-        };
+        GeneralCallback<Integer> callback = object -> v.setTextColor(mapper.apply(object));
         callbacks.add(callback);
-        field.addOnPropertyChangedCallback(callback);
+        field.addCallback(callback);
     }
 
     public void unbind() {
-        for (Observable.OnPropertyChangedCallback callback : callbacks) {
-            field.removeOnPropertyChangedCallback(callback);
-        }
+        field.removeCallbacks();
     }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java
index b58eacf182598ddae4887c1267862429504d4255..446faf819804005d1e2dea6a2f21881ecfb64fc6 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java
@@ -21,7 +21,6 @@
 
 package de.kuschku.quasseldroid_ng.ui.chat.drawer;
 
-import android.databinding.ObservableField;
 import android.os.Parcelable;
 import android.support.annotation.Nullable;
 import android.support.v7.widget.LinearLayoutManager;
@@ -42,6 +41,7 @@ import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
 import de.kuschku.quasseldroid_ng.ui.theme.AppContext;
 import de.kuschku.util.observables.callbacks.ElementCallback;
 import de.kuschku.util.observables.callbacks.UICallback;
+import de.kuschku.util.observables.lists.ObservableElement;
 import de.kuschku.util.observables.lists.ObservableSortedList;
 
 import static de.kuschku.util.AndroidAssert.assertNotNull;
@@ -51,7 +51,7 @@ public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkVi
     private final ObservableSortedList<NetworkItem> items;
     private final Map<QNetwork, NetworkItem> itemMap = new WeakHashMap<>();
     private final Map<Integer, BufferViewHolder> bufferViewHolderMap = new WeakHashMap<>();
-    private final ObservableField<Boolean> showAll = new ObservableField<>(false);
+    private final ObservableElement<Boolean> showAll = new ObservableElement<>(false);
     private QBufferViewConfig config;
     private final ElementCallback<QNetwork> callback = new ElementCallback<QNetwork>() {
         @Override
@@ -298,7 +298,7 @@ public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkVi
         return -1;
     }
 
-    public ObservableField<Boolean> showAll() {
+    public ObservableElement<Boolean> showAll() {
         return showAll;
     }
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewHolder.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewHolder.java
index 30c84c57acd49cea3ca85d87852fd18058ddf709..34d068acd4eef2e65ad6fa7ab30818b8ecff15d3 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewHolder.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewHolder.java
@@ -21,8 +21,6 @@
 
 package de.kuschku.quasseldroid_ng.ui.chat.drawer;
 
-import android.databinding.Observable;
-import android.databinding.ObservableField;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.StateListDrawable;
 import android.support.annotation.LayoutRes;
@@ -51,6 +49,8 @@ import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser;
 import de.kuschku.quasseldroid_ng.R;
 import de.kuschku.quasseldroid_ng.ui.ViewIntBinder;
 import de.kuschku.quasseldroid_ng.ui.theme.AppContext;
+import de.kuschku.util.observables.callbacks.GeneralCallback;
+import de.kuschku.util.observables.lists.ObservableElement;
 
 public class BufferViewHolder extends ChildViewHolder {
 
@@ -67,8 +67,8 @@ public class BufferViewHolder extends ChildViewHolder {
     TextView name;
     @Bind(R.id.material_drawer_description)
     TextView description;
-    private ObservableField<BufferInfo.BufferStatus> status;
-    private Observable.OnPropertyChangedCallback callback;
+    private ObservableElement<BufferInfo.BufferStatus> status;
+    private GeneralCallback<BufferInfo.BufferStatus> callback;
     private ViewIntBinder viewIntBinder;
     private boolean selected = false;
     private boolean checked = false;
@@ -92,7 +92,7 @@ public class BufferViewHolder extends ChildViewHolder {
 
     public void bind(OnBufferClickListener listener, OnBufferLongClickListener longClickListener, Buffer buffer) {
         if (status != null)
-            status.removeOnPropertyChangedCallback(callback);
+            status.removeCallback(callback);
         status = buffer.getStatus();
         name.setText(buffer.getName());
         if (viewIntBinder != null) viewIntBinder.unbind();
@@ -110,13 +110,8 @@ public class BufferViewHolder extends ChildViewHolder {
 
         BufferInfo.Type type = buffer.getInfo().type;
         setIcon(context, type, status);
-        callback = new Observable.OnPropertyChangedCallback() {
-            @Override
-            public void onPropertyChanged(Observable sender, int propertyId) {
-                setIcon(context, type, status);
-            }
-        };
-        status.addOnPropertyChangedCallback(callback);
+        callback = object -> setIcon(context, type, status);
+        status.addCallback(callback);
     }
 
     @NonNull
@@ -155,7 +150,7 @@ public class BufferViewHolder extends ChildViewHolder {
         itemView.setSelected(selected || checked);
     }
 
-    private void setIcon(AppContext context, BufferInfo.Type type, ObservableField<BufferInfo.BufferStatus> status) {
+    private void setIcon(AppContext context, BufferInfo.Type type, ObservableElement<BufferInfo.BufferStatus> status) {
         icon.setImageDrawable(context.themeUtil().statusDrawables.of(type, status.get()));
     }
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java
index aa299fc059c3eaa9517d067caae61f8f2389f84d..6eed74b4f7587d1d007053aacb084c07d0d6d039 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java
@@ -21,8 +21,6 @@
 
 package de.kuschku.quasseldroid_ng.ui.chat.drawer;
 
-import android.databinding.Observable;
-
 import com.bignerdranch.expandablerecyclerview.Model.ParentListItem;
 
 import java.util.List;
@@ -105,12 +103,7 @@ public class NetworkItem implements ParentListItem {
         this.context = context;
         this.config = config;
         this.network = network;
-        bufferViewConfigAdapter.showAll().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
-            @Override
-            public void onPropertyChanged(Observable sender, int propertyId) {
-                setShowAll(bufferViewConfigAdapter.showAll().get());
-            }
-        });
+        bufferViewConfigAdapter.showAll().addCallback(object -> setShowAll(object));
         setShowAll(bufferViewConfigAdapter.showAll().get());
         this.buffers.addCallback(new UICallback() {
             @Override
diff --git a/app/src/main/java/de/kuschku/util/observables/lists/ObservableElement.java b/app/src/main/java/de/kuschku/util/observables/lists/ObservableElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..b7fc36acaf78e10d78f8f02cb2772094d0fdb154
--- /dev/null
+++ b/app/src/main/java/de/kuschku/util/observables/lists/ObservableElement.java
@@ -0,0 +1,63 @@
+/*
+ * QuasselDroid - Quassel client for Android
+ * Copyright (C) 2016 Janne Koschinski
+ * Copyright (C) 2016 Ken Børge Viktil
+ * Copyright (C) 2016 Magnus Fjell
+ * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.util.observables.lists;
+
+import de.kuschku.util.observables.IObservable;
+import de.kuschku.util.observables.callbacks.GeneralCallback;
+import de.kuschku.util.observables.callbacks.wrappers.MultiGeneralCallback;
+
+public class ObservableElement<T> implements IObservable<GeneralCallback<T>> {
+    private MultiGeneralCallback<T> callbacks = MultiGeneralCallback.of();
+
+    private T value;
+
+    public ObservableElement(T value) {
+        this.value = value;
+    }
+
+    public ObservableElement() {
+        this.value = null;
+    }
+
+    @Override
+    public void addCallback(GeneralCallback<T> callback) {
+        callbacks.addCallback(callback);
+    }
+
+    @Override
+    public void removeCallback(GeneralCallback<T> callback) {
+        callbacks.removeCallback(callback);
+    }
+
+    @Override
+    public void removeCallbacks() {
+        callbacks.removeCallbacks();
+    }
+
+    public void set(T value) {
+        this.value = value;
+    }
+
+    public T get() {
+        return this.value;
+    }
+}
diff --git a/app/src/main/java/de/kuschku/util/ui/ObservableTextBinder.java b/app/src/main/java/de/kuschku/util/ui/ObservableTextBinder.java
index f0900ba67f385dc5dff489478da66b2d0a397ef0..5fa72906d8d3a88073d811ee3723369b11ec67ba 100644
--- a/app/src/main/java/de/kuschku/util/ui/ObservableTextBinder.java
+++ b/app/src/main/java/de/kuschku/util/ui/ObservableTextBinder.java
@@ -21,22 +21,17 @@
 
 package de.kuschku.util.ui;
 
-import android.databinding.Observable;
-import android.databinding.ObservableField;
 import android.widget.TextView;
 
+import de.kuschku.util.observables.lists.ObservableElement;
+
 public class ObservableTextBinder {
-    private final ObservableField<CharSequence> text;
+    private final ObservableElement<CharSequence> text;
     private TextView view;
 
-    public ObservableTextBinder(ObservableField<CharSequence> text) {
+    public ObservableTextBinder(ObservableElement<CharSequence> text) {
         this.text = text;
-        this.text.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
-            @Override
-            public void onPropertyChanged(Observable sender, int propertyId) {
-                updateView();
-            }
-        });
+        this.text.addCallback(object -> updateView());
     }
 
     private void updateView() {