diff --git a/app/build.gradle b/app/build.gradle
index ab27eff0253103e8975bdc150ed7e9904b14a297..7417cde86e19b5629d6d8b3ff1345827f6998629 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -148,7 +148,7 @@ dependencies {
 
     // UI Libs
     compile(name:'library-release', ext:'aar')
-    compile('com.mikepenz:materialdrawer:5.0.0.b25-SNAPSHOT@aar') { transitive = true }
+    compile('com.mikepenz:materialdrawer:5.0.0.b27-SNAPSHOT@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 }
 
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d6b9d66cc46b3f135d792a1a422712dcf38a3c04..706f21623d293ed654e4e5fd55917af2d668c6d0 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -51,24 +51,28 @@
             android:name=".ui.chat.MainActivity"
             android:label="@string/appName"
             android:launchMode="singleTask"
+            android:parentActivityName=".ui.LoginActivity"
             android:theme="@style/AppTheme.Light" />
 
         <activity
             android:name=".ui.chat.ChannelDetailActivity"
-            android:label="Channel Detail"
+            android:label="Channel Details"
             android:launchMode="singleTask"
-            android:theme="@style/SetupTheme" />
+            android:parentActivityName=".ui.chat.MainActivity"
+            android:theme="@style/AppTheme.Light" />
 
         <activity
             android:name=".ui.setup.AccountSetupActivity"
             android:label="Setup a new Account"
             android:launchMode="singleTask"
+            android:parentActivityName=".ui.setup.AccountSelectActivity"
             android:theme="@style/SetupTheme" />
 
         <activity
             android:name=".ui.setup.AccountSelectActivity"
             android:label="Select an Account"
             android:launchMode="singleTask"
+            android:parentActivityName=".ui.LoginActivity"
             android:theme="@style/SetupTheme" />
     </application>
 
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 a7a4ea461ceba5d7ee895c701da4f7f141c50bbc..7e4042db56d821dee8b7b1e6adef8d00d9d5a8b4 100644
--- a/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java
@@ -31,7 +31,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import de.kuschku.libquassel.BusProvider;
 import de.kuschku.libquassel.events.BacklogInitEvent;
+import de.kuschku.libquassel.events.ConnectionChangeEvent;
 import de.kuschku.libquassel.localtypes.buffers.Buffer;
 import de.kuschku.libquassel.localtypes.buffers.Buffers;
 import de.kuschku.libquassel.localtypes.buffers.ChannelBuffer;
@@ -163,6 +165,9 @@ public class BufferManager {
     }
 
     public void doBacklogInit(int amount) {
+        BusProvider provider = client.provider();
+        assertNotNull(provider);
+
         Set<Integer> visibleBuffers = new HashSet<>();
         for (QBufferViewConfig bufferConfig : client.bufferViewManager().bufferViewConfigs()) {
             visibleBuffers.addAll(bufferConfig.bufferIds());
@@ -175,6 +180,11 @@ public class BufferManager {
         int waitingMax = client.backlogManager().waitingMax();
         int waitingCurrently = client.backlogManager().waiting().size();
 
-        client.provider().sendEvent(new BacklogInitEvent(waitingMax - waitingCurrently, waitingMax));
+        provider.sendEvent(new BacklogInitEvent(waitingMax - waitingCurrently, waitingMax));
+
+        if (waitingMax == 0) {
+            // TODO: Send event to set up chat list
+            client.setConnectionStatus(ConnectionChangeEvent.Status.CONNECTED);
+        }
     }
 }
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 aa1c11002ab78995a0e2499f52706a1af38e98db..c6a994a3c6f9496bbedc326942054603f7bc8231 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,6 +23,7 @@ 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;
 
@@ -59,13 +60,13 @@ public class IrcChannel extends AIrcChannel<IrcChannel> {
     private String codecForEncoding;
     private String codecForDecoding;
     @NonNull
-    private Map<Character, List<String>> A_channelModes = new HashMap<>();
+    public Map<Character, List<String>> A_channelModes = new HashMap<>();
     @NonNull
-    private Map<Character, String> B_channelModes = new HashMap<>();
+    public Map<Character, String> B_channelModes = new HashMap<>();
     @NonNull
-    private Map<Character, String> C_channelModes = new HashMap<>();
+    public Map<Character, String> C_channelModes = new HashMap<>();
     @NonNull
-    private Set<Character> D_channelModes = new HashSet<>();
+    public Set<Character> D_channelModes = new HashSet<>();
     // Because we don’t have networks at the beginning yet
     @Nullable
     private Map<String, String> cachedUserModes;
@@ -439,14 +440,21 @@ public class IrcChannel extends AIrcChannel<IrcChannel> {
             }
         }
         if (cachedChanModes != null) {
-            if (cachedChanModes.get("A") != null)
-                A_channelModes = (Map<Character, List<String>>) cachedChanModes.get("A");
+            if (cachedChanModes.get("A") != null) {
+                for (Map.Entry<String, QVariant<List<String>>> entry : ((Map<String, QVariant<List<String>>>) cachedChanModes.get("A")).entrySet()) {
+                    A_channelModes.put(entry.getKey().charAt(0), entry.getValue().data);
+                }
+            }
 
             if (cachedChanModes.get("B") != null)
-                B_channelModes = (Map<Character, String>) cachedChanModes.get("B");
+                for (Map.Entry<String, QVariant<String>> entry : ((Map<String, QVariant<String>>) cachedChanModes.get("B")).entrySet()) {
+                    B_channelModes.put(entry.getKey().charAt(0), entry.getValue().data);
+                }
 
             if (cachedChanModes.get("C") != null)
-                C_channelModes = (Map<Character, String>) cachedChanModes.get("C");
+                for (Map.Entry<String, QVariant<String>> entry : ((Map<String, QVariant<String>>) cachedChanModes.get("C")).entrySet()) {
+                    C_channelModes.put(entry.getKey().charAt(0), entry.getValue().data);
+                }
 
             if (cachedChanModes.get("D") != null)
                 D_channelModes = ModeUtils.toModes((String) cachedChanModes.get("D"));
@@ -507,4 +515,13 @@ public class IrcChannel extends AIrcChannel<IrcChannel> {
         users.add(newNick);
         userModes.put(newNick, userModes.get(oldNick));
     }
+
+    @Override
+    public List<Character> modeList() {
+        List<Character> modes = new ArrayList<>();
+        modes.addAll(D_channelModes);
+        modes.addAll(C_channelModes.keySet());
+        modes.addAll(B_channelModes.keySet());
+        return modes;
+    }
 }
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 c5b6055f46f350b7a0950c71a6169603cabed94e..04844b485ae9a18aafc8218e6d1ab3a8e83158d0 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
@@ -92,7 +92,7 @@ public class Network extends ANetwork<Network> implements Observer {
     }
 
     public Network(Map<String, QIrcChannel> channels, Map<String, QIrcUser> nicks, List<NetworkServer> serverList, Map<String, String> supports, ConnectionState connectionState, String currentServer, boolean isConnected, int latency, String myNick, NetworkInfo networkInfo) {
-        this.channels = channels;
+        this.channels = new HashMap<>(channels);
         this.nicks = new HashMap<>(nicks);
         this.supports = supports;
         this.connectionState = connectionState;
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 66db4de0df5d8373df8175eb35c0e876b34ee37e..e4129a152f2a666f65296d72127f212dea735d3c 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,6 +25,7 @@ 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;
@@ -156,4 +157,6 @@ public interface QIrcChannel extends QObservable {
     ObservableSet<String> users();
 
     void _ircUserNickChanged(String oldNick, String newNick);
+
+    List<Character> modeList();
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QNetwork.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QNetwork.java
index 84a36d0002e66d552612562b2a0ca95f4ba5f052..a1e8884f13b6b1526b38d40a2c134a665bab58a6 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QNetwork.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QNetwork.java
@@ -385,11 +385,11 @@ public interface QNetwork extends QObservable {
     }
 
     enum ChannelModeType {
-        NOT_A_CHANMODE(0),
-        A_CHANMODE(1),
-        B_CHANMODE(2),
-        C_CHANMODE(3),
-        D_CHANMODE(4);
+        NOT_A_CHANMODE(-1),
+        A_CHANMODE(0),
+        B_CHANMODE(1),
+        C_CHANMODE(2),
+        D_CHANMODE(3);
 
         public final int id;
 
@@ -400,16 +400,16 @@ public interface QNetwork extends QObservable {
         @NonNull
         public static ChannelModeType of(int id) {
             switch (id) {
-                case 1:
+                case 0:
                     return A_CHANMODE;
-                case 2:
+                case 1:
                     return B_CHANMODE;
-                case 3:
+                case 2:
                     return C_CHANMODE;
-                case 4:
+                case 3:
                     return D_CHANMODE;
                 default:
-                case 0:
+                case -1:
                     return NOT_A_CHANMODE;
             }
         }
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 370b97f21b73ae31c1ab567d4ec0b5e97fb233d7..01c7d2e16da7e15ec4e363169c22f0bbf9a48153 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
@@ -23,19 +23,14 @@ package de.kuschku.quasseldroid_ng.ui.chat;
 
 import android.os.Bundle;
 import android.support.annotation.Nullable;
-import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.AppCompatButton;
 import android.support.v7.widget.Toolbar;
 import android.text.method.LinkMovementMethod;
 import android.util.Log;
-import android.view.LayoutInflater;
 import android.view.View;
-import android.view.ViewGroup;
 import android.widget.LinearLayout;
 import android.widget.TextView;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
+import android.widget.Toast;
 
 import butterknife.Bind;
 import butterknife.ButterKnife;
@@ -52,13 +47,16 @@ import de.kuschku.util.servicebound.BoundActivity;
 public class ChannelDetailActivity extends BoundActivity {
     @Bind(R.id.topic)
     TextView topic;
-    @Bind(R.id.mode)
-    TextView mode;
+
     @Bind(R.id.modes)
     LinearLayout modes;
+
+    @Bind(R.id.edit_topic)
+    AppCompatButton edit_topic;
+
     @Bind(R.id.toolbar)
     Toolbar toolbar;
-    ModeAdapter modeAdapter;
+
     private int buffer;
 
     @Override
@@ -74,87 +72,64 @@ public class ChannelDetailActivity extends BoundActivity {
         super.onConnectToThread(thread);
 
         ChannelBuffer buffer = (ChannelBuffer) context.client().bufferManager().buffer(this.buffer);
+        if (buffer == null) return;
+
         QIrcChannel channel = buffer.getChannel();
-        String modeString = channel.channelModeString();
+        if (channel == null) return;
 
+        if (channel.topic() != null)
         topic.setText(new IrcFormatHelper(context).formatIrcMessage(context.client(), channel.topic(), buffer.getInfo(), v -> finish()));
         topic.setMovementMethod(LinkMovementMethod.getInstance());
-        mode.setText(String.format("Channel Mode %s", modeString));
-
-        if (getResources().getBoolean(R.bool.isTablet)) {
-            findViewById(R.id.appBar).setPadding(0, 0, 0, 0);
-        } else {
-            findViewById(R.id.appBar).setPadding(0, (int) getResources().getDimension(R.dimen.materialize_statusbar), 0, 0);
-        }
 
         toolbar.setTitle(channel.name());
         setSupportActionBar(toolbar);
 
         modes.removeAllViews();
         IrcModeProvider provider = channel.network().modeProvider();
-        for (char c : modeString.toCharArray()) {
+
+        String myModes = channel.userModes(channel.network().me());
+        boolean isOp = false;
+        for (String c : channel.network().prefixModes()) {
+            if (!c.equalsIgnoreCase("v") && myModes.contains(c)) {
+                isOp = true;
+                break;
+            }
+        }
+
+        boolean topicEditable = true;
+        for (char c : channel.modeList()) {
             ChanMode mode = provider.modeFromChar(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);
 
                 String modeName = context.themeUtil().translations.chanModeToName(mode);
                 name.setText(String.format("%s (+%s)", modeName, c));
+
                 String modeDescription = context.themeUtil().translations.chanModeToDescription(mode);
                 description.setText(modeDescription);
-                modes.addView(v);
-            }
-        }
-    }
 
-    public void onEventMainThread(GeneralErrorEvent event) {
-        Log.e("DEBUG", String.valueOf(event));
-    }
+                String modeValue = channel.modeValue(c);
 
-    public class ModeAdapter extends RecyclerView.Adapter<ChannelDetailActivity.ModeViewHolder> {
-        private List<ChanMode> channelModes = new ArrayList<>();
+                if (modeValue != null && !modeValue.isEmpty()) {
+                    value.setText(modeValue);
+                    value.setVisibility(View.VISIBLE);
+                }
 
-        public void setModes(Collection<ChanMode> chanModes) {
-            channelModes.clear();
-            channelModes.addAll(chanModes);
-            Log.e("DEBUG", String.valueOf(channelModes));
-            notifyDataSetChanged();
-        }
+                modes.addView(v);
 
-        @Override
-        public ChannelDetailActivity.ModeViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
-            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
-            return new ModeViewHolder(inflater.inflate(R.layout.widget_channel_mode, parent, false));
+                if (mode == ChanMode.RESTRICT_TOPIC) topicEditable = isOp;
+            }
         }
 
-        @Override
-        public void onBindViewHolder(ChannelDetailActivity.ModeViewHolder holder, int position) {
-            holder.bind(channelModes.get(position));
-        }
+        edit_topic.setVisibility(topicEditable ? View.VISIBLE : View.GONE);
 
-        @Override
-        public int getItemCount() {
-            return channelModes.size();
-        }
+        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
     }
 
-    public class ModeViewHolder extends RecyclerView.ViewHolder {
-
-        @Bind(R.id.name)
-        TextView name;
-
-        @Bind(R.id.description)
-        TextView description;
-
-        public ModeViewHolder(View itemView) {
-            super(itemView);
-            ButterKnife.bind(this, itemView);
-        }
-
-        public void bind(ChanMode mode) {
-            name.setText(context.themeUtil().translations.chanModeToName(mode));
-            description.setText(context.themeUtil().translations.chanModeToDescription(mode));
-        }
+    public void onEventMainThread(GeneralErrorEvent event) {
+        Log.e("DEBUG", String.valueOf(event));
     }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigItem.java
index 8362f4b520609d20daca1b022de7d7f88b07061f..ba724a1def847de64ef4b9cbe38a88f8d9c3da8a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigItem.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigItem.java
@@ -110,7 +110,7 @@ public class BufferViewConfigItem implements DrawerItemCallback {
         for (NetworkItem item : networks) {
             if (ids.contains(item.getNetwork().networkId())) {
                 int position = networks.indexOf(item);
-                drawer.addItemAtPosition(item, position);
+                drawer.getItemAdapter().add(position, item);
             }
         }
         for (int i = 0; i < drawer.getAdapter().getItemCount(); i++) {
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 cb41cd1046561a35dbff2547d0c2721aaef27114..c847f05c617b0415534227ab6dfe9814d94ab719 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
@@ -384,6 +384,12 @@ public class ThemeUtil {
         @AutoString(R.string.chanMode_ONLY_ADMIN_DESCRIPTION)
         public String chanMode_ONLY_ADMIN_DESCRIPTION;
 
+        @AutoString(R.string.chanMode_FORWARD_NAME)
+        public String chanMode_FORWARD_NAME;
+
+        @AutoString(R.string.chanMode_FORWARD_DESCRIPTION)
+        public String chanMode_FORWARD_DESCRIPTION;
+
 
         @NonNull
         public CharSequence formatUsername(@NonNull CharSequence nick, @NonNull CharSequence hostmask) {
@@ -547,7 +553,7 @@ public class ThemeUtil {
                 case IS_SECURE:
                     return chanMode_IS_SECURE_DESCRIPTION;
                 case FORWARD:
-                    break;
+                    return chanMode_FORWARD_DESCRIPTION;
             }
             return null;
         }
@@ -631,7 +637,7 @@ public class ThemeUtil {
                 case IS_SECURE:
                     return chanMode_IS_SECURE_NAME;
                 case FORWARD:
-                    break;
+                    return chanMode_FORWARD_NAME;
             }
             return null;
         }
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 185216fafebbb6cfae951fd302e3db93cdfb1bbe..c7fefd73ae2849df748641d338d6f890ee813676 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
@@ -58,7 +58,7 @@ public class IrcFormatHelper {
     @NonNull
     private static final String urlChars = "(?:[,.;:]*[\\w~@/?&=+$()!%#*-])";
     @NonNull
-    private static final String urlEnd = "(?:>|[,.;:\"]*\\s|\\b|$)";
+    private static final String urlEnd = "((?:>|[,.;:\"]*\\s|\\b|$))";
     @NonNull
     private static final Pattern urlPattern = Pattern.compile(String.format("\\b(%s%s(?:/%s*)?)%s", scheme, authority, urlChars, urlEnd), Pattern.CASE_INSENSITIVE);
     @NonNull
@@ -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()), urlMatcher.start(), urlMatcher.end()));
+            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/res/layout/activity_channel_detail.xml b/app/src/main/res/layout/activity_channel_detail.xml
index 7185ee79460cc58471197ce1800dd28cfa3896dd..ba7bba87baab62845d72a5fad60d60be2e7d3c2c 100644
--- a/app/src/main/res/layout/activity_channel_detail.xml
+++ b/app/src/main/res/layout/activity_channel_detail.xml
@@ -29,7 +29,8 @@
     <android.support.design.widget.AppBarLayout
         android:id="@+id/appBar"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content">
+        android:layout_height="wrap_content"
+        android:theme="@style/AppTheme.AppBarOverlay">
 
         <android.support.v7.widget.Toolbar
             android:id="@+id/toolbar"
@@ -45,65 +46,73 @@
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:orientation="vertical"
-            android:padding="4dp">
+            android:orientation="vertical">
 
-            <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:app="http://schemas.android.com/apk/res-auto"
+            <TextView
+                style="@style/TextAppearance.AppCompat.Button"
                 android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_margin="4dp"
-                app:cardBackgroundColor="?attr/colorBackgroundCard"
-                app:cardUseCompatPadding="true"
-                app:contentPaddingBottom="24dp"
-                app:contentPaddingLeft="16dp"
-                app:contentPaddingRight="16dp"
-                app:contentPaddingTop="24dp">
-
-                <LinearLayout
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:orientation="vertical">
-
-                    <TextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:text="Topic"
-                        android:textAppearance="@style/Base.TextAppearance.AppCompat.Title" />
-
-                    <Space
-                        android:layout_width="match_parent"
-                        android:layout_height="16dp" />
-
-                    <TextView
-                        android:id="@+id/topic"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:text="02-18 04:14:03.854 3960-3988/de.kuschku.quasseldroid_ng W/ResourceType: Failure getting entry for 0x0108035f (t=7 e=863) (error -75)"
-                        android:textAppearance="@style/Base.TextAppearance.AppCompat.Subhead" />
-
-                </LinearLayout>
-
-            </android.support.v7.widget.CardView>
+                android:layout_height="48dp"
+                android:textColor="?attr/colorAccent"
+                android:text="Topic"
+                android:layout_marginLeft="16dp"
+                android:layout_marginRight="16dp"
+                android:gravity="fill_vertical" />
 
             <TextView
-                android:id="@+id/mode"
-                style="@style/TextAppearance.AppCompat.Title"
+                android:id="@+id/topic"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginBottom="8dp"
-                android:layout_marginLeft="8dp"
-                android:layout_marginRight="8dp"
-                android:layout_marginTop="16dp" />
+                android:layout_marginLeft="16dp"
+                android:layout_marginRight="16dp"
+                android:text="No Topic Set"
+                android:textStyle="italic"
+                android:textColor="?attr/colorForegroundSecondary"
+                android:textAppearance="@style/Base.TextAppearance.AppCompat.Subhead" />
+
+            <android.support.v7.widget.AppCompatButton
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="16dp"
+                android:layout_marginRight="16dp"
+                android:id="@+id/edit_topic"
+                android:text="Edit Topic"
+                style="@style/Widget.AppCompat.Button.Colored"
+                android:layout_gravity="right" />
+
+            <View
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:layout_marginTop="16dp"
+                android:background="?attr/material_drawer_divider" />
+
+            <TextView
+                style="@style/TextAppearance.AppCompat.Button"
+                android:layout_width="match_parent"
+                android:layout_height="48dp"
+                android:textColor="?attr/colorAccent"
+                android:text="Channel Modes"
+                android:layout_marginLeft="16dp"
+                android:layout_marginRight="16dp"
+                android:gravity="fill_vertical" />
 
             <LinearLayout
                 android:id="@+id/modes"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:orientation="vertical" />
+                android:orientation="vertical"
+                android:paddingLeft="8dp"
+                android:paddingRight="8dp"
+                android:paddingBottom="8dp" />
 
         </LinearLayout>
 
     </ScrollView>
 
+    <ProgressBar
+        style="?android:attr/progressBarStyleLarge"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/progressBar2"
+        android:layout_gravity="right" />
+
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_channel_mode.xml b/app/src/main/res/layout/widget_channel_mode.xml
index 4ac0dd6baf23c7d56c27b9e52869416568e872ae..c7a2b5363d8cd487fd7f3df670acc7b16f8280ff 100644
--- a/app/src/main/res/layout/widget_channel_mode.xml
+++ b/app/src/main/res/layout/widget_channel_mode.xml
@@ -40,16 +40,22 @@
             android:id="@+id/name"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="Invite Only (+i)"
             android:textAppearance="@style/Base.TextAppearance.AppCompat.Title" />
 
         <TextView
             android:id="@+id/description"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="Members must be invited to join this channel."
             android:textAppearance="@style/Base.TextAppearance.AppCompat.Subhead" />
 
+        <TextView
+            android:id="@+id/value"
+            android:layout_marginTop="8dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textAppearance="@style/Base.TextAppearance.AppCompat.Subhead"
+            android:visibility="gone" />
+
     </LinearLayout>
 
 </android.support.v7.widget.CardView>
diff --git a/app/src/main/res/values/strings_chanmodes.xml b/app/src/main/res/values/strings_chanmodes.xml
index b55b8a2131a6bf18901a822fb48c83442ca2d969..26986d7995c7ae2b3efbd8d031f181d24c7ab1c2 100644
--- a/app/src/main/res/values/strings_chanmodes.xml
+++ b/app/src/main/res/values/strings_chanmodes.xml
@@ -134,4 +134,7 @@
 
     <string name="chanMode_ONLY_ADMIN_NAME">Admin Only</string>
     <string name="chanMode_ONLY_ADMIN_DESCRIPTION">Allow only IRC admins to join the channel.</string>
+
+    <string name="chanMode_FORWARD_NAME">Forward</string>
+    <string name="chanMode_FORWARD_DESCRIPTION">Forward users who can’t join the channel to another channel.</string>
 </resources>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index c5a618699170840f76fa5114b43ae1ac8001b16a..2af2ed3c4942cff454044c7c12f627da9a620298 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -20,8 +20,8 @@
   -->
 
 <resources>
-    <style name="BaseTheme" parent="MaterialDrawerTheme.TranslucentStatus" />
-    <style name="BaseTheme.Light" parent="MaterialDrawerTheme.Light.DarkToolbar.TranslucentStatus" />
+    <style name="BaseTheme" parent="MaterialDrawerTheme" />
+    <style name="BaseTheme.Light" parent="MaterialDrawerTheme.Light.DarkToolbar" />
 
     <!-- Base application theme. -->
     <style name="AppTheme" parent="BaseTheme">