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 5a76d6f3f4b398efe3964f05d2425cb1a8bb417f..2eb261a1f9065d81607f279df9909c8b4cf61477 100644
--- a/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java
@@ -25,8 +25,10 @@ import android.support.annotation.IntRange;
 import android.support.annotation.NonNull;
 
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import de.kuschku.libquassel.localtypes.buffers.Buffer;
 import de.kuschku.libquassel.localtypes.buffers.Buffers;
@@ -48,6 +50,7 @@ public class BufferManager {
     private final Map<String, Integer> buffersByChannel = new HashMap<>();
     private final Map<Integer, ObservableSet<Integer>> buffersByNetwork = new HashMap<>();
     private final ObservableSet<Integer> bufferIds = new ObservableSet<>();
+    private Set<Integer> laterRequests = new HashSet<>();
 
     public BufferManager(Client client) {
         this.client = client;
@@ -85,6 +88,7 @@ public class BufferManager {
     public void init(List<BufferInfo> bufferInfos) {
         for (BufferInfo info : bufferInfos) {
             createBuffer(info);
+            laterRequests.add(info.id());
         }
     }
 
@@ -150,4 +154,11 @@ public class BufferManager {
     public ObservableSet<Integer> bufferIds() {
         return bufferIds;
     }
+
+    public void doBacklogInit(int amount) {
+        for (int id : laterRequests) {
+            client.backlogManager().requestBacklogInitial(id, amount);
+        }
+        laterRequests.clear();
+    }
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/client/Client.java b/app/src/main/java/de/kuschku/libquassel/client/Client.java
index cc98ff191eca95f5d3c7a5bb8a2fda3cf6917e5f..2ee5319366cd8964e4e937f046292095e842090c 100644
--- a/app/src/main/java/de/kuschku/libquassel/client/Client.java
+++ b/app/src/main/java/de/kuschku/libquassel/client/Client.java
@@ -81,8 +81,7 @@ public class Client extends AClient {
     @NonNull
     private final NotificationManager notificationManager;
     private final List<String> initRequests = new LinkedList<>();
-    private final List<Integer> backlogRequests = new LinkedList<>();
-    private final QBacklogManager backlogManager;
+    private final QBacklogManager<? extends QBacklogManager> backlogManager;
     private final Map<String, List<SyncFunction>> bufferedSyncs = new HashMap<>();
     private final Map<Integer, Pair<QBufferViewConfig, Integer>> bufferedBuffers = new HashMap<>();
     private QBufferViewManager bufferViewManager;
@@ -121,7 +120,7 @@ public class Client extends AClient {
         return aliasManager;
     }
 
-    public QBacklogManager backlogManager() {
+    public QBacklogManager<? extends QBacklogManager> backlogManager() {
         return backlogManager;
     }
 
@@ -193,10 +192,9 @@ public class Client extends AClient {
 
         this.connectionStatus = connectionStatus;
         if (connectionStatus == ConnectionChangeEvent.Status.LOADING_BACKLOG) {
-            for (QNetwork network : networkManager().networks()) {
-                Log.d("libquassel", String.valueOf(network.channels()));
-            }
-            setConnectionStatus(ConnectionChangeEvent.Status.CONNECTED);
+            bufferManager().doBacklogInit(20);
+        } else if (connectionStatus == ConnectionChangeEvent.Status.CONNECTED) {
+            // FIXME: Init buffer activity state and highlightss
         }
         provider.sendEvent(new ConnectionChangeEvent(connectionStatus));
     }
@@ -372,17 +370,6 @@ public class Client extends AClient {
         return className + ":" + objectName;
     }
 
-    public void initBacklog(int id) {
-        backlogRequests.remove((Integer) id);
-        if (backlogRequests.isEmpty() && connectionStatus() == ConnectionChangeEvent.Status.LOADING_BACKLOG)
-            setConnectionStatus(ConnectionChangeEvent.Status.CONNECTED);
-    }
-
-    public void requestInitBacklog(int id, int amount) {
-        backlogRequests.add(id);
-        backlogManager.requestBacklogInitial(id, amount);
-    }
-
     public void setLatency(long latency) {
         assertNotNull(provider);
 
diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/BacklogStorage.java b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/BacklogStorage.java
index 0907bd1f8ec07ba8e4200f28496161c75adc6aac..34b15a618a30d1e1759e005a8a553d2e5da80b08 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/BacklogStorage.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/BacklogStorage.java
@@ -39,6 +39,8 @@ public interface BacklogStorage {
     @NonNull
     BacklogFilter getFilter(@IntRange(from = 0) int bufferid);
 
+    int getLatest(@IntRange(from = 0) int bufferid);
+
     void insertMessages(@IntRange(from = 0) int bufferId, Message... messages);
 
     void insertMessages(Message... messages);
diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/MemoryBacklogStorage.java b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/MemoryBacklogStorage.java
index 3d96429393f06ebef3a7e51b5373026f5eaaf9e2..491c09db51aee0a4c753fea8b05a6fd3ae5ce5e7 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/MemoryBacklogStorage.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/MemoryBacklogStorage.java
@@ -39,6 +39,8 @@ public class MemoryBacklogStorage implements BacklogStorage {
     private final SparseArray<ObservableComparableSortedList<Message>> filteredBacklogs = new SparseArray<>();
     @NonNull
     private final SparseArray<BacklogFilter> filters = new SparseArray<>();
+    @NonNull
+    private final SparseArray<Integer> latestMessage = new SparseArray<>();
 
     private Client client;
 
@@ -63,12 +65,24 @@ public class MemoryBacklogStorage implements BacklogStorage {
         return filters.get(bufferid);
     }
 
+    @Override
+    public int getLatest(@IntRange(from = 0) int bufferid) {
+        return latestMessage.get(bufferid, -1);
+    }
+
     @Override
     public void insertMessages(@IntRange(from = 0) int bufferId, @NonNull Message... messages) {
         ensureExisting(bufferId);
         for (Message message : messages) {
             client.unbufferBuffer(message.bufferInfo);
             backlogs.get(bufferId).add(message);
+            updateLatest(message);
+        }
+    }
+
+    public void updateLatest(Message message) {
+        if (message.messageId > getLatest(message.bufferInfo.id())) {
+            latestMessage.put(message.bufferInfo.id(), message.messageId);
         }
     }
 
@@ -78,6 +92,7 @@ public class MemoryBacklogStorage implements BacklogStorage {
             ensureExisting(message.bufferInfo.id());
             client.unbufferBuffer(message.bufferInfo);
             backlogs.get(message.bufferInfo.id()).add(message);
+            updateLatest(message);
         }
     }
 
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferSyncer.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferSyncer.java
index ea065e0e8071ec99ed16cdafb5b6acbf4f4cde46..c5b47b11f0033b3034eecbf94c5c8302295a0d98 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferSyncer.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferSyncer.java
@@ -28,19 +28,19 @@ public abstract class ABufferSyncer<T extends ABufferSyncer<T>> extends Syncable
     @Override
     public void requestSetLastSeenMsg(int buffer, int msgId) {
         _requestSetLastSeenMsg(buffer, msgId);
-        syncVar("requestSetLastSeenMsg", buffer, msgId);
+        sync("requestSetLastSeenMsg", new String[]{"BufferId", "MsgId"}, new Object[]{buffer, msgId});
     }
 
     @Override
     public void requestSetMarkerLine(int buffer, int msgId) {
         _requestSetMarkerLine(buffer, msgId);
-        syncVar("requestSetMarkerLine", buffer, msgId);
+        sync("requestSetMarkerLine", new String[]{"BufferId", "MsgId"}, new Object[]{buffer, msgId});
     }
 
     @Override
     public void requestRemoveBuffer(int buffer) {
         _requestRemoveBuffer(buffer);
-        syncVar("requestRemoveBuffer", buffer);
+        sync("requestRemoveBuffer", new String[]{"BufferId"}, new Object[]{buffer});
     }
 
     @Override
@@ -52,7 +52,7 @@ public abstract class ABufferSyncer<T extends ABufferSyncer<T>> extends Syncable
     @Override
     public void requestRenameBuffer(int buffer, String newName) {
         _requestRenameBuffer(buffer, newName);
-        syncVar("requestRenameBuffer", buffer, newName);
+        sync("requestRenameBuffer", new String[]{"BufferId", "QString"}, new Object[]{buffer, newName});
     }
 
     @Override
@@ -64,7 +64,7 @@ public abstract class ABufferSyncer<T extends ABufferSyncer<T>> extends Syncable
     @Override
     public void requestMergeBuffersPermanently(int buffer1, int buffer2) {
         _requestMergeBuffersPermanently(buffer1, buffer2);
-        syncVar("requestMergeBuffersPermanently", buffer1, buffer2);
+        sync("requestMergeBuffersPermanently", new String[]{"BufferId", "BufferId"}, new Object[]{buffer1, buffer2});
     }
 
     @Override
@@ -82,24 +82,24 @@ public abstract class ABufferSyncer<T extends ABufferSyncer<T>> extends Syncable
     @Override
     public void requestMarkBufferAsRead(int buffer) {
         _requestMarkBufferAsRead(buffer);
-        syncVar("requestMarkBufferAsRead", buffer);
+        sync("requestMarkBufferAsRead", new String[]{"BufferId"}, new Object[]{buffer});
     }
 
     @Override
     public void markBufferAsRead(int buffer) {
         _markBufferAsRead(buffer);
-        syncVar("markBufferAsRead", buffer);
+        sync("markBufferAsRead", new String[]{"BufferId"}, new Object[]{buffer});
     }
 
     @Override
     public void setMarkerLine(int buffer, int msgId) {
         _setMarkerLine(buffer, msgId);
-        syncVar("setMarkerLine", buffer, msgId);
+        sync("setMarkerLine", new String[]{"BufferId", "MsgId"}, new Object[]{buffer, msgId});
     }
 
     @Override
     public void setLastSeenMsg(int buffer, int msgId) {
         _setLastSeenMsg(buffer, msgId);
-        syncVar("setLastSeenMsg", buffer, msgId);
+        sync("setLastSeenMsg", new String[]{"BufferId", "MsgId"}, new Object[]{buffer, msgId});
     }
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java
index 8713723e05ec1c3a18d1aad1ff5599ff4f6efb3c..f17d383435d714979516990ea86fab3a23cb1bba 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java
@@ -23,7 +23,7 @@ package de.kuschku.libquassel.syncables.types.impl;
 
 import android.support.annotation.IntRange;
 import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
+import android.util.Log;
 
 import java.util.HashSet;
 import java.util.List;
@@ -33,6 +33,7 @@ import java.util.Set;
 import de.kuschku.libquassel.BusProvider;
 import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.events.BacklogReceivedEvent;
+import de.kuschku.libquassel.events.ConnectionChangeEvent;
 import de.kuschku.libquassel.localtypes.BacklogFilter;
 import de.kuschku.libquassel.localtypes.backlogstorage.BacklogStorage;
 import de.kuschku.libquassel.message.Message;
@@ -46,6 +47,7 @@ public class BacklogManager extends ABacklogManager<BacklogManager> {
     private final Client client;
     private final BacklogStorage storage;
     private final Set<Integer> initialized = new HashSet<>();
+    private final Set<Integer> waiting = new HashSet<>();
     @IntRange(from = -1)
     private int openBuffer;
 
@@ -66,10 +68,10 @@ public class BacklogManager extends ABacklogManager<BacklogManager> {
 
     @Override
     public void requestBacklogInitial(int id, int amount) {
-        if (initialized.contains(id))
+        if (waiting.contains(id) || initialized.contains(id))
             return;
 
-        initialized.add(id);
+        waiting.add(id);
         requestBacklog(id, -1, -1, amount, 0);
     }
 
@@ -83,10 +85,25 @@ public class BacklogManager extends ABacklogManager<BacklogManager> {
         assertNotNull(provider);
 
         storage.insertMessages(id, messages.toArray(new Message[messages.size()]));
-        client.initBacklog(id);
+        if (messages.size() > 0 && !client.bufferManager().exists(messages.get(0).bufferInfo))
+            client.bufferManager().createBuffer(messages.get(0).bufferInfo);
         provider.sendEvent(new BacklogReceivedEvent(id));
         if (id == openBuffer && openBuffer != -1)
-            client.bufferSyncer().markBufferAsRead(openBuffer);
+            client.bufferSyncer().requestMarkBufferAsRead(openBuffer);
+        removeWaiting(id);
+    }
+
+    private void removeWaiting(int id) {
+        waiting.remove(id);
+        initialized.add(id);
+        checkWaiting();
+    }
+
+    private void checkWaiting() {
+        Log.d("libquassel", "Backlog Requests: " + waiting.size() + "; " + waiting);
+
+        if (waiting.isEmpty())
+            client.setConnectionStatus(ConnectionChangeEvent.Status.CONNECTED);
     }
 
     @Override
@@ -106,23 +123,26 @@ public class BacklogManager extends ABacklogManager<BacklogManager> {
         for (int id : buffers) {
             provider.sendEvent(new BacklogReceivedEvent(id));
             if (id == openBuffer && openBuffer != -1)
-                client.bufferSyncer().markBufferAsRead(openBuffer);
+                client.bufferSyncer().requestMarkBufferAsRead(openBuffer);
+            waiting.remove(id);
+            initialized.add(id);
         }
+        checkWaiting();
     }
 
-    @Nullable
+    @NonNull
     @Override
     public BacklogFilter filter(int id) {
         return storage.getFilter(id);
     }
 
-    @Nullable
+    @NonNull
     @Override
     public ObservableComparableSortedList<Message> unfiltered(int id) {
         return storage.getUnfiltered(id);
     }
 
-    @Nullable
+    @NonNull
     @Override
     public ObservableComparableSortedList<Message> filtered(int id) {
         return storage.getFiltered(id);
@@ -132,14 +152,14 @@ public class BacklogManager extends ABacklogManager<BacklogManager> {
     public void open(int bufferId) {
         openBuffer = bufferId;
         if (bufferId != -1)
-            client.bufferSyncer().markBufferAsRead(bufferId);
+            client.bufferSyncer().requestMarkBufferAsRead(bufferId);
     }
 
     @Override
     public void receiveBacklog(Message msg) {
         storage.insertMessages(msg);
         if (msg.bufferInfo.id() == openBuffer && openBuffer != -1)
-            client.bufferSyncer().markBufferAsRead(openBuffer);
+            client.bufferSyncer().requestMarkBufferAsRead(openBuffer);
     }
 
     @Override
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 5330304fb3a0c1ea4ca05d9437e66202686393be..967cb5bb0e4a91f330c01d231211f097a70d86b9 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
@@ -22,9 +22,12 @@
 package de.kuschku.libquassel.syncables.types.impl;
 
 import android.support.annotation.NonNull;
+import android.util.Log;
 import android.util.SparseIntArray;
 
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 import de.kuschku.libquassel.BusProvider;
 import de.kuschku.libquassel.client.Client;
@@ -32,19 +35,24 @@ import de.kuschku.libquassel.message.Message;
 import de.kuschku.libquassel.primitives.types.QVariant;
 import de.kuschku.libquassel.syncables.serializers.BufferSyncerSerializer;
 import de.kuschku.libquassel.syncables.types.abstracts.ABufferSyncer;
+import de.kuschku.util.observables.lists.ObservableComparableSortedList;
 import de.kuschku.util.observables.lists.ObservableSortedList;
 
 public class BufferSyncer extends ABufferSyncer<BufferSyncer> {
 
     private SparseIntArray lastSeenMsgs = new SparseIntArray();
     private SparseIntArray markerLines = new SparseIntArray();
+    private SparseIntArray activities = new SparseIntArray();
+    private Set<Integer> bufferIds = new HashSet<>();
 
     public BufferSyncer(@NonNull Map<Integer, Integer> lastSeenMsgs, @NonNull Map<Integer, Integer> markerLines) {
         for (int bufferId : lastSeenMsgs.keySet()) {
             this.lastSeenMsgs.put(bufferId, lastSeenMsgs.get(bufferId));
+            this.bufferIds.add(bufferId);
         }
         for (int bufferId : markerLines.keySet()) {
             this.markerLines.put(bufferId, markerLines.get(bufferId));
+            this.bufferIds.add(bufferId);
         }
     }
 
@@ -67,6 +75,11 @@ public class BufferSyncer extends ABufferSyncer<BufferSyncer> {
         if (oldLastSeenMsg < msgId) {
             lastSeenMsgs.put(buffer, msgId);
         }
+        setActivity(buffer, 0);
+        ObservableComparableSortedList<Message> filtered = client.backlogManager().filtered(buffer);
+        for (Message m : filtered) {
+            addActivity(m);
+        }
         _update();
     }
 
@@ -99,8 +112,9 @@ public class BufferSyncer extends ABufferSyncer<BufferSyncer> {
 
     @Override
     public void _removeBuffer(int buffer) {
-        markerLines.put(buffer, -1);
-        lastSeenMsgs.put(buffer, -1);
+        markerLines.removeAt(markerLines.indexOfKey(buffer));
+        lastSeenMsgs.removeAt(lastSeenMsgs.indexOfKey(buffer));
+        bufferIds.remove(buffer);
         client.bufferManager().removeBuffer(buffer);
         _update();
     }
@@ -133,7 +147,11 @@ public class BufferSyncer extends ABufferSyncer<BufferSyncer> {
 
     @Override
     public void _requestMarkBufferAsRead(int buffer) {
-        // Do nothing, we’re on the client – the server will receive the sync just as expected
+        int lastMessage = client.backlogStorage().getLatest(buffer);
+        if (lastMessage != -1) {
+            requestSetLastSeenMsg(buffer, lastMessage);
+            requestSetMarkerLine(buffer, lastMessage);
+        }
     }
 
     @Override
@@ -166,4 +184,28 @@ public class BufferSyncer extends ABufferSyncer<BufferSyncer> {
         markerLines = from.markerLines;
         _update();
     }
+
+    public int activity(int bufferid) {
+        return activities.get(bufferid, 0);
+    }
+
+    public void setActivity(int bufferid, int activity) {
+        activities.put(bufferid, activity);
+    }
+
+    public void addActivity(int bufferid, int activity) {
+        activities.put(bufferid, activities.get(bufferid) | activity);
+    }
+
+    public void addActivity(int bufferid, Message.Type type) {
+        addActivity(bufferid, type.value);
+    }
+
+    public void addActivity(Message message) {
+        int lastSeenMsg = lastSeenMsg(message.bufferInfo.id());
+        if (message.messageId > lastSeenMsg) {
+            addActivity(message.bufferInfo.id(), message.type);
+            Log.d("libquassel", "Unread: " + lastSeenMsg + "/" + message);
+        }
+    }
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java
index 8ff71404a40df0d322ab7908121186fcc56b36fa..51d95bda9ce4f23745248f563474c07534ab42f3 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java
@@ -300,7 +300,7 @@ public class BufferViewConfig extends ABufferViewConfig<BufferViewConfig> {
     @Override
     public void _removeBufferPermanently(int bufferId) {
         if (buffers.contains(bufferId))
-            buffers.remove(buffers.indexOf(bufferId));
+            buffers.remove((Integer) bufferId);
 
         if (temporarilyRemovedBuffers.contains(bufferId))
             temporarilyRemovedBuffers.remove(bufferId);
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBacklogManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBacklogManager.java
index 9c1428b0d7b373ecaabf12b8a9f1d3aa81a2932e..d014ece3138833d7b881dd06e06109239611973d 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBacklogManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBacklogManager.java
@@ -21,7 +21,7 @@
 
 package de.kuschku.libquassel.syncables.types.interfaces;
 
-import android.support.annotation.Nullable;
+import android.support.annotation.NonNull;
 
 import java.util.List;
 
@@ -55,13 +55,13 @@ public interface QBacklogManager<T extends QSyncableObject<T>> extends QSyncable
 
     void _receiveBacklogAll(int first, int last, int limit, int additional, List<Message> messages);
 
-    @Nullable
+    @NonNull
     BacklogFilter filter(int id);
 
-    @Nullable
+    @NonNull
     ObservableComparableSortedList<Message> unfiltered(int id);
 
-    @Nullable
+    @NonNull
     ObservableComparableSortedList<Message> filtered(int id);
 
     void open(int bufferId);
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 31e63e09cb53c415fd3027d832f144aff5c81381..7ed12656da2be09d947e7b88582ecbfe9b4223f2 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,6 +21,7 @@
 
 package de.kuschku.libquassel.syncables.types.interfaces;
 
+import de.kuschku.libquassel.message.Message;
 import de.kuschku.libquassel.syncables.Synced;
 
 public interface QBufferSyncer extends QObservable {
@@ -93,4 +94,14 @@ public interface QBufferSyncer extends QObservable {
 
     void _markBufferAsRead(int buffer);
 
+
+    int activity(int bufferid);
+
+    void setActivity(int bufferid, int activity);
+
+    void addActivity(int bufferid, int activity);
+
+    void addActivity(int bufferid, Message.Type type);
+
+    void addActivity(Message message);
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.java
index 90a848ee928cd051d119405e8aebf6fd03806a75..07901428c7400286c8d2bd6254a13dc2f778509c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.java
@@ -572,14 +572,16 @@ public class ChatActivity extends AppCompatActivity {
     private void selectBuffer(@IntRange(from = -1) int bufferId) {
         context.client().backlogManager().open(bufferId);
         if (bufferId == -1) {
+            status.bufferId = bufferId;
             swipeView.setEnabled(false);
+            context.client().backlogManager().open(bufferId);
 
             messageAdapter.setMessageList(MessageAdapter.emptyList());
             toolbar.setTitle(getResources().getString(R.string.appName));
         } else {
-            swipeView.setEnabled(true);
-
             status.bufferId = bufferId;
+            swipeView.setEnabled(true);
+            context.client().backlogManager().open(bufferId);
 
             // Make sure we are actually connected
             ObservableSortedList<Message> list = context.client().backlogManager().filtered(bufferId);
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferItem.java
index e616feef9b456a2cf9f1820a85afda41db460a1e..d2882f7a3796f6fbca813ac0d3bc4e73d8f04bb3 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferItem.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferItem.java
@@ -36,6 +36,7 @@ import de.kuschku.libquassel.localtypes.buffers.Buffer;
 import de.kuschku.libquassel.localtypes.buffers.ChannelBuffer;
 import de.kuschku.libquassel.localtypes.buffers.QueryBuffer;
 import de.kuschku.libquassel.localtypes.buffers.StatusBuffer;
+import de.kuschku.libquassel.message.Message;
 import de.kuschku.libquassel.primitives.types.BufferInfo;
 import de.kuschku.quasseldroid_ng.R;
 import de.kuschku.quasseldroid_ng.ui.theme.AppContext;
@@ -119,6 +120,17 @@ public class BufferItem extends SecondaryDrawerItem {
         return ColorHolder.fromColor(context.themeUtil().res.colorForegroundSecondary);
     }
 
+    @Override
+    public ColorHolder getTextColor() {
+        int type = context.client().bufferSyncer().activity(buffer.getInfo().id());
+        if ((type & Message.Type.Plain.value | type & Message.Type.Notice.value) != 0)
+            return ColorHolder.fromColor(context.themeUtil().res.colorTintMessage);
+        else if ((type & ~Message.Type.DayChange.value) != 0)
+            return ColorHolder.fromColor(context.themeUtil().res.colorTintActivity);
+        else
+            return ColorHolder.fromColor(context.themeUtil().res.colorForeground);
+    }
+
     @NonNull
     public Buffer getBuffer() {
         return buffer;
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigItem.java
index c52e2a71456cf3a055eea12a8435a5c2493b8f56..9f121e05472a3640ad2f0453c730cf74727d0767 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigItem.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigItem.java
@@ -21,8 +21,6 @@
 
 package de.kuschku.quasseldroid_ng.ui.chat.drawer;
 
-import android.util.Log;
-
 import com.mikepenz.materialdrawer.Drawer;
 import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem;
 
@@ -87,7 +85,6 @@ public class BufferViewConfigItem implements DrawerItemCallback {
         for (NetworkItem item : networks) {
             if (ids.contains(item.getNetwork().networkId())) {
                 int position = networks.indexOf(item);
-                Log.d("libquassel", item + ":" + position);
                 drawer.addItemAtPosition(item, position);
             }
         }