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 4fa6f80d735634b58205afeec33e896a5b64cbb0..74f910c850e381db04d093c196574ccca6605504 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
@@ -163,7 +163,7 @@ public class BacklogManager extends ABacklogManager<BacklogManager> {
         openBuffer = bufferId;
         if (bufferId != -1)
             client.bufferSyncer().requestMarkBufferAsRead(bufferId);
-        provider.sendEvent(new BufferChangeEvent());
+        provider.event.postSticky(new BufferChangeEvent());
     }
 
     @Override
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 a6d46c706294111c375d15c184345bce97e444a8..7c745d83116069d4dfed5e9332c9a9482102fdf0 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
@@ -22,6 +22,7 @@
 package de.kuschku.quasseldroid_ng.ui.chat;
 
 import android.os.Bundle;
+import android.support.annotation.IntRange;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentTransaction;
@@ -33,18 +34,28 @@ import android.widget.FrameLayout;
 import com.mikepenz.materialdrawer.AccountHeader;
 import com.mikepenz.materialdrawer.AccountHeaderBuilder;
 import com.mikepenz.materialdrawer.Drawer;
+import com.mikepenz.materialdrawer.model.ProfileDrawerItem;
+
+import java.util.List;
 
 import butterknife.Bind;
 import butterknife.ButterKnife;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.events.ConnectionChangeEvent;
 import de.kuschku.libquassel.events.GeneralErrorEvent;
+import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig;
+import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewManager;
 import de.kuschku.quasseldroid_ng.R;
 import de.kuschku.quasseldroid_ng.service.ClientBackgroundThread;
+import de.kuschku.quasseldroid_ng.ui.chat.drawer.BufferItem;
+import de.kuschku.quasseldroid_ng.ui.chat.drawer.BufferViewConfigItem;
+import de.kuschku.quasseldroid_ng.ui.chat.drawer.NetworkItem;
 import de.kuschku.quasseldroid_ng.ui.chat.fragment.ChatFragment;
 import de.kuschku.quasseldroid_ng.ui.chat.fragment.LoadingFragment;
 import de.kuschku.quasseldroid_ng.ui.chat.util.ActivityImplFactory;
 import de.kuschku.quasseldroid_ng.ui.chat.util.ILayoutHelper;
 import de.kuschku.quasseldroid_ng.ui.chat.util.Status;
+import de.kuschku.quasseldroid_ng.ui.theme.AppTheme;
 import de.kuschku.quasseldroid_ng.util.BoundActivity;
 import de.kuschku.quasseldroid_ng.util.accounts.AccountManager;
 
@@ -89,6 +100,8 @@ public class MainActivity extends BoundActivity {
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
+        new Settings(this).theme.set(AppTheme.QUASSEL_LIGHT.name());
+
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         ButterKnife.bind(this);
@@ -96,6 +109,17 @@ public class MainActivity extends BoundActivity {
         layoutHelper = ActivityImplFactory.of(getResources().getBoolean(R.bool.isTablet), this);
         accountHeader = buildAccountHeader();
         drawerLeft = layoutHelper.buildDrawer(savedInstanceState, accountHeader, toolbar);
+        drawerLeft.setOnDrawerItemClickListener((view, position, drawerItem) -> {
+            if (drawerItem instanceof NetworkItem) {
+                drawerLeft.getAdapter().toggleExpandable(position);
+                return true;
+            } else if (drawerItem instanceof BufferItem) {
+                int id = ((BufferItem) drawerItem).getBuffer().getInfo().id();
+                context.client().backlogManager().open(id);
+                return false;
+            }
+            return true;
+        });
 
         replaceFragment(new LoadingFragment());
 
@@ -150,18 +174,21 @@ public class MainActivity extends BoundActivity {
                 .withCompactStyle(true)
                 .withHeaderBackground(R.drawable.bg1)
                 .withProfileImagesVisible(false)
+                .withOnAccountHeaderListener((view, profile, current) -> {
+                    selectBufferViewConfig((int) profile.getIdentifier());
+                    return true;
+                })
                 .build();
     }
 
     public void onEventMainThread(ConnectionChangeEvent event) {
-        if (event.status == ConnectionChangeEvent.Status.CONNECTED) {
-            replaceFragment(new ChatFragment());
-        }
+        onConnectionChange(event.status);
     }
 
     public void onConnectionChange(ConnectionChangeEvent.Status status) {
         if (status == ConnectionChangeEvent.Status.CONNECTED) {
             replaceFragment(new ChatFragment());
+            updateBufferViewConfigs();
         }
     }
 
@@ -169,6 +196,44 @@ public class MainActivity extends BoundActivity {
 
     }
 
+    private void selectBufferViewConfig(@IntRange(from = -1) int bufferViewConfigId) {
+        assertNotNull(drawerLeft);
+        assertNotNull(accountHeader);
+        Client client = context.client();
+        assertNotNull(client);
+
+        status.bufferViewConfigId = bufferViewConfigId;
+        accountHeader.setActiveProfile(bufferViewConfigId, false);
+
+        if (bufferViewConfigId == -1) {
+            drawerLeft.removeAllItems();
+        } else {
+            drawerLeft.removeAllItems();
+            QBufferViewManager bufferViewManager = client.bufferViewManager();
+            assertNotNull(bufferViewManager);
+            QBufferViewConfig viewConfig = bufferViewManager.bufferViewConfig(bufferViewConfigId);
+            assertNotNull(viewConfig);
+
+            new BufferViewConfigItem(drawerLeft, viewConfig, context);
+        }
+    }
+
+    private void updateBufferViewConfigs() {
+        assertNotNull(context.client().bufferViewManager());
+        List<QBufferViewConfig> bufferViews = context.client().bufferViewManager().bufferViewConfigs();
+        accountHeader.clear();
+        for (QBufferViewConfig viewConfig : bufferViews) {
+            if (viewConfig != null) {
+                accountHeader.addProfiles(
+                        new ProfileDrawerItem()
+                                .withName(viewConfig.bufferViewName())
+                                .withIdentifier(viewConfig.bufferViewId())
+                );
+            }
+        }
+        accountHeader.setActiveProfile(status.bufferViewConfigId, true);
+    }
+
     @Override
     protected void onConnectToThread(@Nullable ClientBackgroundThread thread) {
         super.onConnectToThread(thread);
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 3abb53736ea96f60cb88cc9f8ce35a7240c9a32e..da9fbbd63e47ef428f9aafad76c0d32e34297461 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
@@ -41,36 +41,32 @@ import de.kuschku.libquassel.events.BufferChangeEvent;
 import de.kuschku.libquassel.message.Message;
 import de.kuschku.libquassel.syncables.types.interfaces.QBacklogManager;
 import de.kuschku.quasseldroid_ng.R;
-import de.kuschku.quasseldroid_ng.util.BoundFragment;
 import de.kuschku.quasseldroid_ng.ui.chat.chatview.MessageAdapter;
 import de.kuschku.quasseldroid_ng.ui.chat.util.SlidingPanelHandler;
+import de.kuschku.quasseldroid_ng.util.BoundFragment;
 import de.kuschku.util.observables.AutoScroller;
 import de.kuschku.util.observables.lists.ObservableComparableSortedList;
 
 import static de.kuschku.util.AndroidAssert.assertNotNull;
 
 public class ChatFragment extends BoundFragment {
-    private SlidingPanelHandler panelHandler;
-    private MessageAdapter messageAdapter;
-
     /**
      * The list containing the messages to be displayed
      */
     @Bind(R.id.messages)
     RecyclerView messages;
-
     @Bind(R.id.swipe_view)
     SwipeRefreshLayout swipeView;
-
     @Bind(R.id.sliding_layout)
     SlidingUpPanelLayout sliderMain;
+    private MessageAdapter messageAdapter;
 
     @Nullable
     @Override
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.fragment_chat, container, false);
-        panelHandler = new SlidingPanelHandler(getActivity(), (SlidingUpPanelLayout) view, context);
         ButterKnife.bind(this, view);
+        new SlidingPanelHandler(getActivity(), sliderMain, context);
 
         assertNotNull(messages);
 
@@ -81,6 +77,13 @@ public class ChatFragment extends BoundFragment {
 
         swipeView.setColorSchemeColors(context.themeUtil().res.colorPrimary);
         swipeView.setEnabled(false);
+        swipeView.setOnRefreshListener(() -> {
+            Client client = context.client();
+            assertNotNull(client);
+            QBacklogManager<? extends QBacklogManager> backlogManager = client.backlogManager();
+            assertNotNull(backlogManager);
+            backlogManager.requestMoreBacklog(client.backlogManager().open(), 20);
+        });
 
         return view;
     }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/SlidingPanelHandler.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/SlidingPanelHandler.java
index 3f02e84a2f00ebffea4d6b1af393310b66fd5976..66f920c640b95da472290b51736f48e3c360b5c5 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/SlidingPanelHandler.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/SlidingPanelHandler.java
@@ -29,6 +29,7 @@ import android.support.v7.widget.DefaultItemAnimator;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.Toolbar;
+import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
@@ -42,6 +43,7 @@ import com.sothree.slidinguppanel.SlidingUpPanelLayout;
 
 import butterknife.Bind;
 import butterknife.ButterKnife;
+import de.kuschku.libquassel.localtypes.buffers.Buffer;
 import de.kuschku.quasseldroid_ng.R;
 import de.kuschku.quasseldroid_ng.ui.editor.AdvancedEditor;
 import de.kuschku.quasseldroid_ng.ui.theme.AppContext;
@@ -176,6 +178,31 @@ public class SlidingPanelHandler {
             }
         });
         setChatlineExpanded(slidingLayout.getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED);
+
+        send.setOnClickListener(v -> sendInput());
+        chatline.setOnKeyListener((v, keyCode, event) -> {
+            if (event.getAction() == KeyEvent.ACTION_DOWN && (keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_NUMPAD_ENTER)) {
+                sendInput();
+                return true;
+            } else {
+                return false;
+            }
+        });
+    }
+
+    private void sendInput() {
+        if (context.client() == null) return;
+
+        int bufferId = context.client().backlogManager().open();
+
+        if (bufferId >= 0) {
+            Buffer buffer = context.client().bufferManager().buffer(bufferId);
+            assertNotNull(buffer);
+
+            String text = editor.toFormatString();
+            context.client().sendInput(buffer.getInfo(), text);
+            chatline.setText("");
+        }
     }
 
     private void setupHistoryFakeData() {
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/Status.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/Status.java
index 15eb3f9b3e553c3c3e7ec65229e0d04e758fbcd1..a854aa32173ec9f530b5f0109a0dc749630307ca 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/Status.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/util/Status.java
@@ -26,5 +26,5 @@ import de.kuschku.util.instancestateutil.Store;
 
 public class Status extends Storable {
     @Store
-    int bufferViewConfigId = -1;
+    public int bufferViewConfigId = -1;
 }
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index ee979f7c7e542b6278c6fc406987368e0e5db7b2..40c4bcd4778b16efdb2591a3e3546e8c844e9e5e 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -268,7 +268,7 @@
 
         <item name="colorBackground">#002B36</item>
         <item name="colorBackgroundHighlight">#268bd2</item>
-        <item name="colorBackgroundSecondary">#073642</item>
+        <item name="colorBackgroundSecondary">#002B36</item>
         <item name="colorBackgroundCard">#073642</item>
 
         <item name="colorTintActivity">#88cc33</item>