diff --git a/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java b/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java
index f58fc882ccf240e011d3a4a1652b0b1fba91dee9..cb76664d86a702f3e5941795f1554ddc1ea583b6 100644
--- a/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java
@@ -121,6 +121,7 @@ public class BufferManager {
         Buffer buffer = buffer(bufferId);
         if (buffer != null) {
             buffer.renameBuffer(newName);
+            bufferIds().notifyItemChanged(bufferId);
         }
     }
 
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 e8a37213491ef20cc35d1097b0405a23e1520cec..cba73fa3d267a8e099ac9becebacf6156675fb73 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
@@ -95,6 +95,7 @@ public class BufferSyncer extends ABufferSyncer {
         for (Message m : filtered) {
             addActivity(m);
         }
+        client.bufferManager().bufferIds().notifyItemChanged(buffer);
         _update();
     }
 
@@ -108,6 +109,7 @@ public class BufferSyncer extends ABufferSyncer {
             markerLines.put(buffer, msgId);
             client.backlogStorage().setMarkerLine(buffer, msgId);
         }
+        client.bufferManager().bufferIds().notifyItemChanged(buffer);
         _update();
     }
 
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java
index bb22de2bfa6798734b8d29256559552587d45254..2999b84838a1ab8cd2768ce8df388c111e796f95 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java
@@ -37,6 +37,7 @@ import java.util.Set;
 
 import de.kuschku.libquassel.BusProvider;
 import de.kuschku.libquassel.client.Client;
+import de.kuschku.libquassel.localtypes.buffers.QueryBuffer;
 import de.kuschku.libquassel.primitives.types.QVariant;
 import de.kuschku.libquassel.syncables.types.abstracts.AIrcUser;
 import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel;
@@ -288,15 +289,6 @@ public class IrcUser extends AIrcUser {
     public void _setRealName(String realName) {
         this.realName = realName;
         _update();
-        for (String channel : this.channels) {
-            QNetwork network = this.network();
-            if (network != null) {
-                QIrcChannel channel1 = network.ircChannel(channel);
-                if (channel1 != null) {
-                    channel1.users().notifyItemChanged(nick);
-                }
-            }
-        }
     }
 
     @Override
@@ -493,6 +485,18 @@ public class IrcUser extends AIrcUser {
     @Override
     public void _update() {
         super._update();
+        for (String channel : this.channels) {
+            QNetwork network = this.network();
+            if (network != null) {
+                QIrcChannel channel1 = network.ircChannel(channel);
+                if (channel1 != null) {
+                    channel1.users().notifyItemChanged(nick);
+                }
+            }
+        }
+        QueryBuffer user = client.bufferManager().user(this);
+        if (user != null)
+            client.bufferManager().bufferIds().notifyItemChanged(user.getInfo().id);
     }
 
     @NonNull
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java
index 0dae6699b0b9ad7eb93ff405507100a1a1745004..0f3512529a5ee558b143b2a9fe5a176fb9686bd4 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/MainActivity.java
@@ -104,6 +104,7 @@ import de.kuschku.util.accounts.AccountManager;
 import de.kuschku.util.annotationbind.AutoBinder;
 import de.kuschku.util.certificates.CertificateUtils;
 import de.kuschku.util.certificates.SQLiteCertificateManager;
+import de.kuschku.util.observables.callbacks.ElementCallback;
 import de.kuschku.util.servicebound.BoundActivity;
 import de.kuschku.util.ui.DividerItemDecoration;
 import de.kuschku.util.ui.MenuTint;
@@ -383,6 +384,10 @@ public class MainActivity extends BoundActivity {
 
     private void updateBuffer(int id) {
         nickListAdapter.setChannel(null);
+        updateTitleAndSubtitle(id);
+    }
+
+    private void updateTitleAndSubtitle(int id) {
         Client client = context.client();
         if (client != null) {
             Buffer buffer = client.bufferManager().buffer(id);
@@ -393,7 +398,7 @@ public class MainActivity extends BoundActivity {
                     if (user == null) {
                         toolbarWrapper.setSubtitle(null);
                     } else {
-                        toolbarWrapper.setSubtitle(user.hostmask() + " | " + user.realName());
+                        toolbarWrapper.setSubtitle(user.realName());
                     }
                 } else if (buffer instanceof ChannelBuffer) {
                     QIrcChannel channel = ((ChannelBuffer) buffer).getChannel();
@@ -460,6 +465,23 @@ public class MainActivity extends BoundActivity {
         if (drawerLayout != null)
             drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
 
+        context.client().bufferManager().bufferIds().addCallback(new ElementCallback<Integer>() {
+            @Override
+            public void notifyItemInserted(Integer element) {
+
+            }
+
+            @Override
+            public void notifyItemRemoved(Integer element) {
+
+            }
+
+            @Override
+            public void notifyItemChanged(Integer element) {
+                if (element == context.client().backlogManager().open())
+                    updateTitleAndSubtitle(element);
+            }
+        });
         context.client().backlogManager().open(status.bufferId);
         if (context.client().bufferViewManager() != null) {
             chatListSpinner.setAdapter(new BufferViewConfigSpinnerAdapter(context.client().bufferViewManager()));
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 6eed74b4f7587d1d007053aacb084c07d0d6d039..399870d15d348db53fd89e3ac73f52c02be5b6cc 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
@@ -23,6 +23,7 @@ package de.kuschku.quasseldroid_ng.ui.chat.drawer;
 
 import com.bignerdranch.expandablerecyclerview.Model.ParentListItem;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import de.kuschku.libquassel.localtypes.buffers.Buffer;
@@ -39,6 +40,7 @@ public class NetworkItem implements ParentListItem {
     private final AppContext context;
     private final QBufferViewConfig config;
     private final QNetwork network;
+    private final List<Buffer> bufferList = new ArrayList<>();
     private final ObservableSortedList<Buffer> buffers = new ObservableSortedList<>(Buffer.class, new ObservableSortedList.ItemComparator<Buffer>() {
         @Override
         public int compare(Buffer o1, Buffer o2) {
@@ -78,6 +80,7 @@ public class NetworkItem implements ParentListItem {
             Buffer buffer = context.client().bufferManager().buffer(element);
             if (buffer != null && buffer.getInfo().networkId == network.networkId()) {
                 buffers.add(buffer);
+                bufferList.add(buffers.indexOf(buffer), buffer);
             }
         }
 
@@ -85,16 +88,13 @@ public class NetworkItem implements ParentListItem {
         public void notifyItemRemoved(Integer element) {
             Buffer buffer = context.client().bufferManager().buffer(element);
             if (buffer != null && buffer.getInfo().networkId == network.networkId()) {
-                buffers.remove(buffer);
+                buffers.remove(bufferList.indexOf(buffer));
+                bufferList.remove(buffer);
             }
         }
 
         @Override
         public void notifyItemChanged(Integer element) {
-            Buffer buffer = context.client().bufferManager().buffer(element);
-            if (buffer != null && buffer.getInfo().networkId == network.networkId() && buffers.contains(buffer)) {
-                buffers.notifyItemChanged(buffers.indexOf(buffer));
-            }
         }
     };
     private ObservableSet<Integer> backingSet;
@@ -148,18 +148,41 @@ public class NetworkItem implements ParentListItem {
                 }
             }
         });
+        context.client().bufferManager().bufferIds().addCallback(new ElementCallback<Integer>() {
+            @Override
+            public void notifyItemInserted(Integer element) {
+            }
+
+            @Override
+            public void notifyItemRemoved(Integer element) {
+            }
+
+            @Override
+            public void notifyItemChanged(Integer element) {
+                Buffer buffer = NetworkItem.this.context.client().bufferManager().buffer(element);
+                if (buffer != null && buffer.getInfo().networkId == NetworkItem.this.network.networkId() && bufferList.contains(buffer)) {
+                    buffers.remove(bufferList.indexOf(buffer));
+                    bufferList.remove(buffer);
+                    buffers.add(buffer);
+                    bufferList.add(buffers.indexOf(buffer), buffer);
+                }
+            }
+        });
     }
 
     public void populateList(ObservableSet<Integer> backingSet) {
         if (this.backingSet != null)
             this.backingSet.removeCallback(callback);
         buffers.clear();
+        bufferList.clear();
 
         backingSet.addCallback(callback);
         for (int id : backingSet) {
             Buffer buffer = context.client().bufferManager().buffer(id);
-            if (buffer != null && buffer.getInfo().networkId == network.networkId())
+            if (buffer != null && buffer.getInfo().networkId == network.networkId()) {
                 buffers.add(buffer);
+                bufferList.add(buffers.indexOf(buffer), buffer);
+            }
         }
         this.backingSet = backingSet;
     }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/nicklist/NickListAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/nicklist/NickListAdapter.java
index f4f4f606f5f4a7f3ef7f1fb29e22875077cb44ca..09c34fcc8634b14c5ef303f4b0f4cb427c9e0395 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/nicklist/NickListAdapter.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/nicklist/NickListAdapter.java
@@ -44,6 +44,8 @@ import de.kuschku.util.observables.callbacks.wrappers.AdapterUICallbackWrapper;
 import de.kuschku.util.observables.lists.ObservableSortedList;
 
 public class NickListAdapter extends RecyclerView.Adapter<NickListAdapter.NickViewHolder> {
+    public static final int TYPE_NORMAL = 0;
+    public static final int TYPE_AWAY = 1;
     private final AppContext context;
     QIrcChannel channel;
 
@@ -125,10 +127,20 @@ public class NickListAdapter extends RecyclerView.Adapter<NickListAdapter.NickVi
     @Override
     public NickViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         LayoutInflater inflater = LayoutInflater.from(parent.getContext());
-        View view = inflater.inflate(R.layout.widget_nick, parent, false);
+        View view = inflater.inflate(getLayoutResource(viewType), parent, false);
         return new NickViewHolder(view);
     }
 
+    public int getLayoutResource(int viewType) {
+        switch (viewType) {
+            default:
+            case TYPE_NORMAL:
+                return R.layout.widget_nick;
+            case TYPE_AWAY:
+                return R.layout.widget_nick_away;
+        }
+    }
+
     @Override
     public void onBindViewHolder(NickViewHolder holder, int position) {
         holder.bind(users.get(position));
@@ -148,6 +160,11 @@ public class NickListAdapter extends RecyclerView.Adapter<NickListAdapter.NickVi
         return builder.toString();
     }
 
+    @Override
+    public int getItemViewType(int position) {
+        return users.get(position).isAway() ? TYPE_AWAY : TYPE_NORMAL;
+    }
+
     class NickViewHolder extends RecyclerView.ViewHolder {
         @Bind(R.id.mode)
         TextView mode;
diff --git a/app/src/main/res/layout/widget_nick.xml b/app/src/main/res/layout/widget_nick.xml
index 5fe59b912eadd91561dbe248189db09d4598a5d6..9e9ee3ff88db9d638232d4f4947ab7cb3f326f4f 100644
--- a/app/src/main/res/layout/widget_nick.xml
+++ b/app/src/main/res/layout/widget_nick.xml
@@ -20,15 +20,16 @@
   ~ with this program.  If not, see <http://www.gnu.org/licenses/>.
   -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              xmlns:tools="http://schemas.android.com/tools"
-              android:layout_width="match_parent"
-              android:layout_height="56dp"
-              android:background="?selectableItemBackground"
-              android:clickable="true"
-              android:orientation="horizontal"
-              android:paddingLeft="?listPreferredItemPaddingLeft"
-              android:paddingRight="?listPreferredItemPaddingRight">
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="56dp"
+    android:background="?selectableItemBackground"
+    android:clickable="true"
+    android:orientation="horizontal"
+    android:paddingLeft="?listPreferredItemPaddingLeft"
+    android:paddingRight="?listPreferredItemPaddingRight">
 
     <TextView
         android:id="@+id/mode"
diff --git a/app/src/main/res/layout/widget_nick_away.xml b/app/src/main/res/layout/widget_nick_away.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5b0fb2f3f4c36ebd67b598668218a3d12cb6f04c
--- /dev/null
+++ b/app/src/main/res/layout/widget_nick_away.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ 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/>.
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="56dp"
+    android:background="?selectableItemBackground"
+    android:clickable="true"
+    android:orientation="horizontal"
+    android:paddingLeft="?listPreferredItemPaddingLeft"
+    android:paddingRight="?listPreferredItemPaddingRight">
+
+    <TextView
+        android:id="@+id/mode"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:layout_marginBottom="8dp"
+        android:layout_marginTop="8dp"
+        android:background="@drawable/badge"
+        android:fontFamily="monospace"
+        android:gravity="center"
+        android:minWidth="40dp"
+        android:textColor="?colorBackground"
+        android:textStyle="bold"
+        tools:text="\@"
+        />
+
+    <LinearLayout
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_marginLeft="16dp"
+        android:layout_marginStart="16dp"
+        android:layout_weight="1"
+        android:gravity="center_vertical|start"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@+id/nick"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:fontFamily="sans-serif-medium"
+            android:gravity="center_vertical|start"
+            android:lines="1"
+            android:singleLine="true"
+            android:textColor="?colorForegroundSecondary"
+            android:textSize="@dimen/material_drawer_item_primary_text"
+            android:textStyle="italic"
+            tools:text="justJanne"/>
+
+        <TextView
+            android:id="@+id/realname"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:fontFamily="sans-serif"
+            android:gravity="center_vertical|start"
+            android:lines="1"
+            android:singleLine="true"
+            android:textColor="?colorForegroundSecondary"
+            android:textSize="@dimen/material_drawer_item_primary_description"
+            android:textStyle="italic"
+            tools:text="Janne Koschinski: https://kuschku.de/"/>
+    </LinearLayout>
+</LinearLayout>
\ No newline at end of file