diff --git a/app/build.gradle b/app/build.gradle
index 18449596d247f0ab72aba9ca5530b0978f347375..4fc5bbab8c28529d4b557034da7af0a3ceea5783 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -156,6 +156,7 @@ dependencies {
     compile('com.mikepenz:materialdrawer:5.0.3@aar') { transitive = true }
     compile('com.github.afollestad.material-dialogs:core:0.8.5.3@aar') { transitive = true }
     compile('com.github.afollestad.material-dialogs:commons:0.8.5.3@aar') { transitive = true }
+    compile 'com.afollestad:material-cab:0.1.12'
 
     // ORM
     apt "com.github.Raizlabs.DBFlow:dbflow-processor:3.1.1"
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 749bc98ef395e8fa8f871fc1021fb6ea574c3712..3befa33e06b6818749d4096147a824834f6e48f8 100644
--- a/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java
@@ -24,7 +24,6 @@ package de.kuschku.libquassel.client;
 import android.support.annotation.IntRange;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
-import android.util.Log;
 
 import java.util.HashMap;
 import java.util.HashSet;
@@ -41,7 +40,6 @@ 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.primitives.types.BufferInfo;
-import de.kuschku.libquassel.syncables.types.impl.Network;
 import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig;
 import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel;
 import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser;
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 e11005cd4727528c043b818197cf91952c60e16f..0e236662a9e5a9682c0673abe09231a0d56d274d 100644
--- a/app/src/main/java/de/kuschku/libquassel/client/Client.java
+++ b/app/src/main/java/de/kuschku/libquassel/client/Client.java
@@ -100,6 +100,7 @@ public class Client extends AClient {
     private ConnectionChangeEvent.Status connectionStatus;
     private BufferMetaDataManager metaDataManager;
     private String coreId;
+    private int r = 1;
 
     public Client(@NonNull BusProvider provider, @NonNull BacklogStorage backlogStorage, @NonNull BufferMetaDataManager metaDataManager, String coreId) {
         this.coreId = coreId;
@@ -439,7 +440,6 @@ public class Client extends AClient {
         this.globalNetworkConfig = globalNetworkConfig;
     }
 
-
     @NonNull
     public BacklogStorage backlogStorage() {
         return backlogStorage;
@@ -492,6 +492,4 @@ public class Client extends AClient {
     public String coreId() {
         return coreId;
     }
-
-    private int r = 1;
 }
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 b12ba76f2ab7dc0c5a3f2497d6b3e1f4360a770f..681f413f1d57da3a8554b4046d68cf1f7b625886 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/BacklogFilter.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/BacklogFilter.java
@@ -23,7 +23,6 @@ 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;
@@ -36,7 +35,6 @@ import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.message.Message;
 import de.kuschku.libquassel.primitives.types.BufferInfo;
 import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
-import de.kuschku.util.irc.IrcUserUtils;
 import de.kuschku.util.observables.callbacks.UICallback;
 import de.kuschku.util.observables.lists.ObservableComparableSortedList;
 
@@ -53,9 +51,9 @@ public class BacklogFilter implements UICallback {
 
     @NonNull
     private final Set<Message.Type> filteredTypes = new HashSet<>();
+    private final EventBus bus = new EventBus();
     @Nullable
     private CharSequence searchQuery;
-    private final EventBus bus = new EventBus();
     @Nullable
     private DateTime earliestMessage;
 
diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/orm/ConnectedDatabase.java b/app/src/main/java/de/kuschku/libquassel/localtypes/orm/ConnectedDatabase.java
index b2205a9292181fdbc3fc8fd22df64ce668f3390e..eec59165d0d9622f0e8cae9567d60df2f124a5b4 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/orm/ConnectedDatabase.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/orm/ConnectedDatabase.java
@@ -1,3 +1,24 @@
+/*
+ * 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.libquassel.localtypes.orm;
 
 import com.raizlabs.android.dbflow.annotation.Database;
diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/BufferTypeConverter.java b/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/BufferTypeConverter.java
index 6ce2477934b559484f8befbf12996dc1c81e385c..8bfa78dfbff01de325599e64b53a9edfcb4897cc 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/BufferTypeConverter.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/BufferTypeConverter.java
@@ -1,3 +1,24 @@
+/*
+ * 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.libquassel.localtypes.orm.converters;
 
 import com.raizlabs.android.dbflow.converter.TypeConverter;
diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/DateTimeConverter.java b/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/DateTimeConverter.java
index 280ac445cfb6d3fb3a6dc08781a050a0c749165f..31ee0fdd89264a3e369739e4a381cf8dc5b4c788 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/DateTimeConverter.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/DateTimeConverter.java
@@ -1,3 +1,24 @@
+/*
+ * 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.libquassel.localtypes.orm.converters;
 
 import com.raizlabs.android.dbflow.converter.TypeConverter;
diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/MessageFlagsConverter.java b/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/MessageFlagsConverter.java
index b3f1d9b18cc224ed01cdec05800fa5e32df50f06..6ae99fa3f66cc1a66e77e183efe16f8e26baea4b 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/MessageFlagsConverter.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/MessageFlagsConverter.java
@@ -1,3 +1,24 @@
+/*
+ * 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.libquassel.localtypes.orm.converters;
 
 import com.raizlabs.android.dbflow.converter.TypeConverter;
diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/MessageTypeConverter.java b/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/MessageTypeConverter.java
index 3327777ff9a67a458013af74b34a4959ce48e12b..54da6310730b5c35333c22397ffacd0c57d8a65a 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/MessageTypeConverter.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/orm/converters/MessageTypeConverter.java
@@ -1,3 +1,24 @@
+/*
+ * 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.libquassel.localtypes.orm.converters;
 
 import com.raizlabs.android.dbflow.converter.TypeConverter;
diff --git a/app/src/main/java/de/kuschku/libquassel/message/Message.java b/app/src/main/java/de/kuschku/libquassel/message/Message.java
index 3534ac91882f4b02d8c82da1649f9df1153934d8..a95e8daf1b953401ab2df82676c72bfe8c02a86c 100644
--- a/app/src/main/java/de/kuschku/libquassel/message/Message.java
+++ b/app/src/main/java/de/kuschku/libquassel/message/Message.java
@@ -23,6 +23,7 @@ package de.kuschku.libquassel.message;
 
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.util.Log;
 
 import com.raizlabs.android.dbflow.annotation.Column;
 import com.raizlabs.android.dbflow.annotation.ForeignKey;
@@ -62,6 +63,18 @@ public class Message extends BaseModel implements ContentComparable<Message> {
     @Column
     public String content;
 
+    public static Message create(int id, DateTime time, Type type, Flags flags, BufferInfo bufferInfo, String sender, String content) {
+        Message message = new Message();
+        message.id = id;
+        message.time = time;
+        message.type = type;
+        message.flags = flags;
+        message.bufferInfo = bufferInfo;
+        message.sender = sender;
+        message.content = content;
+        return message;
+    }
+
     @NonNull
     @Override
     public String toString() {
@@ -99,18 +112,6 @@ public class Message extends BaseModel implements ContentComparable<Message> {
             return this.time.compareTo(another.time);
     }
 
-    public static Message create(int id, DateTime time, Type type, Flags flags, BufferInfo bufferInfo, String sender, String content) {
-        Message message = new Message();
-        message.id = id;
-        message.time = time;
-        message.type = type;
-        message.flags = flags;
-        message.bufferInfo = bufferInfo;
-        message.sender = sender;
-        message.content = content;
-        return message;
-    }
-
     public enum Type {
         Plain(0x00001),
         Notice(0x00002),
@@ -227,6 +228,7 @@ public class Message extends BaseModel implements ContentComparable<Message> {
             output.deleteCharAt(output.length() - 1);
             output.deleteCharAt(output.length() - 1);
             output.append("]");
+            output.append(flags);
             return output.toString();
         }
 
diff --git a/app/src/main/java/de/kuschku/libquassel/primitives/types/BufferInfo.java b/app/src/main/java/de/kuschku/libquassel/primitives/types/BufferInfo.java
index 473325e5a6e82288b609d1a788aad3863ec87aef..12ae3b4ff0ee3e6f9fb9ec1f74cc0916824b4199 100644
--- a/app/src/main/java/de/kuschku/libquassel/primitives/types/BufferInfo.java
+++ b/app/src/main/java/de/kuschku/libquassel/primitives/types/BufferInfo.java
@@ -22,12 +22,10 @@
 package de.kuschku.libquassel.primitives.types;
 
 import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
 
 import com.raizlabs.android.dbflow.annotation.Column;
 import com.raizlabs.android.dbflow.annotation.PrimaryKey;
 import com.raizlabs.android.dbflow.annotation.Table;
-import com.raizlabs.android.dbflow.converter.TypeConverter;
 import com.raizlabs.android.dbflow.structure.BaseModel;
 
 import de.kuschku.libquassel.localtypes.orm.ConnectedDatabase;
@@ -49,6 +47,16 @@ public class BufferInfo extends BaseModel {
     @Column
     public String name;
 
+    public static BufferInfo create(int id, int networkId, Type type, int groupId, String name) {
+        BufferInfo info = new BufferInfo();
+        info.id = id;
+        info.networkId = networkId;
+        info.type = type;
+        info.groupId = groupId;
+        info.name = name;
+        return info;
+    }
+
     @NonNull
     @Override
     public String toString() {
@@ -61,16 +69,6 @@ public class BufferInfo extends BaseModel {
                 '}';
     }
 
-    public static BufferInfo create(int id, int networkId, Type type, int groupId, String name) {
-        BufferInfo info = new BufferInfo();
-        info.id = id;
-        info.networkId = networkId;
-        info.type = type;
-        info.groupId = groupId;
-        info.name = name;
-        return info;
-    }
-
     public enum Type {
         INVALID(0x00),
         STATUS(0x01),
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java
index 7ff0ab26228c6c7ec4a977017dd2105b0d2f357b..2c0f6b396c83dfbae405b3c5e18304e4be6316da 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java
@@ -96,7 +96,7 @@ public class IrcUserSerializer implements ObjectSerializer<IrcUser> {
                 (String) map.get("suserHost").data,
                 (String) map.get("nick").data,
                 (String) map.get("realName").data,
-                (map.get("account") == null) ? "": (String) map.get("account").data,
+                (map.get("account") == null) ? "" : (String) map.get("account").data,
                 (String) map.get("awayMessage").data,
                 (DateTime) map.get("loginTime").data,
                 (boolean) map.get("encrypted").data,
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkSerializer.java b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkSerializer.java
index 20bf3c4fde1c4c88e062430b300decdc10cc46f5..0acbfd0ee6a167c2dbe8090d43a3520f1307301d 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkSerializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkSerializer.java
@@ -47,9 +47,9 @@ import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser;
 
 @SuppressWarnings({"unchecked", "ConstantConditions"})
 public class NetworkSerializer implements ObjectSerializer<Network> {
+    public static final DateTime UNIX_EPOCH = new DateTime(0L);
     @NonNull
     private static final NetworkSerializer serializer = new NetworkSerializer();
-    public static final DateTime UNIX_EPOCH = new DateTime(0L);
 
     private NetworkSerializer() {
     }
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 218528838ad031c5506290a2b10cfecdb0958da1..dd3cac3459ae35871fab3010d6ebe03beb28c20f 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,6 @@ package de.kuschku.libquassel.syncables.types.impl;
 
 import android.support.annotation.IntRange;
 import android.support.annotation.NonNull;
-import android.util.Log;
 
 import com.raizlabs.android.dbflow.sql.language.SQLite;
 
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 e21f21901223d5ba27d3152ad6ae0c0a8907c10e..6167a752717eded2ff681bfb5eefc9be2824d379 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
@@ -22,7 +22,6 @@
 package de.kuschku.libquassel.syncables.types.impl;
 
 import android.support.annotation.NonNull;
-import android.util.Log;
 
 import java.util.Collections;
 import java.util.List;
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IgnoreListManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IgnoreListManager.java
index 288e7249f3d80d7bfa392317ae88b78d882fd526..5a4bb36fb7f2afd871eecb8281b0d43708b5ed96 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IgnoreListManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IgnoreListManager.java
@@ -23,7 +23,6 @@ package de.kuschku.libquassel.syncables.types.impl;
 
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
-import android.util.Log;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -163,6 +162,11 @@ public class IgnoreListManager extends AIgnoreListManager<IgnoreListManager> {
         client.setIgnoreListManager(this);
     }
 
+    @Override
+    public String toString() {
+        return String.valueOf(ignoreList);
+    }
+
     public class IgnoreListItem {
         private final IgnoreType type;
         @NonNull
@@ -235,9 +239,4 @@ public class IgnoreListManager extends AIgnoreListManager<IgnoreListManager> {
                     '}';
         }
     }
-
-    @Override
-    public String toString() {
-        return String.valueOf(ignoreList);
-    }
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java
index 0bbf2d0f79274614edf16bab3cda57da158c73a2..d8aaa270eb5838fe826126b1b6dfa16fb76c05d1 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java
@@ -39,7 +39,6 @@ import de.kuschku.libquassel.BusProvider;
 import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.events.ConnectionChangeEvent;
 import de.kuschku.libquassel.localtypes.buffers.ChannelBuffer;
-import de.kuschku.libquassel.primitives.types.BufferInfo;
 import de.kuschku.libquassel.primitives.types.QVariant;
 import de.kuschku.libquassel.syncables.serializers.IrcChannelSerializer;
 import de.kuschku.libquassel.syncables.types.abstracts.AIrcChannel;
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 c00da699fa9f44445ba3c181131f841af47b2aec..084fe1b093662e5eb564d4d2b1e6b8830b9d990c 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
@@ -23,7 +23,6 @@ package de.kuschku.libquassel.syncables.types.impl;
 
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
-import android.support.v7.widget.LinearLayoutCompat;
 import android.util.SparseArray;
 
 import org.joda.time.DateTime;
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java
index 41fda6a571a15142830dd4ae9e6ee607f951a121..f32f15a2ae16cd4d00928fbad993c78781938d30 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java
@@ -23,7 +23,6 @@ package de.kuschku.libquassel.syncables.types.impl;
 
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
-import android.util.Log;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -37,7 +36,6 @@ import java.util.Observer;
 import de.kuschku.libquassel.BusProvider;
 import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.events.ConnectionChangeEvent;
-import de.kuschku.libquassel.localtypes.buffers.ChannelBuffer;
 import de.kuschku.libquassel.localtypes.buffers.StatusBuffer;
 import de.kuschku.libquassel.objects.types.NetworkServer;
 import de.kuschku.libquassel.primitives.types.QVariant;
@@ -778,7 +776,6 @@ public class Network extends ANetwork<Network> implements Observer {
     }
 
 
-
     @Override
     public void _update() {
         super._update();
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 dcbadf2895187a7071695d83fffcc4e10e77f606..aaad6894e5ca5446d1f4e957dc59abbd5f20429e 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
@@ -66,7 +66,9 @@ public interface QBacklogManager<T extends QSyncableObject<T>> extends QSyncable
     ObservableComparableSortedList<Message> filtered(int id);
 
     void setOpen(int bufferId);
+
     void open(int bufferId);
+
     int open();
 
     void receiveBacklog(Message msg);
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIrcChannel.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIrcChannel.java
index e4129a152f2a666f65296d72127f212dea735d3c..4eb088f0cf95b937b3684813bd528668436ef4c5 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIrcChannel.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIrcChannel.java
@@ -25,7 +25,6 @@ import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 
 import java.util.List;
-import java.util.Set;
 
 import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.syncables.Synced;
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.java b/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.java
index b4494939cb74f6f3b1c04fa31a38a36b299ef19f..54ebdc7f3d3161f9d7b0df67f55d1e84339f4d22 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.java
@@ -74,9 +74,11 @@ public class QuasselService extends Service {
         public void addCallback(Consumer<ClientBackgroundThread> consumer) {
             consumers.add(consumer);
         }
+
         public void removeCallback(Consumer<ClientBackgroundThread> consumer) {
             consumers.remove(consumer);
         }
+
         private void notify(ClientBackgroundThread thread) {
             for (Consumer<ClientBackgroundThread> consumer : consumers) {
                 consumer.apply(thread);
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/LoginActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/LoginActivity.java
index 36ad8cf3fb2aa0c0de56e218caf1ade103458a36..6ea7870fb48f694b1aa3b42c1ddc6cd1a92896fb 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/LoginActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/LoginActivity.java
@@ -26,8 +26,6 @@ import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.v7.app.AppCompatActivity;
 
-import com.raizlabs.android.dbflow.config.FlowManager;
-
 import de.kuschku.libquassel.localtypes.orm.ConnectedDatabase;
 import de.kuschku.quasseldroid_ng.ui.chat.MainActivity;
 import de.kuschku.quasseldroid_ng.ui.chat.util.ServiceHelper;
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 a6557621f5b7f37f640a564f8d53189011b749bc..ea37f4ce9eaa8ee3c68f72a83c08e3560e075de2 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
@@ -39,7 +39,7 @@ import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.SearchView;
 import android.support.v7.widget.Toolbar;
-import android.util.Log;
+import android.view.ActionMode;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
@@ -72,6 +72,7 @@ import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel;
 import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser;
 import de.kuschku.quasseldroid_ng.R;
 import de.kuschku.quasseldroid_ng.service.ClientBackgroundThread;
+import de.kuschku.quasseldroid_ng.ui.chat.drawer.ActionModeHandler;
 import de.kuschku.quasseldroid_ng.ui.chat.drawer.BufferViewConfigAdapter;
 import de.kuschku.quasseldroid_ng.ui.chat.fragment.ChatFragment;
 import de.kuschku.quasseldroid_ng.ui.chat.fragment.LoadingFragment;
@@ -83,7 +84,6 @@ import de.kuschku.util.certificates.CertificateUtils;
 import de.kuschku.util.certificates.SQLiteCertificateManager;
 import de.kuschku.util.servicebound.BoundActivity;
 import rx.android.schedulers.AndroidSchedulers;
-import rx.functions.Action1;
 
 import static de.kuschku.util.AndroidAssert.assertNotNull;
 
@@ -148,6 +148,7 @@ public class MainActivity extends BoundActivity {
                     drawerLayout.closeDrawer(GravityCompat.START);
             }
         });
+        chatListAdapter.setActionModeHandler(new ActionModeHandler(this, R.id.cab_stub));
         chatListAdapter.setRecyclerView(chatList);
         chatList.setItemAnimator(new DefaultItemAnimator());
         chatList.setLayoutManager(new LinearLayoutManager(this));
@@ -160,8 +161,30 @@ public class MainActivity extends BoundActivity {
                 switch (item.getItemId()) {
                     case R.id.action_show_all: {
                         item.setChecked(chatListAdapter.toggleShowAll());
-                    } break;
+                    }
+                    break;
                     case R.id.action_manage_chat_lists: {
+                        chatListToolbar.startActionMode(new ActionMode.Callback() {
+                            @Override
+                            public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
+                                return false;
+                            }
+
+                            @Override
+                            public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
+                                return false;
+                            }
+
+                            @Override
+                            public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
+                                return false;
+                            }
+
+                            @Override
+                            public void onDestroyActionMode(ActionMode actionMode) {
+
+                            }
+                        });
                     }
                 }
                 return false;
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/ActionModeHandler.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/ActionModeHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..7a790a1b26a49ba61955e12f784efb0b1cfe5e0b
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/ActionModeHandler.java
@@ -0,0 +1,116 @@
+/*
+ * 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.quasseldroid_ng.ui.chat.drawer;
+
+import android.support.annotation.IdRes;
+import android.support.v7.app.AppCompatActivity;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.afollestad.materialcab.MaterialCab;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import de.kuschku.libquassel.localtypes.buffers.Buffer;
+import de.kuschku.quasseldroid_ng.R;
+
+public class ActionModeHandler implements MaterialCab.Callback {
+    private final AppCompatActivity activity;
+    private final MaterialCab cab;
+    private Set<Buffer> selectedChildren = new HashSet<>();
+    private Set<NetworkItem> selectedParents = new HashSet<>();
+    private Menu actionModeMenu;
+
+    public ActionModeHandler(AppCompatActivity activity, @IdRes int stub) {
+        this.activity = activity;
+        cab = new MaterialCab(activity, stub);
+    }
+
+    public boolean isActive() {
+        return cab.isActive();
+    }
+
+
+    public void start() {
+        //cab.start(this);
+    }
+
+    public void toggle(Buffer buffer) {
+        /*
+        if (selectedChildren.contains(buffer))
+            selectedChildren.remove(buffer);
+        else
+            selectedChildren.add(buffer);
+
+        updateSelectionType();
+        */
+    }
+
+    public void toggle(NetworkItem item) {
+        /*
+        if (selectedParents.contains(item))
+            selectedParents.remove(item);
+        else
+            selectedParents.add(item);
+
+        updateSelectionType();
+        */
+    }
+
+    public boolean isChecked(Buffer buffer) {
+        return selectedChildren.contains(buffer);
+    }
+
+    public boolean isChecked(NetworkItem network) {
+        return selectedParents.contains(network);
+    }
+
+    private void updateSelectionType() {
+        if (actionModeMenu != null) {
+            actionModeMenu.setGroupVisible(R.id.context_group_buffer, !selectedChildren.isEmpty() && selectedParents.isEmpty());
+            actionModeMenu.setGroupVisible(R.id.context_group_network, !selectedParents.isEmpty() && selectedChildren.isEmpty());
+        }
+    }
+
+    @Override
+    public boolean onCabCreated(MaterialCab cab, Menu menu) {
+        menu.clear();
+        activity.getMenuInflater().inflate(R.menu.context_buffer_network, menu);
+        actionModeMenu = menu;
+        updateSelectionType();
+        return true;
+    }
+
+    @Override
+    public boolean onCabItemClicked(MenuItem item) {
+        return false;
+    }
+
+    @Override
+    public boolean onCabFinished(MaterialCab cab) {
+        actionModeMenu = null;
+        selectedChildren.clear();
+        selectedParents.clear();
+        return true;
+    }
+}
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 a9209676644ee3e6e6db2214309f1f6112c198c3..88903608ad0a629f9984ca57b0ee4c25238f1fd2 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
@@ -44,7 +44,7 @@ import de.kuschku.util.observables.callbacks.ElementCallback;
 import de.kuschku.util.observables.callbacks.UICallback;
 import de.kuschku.util.observables.lists.ObservableSortedList;
 
-public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkViewHolder, BufferViewHolder> implements OnBufferClickListener {
+public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkViewHolder, BufferViewHolder> implements OnBufferClickListener, OnBufferLongClickListener {
     private final AppContext context;
     private final ObservableSortedList<NetworkItem> items;
     private final Map<QNetwork, NetworkItem> itemMap = new WeakHashMap<>();
@@ -74,17 +74,7 @@ public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkVi
         }
     };
 
-    public void notifyChildItemInserted(NetworkItem parentItem, int childPosition) {
-        super.notifyChildItemInserted(items.indexOf(parentItem), childPosition);
-    }
-
-    public void notifyChildItemRemoved(NetworkItem parentItem, int childPosition) {
-        super.notifyChildItemRemoved(items.indexOf(parentItem), childPosition);
-    }
-
-    public void notifyChildItemChanged(NetworkItem parentItem, int childPosition) {
-        super.notifyChildItemChanged(items.indexOf(parentItem), childPosition);
-    }
+    private ActionModeHandler actionModeHandler;
 
     private BufferViewConfigAdapter(AppContext context, ObservableSortedList<NetworkItem> items) {
         super(items);
@@ -163,6 +153,18 @@ public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkVi
         return new BufferViewConfigAdapter(context, networkItems);
     }
 
+    public void notifyChildItemInserted(NetworkItem parentItem, int childPosition) {
+        super.notifyChildItemInserted(items.indexOf(parentItem), childPosition);
+    }
+
+    public void notifyChildItemRemoved(NetworkItem parentItem, int childPosition) {
+        super.notifyChildItemRemoved(items.indexOf(parentItem), childPosition);
+    }
+
+    public void notifyChildItemChanged(NetworkItem parentItem, int childPosition) {
+        super.notifyChildItemChanged(items.indexOf(parentItem), childPosition);
+    }
+
     @Override
     public NetworkViewHolder onCreateParentViewHolder(ViewGroup parentViewGroup) {
         LayoutInflater inflater = LayoutInflater.from(parentViewGroup.getContext());
@@ -183,14 +185,22 @@ public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkVi
     @Override
     public void onBindChildViewHolder(BufferViewHolder childViewHolder, int position, Object childListItem) {
         bufferViewHolderMap.remove(childViewHolder.id);
-        childViewHolder.bind(this, (Buffer) childListItem);
+        Buffer buffer = (Buffer) childListItem;
+        childViewHolder.bind(this, this, buffer);
         bufferViewHolderMap.put(childViewHolder.id, childViewHolder);
+        childViewHolder.setSelected(context.client().backlogManager().open() == childViewHolder.id);
+        childViewHolder.setChecked(actionModeHandler.isChecked(buffer));
     }
 
     @Override
     public void onClick(Buffer buffer) {
-        if (bufferClickListener != null) {
-            bufferClickListener.onClick(buffer);
+        if (actionModeHandler.isActive()) {
+            actionModeHandler.toggle(buffer);
+            bufferViewHolderMap.get(buffer.getInfo().id).setChecked(actionModeHandler.isChecked(buffer));
+        } else {
+            if (bufferClickListener != null) {
+                bufferClickListener.onClick(buffer);
+            }
         }
     }
 
@@ -243,10 +253,6 @@ public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkVi
         }
     }
 
-    public void setSelection(int from, int to) {
-
-    }
-
     public void setOpen(int id) {
         BufferViewHolder old = bufferViewHolderMap.get(open);
         if (old != null) old.setSelected(false);
@@ -274,4 +280,18 @@ public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkVi
         showAll.set(!before);
         return !before;
     }
+
+    @Override
+    public boolean onLongClick(Buffer buffer) {
+        if (!actionModeHandler.isActive())
+            actionModeHandler.start();
+
+        actionModeHandler.toggle(buffer);
+        bufferViewHolderMap.get(buffer.getInfo().id).setChecked(actionModeHandler.isChecked(buffer));
+        return false;
+    }
+
+    public void setActionModeHandler(ActionModeHandler actionModeHandler) {
+        this.actionModeHandler = actionModeHandler;
+    }
 }
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 2723807f2372aec183ba9b8c75ec974a56bfca59..2a342af270876e678a9f676b20d813e16ad455e0 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
@@ -41,7 +41,6 @@ import java.util.Locale;
 
 import butterknife.Bind;
 import butterknife.ButterKnife;
-import de.kuschku.libquassel.events.BufferChangeEvent;
 import de.kuschku.libquassel.localtypes.buffers.Buffer;
 import de.kuschku.libquassel.localtypes.buffers.ChannelBuffer;
 import de.kuschku.libquassel.localtypes.buffers.QueryBuffer;
@@ -73,14 +72,18 @@ public class BufferViewHolder extends ChildViewHolder {
 
     private StateListDrawable background;
 
+    private boolean selected = false;
+    private boolean checked = false;
+
     public BufferViewHolder(AppContext context, View itemView) {
         super(itemView);
         ButterKnife.bind(this, itemView);
         this.context = context;
-        context.provider().event.registerSticky(this);
 
         background = new StateListDrawable();
         background.addState(new int[]{android.R.attr.state_selected}, new ColorDrawable(context.themeUtil().res.colorSelected));
+        background.addState(new int[]{android.R.attr.state_checked}, new ColorDrawable(context.themeUtil().res.colorSelected));
+        background.addState(new int[]{android.R.attr.state_checked, android.R.attr.state_selected}, new ColorDrawable(context.themeUtil().res.colorSelected));
         background.addState(new int[0], UIUtils.getSelectableBackground(itemView.getContext()));
     }
 
@@ -89,7 +92,7 @@ public class BufferViewHolder extends ChildViewHolder {
         return R.layout.widget_buffer;
     }
 
-    public void bind(OnBufferClickListener listener, Buffer buffer) {
+    public void bind(OnBufferClickListener listener, OnBufferLongClickListener longClickListener, Buffer buffer) {
         if (status != null)
             status.removeOnPropertyChangedCallback(callback);
         status = buffer.getStatus();
@@ -99,7 +102,9 @@ public class BufferViewHolder extends ChildViewHolder {
         viewIntBinder.bindTextColor(name, colorFromActivityStatus(buffer));
         setDescription(context.deserializer().formatString(getDescription(buffer)));
         setBadge(0);
+
         itemView.setOnClickListener(v -> listener.onClick(buffer));
+        itemView.setOnLongClickListener(v -> longClickListener.onLongClick(buffer));
 
         itemView.setBackground(background);
 
@@ -114,8 +119,6 @@ public class BufferViewHolder extends ChildViewHolder {
             }
         };
         status.addOnPropertyChangedCallback(callback);
-
-        setSelected();
     }
 
     @NonNull
@@ -132,12 +135,26 @@ public class BufferViewHolder extends ChildViewHolder {
         };
     }
 
-    private void setSelected() {
-        setSelected(context.client().backlogManager().open() == id);
+    public boolean isSelected() {
+        return selected;
     }
 
     public void setSelected(boolean selected) {
-        itemView.setSelected(selected);
+        this.selected = selected;
+        updateSelectionState();
+    }
+
+    public boolean isChecked() {
+        return checked;
+    }
+
+    public void setChecked(boolean checked) {
+        this.checked = checked;
+        updateSelectionState();
+    }
+
+    private void updateSelectionState() {
+        itemView.setSelected(selected || checked);
     }
 
     private void setIcon(AppContext context, BufferInfo.Type type, ObservableField<BufferInfo.BufferStatus> status) {
@@ -181,8 +198,4 @@ public class BufferViewHolder extends ChildViewHolder {
         }
         return null;
     }
-
-    public void onEventMainThread(BufferChangeEvent event) {
-        setSelected();
-    }
 }
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 848998de725f123bafa2f08ab5b2b40d47731c56..68399e4a859439a497684a01d8de1434965bb2b1 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
@@ -22,7 +22,6 @@
 package de.kuschku.quasseldroid_ng.ui.chat.drawer;
 
 import android.databinding.Observable;
-import android.util.Log;
 
 import com.bignerdranch.expandablerecyclerview.Model.ParentListItem;
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/OnBufferLongClickListener.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/OnBufferLongClickListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..559e9d97a1246e10ded0e0b77139472c48209e22
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/OnBufferLongClickListener.java
@@ -0,0 +1,28 @@
+/*
+ * 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.quasseldroid_ng.ui.chat.drawer;
+
+import de.kuschku.libquassel.localtypes.buffers.Buffer;
+
+public interface OnBufferLongClickListener {
+    boolean onLongClick(Buffer buffer);
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java
index 1f4cee76aa107008b3cfdcef117860d02c000c04..d6e7bf9f3aa76b1a676e70f1f0d100c94823c55d 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java
@@ -27,7 +27,6 @@ import android.support.design.widget.FloatingActionButton;
 import android.support.v7.widget.DefaultItemAnimator;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -103,7 +102,7 @@ public class ChatFragment extends BoundFragment {
                 int scrollOffsetFromBottom = recyclerView.computeVerticalScrollRange() - recyclerView.computeVerticalScrollOffset() - recyclerViewMeasuredHeight;
                 boolean isMoreThanOneScreenFromBottom = scrollOffsetFromBottom > recyclerViewMeasuredHeight;
                 boolean smartVisibility = scrollDown.getVisibility() == View.VISIBLE || isMoreThanOneScreenFromBottom;
-                scrollDown.setVisibility((canScrollDown && isScrollingDown &&  smartVisibility) ? View.VISIBLE : View.GONE);
+                scrollDown.setVisibility((canScrollDown && isScrollingDown && smartVisibility) ? View.VISIBLE : View.GONE);
             }
         });
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/ServiceHelper.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/ServiceHelper.java
index 4f1f8ea06a3d1df02efb8e81959ec2334044e2eb..d99a5174e9f565ca16436c254b9f203b30e8245c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/ServiceHelper.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/ServiceHelper.java
@@ -39,7 +39,8 @@ public class ServiceHelper {
 
     /**
      * Connects to an already running QuasselService
-     * @param context The context in which the service is running
+     *
+     * @param context    The context in which the service is running
      * @param connection The connection to which it should be bound
      */
     public static void connectToService(Context context, ServiceConnection connection) {
@@ -49,7 +50,8 @@ public class ServiceHelper {
 
     /**
      * Connects to an already running QuasselService
-     * @param context The context in which the service is running
+     *
+     * @param context    The context in which the service is running
      * @param connection The connection which should be disconnected
      */
     public static void disconnect(Context context, ServiceConnection connection) {
@@ -58,6 +60,7 @@ public class ServiceHelper {
 
     /**
      * Starts a new QuasselService, if not yet running.
+     *
      * @param context The context in which it should run
      */
     public static void startServiceIfNotRunning(Context context) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSelectActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSelectActivity.java
index bba27567a72d9a40261c387086606df9fd3794be..fb126b55e2a19cf46ef7ecfd7324586798c608e2 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSelectActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSelectActivity.java
@@ -38,31 +38,11 @@ import de.kuschku.quasseldroid_ng.ui.setup.slides.AccountSelectSlide;
 import de.kuschku.quasseldroid_ng.ui.setup.slides.SlideFragment;
 
 public class AccountSelectActivity extends AppCompatActivity {
-    private SlidePagerAdapter slidePagerAdapter;
-
     @Bind(R.id.view_pager)
     ViewPager viewPager;
-
     @Bind(R.id.btn)
     FloatingActionButton btn;
-
-    private class SlidePagerAdapter extends FragmentPagerAdapter {
-        private SlideFragment item = new AccountSelectSlide();
-
-        public SlidePagerAdapter(FragmentManager fm) {
-            super(fm);
-        }
-
-        @Override
-        public SlideFragment getItem(int position) {
-            return item;
-        }
-
-        @Override
-        public int getCount() {
-            return 1;
-        }
-    }
+    private SlidePagerAdapter slidePagerAdapter;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -91,4 +71,22 @@ public class AccountSelectActivity extends AppCompatActivity {
         btn.setVisibility(validity ? View.VISIBLE : View.GONE);
         slidePagerAdapter.notifyDataSetChanged();
     }
+
+    private class SlidePagerAdapter extends FragmentPagerAdapter {
+        private SlideFragment item = new AccountSelectSlide();
+
+        public SlidePagerAdapter(FragmentManager fm) {
+            super(fm);
+        }
+
+        @Override
+        public SlideFragment getItem(int position) {
+            return item;
+        }
+
+        @Override
+        public int getCount() {
+            return 1;
+        }
+    }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSelectSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSelectSlide.java
index a786c05887c0befd8fc73f735ae8ff796581e6e5..2fb2e12dc88a8bb31439fda095ca788c0aff53b4 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSelectSlide.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSelectSlide.java
@@ -55,7 +55,7 @@ public class AccountSelectSlide extends SlideFragment implements AccountItem.OnD
 
     @Override
     public Bundle getData(Bundle in) {
-        AccountItem item =  (AccountItem) findAny(fastAdapter.getSelectedItems()).get();
+        AccountItem item = (AccountItem) findAny(fastAdapter.getSelectedItems()).get();
         in.putString("account", item.account.id.toString());
         return in;
     }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java
index 92745729bcf43fd5f9347006980f769c91028ff0..9fa726126bbd3736d91f328e2f67c91ca93a5c6f 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java
@@ -36,16 +36,29 @@ import butterknife.ButterKnife;
 import de.kuschku.quasseldroid_ng.R;
 
 public class AccountSetupCoreSlide extends SlideFragment {
-    @Override
-    public void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-    }
-
     @Bind(R.id.host)
     AppCompatEditText hostField;
-
     @Bind(R.id.port)
     AppCompatEditText portField;
+    TextWatcher watcher = new TextWatcher() {
+        @Override
+        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+        }
+
+        @Override
+        public void onTextChanged(CharSequence s, int start, int before, int count) {
+            updateValidity();
+        }
+
+        @Override
+        public void afterTextChanged(Editable s) {
+        }
+    };
+
+    @Override
+    public void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+    }
 
     @Override
     protected View onCreateContent(LayoutInflater inflater, ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -100,19 +113,4 @@ public class AccountSetupCoreSlide extends SlideFragment {
         String hostText = hostField.getText().toString();
         return !hostText.isEmpty();
     }
-
-    TextWatcher watcher = new TextWatcher() {
-        @Override
-        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-        }
-
-        @Override
-        public void onTextChanged(CharSequence s, int start, int before, int count) {
-            updateValidity();
-        }
-
-        @Override
-        public void afterTextChanged(Editable s) {
-        }
-    };
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java
index b50ae81d6527da31afaabe2c448c1fc7e9149f9f..c6eaaa34c9d7cd8f6f24ab3c4de9def8e431538b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java
@@ -36,14 +36,28 @@ import butterknife.ButterKnife;
 import de.kuschku.quasseldroid_ng.R;
 
 public class AccountSetupNameSlide extends SlideFragment {
+    @Bind(R.id.name)
+    AppCompatEditText nameField;
+    TextWatcher watcher = new TextWatcher() {
+        @Override
+        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+        }
+
+        @Override
+        public void onTextChanged(CharSequence s, int start, int before, int count) {
+            updateValidity();
+        }
+
+        @Override
+        public void afterTextChanged(Editable s) {
+        }
+    };
+
     @Override
     public void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
     }
 
-    @Bind(R.id.name)
-    AppCompatEditText nameField;
-
     @Override
     protected View onCreateContent(LayoutInflater inflater, ViewGroup container, @Nullable Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.slide_account_name, container, false);
@@ -82,19 +96,4 @@ public class AccountSetupNameSlide extends SlideFragment {
         String hostText = nameField.getText().toString();
         return !hostText.isEmpty();
     }
-
-    TextWatcher watcher = new TextWatcher() {
-        @Override
-        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-        }
-
-        @Override
-        public void onTextChanged(CharSequence s, int start, int before, int count) {
-            updateValidity();
-        }
-
-        @Override
-        public void afterTextChanged(Editable s) {
-        }
-    };
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java
index c6b77f179eda08de4b5ceba3a827dccdda8b5e89..d740d9e5d0e4812b2d3f562f866995ccca8b088d 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java
@@ -36,16 +36,29 @@ import butterknife.ButterKnife;
 import de.kuschku.quasseldroid_ng.R;
 
 public class AccountSetupUserSlide extends SlideFragment {
-    @Override
-    public void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-    }
-
     @Bind(R.id.user)
     AppCompatEditText userField;
-
     @Bind(R.id.pass)
     AppCompatEditText passField;
+    TextWatcher watcher = new TextWatcher() {
+        @Override
+        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+        }
+
+        @Override
+        public void onTextChanged(CharSequence s, int start, int before, int count) {
+        }
+
+        @Override
+        public void afterTextChanged(Editable s) {
+            updateValidity();
+        }
+    };
+
+    @Override
+    public void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+    }
 
     @Override
     public View onCreateContent(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -95,19 +108,4 @@ public class AccountSetupUserSlide extends SlideFragment {
         String hostText = passField.getText().toString();
         return !hostText.isEmpty();
     }
-
-    TextWatcher watcher = new TextWatcher() {
-        @Override
-        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-        }
-
-        @Override
-        public void onTextChanged(CharSequence s, int start, int before, int count) {
-        }
-
-        @Override
-        public void afterTextChanged(Editable s) {
-            updateValidity();
-        }
-    };
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/SlideFragment.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/SlideFragment.java
index a0f460dc66bcdce5adc30a669e31a46c1b1aff70..e37960ce73554e58ec572cb28ed3ca56712433a7 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/SlideFragment.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/SlideFragment.java
@@ -43,15 +43,19 @@ public abstract class SlideFragment extends Fragment {
 
 
     public abstract boolean isValid();
+
     public void addChangeListener(ValidUpdateCallback callback) {
         callbacks.add(callback);
     }
+
     public void removeChangeListener(ValidUpdateCallback callback) {
         callbacks.remove(callback);
     }
+
     protected void updateValidity() {
         updateValidity(isValid());
     }
+
     protected void updateValidity(boolean validity) {
         for (ValidUpdateCallback callback : callbacks) {
             callback.updateValidity(validity);
@@ -70,6 +74,7 @@ public abstract class SlideFragment extends Fragment {
 
         return view;
     }
+
     protected abstract View onCreateContent(LayoutInflater inflater, ViewGroup container, @Nullable Bundle savedInstanceState);
 
     @StringRes
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/ThemeUtil.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/ThemeUtil.java
index 818c1a9d6f3fcf8e8001df19f3f7b87e935b3631..84520269965f8fbb72aea1088753326fd4546ef3 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/ThemeUtil.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/ThemeUtil.java
@@ -369,7 +369,6 @@ public class ThemeUtil {
         public String chanMode_FORWARD_DESCRIPTION;
 
 
-
         public String chanModeToDescription(ChanMode mode) {
             switch (mode) {
                 case RESTRICT_TOPIC:
@@ -705,11 +704,6 @@ public class ThemeUtil {
         public CharSequence formatPlain(@NonNull CharSequence nick, @NonNull CharSequence message) {
             return SpanFormatter.format(messagePlain, nick, message);
         }
-
-        @NonNull
-        public CharSequence formatTopic(@NonNull CharSequence nick, @NonNull CharSequence channel, @NonNull CharSequence message) {
-            return SpanFormatter.format(messageTopic, nick, channel, message);
-        }
     }
 
     public static class Colors {
@@ -795,7 +789,7 @@ public class ThemeUtil {
         @ColorInt
         public int colorTintHighlight;
 
-        @AutoColor(R.attr.material_drawer_selected)
+        @AutoColor(R.attr.colorControlHighlight)
         @ColorInt
         public int colorSelected;
 
diff --git a/app/src/main/java/de/kuschku/util/ReflectionUtils.java b/app/src/main/java/de/kuschku/util/ReflectionUtils.java
index adf1907f7a3a38842d23d60e74f5770fde60f031..57f53b531fac9f225af58a7819c13d80f9556893 100644
--- a/app/src/main/java/de/kuschku/util/ReflectionUtils.java
+++ b/app/src/main/java/de/kuschku/util/ReflectionUtils.java
@@ -23,7 +23,6 @@ package de.kuschku.util;
 
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
-import android.util.Log;
 
 import com.google.common.primitives.Primitives;
 
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/IrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/IrcModeProvider.java
index ef05df887a037fd81f686fdc3ac7545d7dbf377e..afc4c58e2fd450ad9602cb1982a19b9a76a8491a 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/IrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/IrcModeProvider.java
@@ -25,7 +25,10 @@ import java.util.Set;
 
 public interface IrcModeProvider {
     ChanMode modeFromChar(char mode);
+
     char charFromMode(ChanMode mode);
+
     int matchQuality(Set<Character> modes);
+
     Set<ChanMode> modesFromString(String chanModes);
 }
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/IrcModeProviderFactory.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/IrcModeProviderFactory.java
index 836dd0513d32cf79d3966333510c8f5fbf0c34db..620d766b1840c8c561901dcc2e9ff8cfb6e6c80e 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/IrcModeProviderFactory.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/IrcModeProviderFactory.java
@@ -55,7 +55,7 @@ public class IrcModeProviderFactory {
 
     private static Set<Character> toModeSet(String chanModes) {
         if (chanModes == null) chanModes = "";
-        String replaced = chanModes.replaceAll(",","");
+        String replaced = chanModes.replaceAll(",", "");
         Set<Character> modeSet = new HashSet<>();
         for (char c : replaced.toCharArray()) {
             modeSet.add(c);
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/BewareIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/BewareIrcModeProvider.java
index c38a114053675ab5c93aa85794735182a2662a5c..a4492474d33eb2ccccf5a037f96658aa38865daa 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/BewareIrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/BewareIrcModeProvider.java
@@ -57,16 +57,26 @@ public class BewareIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public ChanMode modeFromChar(char mode) {
         switch (mode) {
-            case 'C': return BLOCK_CTCP;
-            case 'c': return BLOCK_COLOR;
-            case 'i': return ONLY_INVITE;
-            case 'k': return PASSWORD;
-            case 'l': return LIMIT;
-            case 'm': return MODERATED;
-            case 'n': return BLOCK_EXTERNAL;
-            case 'p': return PARANOID;
-            case 's': return UNLISTED;
-            case 't': return RESTRICT_TOPIC;
+            case 'C':
+                return BLOCK_CTCP;
+            case 'c':
+                return BLOCK_COLOR;
+            case 'i':
+                return ONLY_INVITE;
+            case 'k':
+                return PASSWORD;
+            case 'l':
+                return LIMIT;
+            case 'm':
+                return MODERATED;
+            case 'n':
+                return BLOCK_EXTERNAL;
+            case 'p':
+                return PARANOID;
+            case 's':
+                return UNLISTED;
+            case 't':
+                return RESTRICT_TOPIC;
 
             case 'b':
                 return BAN;
@@ -81,16 +91,26 @@ public class BewareIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public char charFromMode(ChanMode mode) {
         switch (mode) {
-            case BLOCK_CTCP: return 'C';
-            case BLOCK_COLOR: return 'c';
-            case ONLY_INVITE: return 'i';
-            case PASSWORD: return 'k';
-            case LIMIT: return 'l';
-            case MODERATED: return 'm';
-            case BLOCK_EXTERNAL: return 'n';
-            case PARANOID: return 'p';
-            case UNLISTED: return 's';
-            case RESTRICT_TOPIC: return 't';
+            case BLOCK_CTCP:
+                return 'C';
+            case BLOCK_COLOR:
+                return 'c';
+            case ONLY_INVITE:
+                return 'i';
+            case PASSWORD:
+                return 'k';
+            case LIMIT:
+                return 'l';
+            case MODERATED:
+                return 'm';
+            case BLOCK_EXTERNAL:
+                return 'n';
+            case PARANOID:
+                return 'p';
+            case UNLISTED:
+                return 's';
+            case RESTRICT_TOPIC:
+                return 't';
 
             case BAN:
                 return 'b';
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/CharybdisIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/CharybdisIrcModeProvider.java
index 788f0024427c7c32f61b7c35ceda70d831d48113..c53b0320894bedff29d6b5131c7bc6e7bb1c1ced 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/CharybdisIrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/CharybdisIrcModeProvider.java
@@ -65,28 +65,50 @@ public class CharybdisIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public ChanMode modeFromChar(char mode) {
         switch (mode) {
-            case 'A': return ONLY_ADMIN;
-            case 'C': return BLOCK_CTCP;
-            case 'F': return ALLOW_FORWARD;
-            case 'O': return ONLY_OPER;
-            case 'P': return PERMANENT;
-            case 'Q': return BLOCK_FORWARDING;
-            case 'S': return ONLY_SSL;
-            case 'T': return BLOCK_NOTICE;
-            case 'c': return BLOCK_COLOR;
-            case 'f': return FORWARD;
-            case 'g': return ALLOW_INVITE;
-            case 'i': return ONLY_INVITE;
-            case 'j': return JOIN_THROTTLE;
-            case 'k': return PASSWORD;
-            case 'l': return LIMIT;
-            case 'm': return MODERATED;
-            case 'n': return BLOCK_EXTERNAL;
-            case 'p': return PARANOID;
-            case 'r': return BLOCK_UNIDENTIFIED;
-            case 's': return UNLISTED;
-            case 't': return RESTRICT_TOPIC;
-            case 'z': return REDUCED_MODERATION;
+            case 'A':
+                return ONLY_ADMIN;
+            case 'C':
+                return BLOCK_CTCP;
+            case 'F':
+                return ALLOW_FORWARD;
+            case 'O':
+                return ONLY_OPER;
+            case 'P':
+                return PERMANENT;
+            case 'Q':
+                return BLOCK_FORWARDING;
+            case 'S':
+                return ONLY_SSL;
+            case 'T':
+                return BLOCK_NOTICE;
+            case 'c':
+                return BLOCK_COLOR;
+            case 'f':
+                return FORWARD;
+            case 'g':
+                return ALLOW_INVITE;
+            case 'i':
+                return ONLY_INVITE;
+            case 'j':
+                return JOIN_THROTTLE;
+            case 'k':
+                return PASSWORD;
+            case 'l':
+                return LIMIT;
+            case 'm':
+                return MODERATED;
+            case 'n':
+                return BLOCK_EXTERNAL;
+            case 'p':
+                return PARANOID;
+            case 'r':
+                return BLOCK_UNIDENTIFIED;
+            case 's':
+                return UNLISTED;
+            case 't':
+                return RESTRICT_TOPIC;
+            case 'z':
+                return REDUCED_MODERATION;
 
             case 'b':
                 return BAN;
@@ -103,28 +125,50 @@ public class CharybdisIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public char charFromMode(ChanMode mode) {
         switch (mode) {
-            case ONLY_ADMIN: return 'A';
-            case BLOCK_CTCP: return 'C';
-            case ALLOW_FORWARD: return 'F';
-            case ONLY_OPER: return 'O';
-            case PERMANENT: return 'P';
-            case BLOCK_FORWARDING: return 'Q';
-            case ONLY_SSL: return 'S';
-            case BLOCK_NOTICE: return 'T';
-            case BLOCK_COLOR: return 'c';
-            case FORWARD: return 'f';
-            case ALLOW_INVITE: return 'g';
-            case ONLY_INVITE: return 'i';
-            case JOIN_THROTTLE: return 'j';
-            case PASSWORD: return 'k';
-            case LIMIT: return 'l';
-            case MODERATED: return 'm';
-            case BLOCK_EXTERNAL: return 'n';
-            case PARANOID: return 'p';
-            case BLOCK_UNIDENTIFIED: return 'r';
-            case UNLISTED: return 's';
-            case RESTRICT_TOPIC: return 't';
-            case REDUCED_MODERATION: return 'z';
+            case ONLY_ADMIN:
+                return 'A';
+            case BLOCK_CTCP:
+                return 'C';
+            case ALLOW_FORWARD:
+                return 'F';
+            case ONLY_OPER:
+                return 'O';
+            case PERMANENT:
+                return 'P';
+            case BLOCK_FORWARDING:
+                return 'Q';
+            case ONLY_SSL:
+                return 'S';
+            case BLOCK_NOTICE:
+                return 'T';
+            case BLOCK_COLOR:
+                return 'c';
+            case FORWARD:
+                return 'f';
+            case ALLOW_INVITE:
+                return 'g';
+            case ONLY_INVITE:
+                return 'i';
+            case JOIN_THROTTLE:
+                return 'j';
+            case PASSWORD:
+                return 'k';
+            case LIMIT:
+                return 'l';
+            case MODERATED:
+                return 'm';
+            case BLOCK_EXTERNAL:
+                return 'n';
+            case PARANOID:
+                return 'p';
+            case BLOCK_UNIDENTIFIED:
+                return 'r';
+            case UNLISTED:
+                return 's';
+            case RESTRICT_TOPIC:
+                return 't';
+            case REDUCED_MODERATION:
+                return 'z';
 
             case BAN:
                 return 'b';
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DalIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DalIrcModeProvider.java
index fa4b49dbd9e295b9beda3f9a736ad965b67d30ea..34a7798c14e3cfd9102cafbdcfbae98d49466533 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DalIrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DalIrcModeProvider.java
@@ -58,22 +58,38 @@ public class DalIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public ChanMode modeFromChar(char mode) {
         switch (mode) {
-            case 'A': return AUDITORIUM;
-            case 'M': return QUIET_UNIDENTIFIED;
-            case 'O': return ONLY_OPER;
-            case 'R': return BLOCK_UNIDENTIFIED;
-            case 'S': return ONLY_SSL;
-            case 'c': return BLOCK_COLOR;
-            case 'i': return ONLY_INVITE;
-            case 'j': return JOIN_THROTTLE;
-            case 'k': return PASSWORD;
-            case 'l': return LIMIT;
-            case 'm': return MODERATED;
-            case 'n': return BLOCK_EXTERNAL;
-            case 'p': return PARANOID;
-            case 'r': return REGISTERED;
-            case 's': return UNLISTED;
-            case 't': return RESTRICT_TOPIC;
+            case 'A':
+                return AUDITORIUM;
+            case 'M':
+                return QUIET_UNIDENTIFIED;
+            case 'O':
+                return ONLY_OPER;
+            case 'R':
+                return BLOCK_UNIDENTIFIED;
+            case 'S':
+                return ONLY_SSL;
+            case 'c':
+                return BLOCK_COLOR;
+            case 'i':
+                return ONLY_INVITE;
+            case 'j':
+                return JOIN_THROTTLE;
+            case 'k':
+                return PASSWORD;
+            case 'l':
+                return LIMIT;
+            case 'm':
+                return MODERATED;
+            case 'n':
+                return BLOCK_EXTERNAL;
+            case 'p':
+                return PARANOID;
+            case 'r':
+                return REGISTERED;
+            case 's':
+                return UNLISTED;
+            case 't':
+                return RESTRICT_TOPIC;
 
             case 'b':
                 return BAN;
@@ -88,22 +104,38 @@ public class DalIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public char charFromMode(ChanMode mode) {
         switch (mode) {
-            case AUDITORIUM: return 'A';
-            case QUIET_UNIDENTIFIED: return 'M';
-            case ONLY_OPER: return 'O';
-            case BLOCK_UNIDENTIFIED: return 'R';
-            case ONLY_SSL: return 'S';
-            case BLOCK_COLOR: return 'c';
-            case ONLY_INVITE: return 'i';
-            case JOIN_THROTTLE: return 'j';
-            case PASSWORD: return 'k';
-            case LIMIT: return 'l';
-            case MODERATED: return 'm';
-            case BLOCK_EXTERNAL: return 'n';
-            case PARANOID: return 'p';
-            case REGISTERED: return 'r';
-            case UNLISTED: return 's';
-            case RESTRICT_TOPIC: return 't';
+            case AUDITORIUM:
+                return 'A';
+            case QUIET_UNIDENTIFIED:
+                return 'M';
+            case ONLY_OPER:
+                return 'O';
+            case BLOCK_UNIDENTIFIED:
+                return 'R';
+            case ONLY_SSL:
+                return 'S';
+            case BLOCK_COLOR:
+                return 'c';
+            case ONLY_INVITE:
+                return 'i';
+            case JOIN_THROTTLE:
+                return 'j';
+            case PASSWORD:
+                return 'k';
+            case LIMIT:
+                return 'l';
+            case MODERATED:
+                return 'm';
+            case BLOCK_EXTERNAL:
+                return 'n';
+            case PARANOID:
+                return 'p';
+            case REGISTERED:
+                return 'r';
+            case UNLISTED:
+                return 's';
+            case RESTRICT_TOPIC:
+                return 't';
 
             case BAN:
                 return 'b';
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DancerIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DancerIrcModeProvider.java
index 5b6e898a9e50d89ee80e9c5e8b4f6a85b8e75b71..37c0014c12cf20674fb8358ca65ccd3ad097301c 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DancerIrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/DancerIrcModeProvider.java
@@ -56,20 +56,34 @@ public class DancerIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public ChanMode modeFromChar(char mode) {
         switch (mode) {
-            case 'J': return JOIN_THROTTLE;
-            case 'P': return PERMANENT;
-            case 'Q': return BLOCK_FORWARDING;
-            case 'R': return QUIET_UNIDENTIFIED;
-            case 'c': return BLOCK_COLOR;
-            case 'g': return ALLOW_INVITE;
-            case 'i': return ONLY_INVITE;
-            case 'k': return PASSWORD;
-            case 'l': return LIMIT;
-            case 'm': return MODERATED;
-            case 'n': return BLOCK_EXTERNAL;
-            case 'r': return BLOCK_UNIDENTIFIED;
-            case 's': return UNLISTED;
-            case 'z': return REDUCED_MODERATION;
+            case 'J':
+                return JOIN_THROTTLE;
+            case 'P':
+                return PERMANENT;
+            case 'Q':
+                return BLOCK_FORWARDING;
+            case 'R':
+                return QUIET_UNIDENTIFIED;
+            case 'c':
+                return BLOCK_COLOR;
+            case 'g':
+                return ALLOW_INVITE;
+            case 'i':
+                return ONLY_INVITE;
+            case 'k':
+                return PASSWORD;
+            case 'l':
+                return LIMIT;
+            case 'm':
+                return MODERATED;
+            case 'n':
+                return BLOCK_EXTERNAL;
+            case 'r':
+                return BLOCK_UNIDENTIFIED;
+            case 's':
+                return UNLISTED;
+            case 'z':
+                return REDUCED_MODERATION;
 
             case 'b':
                 return BAN;
@@ -84,20 +98,34 @@ public class DancerIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public char charFromMode(ChanMode mode) {
         switch (mode) {
-            case JOIN_THROTTLE: return 'J';
-            case PERMANENT: return 'P';
-            case BLOCK_FORWARDING: return 'Q';
-            case QUIET_UNIDENTIFIED: return 'R';
-            case BLOCK_COLOR: return 'c';
-            case ALLOW_INVITE: return 'g';
-            case ONLY_INVITE: return 'i';
-            case PASSWORD: return 'k';
-            case LIMIT: return 'l';
-            case MODERATED: return 'm';
-            case BLOCK_EXTERNAL: return 'n';
-            case BLOCK_UNIDENTIFIED: return 'r';
-            case UNLISTED: return 's';
-            case REDUCED_MODERATION: return 'z';
+            case JOIN_THROTTLE:
+                return 'J';
+            case PERMANENT:
+                return 'P';
+            case BLOCK_FORWARDING:
+                return 'Q';
+            case QUIET_UNIDENTIFIED:
+                return 'R';
+            case BLOCK_COLOR:
+                return 'c';
+            case ALLOW_INVITE:
+                return 'g';
+            case ONLY_INVITE:
+                return 'i';
+            case PASSWORD:
+                return 'k';
+            case LIMIT:
+                return 'l';
+            case MODERATED:
+                return 'm';
+            case BLOCK_EXTERNAL:
+                return 'n';
+            case BLOCK_UNIDENTIFIED:
+                return 'r';
+            case UNLISTED:
+                return 's';
+            case REDUCED_MODERATION:
+                return 'z';
 
             case BAN:
                 return 'b';
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/FqIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/FqIrcModeProvider.java
index 0a2edf5aaea5aacddcae1912aa634f308627df62..26bd287737635840b7be9a7565a1ae7ce581680c 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/FqIrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/FqIrcModeProvider.java
@@ -57,22 +57,38 @@ public class FqIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public ChanMode modeFromChar(char mode) {
         switch (mode) {
-            case 'M': return QUIET_UNIDENTIFIED;
-            case 'O': return ONLY_OPER;
-            case 'R': return BLOCK_UNIDENTIFIED;
-            case 'S': return ONLY_SSL;
-            case 'c': return BLOCK_COLOR;
-            case 'i': return ONLY_INVITE;
-            case 'j': return JOIN_THROTTLE;
-            case 'k': return PASSWORD;
-            case 'l': return LIMIT;
-            case 'm': return MODERATED;
-            case 'n': return BLOCK_EXTERNAL;
-            case 'p': return PARANOID;
-            case 'q': return BLOCK_UNIDENTIFIED;
-            case 'r': return REGISTERED;
-            case 's': return UNLISTED;
-            case 't': return RESTRICT_TOPIC;
+            case 'M':
+                return QUIET_UNIDENTIFIED;
+            case 'O':
+                return ONLY_OPER;
+            case 'R':
+                return BLOCK_UNIDENTIFIED;
+            case 'S':
+                return ONLY_SSL;
+            case 'c':
+                return BLOCK_COLOR;
+            case 'i':
+                return ONLY_INVITE;
+            case 'j':
+                return JOIN_THROTTLE;
+            case 'k':
+                return PASSWORD;
+            case 'l':
+                return LIMIT;
+            case 'm':
+                return MODERATED;
+            case 'n':
+                return BLOCK_EXTERNAL;
+            case 'p':
+                return PARANOID;
+            case 'q':
+                return BLOCK_UNIDENTIFIED;
+            case 'r':
+                return REGISTERED;
+            case 's':
+                return UNLISTED;
+            case 't':
+                return RESTRICT_TOPIC;
 
             case 'b':
                 return BAN;
@@ -87,21 +103,36 @@ public class FqIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public char charFromMode(ChanMode mode) {
         switch (mode) {
-            case QUIET_UNIDENTIFIED: return 'M';
-            case ONLY_OPER: return 'O';
-            case ONLY_SSL: return 'S';
-            case BLOCK_COLOR: return 'c';
-            case ONLY_INVITE: return 'i';
-            case JOIN_THROTTLE: return 'j';
-            case PASSWORD: return 'k';
-            case LIMIT: return 'l';
-            case MODERATED: return 'm';
-            case BLOCK_EXTERNAL: return 'n';
-            case PARANOID: return 'p';
-            case BLOCK_UNIDENTIFIED: return 'q';
-            case REGISTERED: return 'r';
-            case UNLISTED: return 's';
-            case RESTRICT_TOPIC: return 't';
+            case QUIET_UNIDENTIFIED:
+                return 'M';
+            case ONLY_OPER:
+                return 'O';
+            case ONLY_SSL:
+                return 'S';
+            case BLOCK_COLOR:
+                return 'c';
+            case ONLY_INVITE:
+                return 'i';
+            case JOIN_THROTTLE:
+                return 'j';
+            case PASSWORD:
+                return 'k';
+            case LIMIT:
+                return 'l';
+            case MODERATED:
+                return 'm';
+            case BLOCK_EXTERNAL:
+                return 'n';
+            case PARANOID:
+                return 'p';
+            case BLOCK_UNIDENTIFIED:
+                return 'q';
+            case REGISTERED:
+                return 'r';
+            case UNLISTED:
+                return 's';
+            case RESTRICT_TOPIC:
+                return 't';
 
             case BAN:
                 return 'b';
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HybridIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HybridIrcModeProvider.java
index f259714201aadcf51356dd38866b1a984c1b0ac4..b444f42f53f0c807974d70def26d0864424d3b80 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HybridIrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HybridIrcModeProvider.java
@@ -56,20 +56,34 @@ public class HybridIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public ChanMode modeFromChar(char mode) {
         switch (mode) {
-            case 'M': return QUIET_UNIDENTIFIED;
-            case 'O': return ONLY_OPER;
-            case 'R': return BLOCK_UNIDENTIFIED;
-            case 'S': return ONLY_SSL;
-            case 'c': return BLOCK_COLOR;
-            case 'i': return ONLY_INVITE;
-            case 'k': return PASSWORD;
-            case 'l': return LIMIT;
-            case 'm': return MODERATED;
-            case 'n': return BLOCK_EXTERNAL;
-            case 'p': return PARANOID;
-            case 'r': return REGISTERED;
-            case 's': return UNLISTED;
-            case 't': return RESTRICT_TOPIC;
+            case 'M':
+                return QUIET_UNIDENTIFIED;
+            case 'O':
+                return ONLY_OPER;
+            case 'R':
+                return BLOCK_UNIDENTIFIED;
+            case 'S':
+                return ONLY_SSL;
+            case 'c':
+                return BLOCK_COLOR;
+            case 'i':
+                return ONLY_INVITE;
+            case 'k':
+                return PASSWORD;
+            case 'l':
+                return LIMIT;
+            case 'm':
+                return MODERATED;
+            case 'n':
+                return BLOCK_EXTERNAL;
+            case 'p':
+                return PARANOID;
+            case 'r':
+                return REGISTERED;
+            case 's':
+                return UNLISTED;
+            case 't':
+                return RESTRICT_TOPIC;
 
             case 'b':
                 return BAN;
@@ -84,20 +98,34 @@ public class HybridIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public char charFromMode(ChanMode mode) {
         switch (mode) {
-            case QUIET_UNIDENTIFIED: return 'M';
-            case ONLY_OPER: return 'O';
-            case BLOCK_UNIDENTIFIED: return 'R';
-            case ONLY_SSL: return 'S';
-            case BLOCK_COLOR: return 'c';
-            case ONLY_INVITE: return 'i';
-            case PASSWORD: return 'k';
-            case LIMIT: return 'l';
-            case MODERATED: return 'm';
-            case BLOCK_EXTERNAL: return 'n';
-            case PARANOID: return 'p';
-            case REGISTERED: return 'r';
-            case UNLISTED: return 's';
-            case RESTRICT_TOPIC: return 't';
+            case QUIET_UNIDENTIFIED:
+                return 'M';
+            case ONLY_OPER:
+                return 'O';
+            case BLOCK_UNIDENTIFIED:
+                return 'R';
+            case ONLY_SSL:
+                return 'S';
+            case BLOCK_COLOR:
+                return 'c';
+            case ONLY_INVITE:
+                return 'i';
+            case PASSWORD:
+                return 'k';
+            case LIMIT:
+                return 'l';
+            case MODERATED:
+                return 'm';
+            case BLOCK_EXTERNAL:
+                return 'n';
+            case PARANOID:
+                return 'p';
+            case REGISTERED:
+                return 'r';
+            case UNLISTED:
+                return 's';
+            case RESTRICT_TOPIC:
+                return 't';
 
             case BAN:
                 return 'b';
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HyperionIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HyperionIrcModeProvider.java
index 28c2c12d4c0177441e1c5afa506891db189a180e..630b8331b07158b7b1eac5edf527a963756f8903 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HyperionIrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/HyperionIrcModeProvider.java
@@ -54,18 +54,30 @@ public class HyperionIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public ChanMode modeFromChar(char mode) {
         switch (mode) {
-            case 'Q': return BLOCK_FORWARDING;
-            case 'R': return QUIET_UNIDENTIFIED;
-            case 'c': return BLOCK_COLOR;
-            case 'g': return ALLOW_INVITE;
-            case 'i': return ONLY_INVITE;
-            case 'k': return PASSWORD;
-            case 'l': return LIMIT;
-            case 'm': return MODERATED;
-            case 'n': return BLOCK_EXTERNAL;
-            case 'r': return BLOCK_UNIDENTIFIED;
-            case 's': return UNLISTED;
-            case 'z': return REDUCED_MODERATION;
+            case 'Q':
+                return BLOCK_FORWARDING;
+            case 'R':
+                return QUIET_UNIDENTIFIED;
+            case 'c':
+                return BLOCK_COLOR;
+            case 'g':
+                return ALLOW_INVITE;
+            case 'i':
+                return ONLY_INVITE;
+            case 'k':
+                return PASSWORD;
+            case 'l':
+                return LIMIT;
+            case 'm':
+                return MODERATED;
+            case 'n':
+                return BLOCK_EXTERNAL;
+            case 'r':
+                return BLOCK_UNIDENTIFIED;
+            case 's':
+                return UNLISTED;
+            case 'z':
+                return REDUCED_MODERATION;
 
             case 'b':
                 return BAN;
@@ -80,18 +92,30 @@ public class HyperionIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public char charFromMode(ChanMode mode) {
         switch (mode) {
-            case BLOCK_FORWARDING: return 'Q';
-            case QUIET_UNIDENTIFIED: return 'R';
-            case BLOCK_COLOR: return 'c';
-            case ALLOW_INVITE: return 'g';
-            case ONLY_INVITE: return 'i';
-            case PASSWORD: return 'k';
-            case LIMIT: return 'l';
-            case MODERATED: return 'm';
-            case BLOCK_EXTERNAL: return 'n';
-            case BLOCK_UNIDENTIFIED: return 'r';
-            case UNLISTED: return 's';
-            case REDUCED_MODERATION: return 'z';
+            case BLOCK_FORWARDING:
+                return 'Q';
+            case QUIET_UNIDENTIFIED:
+                return 'R';
+            case BLOCK_COLOR:
+                return 'c';
+            case ALLOW_INVITE:
+                return 'g';
+            case ONLY_INVITE:
+                return 'i';
+            case PASSWORD:
+                return 'k';
+            case LIMIT:
+                return 'l';
+            case MODERATED:
+                return 'm';
+            case BLOCK_EXTERNAL:
+                return 'n';
+            case BLOCK_UNIDENTIFIED:
+                return 'r';
+            case UNLISTED:
+                return 's';
+            case REDUCED_MODERATION:
+                return 'z';
 
             case BAN:
                 return 'b';
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/InspireIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/InspireIrcModeProvider.java
index 98a7d6f035f97c165f075e63bfe49c5f91bde9c4..b1e81b465bad4c748cefe0c0826953fbafa7db84 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/InspireIrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/InspireIrcModeProvider.java
@@ -71,35 +71,64 @@ public class InspireIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public ChanMode modeFromChar(char mode) {
         switch (mode) {
-            case 'A': return ALLOW_INVITE;
-            case 'B': return BLOCK_CAPS;
-            case 'C': return BLOCK_CTCP;
-            case 'D': return HIDE_JOINS;
-            case 'G': return CENSOR;
-            case 'K': return BLOCK_KNOCK;
-            case 'L': return FORWARD;
-            case 'M': return QUIET_UNIDENTIFIED;
-            case 'N': return BLOCK_NICKCHANGE;
-            case 'O': return ONLY_OPER;
-            case 'P': return PERMANENT;
-            case 'Q': return BLOCK_KICK;
-            case 'R': return BLOCK_UNIDENTIFIED;
-            case 'S': return STRIP_COLOR;
-            case 'T': return BLOCK_NOTICE;
-            case 'c': return BLOCK_COLOR;
-            case 'f': return ANTIFLOOD;
-            case 'i': return ONLY_INVITE;
-            case 'j': return JOIN_THROTTLE;
-            case 'k': return PASSWORD;
-            case 'l': return LIMIT;
-            case 'm': return MODERATED;
-            case 'n': return BLOCK_EXTERNAL;
-            case 'p': return PARANOID;
-            case 'r': return REGISTERED;
-            case 's': return UNLISTED;
-            case 't': return RESTRICT_TOPIC;
-            case 'u': return AUDITORIUM;
-            case 'z': return ONLY_SSL;
+            case 'A':
+                return ALLOW_INVITE;
+            case 'B':
+                return BLOCK_CAPS;
+            case 'C':
+                return BLOCK_CTCP;
+            case 'D':
+                return HIDE_JOINS;
+            case 'G':
+                return CENSOR;
+            case 'K':
+                return BLOCK_KNOCK;
+            case 'L':
+                return FORWARD;
+            case 'M':
+                return QUIET_UNIDENTIFIED;
+            case 'N':
+                return BLOCK_NICKCHANGE;
+            case 'O':
+                return ONLY_OPER;
+            case 'P':
+                return PERMANENT;
+            case 'Q':
+                return BLOCK_KICK;
+            case 'R':
+                return BLOCK_UNIDENTIFIED;
+            case 'S':
+                return STRIP_COLOR;
+            case 'T':
+                return BLOCK_NOTICE;
+            case 'c':
+                return BLOCK_COLOR;
+            case 'f':
+                return ANTIFLOOD;
+            case 'i':
+                return ONLY_INVITE;
+            case 'j':
+                return JOIN_THROTTLE;
+            case 'k':
+                return PASSWORD;
+            case 'l':
+                return LIMIT;
+            case 'm':
+                return MODERATED;
+            case 'n':
+                return BLOCK_EXTERNAL;
+            case 'p':
+                return PARANOID;
+            case 'r':
+                return REGISTERED;
+            case 's':
+                return UNLISTED;
+            case 't':
+                return RESTRICT_TOPIC;
+            case 'u':
+                return AUDITORIUM;
+            case 'z':
+                return ONLY_SSL;
 
             case 'b':
                 return BAN;
@@ -114,35 +143,64 @@ public class InspireIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public char charFromMode(ChanMode mode) {
         switch (mode) {
-            case ALLOW_INVITE: return 'A';
-            case BLOCK_CAPS: return 'B';
-            case BLOCK_CTCP: return 'C';
-            case HIDE_JOINS: return 'D';
-            case CENSOR: return 'G';
-            case BLOCK_KNOCK: return 'K';
-            case FORWARD: return 'L';
-            case QUIET_UNIDENTIFIED: return 'M';
-            case BLOCK_NICKCHANGE: return 'N';
-            case ONLY_OPER: return 'O';
-            case PERMANENT: return 'P';
-            case BLOCK_KICK: return 'Q';
-            case BLOCK_UNIDENTIFIED: return 'R';
-            case STRIP_COLOR: return 'S';
-            case BLOCK_NOTICE: return 'T';
-            case BLOCK_COLOR: return 'c';
-            case ANTIFLOOD: return 'f';
-            case ONLY_INVITE: return 'i';
-            case JOIN_THROTTLE: return 'j';
-            case PASSWORD: return 'k';
-            case LIMIT: return 'l';
-            case MODERATED: return 'm';
-            case BLOCK_EXTERNAL: return 'n';
-            case PARANOID: return 'p';
-            case REGISTERED: return 'r';
-            case UNLISTED: return 's';
-            case RESTRICT_TOPIC: return 't';
-            case AUDITORIUM: return 'u';
-            case ONLY_SSL: return 'z';
+            case ALLOW_INVITE:
+                return 'A';
+            case BLOCK_CAPS:
+                return 'B';
+            case BLOCK_CTCP:
+                return 'C';
+            case HIDE_JOINS:
+                return 'D';
+            case CENSOR:
+                return 'G';
+            case BLOCK_KNOCK:
+                return 'K';
+            case FORWARD:
+                return 'L';
+            case QUIET_UNIDENTIFIED:
+                return 'M';
+            case BLOCK_NICKCHANGE:
+                return 'N';
+            case ONLY_OPER:
+                return 'O';
+            case PERMANENT:
+                return 'P';
+            case BLOCK_KICK:
+                return 'Q';
+            case BLOCK_UNIDENTIFIED:
+                return 'R';
+            case STRIP_COLOR:
+                return 'S';
+            case BLOCK_NOTICE:
+                return 'T';
+            case BLOCK_COLOR:
+                return 'c';
+            case ANTIFLOOD:
+                return 'f';
+            case ONLY_INVITE:
+                return 'i';
+            case JOIN_THROTTLE:
+                return 'j';
+            case PASSWORD:
+                return 'k';
+            case LIMIT:
+                return 'l';
+            case MODERATED:
+                return 'm';
+            case BLOCK_EXTERNAL:
+                return 'n';
+            case PARANOID:
+                return 'p';
+            case REGISTERED:
+                return 'r';
+            case UNLISTED:
+                return 's';
+            case RESTRICT_TOPIC:
+                return 't';
+            case AUDITORIUM:
+                return 'u';
+            case ONLY_SSL:
+                return 'z';
         }
         return ' ';
     }
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NeoIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NeoIrcModeProvider.java
index 7e4a27f82f8d2467cdfe7eb4d8b3deb5acfdede8..0ed1d4584004fe45b79bea3d602f9dbfeeb200d2 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NeoIrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NeoIrcModeProvider.java
@@ -58,22 +58,38 @@ public class NeoIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public ChanMode modeFromChar(char mode) {
         switch (mode) {
-            case 'M': return QUIET_UNIDENTIFIED;
-            case 'N': return BLOCK_NICKCHANGE;
-            case 'O': return ONLY_OPER;
-            case 'P': return PERMANENT;
-            case 'Q': return BLOCK_KICK;
-            case 'R': return BLOCK_UNIDENTIFIED;
-            case 'V': return DISABLE_INVITE;
-            case 'i': return ONLY_INVITE;
-            case 'k': return PASSWORD;
-            case 'l': return LIMIT;
-            case 'm': return MODERATED;
-            case 'n': return BLOCK_EXTERNAL;
-            case 'r': return REGISTERED;
-            case 's': return UNLISTED;
-            case 't': return RESTRICT_TOPIC;
-            case 'z': return ONLY_SSL;
+            case 'M':
+                return QUIET_UNIDENTIFIED;
+            case 'N':
+                return BLOCK_NICKCHANGE;
+            case 'O':
+                return ONLY_OPER;
+            case 'P':
+                return PERMANENT;
+            case 'Q':
+                return BLOCK_KICK;
+            case 'R':
+                return BLOCK_UNIDENTIFIED;
+            case 'V':
+                return DISABLE_INVITE;
+            case 'i':
+                return ONLY_INVITE;
+            case 'k':
+                return PASSWORD;
+            case 'l':
+                return LIMIT;
+            case 'm':
+                return MODERATED;
+            case 'n':
+                return BLOCK_EXTERNAL;
+            case 'r':
+                return REGISTERED;
+            case 's':
+                return UNLISTED;
+            case 't':
+                return RESTRICT_TOPIC;
+            case 'z':
+                return ONLY_SSL;
 
             case 'b':
                 return BAN;
@@ -88,22 +104,38 @@ public class NeoIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public char charFromMode(ChanMode mode) {
         switch (mode) {
-            case QUIET_UNIDENTIFIED: return 'M';
-            case BLOCK_NICKCHANGE: return 'N';
-            case ONLY_OPER: return 'O';
-            case PERMANENT: return 'P';
-            case BLOCK_KICK: return 'Q';
-            case BLOCK_UNIDENTIFIED: return 'R';
-            case DISABLE_INVITE: return 'V';
-            case ONLY_INVITE: return 'i';
-            case PASSWORD: return 'k';
-            case LIMIT: return 'l';
-            case MODERATED: return 'm';
-            case BLOCK_EXTERNAL: return 'n';
-            case REGISTERED: return 'r';
-            case UNLISTED: return 's';
-            case RESTRICT_TOPIC: return 't';
-            case ONLY_SSL: return 'z';
+            case QUIET_UNIDENTIFIED:
+                return 'M';
+            case BLOCK_NICKCHANGE:
+                return 'N';
+            case ONLY_OPER:
+                return 'O';
+            case PERMANENT:
+                return 'P';
+            case BLOCK_KICK:
+                return 'Q';
+            case BLOCK_UNIDENTIFIED:
+                return 'R';
+            case DISABLE_INVITE:
+                return 'V';
+            case ONLY_INVITE:
+                return 'i';
+            case PASSWORD:
+                return 'k';
+            case LIMIT:
+                return 'l';
+            case MODERATED:
+                return 'm';
+            case BLOCK_EXTERNAL:
+                return 'n';
+            case REGISTERED:
+                return 'r';
+            case UNLISTED:
+                return 's';
+            case RESTRICT_TOPIC:
+                return 't';
+            case ONLY_SSL:
+                return 'z';
 
             case BAN:
                 return 'b';
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NightstarIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NightstarIrcModeProvider.java
index 2d7ce77775b5e0208e83c5082675507997a5e67c..648ecfdb7787d82bd4634b0a45f8b9b7909496c2 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NightstarIrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/NightstarIrcModeProvider.java
@@ -57,16 +57,26 @@ public class NightstarIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public ChanMode modeFromChar(char mode) {
         switch (mode) {
-            case 'C': return BLOCK_COLOR;
-            case 'i': return ONLY_INVITE;
-            case 'k': return PASSWORD;
-            case 'l': return LIMIT;
-            case 'm': return MODERATED;
-            case 'n': return BLOCK_EXTERNAL;
-            case 'p': return PARANOID;
-            case 'r': return REGISTERED;
-            case 's': return UNLISTED;
-            case 't': return RESTRICT_TOPIC;
+            case 'C':
+                return BLOCK_COLOR;
+            case 'i':
+                return ONLY_INVITE;
+            case 'k':
+                return PASSWORD;
+            case 'l':
+                return LIMIT;
+            case 'm':
+                return MODERATED;
+            case 'n':
+                return BLOCK_EXTERNAL;
+            case 'p':
+                return PARANOID;
+            case 'r':
+                return REGISTERED;
+            case 's':
+                return UNLISTED;
+            case 't':
+                return RESTRICT_TOPIC;
 
             case 'b':
                 return BAN;
@@ -81,16 +91,26 @@ public class NightstarIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public char charFromMode(ChanMode mode) {
         switch (mode) {
-            case BLOCK_COLOR: return 'C';
-            case ONLY_INVITE: return 'i';
-            case PASSWORD: return 'k';
-            case LIMIT: return 'l';
-            case MODERATED: return 'm';
-            case BLOCK_EXTERNAL: return 'n';
-            case PARANOID: return 'p';
-            case REGISTERED: return 'r';
-            case UNLISTED: return 's';
-            case RESTRICT_TOPIC: return 't';
+            case BLOCK_COLOR:
+                return 'C';
+            case ONLY_INVITE:
+                return 'i';
+            case PASSWORD:
+                return 'k';
+            case LIMIT:
+                return 'l';
+            case MODERATED:
+                return 'm';
+            case BLOCK_EXTERNAL:
+                return 'n';
+            case PARANOID:
+                return 'p';
+            case REGISTERED:
+                return 'r';
+            case UNLISTED:
+                return 's';
+            case RESTRICT_TOPIC:
+                return 't';
 
             case BAN:
                 return 'b';
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/RfcIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/RfcIrcModeProvider.java
index 67e8062b544e1836d7131bff47ff09e3758df751..01bf730b29e879832807d24afc8bc87c6866d687 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/RfcIrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/RfcIrcModeProvider.java
@@ -50,14 +50,22 @@ public class RfcIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public ChanMode modeFromChar(char mode) {
         switch (mode) {
-            case 'p': return PARANOID;
-            case 's': return UNLISTED;
-            case 'i': return ONLY_INVITE;
-            case 't': return RESTRICT_TOPIC;
-            case 'n': return BLOCK_EXTERNAL;
-            case 'm': return MODERATED;
-            case 'l': return LIMIT;
-            case 'k': return PASSWORD;
+            case 'p':
+                return PARANOID;
+            case 's':
+                return UNLISTED;
+            case 'i':
+                return ONLY_INVITE;
+            case 't':
+                return RESTRICT_TOPIC;
+            case 'n':
+                return BLOCK_EXTERNAL;
+            case 'm':
+                return MODERATED;
+            case 'l':
+                return LIMIT;
+            case 'k':
+                return PASSWORD;
 
             case 'b':
                 return BAN;
@@ -72,14 +80,22 @@ public class RfcIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public char charFromMode(ChanMode mode) {
         switch (mode) {
-            case PARANOID: return 'p';
-            case UNLISTED: return 's';
-            case ONLY_INVITE: return 'i';
-            case RESTRICT_TOPIC: return 't';
-            case BLOCK_EXTERNAL: return 'n';
-            case MODERATED: return 'm';
-            case LIMIT: return 'l';
-            case PASSWORD: return 'k';
+            case PARANOID:
+                return 'p';
+            case UNLISTED:
+                return 's';
+            case ONLY_INVITE:
+                return 'i';
+            case RESTRICT_TOPIC:
+                return 't';
+            case BLOCK_EXTERNAL:
+                return 'n';
+            case MODERATED:
+                return 'm';
+            case LIMIT:
+                return 'l';
+            case PASSWORD:
+                return 'k';
 
             case BAN:
                 return 'b';
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/ShadowIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/ShadowIrcModeProvider.java
index 54af40869f224365b3eb7d2fc342db3c14e15795..a03b7b1bc122b0ded3258eb85bb0846f31724804 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/ShadowIrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/ShadowIrcModeProvider.java
@@ -69,33 +69,60 @@ public class ShadowIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public ChanMode modeFromChar(char mode) {
         switch (mode) {
-            case 'A': return ONLY_ADMIN;
-            case 'C': return BLOCK_CTCP;
-            case 'D': return BLOCK_ACTION;
-            case 'E': return BLOCK_KICK;
-            case 'F': return ALLOW_FORWARD;
-            case 'G': return BLOCK_CAPS;
-            case 'J': return BLOCK_AUTOREJOIN;
-            case 'K': return BLOCK_REPEAT;
-            case 'O': return ONLY_OPER;
-            case 'P': return PERMANENT;
-            case 'Q': return BLOCK_FORWARDING;
-            case 'S': return ONLY_SSL;
-            case 'T': return BLOCK_NOTICE;
-            case 'c': return STRIP_COLOR;
-            case 'd': return BLOCK_NICKCHANGE;
-            case 'g': return ALLOW_INVITE;
-            case 'i': return ONLY_INVITE;
-            case 'j': return JOIN_THROTTLE;
-            case 'k': return PASSWORD;
-            case 'l': return LIMIT;
-            case 'm': return MODERATED;
-            case 'n': return BLOCK_EXTERNAL;
-            case 'p': return PARANOID;
-            case 'r': return BLOCK_UNIDENTIFIED;
-            case 's': return UNLISTED;
-            case 't': return RESTRICT_TOPIC;
-            case 'z': return REDUCED_MODERATION;
+            case 'A':
+                return ONLY_ADMIN;
+            case 'C':
+                return BLOCK_CTCP;
+            case 'D':
+                return BLOCK_ACTION;
+            case 'E':
+                return BLOCK_KICK;
+            case 'F':
+                return ALLOW_FORWARD;
+            case 'G':
+                return BLOCK_CAPS;
+            case 'J':
+                return BLOCK_AUTOREJOIN;
+            case 'K':
+                return BLOCK_REPEAT;
+            case 'O':
+                return ONLY_OPER;
+            case 'P':
+                return PERMANENT;
+            case 'Q':
+                return BLOCK_FORWARDING;
+            case 'S':
+                return ONLY_SSL;
+            case 'T':
+                return BLOCK_NOTICE;
+            case 'c':
+                return STRIP_COLOR;
+            case 'd':
+                return BLOCK_NICKCHANGE;
+            case 'g':
+                return ALLOW_INVITE;
+            case 'i':
+                return ONLY_INVITE;
+            case 'j':
+                return JOIN_THROTTLE;
+            case 'k':
+                return PASSWORD;
+            case 'l':
+                return LIMIT;
+            case 'm':
+                return MODERATED;
+            case 'n':
+                return BLOCK_EXTERNAL;
+            case 'p':
+                return PARANOID;
+            case 'r':
+                return BLOCK_UNIDENTIFIED;
+            case 's':
+                return UNLISTED;
+            case 't':
+                return RESTRICT_TOPIC;
+            case 'z':
+                return REDUCED_MODERATION;
 
             case 'b':
                 return BAN;
@@ -110,33 +137,60 @@ public class ShadowIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public char charFromMode(ChanMode mode) {
         switch (mode) {
-            case ONLY_ADMIN: return 'A';
-            case BLOCK_CTCP: return 'C';
-            case BLOCK_ACTION: return 'D';
-            case BLOCK_KICK: return 'E';
-            case ALLOW_FORWARD: return 'F';
-            case BLOCK_CAPS: return 'G';
-            case BLOCK_AUTOREJOIN: return 'J';
-            case BLOCK_REPEAT: return 'K';
-            case ONLY_OPER: return 'O';
-            case PERMANENT: return 'P';
-            case BLOCK_FORWARDING: return 'Q';
-            case ONLY_SSL: return 'S';
-            case BLOCK_NOTICE: return 'T';
-            case STRIP_COLOR: return 'c';
-            case BLOCK_NICKCHANGE: return 'd';
-            case ALLOW_INVITE: return 'g';
-            case ONLY_INVITE: return 'i';
-            case JOIN_THROTTLE: return 'j';
-            case PASSWORD: return 'k';
-            case LIMIT: return 'l';
-            case MODERATED: return 'm';
-            case BLOCK_EXTERNAL: return 'n';
-            case PARANOID: return 'p';
-            case BLOCK_UNIDENTIFIED: return 'r';
-            case UNLISTED: return 's';
-            case RESTRICT_TOPIC: return 't';
-            case REDUCED_MODERATION: return 'z';
+            case ONLY_ADMIN:
+                return 'A';
+            case BLOCK_CTCP:
+                return 'C';
+            case BLOCK_ACTION:
+                return 'D';
+            case BLOCK_KICK:
+                return 'E';
+            case ALLOW_FORWARD:
+                return 'F';
+            case BLOCK_CAPS:
+                return 'G';
+            case BLOCK_AUTOREJOIN:
+                return 'J';
+            case BLOCK_REPEAT:
+                return 'K';
+            case ONLY_OPER:
+                return 'O';
+            case PERMANENT:
+                return 'P';
+            case BLOCK_FORWARDING:
+                return 'Q';
+            case ONLY_SSL:
+                return 'S';
+            case BLOCK_NOTICE:
+                return 'T';
+            case STRIP_COLOR:
+                return 'c';
+            case BLOCK_NICKCHANGE:
+                return 'd';
+            case ALLOW_INVITE:
+                return 'g';
+            case ONLY_INVITE:
+                return 'i';
+            case JOIN_THROTTLE:
+                return 'j';
+            case PASSWORD:
+                return 'k';
+            case LIMIT:
+                return 'l';
+            case MODERATED:
+                return 'm';
+            case BLOCK_EXTERNAL:
+                return 'n';
+            case PARANOID:
+                return 'p';
+            case BLOCK_UNIDENTIFIED:
+                return 'r';
+            case UNLISTED:
+                return 's';
+            case RESTRICT_TOPIC:
+                return 't';
+            case REDUCED_MODERATION:
+                return 'z';
 
             case BAN:
                 return 'b';
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/SolidIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/SolidIrcModeProvider.java
index e33255f68daacf8870b423f8797d9bb4318802e0..92bc806c711e6b1f2b0d2a1507a640df1a7c87d8 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/SolidIrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/SolidIrcModeProvider.java
@@ -66,30 +66,54 @@ public class SolidIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public ChanMode modeFromChar(char mode) {
         switch (mode) {
-            case 'B': return BLOCK_CAPS;
-            case 'C': return BLOCK_CTCP;
-            case 'G': return CENSOR;
-            case 'K': return BLOCK_KNOCK;
-            case 'M': return QUIET_UNIDENTIFIED;
-            case 'N': return BLOCK_NICKCHANGE;
-            case 'P': return PERMANENT;
-            case 'Q': return BLOCK_KICK;
-            case 'R': return BLOCK_UNIDENTIFIED;
-            case 'S': return STRIP_COLOR;
-            case 'T': return BLOCK_NOTICE;
-            case 'V': return DISABLE_INVITE;
-            case 'c': return BLOCK_COLOR;
-            case 'f': return ANTIFLOOD;
-            case 'i': return ONLY_INVITE;
-            case 'k': return PASSWORD;
-            case 'l': return LIMIT;
-            case 'm': return MODERATED;
-            case 'n': return BLOCK_EXTERNAL;
-            case 'p': return PARANOID;
-            case 's': return UNLISTED;
-            case 't': return RESTRICT_TOPIC;
-            case 'u': return AUDITORIUM;
-            case 'z': return ONLY_SSL;
+            case 'B':
+                return BLOCK_CAPS;
+            case 'C':
+                return BLOCK_CTCP;
+            case 'G':
+                return CENSOR;
+            case 'K':
+                return BLOCK_KNOCK;
+            case 'M':
+                return QUIET_UNIDENTIFIED;
+            case 'N':
+                return BLOCK_NICKCHANGE;
+            case 'P':
+                return PERMANENT;
+            case 'Q':
+                return BLOCK_KICK;
+            case 'R':
+                return BLOCK_UNIDENTIFIED;
+            case 'S':
+                return STRIP_COLOR;
+            case 'T':
+                return BLOCK_NOTICE;
+            case 'V':
+                return DISABLE_INVITE;
+            case 'c':
+                return BLOCK_COLOR;
+            case 'f':
+                return ANTIFLOOD;
+            case 'i':
+                return ONLY_INVITE;
+            case 'k':
+                return PASSWORD;
+            case 'l':
+                return LIMIT;
+            case 'm':
+                return MODERATED;
+            case 'n':
+                return BLOCK_EXTERNAL;
+            case 'p':
+                return PARANOID;
+            case 's':
+                return UNLISTED;
+            case 't':
+                return RESTRICT_TOPIC;
+            case 'u':
+                return AUDITORIUM;
+            case 'z':
+                return ONLY_SSL;
 
             case 'b':
                 return BAN;
@@ -104,30 +128,54 @@ public class SolidIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public char charFromMode(ChanMode mode) {
         switch (mode) {
-            case BLOCK_CAPS: return 'B';
-            case BLOCK_CTCP: return 'C';
-            case CENSOR: return 'G';
-            case BLOCK_KNOCK: return 'K';
-            case QUIET_UNIDENTIFIED: return 'M';
-            case BLOCK_NICKCHANGE: return 'N';
-            case PERMANENT: return 'P';
-            case BLOCK_KICK: return 'Q';
-            case BLOCK_UNIDENTIFIED: return 'R';
-            case STRIP_COLOR: return 'S';
-            case BLOCK_NOTICE: return 'T';
-            case DISABLE_INVITE: return 'V';
-            case BLOCK_COLOR: return 'c';
-            case ANTIFLOOD: return 'f';
-            case ONLY_INVITE: return 'i';
-            case PASSWORD: return 'k';
-            case LIMIT: return 'l';
-            case MODERATED: return 'm';
-            case BLOCK_EXTERNAL: return 'n';
-            case PARANOID: return 'p';
-            case UNLISTED: return 's';
-            case RESTRICT_TOPIC: return 't';
-            case AUDITORIUM: return 'u';
-            case ONLY_SSL: return 'z';
+            case BLOCK_CAPS:
+                return 'B';
+            case BLOCK_CTCP:
+                return 'C';
+            case CENSOR:
+                return 'G';
+            case BLOCK_KNOCK:
+                return 'K';
+            case QUIET_UNIDENTIFIED:
+                return 'M';
+            case BLOCK_NICKCHANGE:
+                return 'N';
+            case PERMANENT:
+                return 'P';
+            case BLOCK_KICK:
+                return 'Q';
+            case BLOCK_UNIDENTIFIED:
+                return 'R';
+            case STRIP_COLOR:
+                return 'S';
+            case BLOCK_NOTICE:
+                return 'T';
+            case DISABLE_INVITE:
+                return 'V';
+            case BLOCK_COLOR:
+                return 'c';
+            case ANTIFLOOD:
+                return 'f';
+            case ONLY_INVITE:
+                return 'i';
+            case PASSWORD:
+                return 'k';
+            case LIMIT:
+                return 'l';
+            case MODERATED:
+                return 'm';
+            case BLOCK_EXTERNAL:
+                return 'n';
+            case PARANOID:
+                return 'p';
+            case UNLISTED:
+                return 's';
+            case RESTRICT_TOPIC:
+                return 't';
+            case AUDITORIUM:
+                return 'u';
+            case ONLY_SSL:
+                return 'z';
 
             case BAN:
                 return 'b';
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UndernetIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UndernetIrcModeProvider.java
index 0dca5c0a620719f4659c430fbfa6f0bac816acac..3f378790a8d350063d6307f7c35227ac08606657 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UndernetIrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UndernetIrcModeProvider.java
@@ -55,14 +55,22 @@ public class UndernetIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public ChanMode modeFromChar(char mode) {
         switch (mode) {
-            case 'i': return ONLY_INVITE;
-            case 'k': return PASSWORD;
-            case 'l': return LIMIT;
-            case 'm': return MODERATED;
-            case 'n': return BLOCK_EXTERNAL;
-            case 'p': return PARANOID;
-            case 's': return UNLISTED;
-            case 't': return RESTRICT_TOPIC;
+            case 'i':
+                return ONLY_INVITE;
+            case 'k':
+                return PASSWORD;
+            case 'l':
+                return LIMIT;
+            case 'm':
+                return MODERATED;
+            case 'n':
+                return BLOCK_EXTERNAL;
+            case 'p':
+                return PARANOID;
+            case 's':
+                return UNLISTED;
+            case 't':
+                return RESTRICT_TOPIC;
 
             case 'b':
                 return BAN;
@@ -77,14 +85,22 @@ public class UndernetIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public char charFromMode(ChanMode mode) {
         switch (mode) {
-            case ONLY_INVITE: return 'i';
-            case PASSWORD: return 'k';
-            case LIMIT: return 'l';
-            case MODERATED: return 'm';
-            case BLOCK_EXTERNAL: return 'n';
-            case PARANOID: return 'p';
-            case UNLISTED: return 's';
-            case RESTRICT_TOPIC: return 't';
+            case ONLY_INVITE:
+                return 'i';
+            case PASSWORD:
+                return 'k';
+            case LIMIT:
+                return 'l';
+            case MODERATED:
+                return 'm';
+            case BLOCK_EXTERNAL:
+                return 'n';
+            case PARANOID:
+                return 'p';
+            case UNLISTED:
+                return 's';
+            case RESTRICT_TOPIC:
+                return 't';
 
             case BAN:
                 return 'b';
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UnrealIrcModeProvider.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UnrealIrcModeProvider.java
index deffc9a8e9bb156dbdf87a46fc27aa098f63489b..184716b9777a6d9231ad14495bd2209df508173d 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UnrealIrcModeProvider.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/impl/UnrealIrcModeProvider.java
@@ -68,32 +68,58 @@ public class UnrealIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public ChanMode modeFromChar(char mode) {
         switch (mode) {
-            case 'C': return BLOCK_CTCP;
-            case 'F': return FORWARD;
-            case 'G': return CENSOR;
-            case 'K': return BLOCK_KNOCK;
-            case 'M': return QUIET_UNIDENTIFIED;
-            case 'N': return BLOCK_NICKCHANGE;
-            case 'O': return ONLY_OPER;
-            case 'P': return PERMANENT;
-            case 'Q': return BLOCK_KICK;
-            case 'R': return BLOCK_UNIDENTIFIED;
-            case 'S': return STRIP_COLOR;
-            case 'T': return BLOCK_NOTICE;
-            case 'V': return DISABLE_INVITE;
-            case 'Z': return IS_SECURE;
-            case 'c': return BLOCK_COLOR;
-            case 'f': return ANTIFLOOD;
-            case 'i': return ONLY_INVITE;
-            case 'k': return PASSWORD;
-            case 'l': return LIMIT;
-            case 'm': return MODERATED;
-            case 'n': return BLOCK_EXTERNAL;
-            case 'p': return PARANOID;
-            case 'r': return REGISTERED;
-            case 's': return UNLISTED;
-            case 't': return RESTRICT_TOPIC;
-            case 'z': return ONLY_SSL;
+            case 'C':
+                return BLOCK_CTCP;
+            case 'F':
+                return FORWARD;
+            case 'G':
+                return CENSOR;
+            case 'K':
+                return BLOCK_KNOCK;
+            case 'M':
+                return QUIET_UNIDENTIFIED;
+            case 'N':
+                return BLOCK_NICKCHANGE;
+            case 'O':
+                return ONLY_OPER;
+            case 'P':
+                return PERMANENT;
+            case 'Q':
+                return BLOCK_KICK;
+            case 'R':
+                return BLOCK_UNIDENTIFIED;
+            case 'S':
+                return STRIP_COLOR;
+            case 'T':
+                return BLOCK_NOTICE;
+            case 'V':
+                return DISABLE_INVITE;
+            case 'Z':
+                return IS_SECURE;
+            case 'c':
+                return BLOCK_COLOR;
+            case 'f':
+                return ANTIFLOOD;
+            case 'i':
+                return ONLY_INVITE;
+            case 'k':
+                return PASSWORD;
+            case 'l':
+                return LIMIT;
+            case 'm':
+                return MODERATED;
+            case 'n':
+                return BLOCK_EXTERNAL;
+            case 'p':
+                return PARANOID;
+            case 'r':
+                return REGISTERED;
+            case 's':
+                return UNLISTED;
+            case 't':
+                return RESTRICT_TOPIC;
+            case 'z':
+                return ONLY_SSL;
 
             case 'b':
                 return BAN;
@@ -108,32 +134,58 @@ public class UnrealIrcModeProvider extends AbstractIrcModeProvider {
     @Override
     public char charFromMode(ChanMode mode) {
         switch (mode) {
-            case BLOCK_CTCP: return 'C';
-            case FORWARD: return 'F';
-            case CENSOR: return 'G';
-            case BLOCK_KNOCK: return 'K';
-            case QUIET_UNIDENTIFIED: return 'M';
-            case BLOCK_NICKCHANGE: return 'N';
-            case ONLY_OPER: return 'O';
-            case PERMANENT: return 'P';
-            case BLOCK_KICK: return 'Q';
-            case BLOCK_UNIDENTIFIED: return 'R';
-            case STRIP_COLOR: return 'S';
-            case BLOCK_NOTICE: return 'T';
-            case DISABLE_INVITE: return 'V';
-            case IS_SECURE: return 'Z';
-            case BLOCK_COLOR: return 'c';
-            case ANTIFLOOD: return 'f';
-            case ONLY_INVITE: return 'i';
-            case PASSWORD: return 'k';
-            case LIMIT: return 'l';
-            case MODERATED: return 'm';
-            case BLOCK_EXTERNAL: return 'n';
-            case PARANOID: return 'p';
-            case REGISTERED: return 'r';
-            case UNLISTED: return 's';
-            case RESTRICT_TOPIC: return 't';
-            case ONLY_SSL: return 'z';
+            case BLOCK_CTCP:
+                return 'C';
+            case FORWARD:
+                return 'F';
+            case CENSOR:
+                return 'G';
+            case BLOCK_KNOCK:
+                return 'K';
+            case QUIET_UNIDENTIFIED:
+                return 'M';
+            case BLOCK_NICKCHANGE:
+                return 'N';
+            case ONLY_OPER:
+                return 'O';
+            case PERMANENT:
+                return 'P';
+            case BLOCK_KICK:
+                return 'Q';
+            case BLOCK_UNIDENTIFIED:
+                return 'R';
+            case STRIP_COLOR:
+                return 'S';
+            case BLOCK_NOTICE:
+                return 'T';
+            case DISABLE_INVITE:
+                return 'V';
+            case IS_SECURE:
+                return 'Z';
+            case BLOCK_COLOR:
+                return 'c';
+            case ANTIFLOOD:
+                return 'f';
+            case ONLY_INVITE:
+                return 'i';
+            case PASSWORD:
+                return 'k';
+            case LIMIT:
+                return 'l';
+            case MODERATED:
+                return 'm';
+            case BLOCK_EXTERNAL:
+                return 'n';
+            case PARANOID:
+                return 'p';
+            case REGISTERED:
+                return 'r';
+            case UNLISTED:
+                return 's';
+            case RESTRICT_TOPIC:
+                return 't';
+            case ONLY_SSL:
+                return 'z';
 
             case BAN:
                 return 'b';
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 dd1f64cb938d2322f083e2e086380195dadc7c99..970ad40309f0b54046725340a57c83e35266dc50 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,7 @@ public class IrcFormatHelper {
         SpannableString str = new SpannableString(context.deserializer().formatString(text));
         Matcher urlMatcher = urlPattern.matcher(str);
         while (urlMatcher.find()) {
-            spans.add(new FutureClickableSpan(new CustomURLSpan(urlMatcher.group(1)), urlMatcher.start(), urlMatcher.start()+urlMatcher.group(1).length()));
+            spans.add(new FutureClickableSpan(new CustomURLSpan(urlMatcher.group(1)), urlMatcher.start(), urlMatcher.start() + urlMatcher.group(1).length()));
         }
         Matcher channelMatcher = channelPattern.matcher(str);
         while (channelMatcher.find()) {
diff --git a/app/src/main/java/de/kuschku/util/regex/SmartRegEx.java b/app/src/main/java/de/kuschku/util/regex/SmartRegEx.java
index 82b326f5e099a1778f54046155e4b34acb2df966..21a79ba11825882eed6524ee21bb6e9a89123d24 100644
--- a/app/src/main/java/de/kuschku/util/regex/SmartRegEx.java
+++ b/app/src/main/java/de/kuschku/util/regex/SmartRegEx.java
@@ -66,13 +66,13 @@ public class SmartRegEx {
         return Pattern.compile(GlobTransformer.convertGlobToRegex(glob), flags);
     }
 
-    public enum Syntax {
-        WILDCARD,
-        REGEX
-    }
-
     @Override
     public String toString() {
         return rule;
     }
+
+    public enum Syntax {
+        WILDCARD,
+        REGEX
+    }
 }
diff --git a/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java b/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java
index c397874162e203dc66bba64e08f9e268ca5f1ad8..3729fca0994ff41dccd56afa7f1e646350c8772a 100644
--- a/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java
+++ b/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java
@@ -39,9 +39,9 @@ import de.kuschku.util.accounts.Account;
 
 public abstract class BoundActivity extends AppCompatActivity {
     protected AppContext context = new AppContext();
+    protected QuasselService.LocalBinder binder;
     @StyleRes
     private int themeId;
-    protected QuasselService.LocalBinder binder;
     private ServiceConnection connection = new ServiceConnection() {
         @Override
         public void onServiceConnected(ComponentName name, IBinder service) {
diff --git a/app/src/main/res/layout-w720dp/activity_main.xml b/app/src/main/res/layout-w720dp/activity_main.xml
index ed2eaaafb4f6c812a0b8d961a690d72da0ebf2cc..e12fab0053708a334b27ffefe480416c4da7fff0 100644
--- a/app/src/main/res/layout-w720dp/activity_main.xml
+++ b/app/src/main/res/layout-w720dp/activity_main.xml
@@ -35,33 +35,45 @@
         android:layout_height="match_parent"
         android:orientation="vertical">
 
-        <android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
-            xmlns:app="http://schemas.android.com/apk/res-auto"
+        <FrameLayout
             android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:theme="?attr/actionBarTheme">
+            android:layout_height="wrap_content">
 
-            <android.support.v7.widget.Toolbar
-                android:id="@+id/chatListToolbar"
+            <android.support.design.widget.AppBarLayout
+                xmlns:android="http://schemas.android.com/apk/res/android"
+                xmlns:app="http://schemas.android.com/apk/res-auto"
                 android:layout_width="match_parent"
-                android:layout_height="?attr/actionBarSize"
-                android:background="?attr/colorPrimary"
-                app:popupTheme="@style/AppTheme.PopupOverlay">
+                android:layout_height="wrap_content"
+                android:theme="?attr/actionBarTheme">
+
+                <android.support.v7.widget.Toolbar
+                    android:id="@+id/chatListToolbar"
+                    android:layout_width="match_parent"
+                    android:layout_height="?attr/actionBarSize"
+                    android:background="?attr/colorPrimary"
+                    app:popupTheme="@style/AppTheme.PopupOverlay">
+
+                    <android.support.v7.widget.AppCompatSpinner
+                        android:id="@+id/chatListSpinner"
+                        android:layout_width="fill_parent"
+                        android:layout_height="match_parent"
+                        app:popupTheme="@style/AppTheme.PopupOverlay"/>
 
-                <android.support.v7.widget.AppCompatSpinner
-                    android:id="@+id/chatListSpinner"
-                    android:layout_width="fill_parent"
-                    android:layout_height="match_parent"
-                    app:popupTheme="@style/AppTheme.PopupOverlay" />
+                </android.support.v7.widget.Toolbar>
 
-            </android.support.v7.widget.Toolbar>
+            </android.support.design.widget.AppBarLayout>
+
+            <ViewStub
+                android:id="@+id/cab_stub"
+                android:layout_width="match_parent"
+                android:layout_height="?actionBarSize"/>
 
-        </android.support.design.widget.AppBarLayout>
+        </FrameLayout>
 
         <android.support.v7.widget.RecyclerView
             android:id="@+id/chatList"
             android:layout_width="match_parent"
-            android:layout_height="match_parent" />
+            android:layout_height="match_parent"/>
 
     </LinearLayout>
 
@@ -70,12 +82,12 @@
         android:layout_height="match_parent"
         android:orientation="vertical">
 
-        <include layout="@layout/widget_actionbar" />
+        <include layout="@layout/widget_actionbar"/>
 
         <FrameLayout
             android:id="@+id/content_host"
             android:layout_width="match_parent"
-            android:layout_height="match_parent" />
+            android:layout_height="match_parent"/>
 
     </LinearLayout>
 
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 00183c8bf93c4e79c77a9ab7f45a9c94f4bbe6f1..bab2182d40c4176badb7027438575b4a426f42c5 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -21,25 +21,25 @@
   -->
 
 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/drawer_layout"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="?attr/colorBackground"
-    tools:context=".ui.chat.MainActivity">
+                                        xmlns:app="http://schemas.android.com/apk/res-auto"
+                                        xmlns:tools="http://schemas.android.com/tools"
+                                        android:id="@+id/drawer_layout"
+                                        android:layout_width="match_parent"
+                                        android:layout_height="match_parent"
+                                        android:background="?attr/colorBackground"
+                                        tools:context=".ui.chat.MainActivity">
 
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical">
 
-        <include layout="@layout/widget_actionbar" />
+        <include layout="@layout/widget_actionbar"/>
 
         <FrameLayout
             android:id="@+id/content_host"
             android:layout_width="match_parent"
-            android:layout_height="match_parent" />
+            android:layout_height="match_parent"/>
 
     </LinearLayout>
 
@@ -54,35 +54,47 @@
             android:layout_height="match_parent"
             android:orientation="vertical">
 
-            <android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:app="http://schemas.android.com/apk/res-auto"
+            <FrameLayout
                 android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:theme="?attr/actionBarTheme">
+                android:layout_height="wrap_content">
 
-                <android.support.v7.widget.Toolbar
-                    android:id="@+id/chatListToolbar"
+                <android.support.design.widget.AppBarLayout
+                    xmlns:android="http://schemas.android.com/apk/res/android"
+                    xmlns:app="http://schemas.android.com/apk/res-auto"
                     android:layout_width="match_parent"
-                    android:layout_height="?attr/actionBarSize"
-                    android:background="?attr/colorPrimary"
-                    android:theme="?attr/actionBarTheme"
-                    app:popupTheme="@style/AppTheme.PopupOverlay">
-
-                    <android.support.v7.widget.AppCompatSpinner
-                        android:id="@+id/chatListSpinner"
-                        android:layout_width="fill_parent"
-                        android:layout_height="match_parent"
+                    android:layout_height="wrap_content"
+                    android:theme="?attr/actionBarTheme">
+
+                    <android.support.v7.widget.Toolbar
+                        android:id="@+id/chatListToolbar"
+                        android:layout_width="match_parent"
+                        android:layout_height="?attr/actionBarSize"
+                        android:background="?attr/colorPrimary"
                         android:theme="?attr/actionBarTheme"
-                        app:popupTheme="@style/AppTheme.PopupOverlay" />
+                        app:popupTheme="@style/AppTheme.PopupOverlay">
 
-                </android.support.v7.widget.Toolbar>
+                        <android.support.v7.widget.AppCompatSpinner
+                            android:id="@+id/chatListSpinner"
+                            android:layout_width="fill_parent"
+                            android:layout_height="match_parent"
+                            android:theme="?attr/actionBarTheme"
+                            app:popupTheme="@style/AppTheme.PopupOverlay"/>
 
-            </android.support.design.widget.AppBarLayout>
+                    </android.support.v7.widget.Toolbar>
+
+                </android.support.design.widget.AppBarLayout>
+
+                <ViewStub
+                    android:id="@+id/cab_stub"
+                    android:layout_width="match_parent"
+                    android:layout_height="?actionBarSize"/>
+
+            </FrameLayout>
 
             <android.support.v7.widget.RecyclerView
                 android:id="@+id/chatList"
                 android:layout_width="match_parent"
-                android:layout_height="match_parent" />
+                android:layout_height="match_parent"/>
 
         </LinearLayout>
 
diff --git a/app/src/main/res/menu/context_buffer_network.xml b/app/src/main/res/menu/context_buffer_network.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5f46ee365b9783740e4984edd9403b40bb2d66e9
--- /dev/null
+++ b/app/src/main/res/menu/context_buffer_network.xml
@@ -0,0 +1,54 @@
+<?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/>.
+  -->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <group
+        android:id="@+id/context_group_network">
+        <item
+            android:id="@+id/context_menu_connect"
+            android:title="@string/action_connect"/>
+        <item
+            android:id="@+id/context_menu_disconnect"
+            android:title="@string/action_disconnect"/>
+    </group>
+    <group
+        android:id="@+id/context_group_buffer">
+        <item
+            android:id="@+id/context_menu_join"
+            android:title="@string/action_join"/>
+        <item
+            android:id="@+id/context_menu_part"
+            android:title="@string/action_part"/>
+        <item
+            android:id="@+id/context_menu_delete"
+            android:title="@string/action_delete"/>
+        <item
+            android:id="@+id/context_menu_unhide"
+            android:title="@string/action_unhide"/>
+        <item
+            android:id="@+id/context_menu_hide_temp"
+            android:title="@string/action_hide_temp"/>
+        <item
+            android:id="@+id/context_menu_hide_perm"
+            android:title="@string/action_hide_perm"/>
+    </group>
+</menu>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ea87b3df1a60f4a2cf7269996e7e93751a08176d..f7778fbf8cbe5abc5c65483650beb2c608f21299 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -87,4 +87,18 @@
     <string name="action_manage_chat_lists">Manage Chat Lists</string>
     <string name="action_show_hidden">Show Hidden</string>
     <string name="action_join_channel">Join Channel</string>
+
+    <string name="action_connect">Connect</string>
+    <string name="action_disconnect">Disconnect</string>
+
+    <string name="action_join">Join</string>
+    <string name="action_part">Part</string>
+    <string name="action_delete">Delete</string>
+
+    <string name="action_hidden_display">Show hidden Buffers</string>
+    <string name="action_hidden_hide">Hide hidden Buffers</string>
+
+    <string name="action_unhide">Make Visible</string>
+    <string name="action_hide_temp">Hide Temporarily</string>
+    <string name="action_hide_perm">Hide Permanently</string>
 </resources>