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 b60656591722712ff3a505a742268615761d3830..a7fa4797f8b23f083b3889fd3103e3ba4bcd30eb 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
@@ -26,10 +26,13 @@ import android.support.annotation.IntRange;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentTransaction;
+import android.support.v7.widget.AppCompatEditText;
 import android.support.v7.widget.Toolbar;
 import android.view.Menu;
 import android.view.MenuItem;
+import android.view.View;
 import android.widget.FrameLayout;
+import android.widget.Toast;
 
 import com.afollestad.materialdialogs.MaterialDialog;
 import com.mikepenz.materialdrawer.AccountHeader;
@@ -46,6 +49,7 @@ 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.events.LoginRequireEvent;
 import de.kuschku.libquassel.localtypes.BacklogFilter;
 import de.kuschku.libquassel.message.Message;
 import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig;
@@ -61,6 +65,7 @@ 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.util.BoundActivity;
+import de.kuschku.quasseldroid_ng.util.accounts.Account;
 import de.kuschku.quasseldroid_ng.util.accounts.AccountManager;
 
 import static de.kuschku.util.AndroidAssert.assertNotNull;
@@ -205,11 +210,13 @@ public class MainActivity extends BoundActivity {
         if (status == ConnectionChangeEvent.Status.CONNECTED) {
             replaceFragment(new ChatFragment());
             updateBufferViewConfigs();
+        } else if (status == ConnectionChangeEvent.Status.DISCONNECTED) {
+            finish();
         }
     }
 
     public void onEventMainThread(GeneralErrorEvent event) {
-
+        Toast.makeText(this, event.exception.getClass().getSimpleName() + ": " + event.debugInfo, Toast.LENGTH_LONG).show();
     }
 
     private void selectBufferViewConfig(@IntRange(from = -1) int bufferViewConfigId) {
@@ -316,4 +323,28 @@ public class MainActivity extends BoundActivity {
                     .show();
         }
     }
+
+    public void onEventMainThread(LoginRequireEvent event) {
+        if (event.failedLast) {
+            new MaterialDialog.Builder(this)
+                    .title(R.string.labelLogin)
+                    .customView(R.layout.dialog_login, false)
+                    .onPositive((dialog1, which) -> {
+                        View parent = dialog1.getCustomView();
+                        assertNotNull(parent);
+                        AppCompatEditText usernameField = (AppCompatEditText) parent.findViewById(R.id.username);
+                        AppCompatEditText passwordField = (AppCompatEditText) parent.findViewById(R.id.password);
+                        String username = usernameField.getText().toString();
+                        String password = passwordField.getText().toString();
+
+                        Account account = manager.account(context.settings().lastAccount.get());
+                        manager.update(account.withLoginData(username, password));
+                    })
+                    .cancelListener(dialog1 -> finish())
+                    .negativeColor(context.themeUtil().res.colorForeground)
+                    .positiveText(R.string.labelLogin)
+                    .negativeText(R.string.labelCancel)
+                    .build().show();
+        }
+    }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java
index 5aebb0f42523df3ed06a6148f65e285cf4bfdd06..fd7ecb4b80a30ae162e7f3e30ef54772d5e3cee8 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/MessageAdapter.java
@@ -80,7 +80,7 @@ public class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> {
 
     @Override
     public void onBindViewHolder(@NonNull MessageViewHolder holder, int position) {
-        Message msg = messageList.get(position);
+        Message msg = getItem(position);
         assertNotNull(msg);
 
         renderer.onBind(holder, msg);
@@ -90,4 +90,8 @@ public class MessageAdapter extends RecyclerView.Adapter<MessageViewHolder> {
     public int getItemCount() {
         return messageList.size();
     }
+
+    public Message getItem(int position) {
+        return messageList.get(position);
+    }
 }
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 da9fbbd63e47ef428f9aafad76c0d32e34297461..f51e95b476d822143786e78db356a075baaa24d6 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java
@@ -27,6 +27,7 @@ import android.support.v4.widget.SwipeRefreshLayout;
 import android.support.v7.widget.DefaultItemAnimator;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -59,7 +60,9 @@ public class ChatFragment extends BoundFragment {
     SwipeRefreshLayout swipeView;
     @Bind(R.id.sliding_layout)
     SlidingUpPanelLayout sliderMain;
+
     private MessageAdapter messageAdapter;
+    private LinearLayoutManager layoutManager;
 
     @Nullable
     @Override
@@ -71,7 +74,8 @@ public class ChatFragment extends BoundFragment {
         assertNotNull(messages);
 
         messages.setItemAnimator(new DefaultItemAnimator());
-        messages.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, true));
+        layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, true);
+        messages.setLayoutManager(layoutManager);
         messageAdapter = new MessageAdapter(getActivity(), context, new AutoScroller(messages));
         messages.setAdapter(messageAdapter);
 
@@ -89,6 +93,8 @@ public class ChatFragment extends BoundFragment {
     }
 
     public void onEventMainThread(BufferChangeEvent event) {
+        setMarkerline();
+
         Client client = context.client();
         if (client != null) {
             QBacklogManager<? extends QBacklogManager> backlogManager = client.backlogManager();
@@ -96,11 +102,43 @@ public class ChatFragment extends BoundFragment {
             ObservableComparableSortedList<Message> messageList = backlogManager.filtered(id);
             messageAdapter.setMessageList(messageList);
             swipeView.setEnabled(id != -1);
+
+            int markerLine = client.bufferSyncer().markerLine(id);
+            for (int i = 0; i < messageList.size(); i++) {
+                if (messageList.get(i).messageId == markerLine) {
+                    Log.d("DEBUG", "Load: " + markerLine + ":" + i);
+                    messages.scrollToPosition(i);
+                    break;
+                }
+            }
         } else {
             swipeView.setEnabled(false);
         }
     }
 
+    @Override
+    public void onPause() {
+        setMarkerline();
+        super.onPause();
+    }
+
+    private void setMarkerline() {
+        Client client = context.client();
+        if (client == null) return;
+
+        int buffer = client.backlogManager().open();
+        if (buffer == -1) return;
+
+        int messageposition = layoutManager.findFirstCompletelyVisibleItemPosition();
+        if (messageposition == -1) return;
+
+        Message message = messageAdapter.getItem(messageposition);
+        if (message == null) return;
+
+        client.bufferSyncer().requestSetMarkerLine(buffer, message.messageId);
+        Log.d("DEBUG", "Store: " + message.messageId + ":" + messageposition);
+    }
+
     public void onEventMainThread(BacklogReceivedEvent event) {
         Client client = context.client();
         if (client != null && client.backlogManager().open() == event.bufferId) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/Account.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/Account.java
index 85601c9b8053d64f8f2345c8e0f4c8eb2c40ad86..2c202b4b557adb624e0fd216e57e55a36062117b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/Account.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/Account.java
@@ -48,4 +48,16 @@ public class Account {
     public ServerAddress toAddress() {
         return new ServerAddress(host, port);
     }
+
+    public Account withLoginData(String user, String pass) {
+        return new Account(id, name, host, port, user, pass);
+    }
+
+    public Account withServerData(String host, int port) {
+        return new Account(id, name, host, port, user, pass);
+    }
+
+    public Account withName(String name) {
+        return new Account(id, name, host, port, user, pass);
+    }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManager.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManager.java
index 127359db667a51fb9f05172454dc89d8ad9804d2..0c1bd45d44877c684fc0155443af91ba0508eb5c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManager.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManager.java
@@ -41,6 +41,10 @@ public class AccountManager {
         helper.addAccount(account);
     }
 
+    public void update(Account account) {
+        helper.updateAccount(account);
+    }
+
     public void remove(String id) {
         remove(UUID.fromString(id));
     }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManagerHelper.java b/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManagerHelper.java
index 6ffc8f7b52ebf5f4850964e03ebd0c6cebfc0907..f2581ae288378851b41d6b97576f8142203d6d4c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManagerHelper.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManagerHelper.java
@@ -29,9 +29,7 @@ import android.database.sqlite.SQLiteStatement;
 import android.support.annotation.NonNull;
 import android.util.Log;
 
-import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 import java.util.UUID;
 
@@ -104,6 +102,11 @@ public class AccountManagerHelper extends SQLiteOpenHelper {
         return statement.executeInsert() != -1;
     }
 
+    public boolean updateAccount(Account account) {
+        removeAccount(account.id);
+        return addAccount(account);
+    }
+
     public boolean removeAccount(UUID id) {
         return removeAccount(id.toString());
     }
diff --git a/app/src/main/res/layout/widget_core_account.xml b/app/src/main/res/layout/widget_core_account.xml
index 1705a7400a23a8f5db92423eb244c713b2e146d5..b9d3a5d6029b8441065bac3b3282cb553afe6737 100644
--- a/app/src/main/res/layout/widget_core_account.xml
+++ b/app/src/main/res/layout/widget_core_account.xml
@@ -41,10 +41,10 @@
         android:paddingTop="@dimen/material_drawer_item_profile_icon_padding">
 
         <android.support.v7.widget.AppCompatRadioButton
+            android:id="@+id/account_select"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_gravity="center_vertical"
-            android:id="@+id/account_select" />
+            android:layout_gravity="center_vertical" />
 
     </LinearLayout>
 
@@ -83,4 +83,11 @@
             android:textSize="@dimen/material_drawer_item_profile_description"
             tools:text="kuschku on kuschku.de" />
     </LinearLayout>
+
+    <!--
+    <ImageButton
+        android:layout_width="48dp"
+        android:layout_height="48dp"
+        android:src=""/>
+    -->
 </LinearLayout>