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 c6a994a3c6f9496bbedc326942054603f7bc8231..5e3fd2cac4c1a97f3ed17aa911f78796c6fb96b6 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
@@ -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 com.google.common.base.Joiner;
 
@@ -53,12 +52,6 @@ public class IrcChannel extends AIrcChannel<IrcChannel> {
     @NonNull
     private final Map<String, Set<Character>> userModes = new HashMap<>();
     private final ObservableSet<String> users = new ObservableSet<>();
-    private String topic;
-    private String password;
-    private boolean encrypted;
-    private QNetwork network;
-    private String codecForEncoding;
-    private String codecForDecoding;
     @NonNull
     public Map<Character, List<String>> A_channelModes = new HashMap<>();
     @NonNull
@@ -67,6 +60,12 @@ public class IrcChannel extends AIrcChannel<IrcChannel> {
     public Map<Character, String> C_channelModes = new HashMap<>();
     @NonNull
     public Set<Character> D_channelModes = new HashSet<>();
+    private String topic;
+    private String password;
+    private boolean encrypted;
+    private QNetwork network;
+    private String codecForEncoding;
+    private String codecForDecoding;
     // Because we don’t have networks at the beginning yet
     @Nullable
     private Map<String, String> cachedUserModes;
@@ -522,6 +521,7 @@ public class IrcChannel extends AIrcChannel<IrcChannel> {
         modes.addAll(D_channelModes);
         modes.addAll(C_channelModes.keySet());
         modes.addAll(B_channelModes.keySet());
+        modes.addAll(A_channelModes.keySet());
         return modes;
     }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChannelDetailActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChannelDetailActivity.java
index 83101e46a83a41dc0e4f0aba175f79a583860d2d..d2913478ace5eaa4fb64de758e66ec072cf72760 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChannelDetailActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChannelDetailActivity.java
@@ -38,6 +38,7 @@ import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.events.GeneralErrorEvent;
 import de.kuschku.libquassel.localtypes.buffers.ChannelBuffer;
 import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel;
+import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
 import de.kuschku.quasseldroid_ng.R;
 import de.kuschku.quasseldroid_ng.service.ClientBackgroundThread;
 import de.kuschku.util.irc.chanmodes.ChanMode;
@@ -110,28 +111,36 @@ public class ChannelDetailActivity extends BoundActivity {
         boolean topicEditable = true;
         for (char c : channel.modeList()) {
             ChanMode mode = provider.modeFromChar(c);
+            QNetwork.ChannelModeType type = channel.network().channelModeType(c);
             if (mode != null) {
-                View v = getLayoutInflater().inflate(R.layout.widget_channel_mode, modes, false);
-                TextView name = (TextView) v.findViewById(R.id.name);
-                TextView description = (TextView) v.findViewById(R.id.description);
-                TextView value = (TextView) v.findViewById(R.id.value);
+                if (type == QNetwork.ChannelModeType.A_CHANMODE) {
+                    // TODO: Implement a proper display for these
+                    // Log.e("DEBUG", String.valueOf(c) + ": " + String.valueOf(channel.modeValueList(c)));
+                } else if (type == QNetwork.ChannelModeType.B_CHANMODE || type == QNetwork.ChannelModeType.C_CHANMODE || type == QNetwork.ChannelModeType.D_CHANMODE) {
+                    View v = getLayoutInflater().inflate(R.layout.widget_channel_mode, modes, false);
+                    TextView name = (TextView) v.findViewById(R.id.name);
+                    TextView description = (TextView) v.findViewById(R.id.description);
+                    TextView value = (TextView) v.findViewById(R.id.value);
 
-                String modeName = context.themeUtil().chanModes.chanModeToName(mode);
-                name.setText(String.format("%s (+%s)", modeName, c));
+                    String modeName = context.themeUtil().chanModes.chanModeToName(mode);
+                    name.setText(String.format("%s (+%s)", modeName, c));
 
-                String modeDescription = context.themeUtil().chanModes.chanModeToDescription(mode);
-                description.setText(modeDescription);
+                    String modeDescription = context.themeUtil().chanModes.chanModeToDescription(mode);
+                    description.setText(modeDescription);
 
-                String modeValue = channel.modeValue(c);
+                    String modeValue = channel.modeValue(c);
 
-                if (modeValue != null && !modeValue.isEmpty()) {
-                    value.setText(modeValue);
-                    value.setVisibility(View.VISIBLE);
-                }
+                    if (modeValue != null && !modeValue.isEmpty()) {
+                        value.setText(modeValue);
+                        value.setVisibility(View.VISIBLE);
+                    }
 
-                modes.addView(v);
+                    modes.addView(v);
 
-                if (mode == ChanMode.RESTRICT_TOPIC) topicEditable = isOp;
+                    if (mode == ChanMode.RESTRICT_TOPIC) topicEditable = isOp;
+                }
+            } else {
+                Log.d("libquassel", "Couldn’t find mode " + c + " for IRCd" + provider.getClass().getSimpleName());
             }
         }
 
diff --git a/app/src/main/java/de/kuschku/util/irc/chanmodes/ChanMode.java b/app/src/main/java/de/kuschku/util/irc/chanmodes/ChanMode.java
index 46d60c2aba8ca05f9ae8879788add11e7d525c35..da14888e4ba05642730b8f00910cf4c66272e8fb 100644
--- a/app/src/main/java/de/kuschku/util/irc/chanmodes/ChanMode.java
+++ b/app/src/main/java/de/kuschku/util/irc/chanmodes/ChanMode.java
@@ -60,5 +60,9 @@ public enum ChanMode {
     RESTRICT_TOPIC,
     STRIP_COLOR,
     UNLISTED,
-    FORWARD
+    FORWARD,
+    BAN,
+    BAN_EXCEPTION,
+    INVITE_EXCEPTION,
+    MUTE
 }
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 a7b65c9c921a4dfe8e0eda28d44ab22c7d6de8e5..836dd0513d32cf79d3966333510c8f5fbf0c34db 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
@@ -21,13 +21,23 @@
 
 package de.kuschku.util.irc.chanmodes;
 
-import de.kuschku.util.irc.chanmodes.impl.*;
-
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import de.kuschku.util.irc.chanmodes.impl.CharybdisIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.impl.DalIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.impl.DancerIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.impl.FqIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.impl.HybridIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.impl.HyperionIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.impl.InspireIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.impl.NeoIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.impl.ShadowIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.impl.SolidIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.impl.UnrealIrcModeProvider;
+
 public class IrcModeProviderFactory {
     private static List<IrcModeProvider> servers = Arrays.asList(
             new CharybdisIrcModeProvider(),
@@ -44,6 +54,7 @@ public class IrcModeProviderFactory {
     );
 
     private static Set<Character> toModeSet(String chanModes) {
+        if (chanModes == null) chanModes = "";
         String replaced = chanModes.replaceAll(",","");
         Set<Character> modeSet = new HashSet<>();
         for (char c : replaced.toCharArray()) {
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 08f297d2bae3f3d746cde1394d0183cf414938cb..c38a114053675ab5c93aa85794735182a2662a5c 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
@@ -21,15 +21,27 @@
 
 package de.kuschku.util.irc.chanmodes.impl;
 
-import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
-import de.kuschku.util.irc.chanmodes.ChanMode;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import static de.kuschku.util.irc.chanmodes.ChanMode.*;
+import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.ChanMode;
+
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_COLOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_CTCP;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_EXTERNAL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.INVITE_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.LIMIT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MODERATED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PARANOID;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PASSWORD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.RESTRICT_TOPIC;
+import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED;
 
 public class BewareIrcModeProvider extends AbstractIrcModeProvider {
 
@@ -55,6 +67,13 @@ public class BewareIrcModeProvider extends AbstractIrcModeProvider {
             case 'p': return PARANOID;
             case 's': return UNLISTED;
             case 't': return RESTRICT_TOPIC;
+
+            case 'b':
+                return BAN;
+            case 'e':
+                return BAN_EXCEPTION;
+            case 'I':
+                return INVITE_EXCEPTION;
         }
         return null;
     }
@@ -72,6 +91,13 @@ public class BewareIrcModeProvider extends AbstractIrcModeProvider {
             case PARANOID: return 'p';
             case UNLISTED: return 's';
             case RESTRICT_TOPIC: return 't';
+
+            case BAN:
+                return 'b';
+            case BAN_EXCEPTION:
+                return 'e';
+            case INVITE_EXCEPTION:
+                return 'I';
         }
         return ' ';
     }
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 c0e23656c03e7cbb36e949cac5a367f532c2c9da..788f0024427c7c32f61b7c35ceda70d831d48113 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
@@ -21,15 +21,40 @@
 
 package de.kuschku.util.irc.chanmodes.impl;
 
-import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
-import de.kuschku.util.irc.chanmodes.ChanMode;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import static de.kuschku.util.irc.chanmodes.ChanMode.*;
+import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.ChanMode;
+
+import static de.kuschku.util.irc.chanmodes.ChanMode.ALLOW_FORWARD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ALLOW_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_COLOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_CTCP;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_EXTERNAL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_FORWARDING;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_NOTICE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.FORWARD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.INVITE_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.JOIN_THROTTLE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.LIMIT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MODERATED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MUTE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_ADMIN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_OPER;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_SSL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PARANOID;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PASSWORD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PERMANENT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.REDUCED_MODERATION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.RESTRICT_TOPIC;
+import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED;
 
 public class CharybdisIrcModeProvider extends AbstractIrcModeProvider {
 
@@ -63,6 +88,14 @@ public class CharybdisIrcModeProvider extends AbstractIrcModeProvider {
             case 't': return RESTRICT_TOPIC;
             case 'z': return REDUCED_MODERATION;
 
+            case 'b':
+                return BAN;
+            case 'e':
+                return BAN_EXCEPTION;
+            case 'I':
+                return INVITE_EXCEPTION;
+            case 'q':
+                return MUTE;
         }
         return null;
     }
@@ -92,6 +125,15 @@ public class CharybdisIrcModeProvider extends AbstractIrcModeProvider {
             case UNLISTED: return 's';
             case RESTRICT_TOPIC: return 't';
             case REDUCED_MODERATION: return 'z';
+
+            case BAN:
+                return 'b';
+            case BAN_EXCEPTION:
+                return 'e';
+            case INVITE_EXCEPTION:
+                return 'I';
+            case MUTE:
+                return 'q';
         }
         return ' ';
     }
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 2a912eb69e56c8e729dc0c6f4729ba3eab2f08cd..fa4b49dbd9e295b9beda3f9a736ad965b67d30ea 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
@@ -21,15 +21,33 @@
 
 package de.kuschku.util.irc.chanmodes.impl;
 
-import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
-import de.kuschku.util.irc.chanmodes.ChanMode;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import static de.kuschku.util.irc.chanmodes.ChanMode.*;
+import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.ChanMode;
+
+import static de.kuschku.util.irc.chanmodes.ChanMode.AUDITORIUM;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_COLOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_EXTERNAL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.INVITE_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.JOIN_THROTTLE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.LIMIT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MODERATED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_OPER;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_SSL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PARANOID;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PASSWORD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.QUIET_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.REGISTERED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.RESTRICT_TOPIC;
+import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED;
 
 public class DalIrcModeProvider extends AbstractIrcModeProvider {
 
@@ -56,6 +74,13 @@ public class DalIrcModeProvider extends AbstractIrcModeProvider {
             case 'r': return REGISTERED;
             case 's': return UNLISTED;
             case 't': return RESTRICT_TOPIC;
+
+            case 'b':
+                return BAN;
+            case 'e':
+                return BAN_EXCEPTION;
+            case 'I':
+                return INVITE_EXCEPTION;
         }
         return null;
     }
@@ -79,6 +104,13 @@ public class DalIrcModeProvider extends AbstractIrcModeProvider {
             case REGISTERED: return 'r';
             case UNLISTED: return 's';
             case RESTRICT_TOPIC: return 't';
+
+            case BAN:
+                return 'b';
+            case BAN_EXCEPTION:
+                return 'e';
+            case INVITE_EXCEPTION:
+                return 'I';
         }
         return ' ';
     }
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 42cb3667b7c67e04970bbadba941110ac73e011d..5b6e898a9e50d89ee80e9c5e8b4f6a85b8e75b71 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
@@ -21,15 +21,31 @@
 
 package de.kuschku.util.irc.chanmodes.impl;
 
-import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
-import de.kuschku.util.irc.chanmodes.ChanMode;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import static de.kuschku.util.irc.chanmodes.ChanMode.*;
+import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.ChanMode;
+
+import static de.kuschku.util.irc.chanmodes.ChanMode.ALLOW_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_COLOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_EXTERNAL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_FORWARDING;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.INVITE_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.JOIN_THROTTLE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.LIMIT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MODERATED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PASSWORD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PERMANENT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.QUIET_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.REDUCED_MODERATION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED;
 
 public class DancerIrcModeProvider extends AbstractIrcModeProvider {
 
@@ -54,6 +70,13 @@ public class DancerIrcModeProvider extends AbstractIrcModeProvider {
             case 'r': return BLOCK_UNIDENTIFIED;
             case 's': return UNLISTED;
             case 'z': return REDUCED_MODERATION;
+
+            case 'b':
+                return BAN;
+            case 'e':
+                return BAN_EXCEPTION;
+            case 'I':
+                return INVITE_EXCEPTION;
         }
         return null;
     }
@@ -75,6 +98,13 @@ public class DancerIrcModeProvider extends AbstractIrcModeProvider {
             case BLOCK_UNIDENTIFIED: return 'r';
             case UNLISTED: return 's';
             case REDUCED_MODERATION: return 'z';
+
+            case BAN:
+                return 'b';
+            case BAN_EXCEPTION:
+                return 'e';
+            case INVITE_EXCEPTION:
+                return 'I';
         }
         return ' ';
     }
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 3dcf74165805d68672bb07780709bea042abea2c..0a2edf5aaea5aacddcae1912aa634f308627df62 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
@@ -21,15 +21,32 @@
 
 package de.kuschku.util.irc.chanmodes.impl;
 
-import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
-import de.kuschku.util.irc.chanmodes.ChanMode;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import static de.kuschku.util.irc.chanmodes.ChanMode.*;
+import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.ChanMode;
+
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_COLOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_EXTERNAL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.INVITE_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.JOIN_THROTTLE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.LIMIT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MODERATED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_OPER;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_SSL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PARANOID;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PASSWORD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.QUIET_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.REGISTERED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.RESTRICT_TOPIC;
+import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED;
 
 public class FqIrcModeProvider extends AbstractIrcModeProvider {
 
@@ -56,6 +73,13 @@ public class FqIrcModeProvider extends AbstractIrcModeProvider {
             case 'r': return REGISTERED;
             case 's': return UNLISTED;
             case 't': return RESTRICT_TOPIC;
+
+            case 'b':
+                return BAN;
+            case 'e':
+                return BAN_EXCEPTION;
+            case 'I':
+                return INVITE_EXCEPTION;
         }
         return null;
     }
@@ -78,6 +102,13 @@ public class FqIrcModeProvider extends AbstractIrcModeProvider {
             case REGISTERED: return 'r';
             case UNLISTED: return 's';
             case RESTRICT_TOPIC: return 't';
+
+            case BAN:
+                return 'b';
+            case BAN_EXCEPTION:
+                return 'e';
+            case INVITE_EXCEPTION:
+                return 'I';
         }
         return ' ';
     }
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 bcb461f6d3f075bc3c12e5ded379957cd2b7cb84..f259714201aadcf51356dd38866b1a984c1b0ac4 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
@@ -21,15 +21,31 @@
 
 package de.kuschku.util.irc.chanmodes.impl;
 
-import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
-import de.kuschku.util.irc.chanmodes.ChanMode;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import static de.kuschku.util.irc.chanmodes.ChanMode.*;
+import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.ChanMode;
+
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_COLOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_EXTERNAL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.INVITE_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.LIMIT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MODERATED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_OPER;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_SSL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PARANOID;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PASSWORD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.QUIET_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.REGISTERED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.RESTRICT_TOPIC;
+import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED;
 
 public class HybridIrcModeProvider extends AbstractIrcModeProvider {
 
@@ -54,6 +70,13 @@ public class HybridIrcModeProvider extends AbstractIrcModeProvider {
             case 'r': return REGISTERED;
             case 's': return UNLISTED;
             case 't': return RESTRICT_TOPIC;
+
+            case 'b':
+                return BAN;
+            case 'e':
+                return BAN_EXCEPTION;
+            case 'I':
+                return INVITE_EXCEPTION;
         }
         return null;
     }
@@ -75,6 +98,13 @@ public class HybridIrcModeProvider extends AbstractIrcModeProvider {
             case REGISTERED: return 'r';
             case UNLISTED: return 's';
             case RESTRICT_TOPIC: return 't';
+
+            case BAN:
+                return 'b';
+            case BAN_EXCEPTION:
+                return 'e';
+            case INVITE_EXCEPTION:
+                return 'I';
         }
         return ' ';
     }
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 56e5150bbc895cc150d8da8fcb30c450d8594564..28c2c12d4c0177441e1c5afa506891db189a180e 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
@@ -21,15 +21,29 @@
 
 package de.kuschku.util.irc.chanmodes.impl;
 
-import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
-import de.kuschku.util.irc.chanmodes.ChanMode;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import static de.kuschku.util.irc.chanmodes.ChanMode.*;
+import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.ChanMode;
+
+import static de.kuschku.util.irc.chanmodes.ChanMode.ALLOW_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_COLOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_EXTERNAL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_FORWARDING;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.INVITE_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.LIMIT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MODERATED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PASSWORD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.QUIET_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.REDUCED_MODERATION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED;
 
 public class HyperionIrcModeProvider extends AbstractIrcModeProvider {
 
@@ -52,6 +66,13 @@ public class HyperionIrcModeProvider extends AbstractIrcModeProvider {
             case 'r': return BLOCK_UNIDENTIFIED;
             case 's': return UNLISTED;
             case 'z': return REDUCED_MODERATION;
+
+            case 'b':
+                return BAN;
+            case 'e':
+                return BAN_EXCEPTION;
+            case 'I':
+                return INVITE_EXCEPTION;
         }
         return null;
     }
@@ -71,6 +92,13 @@ public class HyperionIrcModeProvider extends AbstractIrcModeProvider {
             case BLOCK_UNIDENTIFIED: return 'r';
             case UNLISTED: return 's';
             case REDUCED_MODERATION: return 'z';
+
+            case BAN:
+                return 'b';
+            case BAN_EXCEPTION:
+                return 'e';
+            case INVITE_EXCEPTION:
+                return 'I';
         }
         return ' ';
     }
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 928074ac86c5ff0ee4b22c28c2d43f8495ca95cf..98a7d6f035f97c165f075e63bfe49c5f91bde9c4 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
@@ -21,15 +21,46 @@
 
 package de.kuschku.util.irc.chanmodes.impl;
 
-import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
-import de.kuschku.util.irc.chanmodes.ChanMode;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import static de.kuschku.util.irc.chanmodes.ChanMode.*;
+import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.ChanMode;
+
+import static de.kuschku.util.irc.chanmodes.ChanMode.ALLOW_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ANTIFLOOD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.AUDITORIUM;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_CAPS;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_COLOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_CTCP;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_EXTERNAL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_KICK;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_KNOCK;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_NICKCHANGE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_NOTICE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.CENSOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.FORWARD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.HIDE_JOINS;
+import static de.kuschku.util.irc.chanmodes.ChanMode.INVITE_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.JOIN_THROTTLE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.LIMIT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MODERATED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_OPER;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_SSL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PARANOID;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PASSWORD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PERMANENT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.QUIET_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.REGISTERED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.RESTRICT_TOPIC;
+import static de.kuschku.util.irc.chanmodes.ChanMode.STRIP_COLOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED;
 
 public class InspireIrcModeProvider extends AbstractIrcModeProvider {
 
@@ -69,6 +100,13 @@ public class InspireIrcModeProvider extends AbstractIrcModeProvider {
             case 't': return RESTRICT_TOPIC;
             case 'u': return AUDITORIUM;
             case 'z': return ONLY_SSL;
+
+            case 'b':
+                return BAN;
+            case 'e':
+                return BAN_EXCEPTION;
+            case 'I':
+                return INVITE_EXCEPTION;
         }
         return null;
     }
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 c4d28f615c72d40f64e60ed4c8301ea1980ef151..7e4a27f82f8d2467cdfe7eb4d8b3deb5acfdede8 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
@@ -21,15 +21,33 @@
 
 package de.kuschku.util.irc.chanmodes.impl;
 
-import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
-import de.kuschku.util.irc.chanmodes.ChanMode;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import static de.kuschku.util.irc.chanmodes.ChanMode.*;
+import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.ChanMode;
+
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_EXTERNAL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_KICK;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_NICKCHANGE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.DISABLE_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.INVITE_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.LIMIT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MODERATED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_OPER;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_SSL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PASSWORD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PERMANENT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.QUIET_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.REGISTERED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.RESTRICT_TOPIC;
+import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED;
 
 public class NeoIrcModeProvider extends AbstractIrcModeProvider {
 
@@ -56,6 +74,13 @@ public class NeoIrcModeProvider extends AbstractIrcModeProvider {
             case 's': return UNLISTED;
             case 't': return RESTRICT_TOPIC;
             case 'z': return ONLY_SSL;
+
+            case 'b':
+                return BAN;
+            case 'e':
+                return BAN_EXCEPTION;
+            case 'I':
+                return INVITE_EXCEPTION;
         }
         return null;
     }
@@ -79,6 +104,13 @@ public class NeoIrcModeProvider extends AbstractIrcModeProvider {
             case UNLISTED: return 's';
             case RESTRICT_TOPIC: return 't';
             case ONLY_SSL: return 'z';
+
+            case BAN:
+                return 'b';
+            case BAN_EXCEPTION:
+                return 'e';
+            case INVITE_EXCEPTION:
+                return 'I';
         }
         return ' ';
     }
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 b2bae9198abff505ab66486491059f4460b78df5..2d7ce77775b5e0208e83c5082675507997a5e67c 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
@@ -21,15 +21,27 @@
 
 package de.kuschku.util.irc.chanmodes.impl;
 
-import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
-import de.kuschku.util.irc.chanmodes.ChanMode;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import static de.kuschku.util.irc.chanmodes.ChanMode.*;
+import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.ChanMode;
+
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_COLOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_EXTERNAL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.INVITE_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.LIMIT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MODERATED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PARANOID;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PASSWORD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.REGISTERED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.RESTRICT_TOPIC;
+import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED;
 
 public class NightstarIrcModeProvider extends AbstractIrcModeProvider {
 
@@ -55,6 +67,13 @@ public class NightstarIrcModeProvider extends AbstractIrcModeProvider {
             case 'r': return REGISTERED;
             case 's': return UNLISTED;
             case 't': return RESTRICT_TOPIC;
+
+            case 'b':
+                return BAN;
+            case 'e':
+                return BAN_EXCEPTION;
+            case 'I':
+                return INVITE_EXCEPTION;
         }
         return null;
     }
@@ -72,6 +91,13 @@ public class NightstarIrcModeProvider extends AbstractIrcModeProvider {
             case REGISTERED: return 'r';
             case UNLISTED: return 's';
             case RESTRICT_TOPIC: return 't';
+
+            case BAN:
+                return 'b';
+            case BAN_EXCEPTION:
+                return 'e';
+            case INVITE_EXCEPTION:
+                return 'I';
         }
         return ' ';
     }
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 76cd66513a71c15ba7ca4bc17a5eef011d6b4a4b..67e8062b544e1836d7131bff47ff09e3758df751 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
@@ -21,15 +21,25 @@
 
 package de.kuschku.util.irc.chanmodes.impl;
 
-import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
-import de.kuschku.util.irc.chanmodes.ChanMode;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import static de.kuschku.util.irc.chanmodes.ChanMode.*;
+import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.ChanMode;
+
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_EXTERNAL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.INVITE_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.LIMIT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MODERATED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PARANOID;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PASSWORD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.RESTRICT_TOPIC;
+import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED;
 
 public class RfcIrcModeProvider extends AbstractIrcModeProvider {
 
@@ -48,6 +58,13 @@ public class RfcIrcModeProvider extends AbstractIrcModeProvider {
             case 'm': return MODERATED;
             case 'l': return LIMIT;
             case 'k': return PASSWORD;
+
+            case 'b':
+                return BAN;
+            case 'e':
+                return BAN_EXCEPTION;
+            case 'I':
+                return INVITE_EXCEPTION;
         }
         return null;
     }
@@ -63,6 +80,13 @@ public class RfcIrcModeProvider extends AbstractIrcModeProvider {
             case MODERATED: return 'm';
             case LIMIT: return 'l';
             case PASSWORD: return 'k';
+
+            case BAN:
+                return 'b';
+            case BAN_EXCEPTION:
+                return 'e';
+            case INVITE_EXCEPTION:
+                return 'I';
         }
         return ' ';
     }
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 b78647b781d026cb11793a509dc7c23087a661e5..54af40869f224365b3eb7d2fc342db3c14e15795 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
@@ -21,15 +21,44 @@
 
 package de.kuschku.util.irc.chanmodes.impl;
 
-import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
-import de.kuschku.util.irc.chanmodes.ChanMode;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import static de.kuschku.util.irc.chanmodes.ChanMode.*;
+import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.ChanMode;
+
+import static de.kuschku.util.irc.chanmodes.ChanMode.ALLOW_FORWARD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ALLOW_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_ACTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_AUTOREJOIN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_CAPS;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_CTCP;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_EXTERNAL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_FORWARDING;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_KICK;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_NICKCHANGE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_NOTICE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_REPEAT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.INVITE_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.JOIN_THROTTLE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.LIMIT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MODERATED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_ADMIN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_OPER;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_SSL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PARANOID;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PASSWORD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PERMANENT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.REDUCED_MODERATION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.RESTRICT_TOPIC;
+import static de.kuschku.util.irc.chanmodes.ChanMode.STRIP_COLOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED;
 
 public class ShadowIrcModeProvider extends AbstractIrcModeProvider {
 
@@ -67,6 +96,13 @@ public class ShadowIrcModeProvider extends AbstractIrcModeProvider {
             case 's': return UNLISTED;
             case 't': return RESTRICT_TOPIC;
             case 'z': return REDUCED_MODERATION;
+
+            case 'b':
+                return BAN;
+            case 'e':
+                return BAN_EXCEPTION;
+            case 'I':
+                return INVITE_EXCEPTION;
         }
         return null;
     }
@@ -101,6 +137,13 @@ public class ShadowIrcModeProvider extends AbstractIrcModeProvider {
             case UNLISTED: return 's';
             case RESTRICT_TOPIC: return 't';
             case REDUCED_MODERATION: return 'z';
+
+            case BAN:
+                return 'b';
+            case BAN_EXCEPTION:
+                return 'e';
+            case INVITE_EXCEPTION:
+                return 'I';
         }
         return ' ';
     }
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 97acd327b6eb18f0791591a2cef089bf6593760f..e33255f68daacf8870b423f8797d9bb4318802e0 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
@@ -21,15 +21,41 @@
 
 package de.kuschku.util.irc.chanmodes.impl;
 
-import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
-import de.kuschku.util.irc.chanmodes.ChanMode;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import static de.kuschku.util.irc.chanmodes.ChanMode.*;
+import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.ChanMode;
+
+import static de.kuschku.util.irc.chanmodes.ChanMode.ANTIFLOOD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.AUDITORIUM;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_CAPS;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_COLOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_CTCP;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_EXTERNAL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_KICK;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_KNOCK;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_NICKCHANGE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_NOTICE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.CENSOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.DISABLE_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.INVITE_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.LIMIT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MODERATED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_SSL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PARANOID;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PASSWORD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PERMANENT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.QUIET_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.RESTRICT_TOPIC;
+import static de.kuschku.util.irc.chanmodes.ChanMode.STRIP_COLOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED;
 
 public class SolidIrcModeProvider extends AbstractIrcModeProvider {
 
@@ -64,6 +90,13 @@ public class SolidIrcModeProvider extends AbstractIrcModeProvider {
             case 't': return RESTRICT_TOPIC;
             case 'u': return AUDITORIUM;
             case 'z': return ONLY_SSL;
+
+            case 'b':
+                return BAN;
+            case 'e':
+                return BAN_EXCEPTION;
+            case 'I':
+                return INVITE_EXCEPTION;
         }
         return null;
     }
@@ -95,6 +128,13 @@ public class SolidIrcModeProvider extends AbstractIrcModeProvider {
             case RESTRICT_TOPIC: return 't';
             case AUDITORIUM: return 'u';
             case ONLY_SSL: return 'z';
+
+            case BAN:
+                return 'b';
+            case BAN_EXCEPTION:
+                return 'e';
+            case INVITE_EXCEPTION:
+                return 'I';
         }
         return ' ';
     }
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 d7efd24f6bc1a3348e25912b5ecb22a3570c3b95..0dca5c0a620719f4659c430fbfa6f0bac816acac 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
@@ -21,15 +21,25 @@
 
 package de.kuschku.util.irc.chanmodes.impl;
 
-import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
-import de.kuschku.util.irc.chanmodes.ChanMode;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import static de.kuschku.util.irc.chanmodes.ChanMode.*;
+import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.ChanMode;
+
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_EXTERNAL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.INVITE_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.LIMIT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MODERATED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PARANOID;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PASSWORD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.RESTRICT_TOPIC;
+import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED;
 
 public class UndernetIrcModeProvider extends AbstractIrcModeProvider {
 
@@ -53,6 +63,13 @@ public class UndernetIrcModeProvider extends AbstractIrcModeProvider {
             case 'p': return PARANOID;
             case 's': return UNLISTED;
             case 't': return RESTRICT_TOPIC;
+
+            case 'b':
+                return BAN;
+            case 'e':
+                return BAN_EXCEPTION;
+            case 'I':
+                return INVITE_EXCEPTION;
         }
         return null;
     }
@@ -68,6 +85,13 @@ public class UndernetIrcModeProvider extends AbstractIrcModeProvider {
             case PARANOID: return 'p';
             case UNLISTED: return 's';
             case RESTRICT_TOPIC: return 't';
+
+            case BAN:
+                return 'b';
+            case BAN_EXCEPTION:
+                return 'e';
+            case INVITE_EXCEPTION:
+                return 'I';
         }
         return ' ';
     }
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 04db02db6a747663ff8bf0c12617734c62f23acf..deffc9a8e9bb156dbdf87a46fc27aa098f63489b 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
@@ -21,15 +21,43 @@
 
 package de.kuschku.util.irc.chanmodes.impl;
 
-import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
-import de.kuschku.util.irc.chanmodes.ChanMode;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import static de.kuschku.util.irc.chanmodes.ChanMode.*;
+import de.kuschku.util.irc.chanmodes.AbstractIrcModeProvider;
+import de.kuschku.util.irc.chanmodes.ChanMode;
+
+import static de.kuschku.util.irc.chanmodes.ChanMode.ANTIFLOOD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BAN_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_COLOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_CTCP;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_EXTERNAL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_KICK;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_KNOCK;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_NICKCHANGE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_NOTICE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.BLOCK_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.CENSOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.DISABLE_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.FORWARD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.INVITE_EXCEPTION;
+import static de.kuschku.util.irc.chanmodes.ChanMode.IS_SECURE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.LIMIT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.MODERATED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_INVITE;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_OPER;
+import static de.kuschku.util.irc.chanmodes.ChanMode.ONLY_SSL;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PARANOID;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PASSWORD;
+import static de.kuschku.util.irc.chanmodes.ChanMode.PERMANENT;
+import static de.kuschku.util.irc.chanmodes.ChanMode.QUIET_UNIDENTIFIED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.REGISTERED;
+import static de.kuschku.util.irc.chanmodes.ChanMode.RESTRICT_TOPIC;
+import static de.kuschku.util.irc.chanmodes.ChanMode.STRIP_COLOR;
+import static de.kuschku.util.irc.chanmodes.ChanMode.UNLISTED;
 
 public class UnrealIrcModeProvider extends AbstractIrcModeProvider {
 
@@ -66,6 +94,13 @@ public class UnrealIrcModeProvider extends AbstractIrcModeProvider {
             case 's': return UNLISTED;
             case 't': return RESTRICT_TOPIC;
             case 'z': return ONLY_SSL;
+
+            case 'b':
+                return BAN;
+            case 'e':
+                return BAN_EXCEPTION;
+            case 'I':
+                return INVITE_EXCEPTION;
         }
         return null;
     }
@@ -99,6 +134,13 @@ public class UnrealIrcModeProvider extends AbstractIrcModeProvider {
             case UNLISTED: return 's';
             case RESTRICT_TOPIC: return 't';
             case ONLY_SSL: return 'z';
+
+            case BAN:
+                return 'b';
+            case BAN_EXCEPTION:
+                return 'e';
+            case INVITE_EXCEPTION:
+                return 'I';
         }
         return ' ';
     }
diff --git a/app/src/main/res/layout/activity_channel_detail.xml b/app/src/main/res/layout/activity_channel_detail.xml
index 90a6edf609748091f34718f5fcbc6084f2ee1924..19eabf0f74976793168580b7b50d345ba7ef6f3e 100644
--- a/app/src/main/res/layout/activity_channel_detail.xml
+++ b/app/src/main/res/layout/activity_channel_detail.xml
@@ -46,7 +46,6 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="vertical">
-
             <TextView
                 style="@style/TextAppearance.AppCompat.Button"
                 android:layout_width="match_parent"
@@ -71,7 +70,7 @@
                 style="@style/Widget.AppCompat.Button.Colored"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_gravity="right"
+                android:layout_gravity="end"
                 android:layout_marginLeft="16dp"
                 android:layout_marginRight="16dp"
                 android:text="Edit Topic" />
@@ -80,7 +79,7 @@
                 android:layout_width="match_parent"
                 android:layout_height="1dp"
                 android:layout_marginTop="16dp"
-                android:background="?attr/material_drawer_divider" />
+                android:background="?attr/colorDivider" />
 
             <TextView
                 style="@style/TextAppearance.AppCompat.Button"
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index f1689d16911ddaf16b3f8d781b3a9c22e0ba3eb2..b006f450829c06af18df88db73561130692b798a 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -21,9 +21,6 @@
   -->
 
 <resources>
-    <attr name="colorAccentFocus" format="color" />
-    <attr name="formatBarTheme" format="reference" />
-
     <!-- sender colors -->
 
     <attr name="senderColor0" format="color" />
@@ -69,6 +66,9 @@
     <attr name="colorForegroundSecondary" format="color" />
     <attr name="colorForegroundAction" />
 
+    <attr name="colorAccentFocus" format="color" />
+    <attr name="colorDivider" format="color" />
+
     <attr name="colorBackground" format="color" />
     <attr name="colorBackgroundHighlight" format="color" />
     <attr name="colorBackgroundSecondary" format="color" />
@@ -93,6 +93,6 @@
     <attr name="iconDelete" format="reference" />
     <attr name="iconModify" format="reference" />
     <attr name="iconAdd" format="reference" />
-
+    <attr name="formatBarTheme" format="reference" />
     <attr name="cardStyle" format="reference" />
 </resources>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 09c7e6f850eca746bcb52b9b3bde95db1694dd8d..3b826b53e2fa19ea344bc0c8a7e5e960a5a53c39 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -33,6 +33,8 @@
         <item name="windowActionModeOverlay">true</item>
         <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
 
+        <item name="colorDivider">#1FFFFFFF</item>
+
         <!--
         <item name="material_drawer_background">?attr/colorBackground</item>
         <item name="material_drawer_primary_text">?attr/colorForeground</item>
@@ -63,6 +65,8 @@
         <item name="windowActionModeOverlay">true</item>
         <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
 
+        <item name="colorDivider">#1F000000</item>
+
         <!--
         <item name="material_drawer_background">?attr/colorBackground</item>
         <item name="material_drawer_primary_text">?attr/colorForeground</item>