diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/BacklogFilter.java b/app/src/main/java/de/kuschku/libquassel/localtypes/BacklogFilter.java
index 9a2fce8c11c5f2538e781c65b8ff1c7a0f085120..ffe87c6a66da22ddf2559531595e446ac4d5eeaa 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/BacklogFilter.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/BacklogFilter.java
@@ -23,6 +23,7 @@ package de.kuschku.libquassel.localtypes;
 
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.util.Log;
 
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeUtils;
@@ -187,6 +188,8 @@ public class BacklogFilter implements UICallback {
     public void setFilters(int filters) {
         setFiltersInternal(filters);
         client.metaDataManager().setHiddendata(client.coreId(), bufferId, filters);
+        int after = client.metaDataManager().hiddendata(client.coreId(), bufferId);
+        Log.e("DEBUG", filters + ":" + after);
     }
 
     private void setFiltersInternal(int filters) {
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 03d030be95b8d0c92a5c433562286f33012c2b60..10f3142a6988ebb9a7dd8f79eed3cc4967ef48d6 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
@@ -233,13 +233,12 @@ public class MainActivity extends BoundActivity {
 
     public void onConnectionChange(ConnectionChangeEvent.Status status) {
         if (status == ConnectionChangeEvent.Status.CONNECTED) {
-            replaceFragment(new ChatFragment());
             updateBufferViewConfigs();
             context.client().backlogManager().open(this.status.bufferId);
             accountHeader.setActiveProfile(this.status.bufferViewConfigId, true);
+            replaceFragment(new ChatFragment());
         } else if (status == ConnectionChangeEvent.Status.DISCONNECTED) {
             Toast.makeText(getApplication(), context.themeUtil().translations.statusDisconnected, Toast.LENGTH_LONG).show();
-            reauth();
         }
     }
 
@@ -282,6 +281,7 @@ public class MainActivity extends BoundActivity {
                 }
             }
         }
+        drawerLeft.setSelection(id, false);
     }
 
     private void selectBufferViewConfig(@IntRange(from = -1) int bufferViewConfigId) {
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 60514b98f60cf725248eb0463792242ebd6bca3d..dd27587a697273f4990df61aaf45b78037aaf763 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
@@ -139,7 +139,7 @@ public class BufferItem extends SecondaryDrawerItem {
 
     @Override
     public long getIdentifier() {
-        return buffer.getInfo().id() + buffer.getInfo().networkId() << 16;
+        return buffer.getInfo().id();
     }
 
     @Override
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 a0b65a947de23b67180d49112e62b7e11c519220..9a21ffcfcb28d20cc3cce9964bb0a24d10f0652c 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
@@ -81,7 +81,11 @@ public class NetworkItem extends PrimaryDrawerItem implements IObservable<Drawer
         List<IDrawerItem> bufferItems = new ArrayList<>();
         for (int id : config.bufferList()) {
             if (client.bufferManager().byNetwork(network.networkId()).contains(id)) {
-                bufferItems.add(manager.get(id));
+                if (config.allowedBufferTypes() == 0 ||
+                        config.allowedBufferTypes() == -1 ||
+                        (config.allowedBufferTypes() & client.bufferManager().buffer(id).getInfo().type().id) != 0)
+
+                    bufferItems.add(manager.get(id));
             }
         }
         return bufferItems;
diff --git a/app/src/main/java/de/kuschku/util/buffermetadata/BufferMetaDataHelper.java b/app/src/main/java/de/kuschku/util/buffermetadata/BufferMetaDataHelper.java
index bfd1e38bc9be547864b8c12ca17c3211dacb09ad..4f77c91bca47891f2dc0c0418e7297c20d2e6b87 100644
--- a/app/src/main/java/de/kuschku/util/buffermetadata/BufferMetaDataHelper.java
+++ b/app/src/main/java/de/kuschku/util/buffermetadata/BufferMetaDataHelper.java
@@ -82,11 +82,11 @@ public class BufferMetaDataHelper extends SQLiteOpenHelper {
     public void onCreate(SQLiteDatabase db) {
         // Why do we use String.format and not prepared statements? Because we can’t bind table or
         // column names in prepared statements
-        String statement = String.format("CREATE TABLE %s (%s, %s, %s, %s, PRIMARY KEY (%s, %s), UNIQUE(%s));",
+        String statement = String.format("CREATE TABLE %s (%s, %s, %s, %s, PRIMARY KEY (%s, %s), UNIQUE(%s, %s));",
                 TABLE_ACCOUNTS,
                 KEY_CORE, KEY_BUFFER, KEY_HIDDEN, KEY_MARKERLINE,
                 KEY_CORE, KEY_BUFFER,
-                KEY_CORE);
+                KEY_CORE, KEY_BUFFER);
         db.execSQL(statement);
     }
 
@@ -159,6 +159,7 @@ public class BufferMetaDataHelper extends SQLiteOpenHelper {
     }
 
     public int hiddenData(String coreid, int bufferid) {
+        ensureExisting(coreid, bufferid);
         Cursor cursor = cursorFindData(coreid);
         if (cursor.moveToFirst()) {
             do {
diff --git a/app/src/main/java/de/kuschku/util/irc/format/IrcFormatHelper.java b/app/src/main/java/de/kuschku/util/irc/format/IrcFormatHelper.java
index d1776edb37aecc05589a2ff1217d60ba5f6d6c62..ad2ecb6ef39d10779d8f70e9bf8dc3bd03659284 100644
--- a/app/src/main/java/de/kuschku/util/irc/format/IrcFormatHelper.java
+++ b/app/src/main/java/de/kuschku/util/irc/format/IrcFormatHelper.java
@@ -94,7 +94,8 @@ public class IrcFormatHelper {
         while (channelMatcher.find()) {
             QIrcChannel channel = client.networkManager().network(message.bufferInfo.networkId()).ircChannel(channelMatcher.group());
             Buffer buffer = client.bufferManager().channel(channel);
-            spans.add(new FutureClickableSpan(new ChannelSpan(client, buffer.getInfo().id()), channelMatcher.start(), channelMatcher.end()));
+            if (buffer != null)
+                spans.add(new FutureClickableSpan(new ChannelSpan(client, buffer.getInfo().id()), channelMatcher.start(), channelMatcher.end()));
         }
         for (FutureClickableSpan span : spans) {
             str.setSpan(span.span, span.start, span.end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);