diff --git a/app/src/main/java/de/kuschku/libquassel/BusProvider.java b/app/src/main/java/de/kuschku/libquassel/BusProvider.java
index 47fc9be9e54441440487f6c4482df8ef6b32cd68..f4306182311a22993ee9871974e4f31cef6b9a11 100644
--- a/app/src/main/java/de/kuschku/libquassel/BusProvider.java
+++ b/app/src/main/java/de/kuschku/libquassel/BusProvider.java
@@ -28,7 +28,9 @@ import java.util.UUID;
 
 import de.greenrobot.event.EventBus;
 import de.greenrobot.event.NoSubscriberEvent;
+import de.kuschku.libquassel.events.BacklogReceivedEvent;
 import de.kuschku.libquassel.events.GeneralErrorEvent;
+import de.kuschku.libquassel.events.LagChangedEvent;
 
 public class BusProvider {
     @NonNull
@@ -89,7 +91,8 @@ public class BusProvider {
         }
 
         public void onEvent(NoSubscriberEvent event) {
-            Log.e(identifier, String.valueOf(event));
+            if (!(event.originalEvent instanceof LagChangedEvent) && !(event.originalEvent instanceof BacklogReceivedEvent))
+                Log.e(identifier, String.valueOf(event));
         }
     }
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/CoreConnection.java b/app/src/main/java/de/kuschku/libquassel/CoreConnection.java
index 291e2a4d91e66f02b23728e60e682e105e5dee67..dbf6a154d27a77a00aead03ec73ace28813c3c43 100644
--- a/app/src/main/java/de/kuschku/libquassel/CoreConnection.java
+++ b/app/src/main/java/de/kuschku/libquassel/CoreConnection.java
@@ -54,7 +54,7 @@ import de.kuschku.libquassel.protocols.LegacyPeer;
 import de.kuschku.libquassel.protocols.RemotePeer;
 import de.kuschku.libquassel.ssl.CertificateManager;
 import de.kuschku.libquassel.ssl.UnknownCertificateException;
-import de.kuschku.util.ServerAddress;
+import de.kuschku.util.accounts.ServerAddress;
 import de.kuschku.util.niohelpers.WrappedChannel;
 
 import static de.kuschku.libquassel.primitives.QMetaType.Type.UInt;
diff --git a/app/src/main/java/de/kuschku/libquassel/QuasselClient.java b/app/src/main/java/de/kuschku/libquassel/QuasselClient.java
index 31be8d48ae9c5fc2365da6be8fb293bc5bda09ea..4bb6059b72be5ed2dd5ae0180d35bd7d3eed0a5a 100644
--- a/app/src/main/java/de/kuschku/libquassel/QuasselClient.java
+++ b/app/src/main/java/de/kuschku/libquassel/QuasselClient.java
@@ -27,7 +27,7 @@ import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.client.ClientData;
 import de.kuschku.libquassel.localtypes.backlogstorage.BacklogStorage;
 import de.kuschku.libquassel.ssl.CertificateManager;
-import de.kuschku.util.ServerAddress;
+import de.kuschku.util.accounts.ServerAddress;
 
 import static de.kuschku.util.AndroidAssert.assertNotNull;
 
diff --git a/app/src/main/java/de/kuschku/libquassel/events/ConnectionChangeEvent.java b/app/src/main/java/de/kuschku/libquassel/events/ConnectionChangeEvent.java
index 787c005aff339a6f07abd20561822a7b16120d9a..7e556380f069f948ecf5f05058debcb75f7a84e2 100644
--- a/app/src/main/java/de/kuschku/libquassel/events/ConnectionChangeEvent.java
+++ b/app/src/main/java/de/kuschku/libquassel/events/ConnectionChangeEvent.java
@@ -49,10 +49,10 @@ public class ConnectionChangeEvent {
     }
 
     public enum Status {
+        DISCONNECTED,
         HANDSHAKE,
         INITIALIZING_DATA,
         LOADING_BACKLOG,
-        CONNECTED,
-        DISCONNECTED
+        CONNECTED
     }
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/events/UnknownCertificateEvent.java b/app/src/main/java/de/kuschku/libquassel/events/UnknownCertificateEvent.java
index 423760553bb9be84e37c2a3a87b0a0c984e9c928..04d9b2bc68acf5c574097d9eb7b95ad8f3ce6c9f 100644
--- a/app/src/main/java/de/kuschku/libquassel/events/UnknownCertificateEvent.java
+++ b/app/src/main/java/de/kuschku/libquassel/events/UnknownCertificateEvent.java
@@ -26,7 +26,7 @@ import android.support.annotation.NonNull;
 import java.security.cert.X509Certificate;
 
 import de.kuschku.libquassel.ssl.UnknownCertificateException;
-import de.kuschku.util.ServerAddress;
+import de.kuschku.util.accounts.ServerAddress;
 
 public class UnknownCertificateEvent {
     public final X509Certificate certificate;
diff --git a/app/src/main/java/de/kuschku/libquassel/ssl/CertificateManager.java b/app/src/main/java/de/kuschku/libquassel/ssl/CertificateManager.java
index 12bac3522fdb6deb51213b9a37751191c3e2a432..08d24dfe1e8ce48103876d8b188b5e4150de9647 100644
--- a/app/src/main/java/de/kuschku/libquassel/ssl/CertificateManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/ssl/CertificateManager.java
@@ -28,7 +28,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
-import de.kuschku.util.ServerAddress;
+import de.kuschku.util.accounts.ServerAddress;
 
 public interface CertificateManager {
     boolean isTrusted(X509Certificate certificate, ServerAddress core);
diff --git a/app/src/main/java/de/kuschku/libquassel/ssl/QuasselTrustManager.java b/app/src/main/java/de/kuschku/libquassel/ssl/QuasselTrustManager.java
index 7cb601ff4d1c2677cf38b72183d3b0b86dddd7e2..461d2c5ebcf26f9ecb5202e11b4278de6ebd7abf 100644
--- a/app/src/main/java/de/kuschku/libquassel/ssl/QuasselTrustManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/ssl/QuasselTrustManager.java
@@ -33,7 +33,7 @@ import javax.net.ssl.TrustManager;
 import javax.net.ssl.TrustManagerFactory;
 import javax.net.ssl.X509TrustManager;
 
-import de.kuschku.util.ServerAddress;
+import de.kuschku.util.accounts.ServerAddress;
 import de.kuschku.util.certificates.CertificateUtils;
 
 public class QuasselTrustManager implements X509TrustManager {
diff --git a/app/src/main/java/de/kuschku/libquassel/ssl/UnknownCertificateException.java b/app/src/main/java/de/kuschku/libquassel/ssl/UnknownCertificateException.java
index de46dcce803739e2fab32f3702938468262c3737..0ef702f9ba25f0f898efce991b97db2aa10dd170 100644
--- a/app/src/main/java/de/kuschku/libquassel/ssl/UnknownCertificateException.java
+++ b/app/src/main/java/de/kuschku/libquassel/ssl/UnknownCertificateException.java
@@ -24,7 +24,7 @@ package de.kuschku.libquassel.ssl;
 import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
 
-import de.kuschku.util.ServerAddress;
+import de.kuschku.util.accounts.ServerAddress;
 
 public class UnknownCertificateException extends CertificateException {
     public final X509Certificate certificate;
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/service/ClientBackgroundThread.java b/app/src/main/java/de/kuschku/quasseldroid_ng/service/ClientBackgroundThread.java
index 3c31c7f8394fc401e4ae4006332ffd3cd6985637..7beba23f47c1f2ebab4531de9af826172a9f9f5e 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/service/ClientBackgroundThread.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/service/ClientBackgroundThread.java
@@ -30,15 +30,16 @@ import de.kuschku.libquassel.BusProvider;
 import de.kuschku.libquassel.QuasselClient;
 import de.kuschku.libquassel.client.ClientData;
 import de.kuschku.libquassel.client.FeatureFlags;
+import de.kuschku.libquassel.events.ConnectionChangeEvent;
 import de.kuschku.libquassel.events.GeneralErrorEvent;
 import de.kuschku.libquassel.events.LoginRequireEvent;
 import de.kuschku.libquassel.localtypes.backlogstorage.MemoryBacklogStorage;
 import de.kuschku.libquassel.protocols.RemotePeer;
 import de.kuschku.quasseldroid_ng.ui.chat.Settings;
-import de.kuschku.quasseldroid_ng.util.accounts.Account;
-import de.kuschku.quasseldroid_ng.util.accounts.AccountManager;
 import de.kuschku.util.CompatibilityUtils;
-import de.kuschku.util.ServerAddress;
+import de.kuschku.util.accounts.Account;
+import de.kuschku.util.accounts.AccountManager;
+import de.kuschku.util.accounts.ServerAddress;
 import de.kuschku.util.certificates.SQLiteCertificateManager;
 
 public class ClientBackgroundThread implements Runnable {
@@ -81,6 +82,7 @@ public class ClientBackgroundThread implements Runnable {
             client.connection.open(CompatibilityUtils.deviceSupportsKeepAlive());
         } catch (IOException e) {
             client.provider.sendEvent(new GeneralErrorEvent(e));
+            client.client.setConnectionStatus(ConnectionChangeEvent.Status.DISCONNECTED);
         }
     }
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.java b/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.java
index 4e2df1296f868cf50dee060d7514ba1577d561b3..1ba3d35b23bd4fa0e95328950b3574d05da912f6 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/service/QuasselService.java
@@ -32,7 +32,7 @@ import java.util.HashSet;
 import java.util.Set;
 
 import de.kuschku.libquassel.BusProvider;
-import de.kuschku.util.ServerAddress;
+import de.kuschku.util.accounts.ServerAddress;
 import de.kuschku.util.backports.Consumer;
 
 public class QuasselService extends Service {
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 a7fa4797f8b23f083b3889fd3103e3ba4bcd30eb..a423cbd9399d0b487b07bc3deb5091de7b631a20 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
@@ -23,6 +23,7 @@ package de.kuschku.quasseldroid_ng.ui.chat;
 
 import android.os.Bundle;
 import android.support.annotation.IntRange;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentTransaction;
@@ -50,6 +51,7 @@ 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.events.UnknownCertificateEvent;
 import de.kuschku.libquassel.localtypes.BacklogFilter;
 import de.kuschku.libquassel.message.Message;
 import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig;
@@ -64,9 +66,11 @@ 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.util.BoundActivity;
-import de.kuschku.quasseldroid_ng.util.accounts.Account;
-import de.kuschku.quasseldroid_ng.util.accounts.AccountManager;
+import de.kuschku.util.accounts.Account;
+import de.kuschku.util.accounts.AccountManager;
+import de.kuschku.util.certificates.CertificateUtils;
+import de.kuschku.util.certificates.SQLiteCertificateManager;
+import de.kuschku.util.servicebound.BoundActivity;
 
 import static de.kuschku.util.AndroidAssert.assertNotNull;
 
@@ -180,15 +184,19 @@ public class MainActivity extends BoundActivity {
                 displayFilterDialog();
                 return true;
             case R.id.action_reauth:
-                context.settings().lastAccount.set("");
-                stopConnection();
-                finish();
+                reauth();
                 return true;
             default:
                 return super.onOptionsItemSelected(item);
         }
     }
 
+    private void reauth() {
+        context.settings().lastAccount.set("");
+        stopConnection();
+        finish();
+    }
+
     private AccountHeader buildAccountHeader() {
         return new AccountHeaderBuilder()
                 .withActivity(this)
@@ -211,12 +219,13 @@ public class MainActivity extends BoundActivity {
             replaceFragment(new ChatFragment());
             updateBufferViewConfigs();
         } else if (status == ConnectionChangeEvent.Status.DISCONNECTED) {
-            finish();
+            Toast.makeText(getApplication(), context.themeUtil().translations.statusDisconnected, Toast.LENGTH_LONG).show();
+            reauth();
         }
     }
 
     public void onEventMainThread(GeneralErrorEvent event) {
-        Toast.makeText(this, event.exception.getClass().getSimpleName() + ": " + event.debugInfo, Toast.LENGTH_LONG).show();
+        Toast.makeText(getApplication(), event.exception.getClass().getSimpleName() + ": " + event.debugInfo, Toast.LENGTH_LONG).show();
     }
 
     private void selectBufferViewConfig(@IntRange(from = -1) int bufferViewConfigId) {
@@ -319,11 +328,26 @@ public class MainActivity extends BoundActivity {
                             }
                         backlogFilter.setFilters(filters);
                     })
+                    .negativeColor(context.themeUtil().res.colorForeground)
                     .build()
                     .show();
         }
     }
 
+    public void onEventMainThread(@NonNull UnknownCertificateEvent event) {
+        new MaterialDialog.Builder(this)
+                .content(context.themeUtil().translations.warningCertificate + "\n" + CertificateUtils.certificateToFingerprint(event.certificate, ""))
+                .title("Unknown Certificate")
+                .onPositive((dialog, which) -> {
+                    new SQLiteCertificateManager(this).addCertificate(event.certificate, event.address);
+                })
+                .negativeColor(context.themeUtil().res.colorForeground)
+                .positiveText("Yes")
+                .negativeText("No")
+                .build()
+                .show();
+    }
+
     public void onEventMainThread(LoginRequireEvent event) {
         if (event.failedLast) {
             new MaterialDialog.Builder(this)
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/Settings.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/Settings.java
index 27d9b66acab76489639bdb61558a05d4d6c6625b..304d2a760ae91bc378cc361b45acde8f7db85d22 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/Settings.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/Settings.java
@@ -24,10 +24,10 @@ package de.kuschku.quasseldroid_ng.ui.chat;
 import android.content.Context;
 import android.content.SharedPreferences;
 
-import de.kuschku.quasseldroid_ng.util.preferences.BooleanPreference;
-import de.kuschku.quasseldroid_ng.util.preferences.IntPreference;
-import de.kuschku.quasseldroid_ng.util.preferences.StringPreference;
 import de.kuschku.util.backports.Objects;
+import de.kuschku.util.preferences.BooleanPreference;
+import de.kuschku.util.preferences.IntPreference;
+import de.kuschku.util.preferences.StringPreference;
 
 public class Settings {
     public final StringPreference lastAccount;
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 f51e95b476d822143786e78db356a075baaa24d6..54baafec773998d6cef7246c4f78cfc53533173d 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
@@ -44,9 +44,9 @@ import de.kuschku.libquassel.syncables.types.interfaces.QBacklogManager;
 import de.kuschku.quasseldroid_ng.R;
 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 de.kuschku.util.servicebound.BoundFragment;
 
 import static de.kuschku.util.AndroidAssert.assertNotNull;
 
@@ -103,12 +103,14 @@ public class ChatFragment extends BoundFragment {
             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;
+            // Load markerline
+            if (client.bufferSyncer() != null) {
+                int markerLine = client.bufferSyncer().markerLine(id);
+                for (int i = 0; i < messageList.size(); i++) {
+                    if (messageList.get(i).messageId == markerLine) {
+                        messages.scrollToPosition(i);
+                        break;
+                    }
                 }
             }
         } else {
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/LoadingFragment.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/LoadingFragment.java
index d88b873c305293e3f380e83fcfa418ee61cfe32e..8d106bf601ad7140633e76b0b7a7ff6088e12379 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/LoadingFragment.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/LoadingFragment.java
@@ -23,27 +23,21 @@ package de.kuschku.quasseldroid_ng.ui.chat.fragment;
 
 import android.os.Bundle;
 import android.support.annotation.Nullable;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
+import java.util.Locale;
 
 import butterknife.Bind;
 import butterknife.ButterKnife;
 import de.kuschku.libquassel.events.BacklogInitEvent;
 import de.kuschku.libquassel.events.ConnectionChangeEvent;
 import de.kuschku.libquassel.events.InitEvent;
-import de.kuschku.libquassel.primitives.types.BufferInfo;
 import de.kuschku.quasseldroid_ng.R;
-import de.kuschku.quasseldroid_ng.util.BoundFragment;
-
-import static de.kuschku.util.AndroidAssert.assertNotNull;
+import de.kuschku.util.servicebound.BoundFragment;
 
 public class LoadingFragment extends BoundFragment {
     @Bind(R.id.progressBar)
@@ -62,17 +56,21 @@ public class LoadingFragment extends BoundFragment {
         ButterKnife.bind(this, view);
 
 
-        label.setText("Connecting");
-        count.setText("");
+        label.setText(context.themeUtil().translations.statusConnecting);
+        showProgressState(1);
 
         return view;
     }
 
+    public void showProgressState(int position) {
+        count.setText(String.format(Locale.US, "%d/%d", position, 5));
+    }
+
     public void onEventMainThread(ConnectionChangeEvent event) {
         progressBar.setIndeterminate(true);
 
-        label.setText(event.status.name());
-        count.setText("");
+        label.setText(context.themeUtil().statusName(event.status));
+        showProgressState(event.status.ordinal() + 1);
     }
 
     public void onEventMainThread(InitEvent event) {
@@ -81,8 +79,7 @@ public class LoadingFragment extends BoundFragment {
             progressBar.setMax(event.max);
             progressBar.setProgress(event.loaded);
 
-            label.setText(event.getClass().getSimpleName());
-            count.setText(String.format("%d/%d", event.loaded, event.max));
+            label.setText(context.themeUtil().translations.statusInitData);
         }
     }
 
@@ -92,8 +89,7 @@ public class LoadingFragment extends BoundFragment {
             progressBar.setMax(event.max);
             progressBar.setProgress(event.loaded);
 
-            label.setText(event.getClass().getSimpleName());
-            count.setText(String.format("%d/%d", event.loaded, event.max));
+            label.setText(context.themeUtil().translations.statusBacklog);
         }
     }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountItem.java
index 2be3d7ecfa55649e0b8ee514031fcb1dc63cb0b6..9e26fdac6d18086525f724d975fe61ae65b35551 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountItem.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountItem.java
@@ -24,6 +24,7 @@ package de.kuschku.quasseldroid_ng.ui.setup;
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.support.annotation.ColorInt;
+import android.support.v7.widget.AppCompatImageButton;
 import android.support.v7.widget.AppCompatRadioButton;
 import android.support.v7.widget.RecyclerView;
 import android.util.Pair;
@@ -35,10 +36,12 @@ import com.mikepenz.materialdrawer.model.AbstractDrawerItem;
 import com.mikepenz.materialdrawer.util.DrawerUIUtils;
 
 import de.kuschku.quasseldroid_ng.R;
-import de.kuschku.quasseldroid_ng.util.accounts.Account;
+import de.kuschku.util.accounts.Account;
 
 public class AccountItem extends AbstractDrawerItem<AccountItem, AccountItem.ViewHolder> {
     public final Account account;
+    protected Pair<Integer, ColorStateList> colorStateList;
+    private OnDeleteListener listener;
 
     public AccountItem(Account account) {
         this.account = account;
@@ -84,6 +87,8 @@ public class AccountItem extends AbstractDrawerItem<AccountItem, AccountItem.Vie
 
         viewHolder.description.setTextColor(getTextColorStateList(color, selectedTextColor));
 
+        viewHolder.delete.setOnClickListener(view -> listener.onDelete(this));
+
         //for android API 17 --> Padding not applied via xml
         DrawerUIUtils.setDrawerVerticalPadding(viewHolder.view);
 
@@ -96,28 +101,6 @@ public class AccountItem extends AbstractDrawerItem<AccountItem, AccountItem.Vie
         return new ItemFactory();
     }
 
-    public static class ItemFactory implements ViewHolderFactory<ViewHolder> {
-        public ViewHolder create(View v) {
-            return new ViewHolder(v);
-        }
-    }
-
-    protected static class ViewHolder extends RecyclerView.ViewHolder {
-        private View view;
-        private AppCompatRadioButton select;
-        private TextView name;
-        private TextView description;
-
-        private ViewHolder(View view) {
-            super(view);
-            this.view = view;
-            this.select = (AppCompatRadioButton) view.findViewById(R.id.account_select);
-            this.name = (TextView) view.findViewById(R.id.account_name);
-            this.description = (TextView) view.findViewById(R.id.account_description);
-        }
-    }
-
-
     /**
      * helper method to decide for the correct color
      *
@@ -144,8 +127,6 @@ public class AccountItem extends AbstractDrawerItem<AccountItem, AccountItem.Vie
         return com.mikepenz.materialdrawer.R.color.material_drawer_selected_text;
     }
 
-    protected Pair<Integer, ColorStateList> colorStateList;
-
     /**
      * helper to get the ColorStateList for the text and remembering it so we do not have to recreate it all the time
      *
@@ -160,4 +141,35 @@ public class AccountItem extends AbstractDrawerItem<AccountItem, AccountItem.Vie
 
         return colorStateList.second;
     }
+
+    public void setOnDeleteListener(OnDeleteListener listener) {
+        this.listener = listener;
+    }
+
+    public interface OnDeleteListener {
+        void onDelete(AccountItem item);
+    }
+
+    public static class ItemFactory implements ViewHolderFactory<ViewHolder> {
+        public ViewHolder create(View v) {
+            return new ViewHolder(v);
+        }
+    }
+
+    protected static class ViewHolder extends RecyclerView.ViewHolder {
+        private View view;
+        private AppCompatRadioButton select;
+        private TextView name;
+        private TextView description;
+        private AppCompatImageButton delete;
+
+        private ViewHolder(View view) {
+            super(view);
+            this.view = view;
+            this.select = (AppCompatRadioButton) view.findViewById(R.id.account_select);
+            this.name = (TextView) view.findViewById(R.id.account_name);
+            this.description = (TextView) view.findViewById(R.id.account_description);
+            this.delete = (AppCompatImageButton) view.findViewById(R.id.account_delete);
+        }
+    }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSetupActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSetupActivity.java
index f424544ba01825d4f28e61b1eef8561f4f4532d1..c3919a788cf828189d3ca0c92978d543e5de70e3 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSetupActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/AccountSetupActivity.java
@@ -42,44 +42,18 @@ import de.kuschku.quasseldroid_ng.ui.setup.slides.AccountSetupCoreSlide;
 import de.kuschku.quasseldroid_ng.ui.setup.slides.AccountSetupNameSlide;
 import de.kuschku.quasseldroid_ng.ui.setup.slides.AccountSetupUserSlide;
 import de.kuschku.quasseldroid_ng.ui.setup.slides.SlideFragment;
-import de.kuschku.quasseldroid_ng.util.accounts.Account;
-import de.kuschku.quasseldroid_ng.util.accounts.AccountManager;
+import de.kuschku.util.accounts.Account;
+import de.kuschku.util.accounts.AccountManager;
 
 public class AccountSetupActivity extends AppCompatActivity implements ValidUpdateCallback {
 
-    private SlidePagerAdapter slidePagerAdapter;
-
     @Bind(R.id.view_pager)
     ViewPager viewPager;
-
     @Bind(R.id.btn)
     FloatingActionButton btn;
-
+    private SlidePagerAdapter slidePagerAdapter;
     private int lastValidPage = -1;
 
-    private class SlidePagerAdapter extends FragmentPagerAdapter {
-        List<SlideFragment> list = new ArrayList<>();
-
-        public SlidePagerAdapter(FragmentManager fm) {
-            super(fm);
-        }
-
-        @Override
-        public SlideFragment getItem(int position) {
-            return list.get(position);
-        }
-
-        @Override
-        public int getCount() {
-            return Math.min(lastValidPage + 2, list.size());
-        }
-
-        public void addFragment(SlideFragment fragment) {
-            list.add(fragment);
-            notifyDataSetChanged();
-        }
-    }
-
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -169,4 +143,27 @@ public class AccountSetupActivity extends AppCompatActivity implements ValidUpda
         }
         slidePagerAdapter.notifyDataSetChanged();
     }
+
+    private class SlidePagerAdapter extends FragmentPagerAdapter {
+        List<SlideFragment> list = new ArrayList<>();
+
+        public SlidePagerAdapter(FragmentManager fm) {
+            super(fm);
+        }
+
+        @Override
+        public SlideFragment getItem(int position) {
+            return list.get(position);
+        }
+
+        @Override
+        public int getCount() {
+            return Math.min(lastValidPage + 2, list.size());
+        }
+
+        public void addFragment(SlideFragment fragment) {
+            list.add(fragment);
+            notifyDataSetChanged();
+        }
+    }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CreateAccountItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CreateAccountItem.java
index 550abdb3dc05f78a72bb1040cefbd63b1e4bc900..9d1f05e82357cf195ef3e6245629f44ed83291bf 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CreateAccountItem.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CreateAccountItem.java
@@ -24,20 +24,19 @@ package de.kuschku.quasseldroid_ng.ui.setup;
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.support.annotation.ColorInt;
-import android.support.v7.widget.AppCompatRadioButton;
 import android.support.v7.widget.RecyclerView;
 import android.util.Pair;
 import android.view.View;
-import android.widget.TextView;
 
 import com.mikepenz.fastadapter.utils.ViewHolderFactory;
 import com.mikepenz.materialdrawer.model.AbstractDrawerItem;
 import com.mikepenz.materialdrawer.util.DrawerUIUtils;
 
 import de.kuschku.quasseldroid_ng.R;
-import de.kuschku.quasseldroid_ng.util.accounts.Account;
 
 public class CreateAccountItem extends AbstractDrawerItem<CreateAccountItem, CreateAccountItem.ViewHolder> {
+    protected Pair<Integer, ColorStateList> colorStateList;
+
     @Override
     public int getType() {
         return R.id.item_create_account;
@@ -68,22 +67,6 @@ public class CreateAccountItem extends AbstractDrawerItem<CreateAccountItem, Cre
         return new ItemFactory();
     }
 
-    public static class ItemFactory implements ViewHolderFactory<ViewHolder> {
-        public ViewHolder create(View v) {
-            return new ViewHolder(v);
-        }
-    }
-
-    protected static class ViewHolder extends RecyclerView.ViewHolder {
-        private View view;
-
-        private ViewHolder(View view) {
-            super(view);
-            this.view = view;
-        }
-    }
-
-
     /**
      * helper method to decide for the correct color
      *
@@ -110,8 +93,6 @@ public class CreateAccountItem extends AbstractDrawerItem<CreateAccountItem, Cre
         return com.mikepenz.materialdrawer.R.color.material_drawer_selected_text;
     }
 
-    protected Pair<Integer, ColorStateList> colorStateList;
-
     /**
      * helper to get the ColorStateList for the text and remembering it so we do not have to recreate it all the time
      *
@@ -126,4 +107,19 @@ public class CreateAccountItem extends AbstractDrawerItem<CreateAccountItem, Cre
 
         return colorStateList.second;
     }
+
+    public static class ItemFactory implements ViewHolderFactory<ViewHolder> {
+        public ViewHolder create(View v) {
+            return new ViewHolder(v);
+        }
+    }
+
+    protected static class ViewHolder extends RecyclerView.ViewHolder {
+        private View view;
+
+        private ViewHolder(View view) {
+            super(view);
+            this.view = view;
+        }
+    }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSelectSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSelectSlide.java
index 68947dc15cee466415631ae1dea1c00f84addd77..a786c05887c0befd8fc73f735ae8ff796581e6e5 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSelectSlide.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSelectSlide.java
@@ -43,12 +43,12 @@ import de.kuschku.quasseldroid_ng.R;
 import de.kuschku.quasseldroid_ng.ui.setup.AccountItem;
 import de.kuschku.quasseldroid_ng.ui.setup.AccountSetupActivity;
 import de.kuschku.quasseldroid_ng.ui.setup.CreateAccountItem;
-import de.kuschku.quasseldroid_ng.util.accounts.Account;
-import de.kuschku.quasseldroid_ng.util.accounts.AccountManager;
+import de.kuschku.util.accounts.Account;
+import de.kuschku.util.accounts.AccountManager;
 import de.kuschku.util.backports.Optional;
 import de.kuschku.util.backports.Optionals;
 
-public class AccountSelectSlide extends SlideFragment {
+public class AccountSelectSlide extends SlideFragment implements AccountItem.OnDeleteListener {
     private ItemAdapter<IItem> itemAdapter;
     private FastAdapter<IItem> fastAdapter;
     private AccountManager manager;
@@ -85,7 +85,7 @@ public class AccountSelectSlide extends SlideFragment {
         itemAdapter.wrap(fastAdapter);
         recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
         recyclerView.setItemAnimator(new DefaultItemAnimator());
-        updateContent(true);
+        updateContent();
         recyclerView.setAdapter(fastAdapter);
 
         fastAdapter.withSelectWithItemUpdate(true);
@@ -117,17 +117,19 @@ public class AccountSelectSlide extends SlideFragment {
 
         super.onActivityResult(requestCode, resultCode, data);
         if (resultCode == Activity.RESULT_OK) {
-            updateContent(false);
+            updateContent();
         } else if (fastAdapter.getItemCount() == 0) {
             getActivity().finish();
         }
     }
 
-    private void updateContent(boolean autoCreate) {
+    private void updateContent() {
         itemAdapter.clear();
         Set<Account> accounts = manager.accounts();
         for (Account account : accounts) {
-            itemAdapter.add(new AccountItem(account));
+            AccountItem accountItem = new AccountItem(account);
+            accountItem.setOnDeleteListener(this);
+            itemAdapter.add(accountItem);
         }
         itemAdapter.add(new CreateAccountItem());
 
@@ -145,4 +147,10 @@ public class AccountSelectSlide extends SlideFragment {
     protected int getDescription() {
         return R.string.slideAccountselectDescription;
     }
+
+    @Override
+    public void onDelete(AccountItem item) {
+        manager.remove(item.account);
+        updateContent();
+    }
 }
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 32b44f69ac1d39aae7d4ea86ba4758e1ea82864c..b2f73236c1bc619055cba87546fe84006566a268 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
@@ -28,6 +28,7 @@ import android.support.annotation.Nullable;
 import android.support.annotation.UiThread;
 import android.support.v7.view.ContextThemeWrapper;
 
+import de.kuschku.libquassel.events.ConnectionChangeEvent;
 import de.kuschku.quasseldroid_ng.R;
 import de.kuschku.util.annotationbind.AutoBinder;
 import de.kuschku.util.annotationbind.AutoColor;
@@ -64,6 +65,22 @@ public class ThemeUtil {
         }
     }
 
+    public String statusName(ConnectionChangeEvent.Status status) {
+        switch (status) {
+            case HANDSHAKE:
+                return translations.statusHandshake;
+            case INITIALIZING_DATA:
+                return translations.statusInitData;
+            case LOADING_BACKLOG:
+                return translations.statusBacklog;
+            case CONNECTED:
+                return translations.statusWelcome;
+            case DISCONNECTED:
+            default:
+                return translations.statusDisconnected;
+        }
+    }
+
     public static class FormatStrings {
         @AutoString(R.string.usernameHostmask)
         public String usernameHostmask;
@@ -112,9 +129,31 @@ public class ThemeUtil {
 
         @AutoString(R.string.labelStatusBuffer)
         public String titleStatusBuffer;
+
         @AutoString(R.string.warningCertificate)
         public String warningCertificate;
 
+        @AutoString(R.string.statusConnecting)
+        public String statusConnecting;
+
+        @AutoString(R.string.statusHandshake)
+        public String statusHandshake;
+
+        @AutoString(R.string.statusInitData)
+        public String statusInitData;
+
+        @AutoString(R.string.statusBacklog)
+        public String statusBacklog;
+
+        @AutoString(R.string.statusConnected)
+        public String statusConnected;
+
+        @AutoString(R.string.statusDisconnected)
+        public String statusDisconnected;
+
+        @AutoString(R.string.statusWelcome)
+        public String statusWelcome;
+
         @NonNull
         public CharSequence formatUsername(@NonNull CharSequence nick, @NonNull CharSequence hostmask) {
             return SpanFormatter.format(usernameHostmask, nick, hostmask);
diff --git a/app/src/main/java/de/kuschku/util/MeaningfulConnectionErrorProvider.java b/app/src/main/java/de/kuschku/util/MeaningfulConnectionErrorProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..2d0cfdc034f58f406532ef6d21d526acee2f91f3
--- /dev/null
+++ b/app/src/main/java/de/kuschku/util/MeaningfulConnectionErrorProvider.java
@@ -0,0 +1,42 @@
+/*
+ * QuasselDroid - Quassel client for Android
+ * Copyright (C) 2016 Janne Koschinski
+ * Copyright (C) 2016 Ken Børge Viktil
+ * Copyright (C) 2016 Magnus Fjell
+ * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.util;
+
+import java.net.ConnectException;
+
+import de.kuschku.quasseldroid_ng.ui.theme.AppContext;
+
+public class MeaningfulConnectionErrorProvider {
+    private final AppContext context;
+
+    public MeaningfulConnectionErrorProvider(AppContext context) {
+        this.context = context;
+    }
+
+    public String provide(Exception exception) {
+        return null;
+    }
+
+    public String provide(ConnectException exception) {
+        return null;
+    }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/Account.java b/app/src/main/java/de/kuschku/util/accounts/Account.java
similarity index 95%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/Account.java
rename to app/src/main/java/de/kuschku/util/accounts/Account.java
index 2c202b4b557adb624e0fd216e57e55a36062117b..f4314638975fcb6f7c76cbae57d5a698afb63755 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/Account.java
+++ b/app/src/main/java/de/kuschku/util/accounts/Account.java
@@ -19,12 +19,10 @@
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid_ng.util.accounts;
+package de.kuschku.util.accounts;
 
 import java.util.UUID;
 
-import de.kuschku.util.ServerAddress;
-
 public class Account {
     public final UUID id;
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManager.java b/app/src/main/java/de/kuschku/util/accounts/AccountManager.java
similarity index 97%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManager.java
rename to app/src/main/java/de/kuschku/util/accounts/AccountManager.java
index 0c1bd45d44877c684fc0155443af91ba0508eb5c..99d0a9c6d34f7152bb8ea13400985bcbf177a386 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManager.java
+++ b/app/src/main/java/de/kuschku/util/accounts/AccountManager.java
@@ -19,7 +19,7 @@
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid_ng.util.accounts;
+package de.kuschku.util.accounts;
 
 import android.content.Context;
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManagerHelper.java b/app/src/main/java/de/kuschku/util/accounts/AccountManagerHelper.java
similarity index 99%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManagerHelper.java
rename to app/src/main/java/de/kuschku/util/accounts/AccountManagerHelper.java
index f2581ae288378851b41d6b97576f8142203d6d4c..db1a817e8d9eef6c5a01e94f23ea9d8db132fd1e 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/accounts/AccountManagerHelper.java
+++ b/app/src/main/java/de/kuschku/util/accounts/AccountManagerHelper.java
@@ -19,7 +19,7 @@
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid_ng.util.accounts;
+package de.kuschku.util.accounts;
 
 import android.content.Context;
 import android.database.Cursor;
diff --git a/app/src/main/java/de/kuschku/util/ServerAddress.java b/app/src/main/java/de/kuschku/util/accounts/ServerAddress.java
similarity index 97%
rename from app/src/main/java/de/kuschku/util/ServerAddress.java
rename to app/src/main/java/de/kuschku/util/accounts/ServerAddress.java
index 4a56f879de9671072f6a9580ea55099b13c5a2bd..7684395dff97636dd3ff12e2d61888df840a50a1 100644
--- a/app/src/main/java/de/kuschku/util/ServerAddress.java
+++ b/app/src/main/java/de/kuschku/util/accounts/ServerAddress.java
@@ -19,7 +19,7 @@
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.util;
+package de.kuschku.util.accounts;
 
 public class ServerAddress {
     public final String host;
diff --git a/app/src/main/java/de/kuschku/util/buffermetadata/BufferMetaDataHelper.java b/app/src/main/java/de/kuschku/util/buffermetadata/BufferMetaDataHelper.java
new file mode 100644
index 0000000000000000000000000000000000000000..f38b7a61dbac52eef813b849f8d3f9d99ad82c7a
--- /dev/null
+++ b/app/src/main/java/de/kuschku/util/buffermetadata/BufferMetaDataHelper.java
@@ -0,0 +1,104 @@
+/*
+ * QuasselDroid - Quassel client for Android
+ * Copyright (C) 2016 Janne Koschinski
+ * Copyright (C) 2016 Ken Børge Viktil
+ * Copyright (C) 2016 Magnus Fjell
+ * Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package de.kuschku.util.buffermetadata;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.support.annotation.NonNull;
+
+public class BufferMetaDataHelper extends SQLiteOpenHelper {
+    private static final int DATABASE_VERSION = 1;
+    @NonNull
+    private static final String DATABASE_NAME = "bufferdata";
+    @NonNull
+    private static final String TABLE_ACCOUNTS = "bufferdata";
+
+    @NonNull
+    private static final String KEY_CORE = "core";
+    @NonNull
+    private static final String KEY_BUFFER = "buffer";
+    @NonNull
+    private static final String KEY_HIDDEN = "hiddenevents";
+    @NonNull
+    private static final String KEY_MARKERLINE = "markerline";
+
+    // Again we can only use String.format, as SQL doesn’t support table or column names to be bound
+    // in prepared statements
+    @NonNull
+    private static final String STATEMENT_INSERT =
+            String.format("INSERT OR IGNORE INTO %s(%s, %s, %s, %s) VALUES (?, ?, ?, ?)",
+                    TABLE_ACCOUNTS, KEY_CORE, KEY_BUFFER, KEY_HIDDEN, KEY_MARKERLINE);
+    @NonNull
+    private static final String STATEMENT_DELETE =
+            String.format("DELETE FROM %s WHERE %s = ? AND %s = ?",
+                    TABLE_ACCOUNTS, KEY_CORE, KEY_BUFFER);
+
+    @NonNull
+    private static final String SPECIFIER_FIND =
+            String.format("%s = ? AND %s = ?", KEY_CORE, KEY_BUFFER);
+
+    public BufferMetaDataHelper(Context context) {
+        super(context, DATABASE_NAME, null, DATABASE_VERSION);
+    }
+
+    @Override
+    public void onCreate(SQLiteDatabase db) {
+        // Why do we use String.format and not prepared statements? Because we can’t bind table or
+        // column names in prepared statements
+        String statement = String.format("CREATE TABLE %s (%s, %s, %s, %s, PRIMARY KEY (%s, %s), UNIQUE(%s));",
+                TABLE_ACCOUNTS,
+                KEY_CORE, KEY_BUFFER, KEY_HIDDEN, KEY_MARKERLINE,
+                KEY_CORE, KEY_BUFFER,
+                KEY_CORE);
+        db.execSQL(statement);
+    }
+
+    @Override
+    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+
+    }
+
+    public void storeMarkerline(String coreid, int bufferid, int messageid) {
+
+    }
+
+    public void storeHiddenData(String coreid, int bufferid, int hiddendata) {
+
+    }
+
+    public int markerLine(String coreid, int bufferid) {
+        return -1;
+    }
+
+    public int hiddenData(String coreid, int bufferid) {
+        return -1;
+    }
+
+    public void deleteCore(String coreid) {
+
+    }
+
+    public void deleteBuffer(String coreid, int bufferid) {
+
+    }
+}
diff --git a/app/src/main/java/de/kuschku/util/certificates/SQLiteCertificateManager.java b/app/src/main/java/de/kuschku/util/certificates/SQLiteCertificateManager.java
index c8e7e36032d79cf574005376fd76a656fbebd24d..60a65f0114a2466dab4d861b1c20315dbd5c0533 100644
--- a/app/src/main/java/de/kuschku/util/certificates/SQLiteCertificateManager.java
+++ b/app/src/main/java/de/kuschku/util/certificates/SQLiteCertificateManager.java
@@ -31,7 +31,7 @@ import java.util.Map;
 
 import de.kuschku.libquassel.ssl.CertificateManager;
 import de.kuschku.libquassel.ssl.UnknownCertificateException;
-import de.kuschku.util.ServerAddress;
+import de.kuschku.util.accounts.ServerAddress;
 
 public class SQLiteCertificateManager implements CertificateManager {
     @NonNull
diff --git a/app/src/main/java/de/kuschku/util/niohelpers/WrappedChannel.java b/app/src/main/java/de/kuschku/util/niohelpers/WrappedChannel.java
index 6551c1f1cd6355d0395f58954efb93b8ef3c99f5..e7566459505674eba966363844bb82dcf38855df 100644
--- a/app/src/main/java/de/kuschku/util/niohelpers/WrappedChannel.java
+++ b/app/src/main/java/de/kuschku/util/niohelpers/WrappedChannel.java
@@ -47,7 +47,7 @@ import javax.net.ssl.TrustManager;
 import de.kuschku.libquassel.ssl.CertificateManager;
 import de.kuschku.libquassel.ssl.QuasselTrustManager;
 import de.kuschku.util.CompatibilityUtils;
-import de.kuschku.util.ServerAddress;
+import de.kuschku.util.accounts.ServerAddress;
 
 public class WrappedChannel implements Flushable, ByteChannel, InterruptibleChannel {
     @Nullable
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/AbstractPreferenceElement.java b/app/src/main/java/de/kuschku/util/preferences/AbstractPreferenceElement.java
similarity index 97%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/AbstractPreferenceElement.java
rename to app/src/main/java/de/kuschku/util/preferences/AbstractPreferenceElement.java
index 32f257b2e9a08142024b9da07d89c5ffc7bf73bc..8e4035bf6b750613e59b295ad559875adcce087d 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/AbstractPreferenceElement.java
+++ b/app/src/main/java/de/kuschku/util/preferences/AbstractPreferenceElement.java
@@ -19,7 +19,7 @@
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid_ng.util.preferences;
+package de.kuschku.util.preferences;
 
 import android.content.SharedPreferences;
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/BooleanPreference.java b/app/src/main/java/de/kuschku/util/preferences/BooleanPreference.java
similarity index 96%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/BooleanPreference.java
rename to app/src/main/java/de/kuschku/util/preferences/BooleanPreference.java
index 0d0b0ce3307706d8c846d81f2d0c5118ef67704c..1b6f77a385b490e4d38fa34fb6d61965d8bda2d1 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/BooleanPreference.java
+++ b/app/src/main/java/de/kuschku/util/preferences/BooleanPreference.java
@@ -19,7 +19,7 @@
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid_ng.util.preferences;
+package de.kuschku.util.preferences;
 
 import android.content.SharedPreferences;
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/FloatPreference.java b/app/src/main/java/de/kuschku/util/preferences/FloatPreference.java
similarity index 96%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/FloatPreference.java
rename to app/src/main/java/de/kuschku/util/preferences/FloatPreference.java
index 7e6a44fe71eab1aa493919dd3f38aea248b1a3ce..81c93ba5ac17b9353957cbee9a3d8cd3a4598975 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/FloatPreference.java
+++ b/app/src/main/java/de/kuschku/util/preferences/FloatPreference.java
@@ -19,7 +19,7 @@
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid_ng.util.preferences;
+package de.kuschku.util.preferences;
 
 import android.content.SharedPreferences;
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/IntPreference.java b/app/src/main/java/de/kuschku/util/preferences/IntPreference.java
similarity index 96%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/IntPreference.java
rename to app/src/main/java/de/kuschku/util/preferences/IntPreference.java
index f598b30961f67402e5e59565d2e9043953aa554d..7032bfbaf7055445772c2b447b2e5d2a1017d8ef 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/IntPreference.java
+++ b/app/src/main/java/de/kuschku/util/preferences/IntPreference.java
@@ -19,7 +19,7 @@
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid_ng.util.preferences;
+package de.kuschku.util.preferences;
 
 import android.content.SharedPreferences;
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/LongPreference.java b/app/src/main/java/de/kuschku/util/preferences/LongPreference.java
similarity index 96%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/LongPreference.java
rename to app/src/main/java/de/kuschku/util/preferences/LongPreference.java
index ad51dd392603deee99daf2388d720d79734d2ff4..0b0d14b8085d536cab7fb5049cdb6dfcbcdce716 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/LongPreference.java
+++ b/app/src/main/java/de/kuschku/util/preferences/LongPreference.java
@@ -19,7 +19,7 @@
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid_ng.util.preferences;
+package de.kuschku.util.preferences;
 
 import android.content.SharedPreferences;
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/OnChangeListener.java b/app/src/main/java/de/kuschku/util/preferences/OnChangeListener.java
similarity index 94%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/OnChangeListener.java
rename to app/src/main/java/de/kuschku/util/preferences/OnChangeListener.java
index 80554b99b7aa964167ed93908433aa6cc698af10..743cec6570ad8bf6b256b547b7b6c783f9267396 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/OnChangeListener.java
+++ b/app/src/main/java/de/kuschku/util/preferences/OnChangeListener.java
@@ -19,7 +19,7 @@
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid_ng.util.preferences;
+package de.kuschku.util.preferences;
 
 public interface OnChangeListener<T> {
     void change(T value);
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/PreferenceElement.java b/app/src/main/java/de/kuschku/util/preferences/PreferenceElement.java
similarity index 95%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/PreferenceElement.java
rename to app/src/main/java/de/kuschku/util/preferences/PreferenceElement.java
index 68897a345b6f08c78b5a53d92bb820a85e6254e4..2ad588e3da68134643110009b24aa4bcc535a7e4 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/PreferenceElement.java
+++ b/app/src/main/java/de/kuschku/util/preferences/PreferenceElement.java
@@ -19,7 +19,7 @@
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid_ng.util.preferences;
+package de.kuschku.util.preferences;
 
 public interface PreferenceElement<T> {
     void addChangeListener(OnChangeListener<T> listener);
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/StringPreference.java b/app/src/main/java/de/kuschku/util/preferences/StringPreference.java
similarity index 96%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/StringPreference.java
rename to app/src/main/java/de/kuschku/util/preferences/StringPreference.java
index 0221090b977b5133a9b68b948fea42c3fd753673..67a802c0ec5d3aa1b4fd1fc29d86ab702d294adf 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/preferences/StringPreference.java
+++ b/app/src/main/java/de/kuschku/util/preferences/StringPreference.java
@@ -19,7 +19,7 @@
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid_ng.util.preferences;
+package de.kuschku.util.preferences;
 
 import android.content.SharedPreferences;
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/BoundActivity.java b/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java
similarity index 97%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/util/BoundActivity.java
rename to app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java
index ca2b1aac29e9db030867447d96bcb5340dd914fb..1a7f78341b6655241be13de1109c921cf97cd694 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/BoundActivity.java
+++ b/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java
@@ -19,7 +19,7 @@
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid_ng.util;
+package de.kuschku.util.servicebound;
 
 import android.content.ComponentName;
 import android.content.ServiceConnection;
@@ -34,7 +34,7 @@ import de.kuschku.quasseldroid_ng.service.QuasselService;
 import de.kuschku.quasseldroid_ng.ui.chat.Settings;
 import de.kuschku.quasseldroid_ng.ui.chat.util.ServiceHelper;
 import de.kuschku.quasseldroid_ng.ui.theme.AppContext;
-import de.kuschku.quasseldroid_ng.util.accounts.Account;
+import de.kuschku.util.accounts.Account;
 
 public abstract class BoundActivity extends AppCompatActivity {
     protected AppContext context = new AppContext();
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/BoundFragment.java b/app/src/main/java/de/kuschku/util/servicebound/BoundFragment.java
similarity index 97%
rename from app/src/main/java/de/kuschku/quasseldroid_ng/util/BoundFragment.java
rename to app/src/main/java/de/kuschku/util/servicebound/BoundFragment.java
index ed9eec33378825aacddeb732f955c7cd4ad6cf1d..5aae12208dcdb8f7b29891372d947e6b2f378152 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/BoundFragment.java
+++ b/app/src/main/java/de/kuschku/util/servicebound/BoundFragment.java
@@ -19,7 +19,7 @@
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-package de.kuschku.quasseldroid_ng.util;
+package de.kuschku.util.servicebound;
 
 import android.content.ComponentName;
 import android.content.ServiceConnection;
@@ -34,7 +34,7 @@ import de.kuschku.quasseldroid_ng.service.QuasselService;
 import de.kuschku.quasseldroid_ng.ui.chat.Settings;
 import de.kuschku.quasseldroid_ng.ui.chat.util.ServiceHelper;
 import de.kuschku.quasseldroid_ng.ui.theme.AppContext;
-import de.kuschku.quasseldroid_ng.util.accounts.Account;
+import de.kuschku.util.accounts.Account;
 
 public abstract class BoundFragment extends Fragment {
     protected AppContext context = new AppContext();
diff --git a/app/src/main/res/layout-sw600dp-land/activity_setup.xml b/app/src/main/res/layout-sw600dp-land/activity_setup.xml
index 76a3e2ed02d104400f56ba090300250a09c557b2..51358ec3abea9dba768d88e4c01c529e27ae76d3 100644
--- a/app/src/main/res/layout-sw600dp-land/activity_setup.xml
+++ b/app/src/main/res/layout-sw600dp-land/activity_setup.xml
@@ -36,13 +36,14 @@
         android:id="@+id/btn"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:src="@drawable/ic_arrow_right_dark"
         android:layout_gravity="end|bottom"
-        android:layout_marginRight="80dp"
-        android:layout_marginEnd="80dp"
         android:layout_marginBottom="16dp"
-        app:elevation="0dip"
+        android:layout_marginEnd="80dp"
+        android:layout_marginRight="80dp"
+        android:src="@drawable/ic_arrow_right_dark"
         app:backgroundTint="#8A000000"
-        app:fabSize="normal"/>
+        app:elevation="0dip"
+        app:fabSize="normal"
+        app:pressedTranslationZ="0dip" />
 
 </FrameLayout>
diff --git a/app/src/main/res/layout-sw600dp/activity_setup.xml b/app/src/main/res/layout-sw600dp/activity_setup.xml
index e00fb748f1c1e1cf5677c3d4e06321338fecf655..aaac9a03706acb59ee7d712a616971439323a81f 100644
--- a/app/src/main/res/layout-sw600dp/activity_setup.xml
+++ b/app/src/main/res/layout-sw600dp/activity_setup.xml
@@ -41,14 +41,15 @@
             android:id="@+id/btn"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:src="@drawable/ic_arrow_right_dark"
             android:layout_gravity="end|bottom"
-            android:layout_marginRight="16dp"
-            android:layout_marginEnd="16dp"
             android:layout_marginBottom="16dp"
-            app:elevation="0dip"
+            android:layout_marginEnd="16dp"
+            android:layout_marginRight="16dp"
+            android:src="@drawable/ic_arrow_right_dark"
             app:backgroundTint="#8A000000"
-            app:fabSize="normal" />
+            app:elevation="0dip"
+            app:fabSize="normal"
+            app:pressedTranslationZ="0dip" />
 
     </FrameLayout>
 
diff --git a/app/src/main/res/layout/activity_setup.xml b/app/src/main/res/layout/activity_setup.xml
index c8168d03a062b5041646cde1e3caff7d2342f3e6..df943e068c4cb818528834ed9a67e364879a7a5d 100644
--- a/app/src/main/res/layout/activity_setup.xml
+++ b/app/src/main/res/layout/activity_setup.xml
@@ -36,13 +36,14 @@
         android:id="@+id/btn"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:src="@drawable/ic_arrow_right_dark"
         android:layout_gravity="end|bottom"
-        android:layout_marginRight="16dp"
-        android:layout_marginEnd="16dp"
         android:layout_marginBottom="16dp"
-        app:elevation="0dip"
+        android:layout_marginEnd="16dp"
+        android:layout_marginRight="16dp"
+        android:src="@drawable/ic_arrow_right_dark"
         app:backgroundTint="#8A000000"
-        app:fabSize="normal" />
+        app:elevation="0dip"
+        app:fabSize="normal"
+        app:pressedTranslationZ="0dip" />
 
 </FrameLayout>
diff --git a/app/src/main/res/layout/fragment_loading.xml b/app/src/main/res/layout/fragment_loading.xml
index 997f5c18faa1dd1cd87c21cff128ff46570659c6..0e3d3cafebe8020e16b7d875628fc7ff9211e65d 100644
--- a/app/src/main/res/layout/fragment_loading.xml
+++ b/app/src/main/res/layout/fragment_loading.xml
@@ -20,42 +20,39 @@
   ~ with this program.  If not, see <http://www.gnu.org/licenses/>.
   -->
 
-<RelativeLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="?attr/colorBackground">
 
     <LinearLayout
-        android:orientation="vertical"
         android:layout_width="240dp"
         android:layout_height="wrap_content"
+        android:layout_centerHorizontal="true"
         android:layout_centerVertical="true"
-        android:layout_centerHorizontal="true">
+        android:orientation="vertical">
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="horizontal">
             <TextView
+                android:id="@+id/label"
                 android:layout_width="0dip"
-                android:layout_weight="1"
                 android:layout_height="wrap_content"
-                android:textAppearance="@style/TextAppearance.AppCompat.Caption"
-                android:text="Connecting"
-                android:id="@+id/label" />
+                android:layout_weight="1"
+                android:text="@string/statusConnecting"
+                android:textAppearance="@style/TextAppearance.AppCompat.Caption" />
             <TextView
+                android:id="@+id/count"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:textAppearance="@style/TextAppearance.AppCompat.Caption"
-                android:text="1/15"
-                android:id="@+id/count" />
+                android:textAppearance="@style/TextAppearance.AppCompat.Caption" />
         </LinearLayout>
         <ProgressBar
+            android:id="@+id/progressBar"
             style="@style/Widget.AppCompat.ProgressBar.Horizontal"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:indeterminate="true"
-            android:id="@+id/progressBar" />
+            android:indeterminate="true" />
     </LinearLayout>
 </RelativeLayout>
diff --git a/app/src/main/res/layout/widget_core_account.xml b/app/src/main/res/layout/widget_core_account.xml
index b9d3a5d6029b8441065bac3b3282cb553afe6737..464cf4c49fe38761c915f185b42a047ba69e6bf5 100644
--- a/app/src/main/res/layout/widget_core_account.xml
+++ b/app/src/main/res/layout/widget_core_account.xml
@@ -21,42 +21,26 @@
   -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="@dimen/material_drawer_item_profile"
-    android:orientation="horizontal"
-    android:paddingEnd="@dimen/material_drawer_vertical_padding"
-    android:paddingLeft="@dimen/material_drawer_vertical_padding"
-    android:paddingRight="@dimen/material_drawer_vertical_padding"
-    android:paddingStart="@dimen/material_drawer_vertical_padding">
+    android:background="?attr/selectableItemBackground"
+    android:clickable="true"
+    android:orientation="horizontal">
 
-    <LinearLayout
+    <android.support.v7.widget.AppCompatRadioButton
+        android:id="@+id/account_select"
         android:layout_width="@dimen/material_drawer_item_profile_icon_width"
-        android:layout_height="@dimen/material_drawer_item_profile"
-        android:paddingBottom="@dimen/material_drawer_item_profile_icon_padding"
-        android:paddingEnd="@dimen/material_drawer_item_profile_icon_padding_right"
-        android:paddingLeft="0dp"
-        android:paddingRight="@dimen/material_drawer_item_profile_icon_padding_right"
-        android:paddingStart="0dp"
-        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" />
-
-    </LinearLayout>
+        android:layout_height="@dimen/material_drawer_item_profile_icon_width"
+        android:layout_gravity="center_vertical"
+        android:background="@android:color/transparent" />
 
     <LinearLayout
-        android:layout_width="match_parent"
+        android:layout_width="0dip"
         android:layout_height="match_parent"
+        android:layout_margin="@dimen/material_drawer_item_profile_icon_padding_right"
+        android:layout_weight="1"
         android:gravity="center_vertical|start"
-        android:orientation="vertical"
-        android:paddingEnd="0dp"
-        android:paddingLeft="@dimen/material_drawer_padding"
-        android:paddingRight="0dp"
-        android:paddingStart="@dimen/material_drawer_padding">
+        android:orientation="vertical">
 
         <TextView
             android:id="@+id/account_name"
@@ -65,11 +49,8 @@
             android:fontFamily="sans-serif-medium"
             android:gravity="center_vertical|start"
             android:lines="1"
-            android:paddingRight="@dimen/material_drawer_item_primary_icon_padding_right"
             android:singleLine="true"
-            android:textDirection="anyRtl"
-            android:textSize="@dimen/material_drawer_item_profile_text"
-            tools:text="Remote" />
+            android:textSize="@dimen/material_drawer_item_profile_text" />
 
         <TextView
             android:id="@+id/account_description"
@@ -79,15 +60,15 @@
             android:gravity="center_vertical|start"
             android:lines="1"
             android:singleLine="true"
-            android:textDirection="anyRtl"
-            android:textSize="@dimen/material_drawer_item_profile_description"
-            tools:text="kuschku on kuschku.de" />
+            android:textSize="@dimen/material_drawer_item_profile_description" />
     </LinearLayout>
 
-    <!--
-    <ImageButton
-        android:layout_width="48dp"
-        android:layout_height="48dp"
-        android:src=""/>
-    -->
+    <android.support.v7.widget.AppCompatImageButton
+        android:id="@+id/account_delete"
+        style="?attr/buttonStyleSmall"
+        android:layout_width="@dimen/material_drawer_item_profile_icon_width"
+        android:layout_height="@dimen/material_drawer_item_profile_icon_width"
+        android:layout_gravity="center_vertical"
+        android:background="?attr/selectableItemBackgroundBorderless"
+        android:src="@drawable/ic_delete_light" />
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_core_account_add.xml b/app/src/main/res/layout/widget_core_account_add.xml
index 52382d73349b892fcd6cab188b0cd6451caedf26..861b6e17b4d624bfc35931e52e276f5aab1ebef9 100644
--- a/app/src/main/res/layout/widget_core_account_add.xml
+++ b/app/src/main/res/layout/widget_core_account_add.xml
@@ -21,9 +21,9 @@
   -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="@dimen/material_drawer_item_profile"
+    android:background="?attr/selectableItemBackground"
     android:orientation="horizontal"
     android:paddingEnd="@dimen/material_drawer_vertical_padding"
     android:paddingLeft="@dimen/material_drawer_vertical_padding"
@@ -67,8 +67,8 @@
             android:lines="1"
             android:paddingRight="@dimen/material_drawer_item_primary_icon_padding_right"
             android:singleLine="true"
+            android:text="Add Account"
             android:textDirection="anyRtl"
-            android:textSize="@dimen/material_drawer_item_profile_text"
-            android:text="Add Account" />
+            android:textSize="@dimen/material_drawer_item_profile_text" />
     </LinearLayout>
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_editor.xml b/app/src/main/res/layout/widget_editor.xml
index a41550b8df07ebd2f05270b02ac5cbe5fd47d6b6..fc8ef87445a94c8bcd52a6a086744367f935482d 100644
--- a/app/src/main/res/layout/widget_editor.xml
+++ b/app/src/main/res/layout/widget_editor.xml
@@ -65,6 +65,7 @@
         android:background="?attr/selectableItemBackgroundBorderless"
         android:padding="12dp"
         android:src="@drawable/ic_send"
+        android:theme="@style/RippleOverlay"
         android:tint="?attr/colorAccent" />
 
     <android.support.design.widget.AppBarLayout
diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml
deleted file mode 100644
index 24ea19facc5101226f994ef3483b970269489c88..0000000000000000000000000000000000000000
--- a/app/src/main/res/values-v21/styles.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ QuasselDroid - Quassel client for Android
-  ~ Copyright (C) 2016 Janne Koschinski
-  ~ Copyright (C) 2016 Ken Børge Viktil
-  ~ Copyright (C) 2016 Magnus Fjell
-  ~ Copyright (C) 2016 Martin Sandsmark <martin.sandsmark@kde.org>
-  ~
-  ~ This program is free software: you can redistribute it and/or modify it
-  ~ under the terms of the GNU General Public License as published by the Free
-  ~ Software Foundation, either version 3 of the License, or (at your option)
-  ~ any later version.
-  ~
-  ~ This program is distributed in the hope that it will be useful,
-  ~ but WITHOUT ANY WARRANTY; without even the implied warranty of
-  ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  ~ GNU General Public License for more details.
-  ~
-  ~ You should have received a copy of the GNU General Public License along
-  ~ with this program.  If not, see <http://www.gnu.org/licenses/>.
-  -->
-
-<resources>
-    <style name="Base.SetupTheme" parent="Theme.AppCompat.Light.NoActionBar">
-        <item name="android:windowTranslucentStatus">true</item>
-    </style>
-</resources>
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 5ab6942105e71f24bf78450946ae0c69553fcab0..89b556f2f4292e2683e162d1d50b57d2a82cdc6f 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -21,6 +21,8 @@
   -->
 
 <resources>
+    <attr name="colorAccentFocus" format="color" />
+
     <!-- sender colors -->
 
     <attr name="senderColor0" format="color" />
@@ -87,6 +89,8 @@
     <attr name="iconHistory" format="reference" />
     <attr name="iconDebug" format="reference" />
     <attr name="iconFilter" format="reference" />
+    <attr name="iconDelete" format="reference" />
+    <attr name="iconModify" format="reference" />
 
     <attr name="cardStyle" format="reference" />
 </resources>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 80916c85a24ae0a775aea73f03eb037fdb05455d..86cf89e1da08f1bd7cb83c4d9111b469758c6e3b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -65,4 +65,12 @@
 
     <string name="slideAccountnameTitle">Customize Account</string>
     <string name="slideAccountnameDescription">Give this account a name and icon</string>
+
+    <string name="statusConnecting">Connecting</string>
+    <string name="statusHandshake">Logging in</string>
+    <string name="statusInitData">Loading Networks and Channels</string>
+    <string name="statusBacklog">Loading Chat History</string>
+    <string name="statusConnected">Connected</string>
+    <string name="statusWelcome">Welcome!</string>
+    <string name="statusDisconnected">Connection lost</string>
 </resources>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 3ac174f46de126d95fb15e97458d43e4b721085a..80a075e8fed90c44d163d50573d2d684fbbe76a9 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -29,7 +29,8 @@
         <item name="colorPrimary">@color/colorPrimary</item>
         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
         <item name="colorAccent">@color/colorAccent</item>
-        <item name="colorControlHighlight">@color/colorAccentFocus</item>
+        <item name="colorAccentFocus">@color/colorAccentFocus</item>
+
         <item name="windowActionModeOverlay">true</item>
 
         <item name="material_drawer_background">?attr/colorBackground</item>
@@ -45,6 +46,8 @@
         <item name="iconHistory">@drawable/ic_history_dark</item>
         <item name="iconDebug">@drawable/ic_bug_dark</item>
         <item name="iconFilter">@drawable/ic_filter_dark</item>
+        <item name="iconModify">@drawable/ic_pencil_dark</item>
+        <item name="iconDelete">@drawable/ic_delete_dark</item>
 
         <item name="cardStyle">@style/CardView.Dark</item>
     </style>
@@ -54,7 +57,8 @@
         <item name="colorPrimary">@color/colorPrimary</item>
         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
         <item name="colorAccent">@color/colorAccent</item>
-        <item name="colorControlHighlight">@color/colorAccentFocus</item>
+        <item name="colorAccentFocus">@color/colorAccentFocus</item>
+
         <item name="windowActionModeOverlay">true</item>
 
         <item name="material_drawer_background">?attr/colorBackground</item>
@@ -70,6 +74,8 @@
         <item name="iconHistory">@drawable/ic_history_light</item>
         <item name="iconDebug">@drawable/ic_bug_light</item>
         <item name="iconFilter">@drawable/ic_filter_light</item>
+        <item name="iconModify">@drawable/ic_pencil_light</item>
+        <item name="iconDelete">@drawable/ic_delete_light</item>
 
         <item name="cardStyle">@style/CardView.Light</item>
     </style>
@@ -81,10 +87,13 @@
         <item name="colorPrimary">@color/colorPrimary</item>
         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
         <item name="colorAccent">@color/colorAccent</item>
-        <item name="colorControlHighlight">@color/colorAccentFocus</item>
         <item name="windowActionModeOverlay">true</item>
     </style>
 
+    <style name="RippleOverlay" parent="ThemeOverlay.AppCompat">
+        <item name="colorControlHighlight">?attr/colorAccentFocus</item>
+    </style>
+
     <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
 
     <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Dark" />