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 0f3512529a5ee558b143b2a9fe5a176fb9686bd4..5089d088c71863a29d4025f8dc7ffc32d7c966b4 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
@@ -452,8 +452,15 @@ public class MainActivity extends BoundActivity {
     @Override
     protected void onConnectToThread(@Nullable ClientBackgroundThread thread) {
         super.onConnectToThread(thread);
-        if (thread == null)
-            connectToServer(manager.account(context.settings().preferenceLastAccount.get()));
+        if (thread == null) {
+            Account account = manager.account(context.settings().preferenceLastAccount.get());
+            if (account != null) {
+                connectToServer(account);
+            } else {
+                setResult(RESULT_CANCELED);
+                finish();
+            }
+        }
         else {
             if (context.client() != null && context.client().connectionStatus() == ConnectionChangeEvent.Status.CONNECTED) {
                 connected();
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java
index 188dd270094163b0d336a4c5c1b4c93b11c558cf..873e368013fd1edfc2eac121ba0c4bfbfe2f2a5b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/BufferViewConfigAdapter.java
@@ -236,6 +236,7 @@ public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkVi
         if (config != null)
             config.networkList().removeCallback(callback);
         config = newconfig;
+        for (NetworkItem item : items) item.onDestroy();
         items.clear();
         itemMap.clear();
         if (config != null) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java
index 3c94f537ec98ff0163f85aef120fae9c4f0c4ac0..f539796d94ba238b557e680bfe141f5786306233 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/drawer/NetworkItem.java
@@ -33,6 +33,7 @@ import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
 import de.kuschku.quasseldroid_ng.ui.theme.AppContext;
 import de.kuschku.util.irc.IrcCaseMappers;
 import de.kuschku.util.observables.callbacks.ElementCallback;
+import de.kuschku.util.observables.callbacks.GeneralCallback;
 import de.kuschku.util.observables.callbacks.UICallback;
 import de.kuschku.util.observables.lists.ObservableSet;
 import de.kuschku.util.observables.lists.ObservableSortedList;
@@ -41,6 +42,7 @@ public class NetworkItem implements ParentListItem {
     private final AppContext context;
     private final QBufferViewConfig config;
     private final QNetwork network;
+    private final BufferViewConfigAdapter bufferViewConfigAdapter;
     private final ObservableSortedList<Buffer> buffers = new ObservableSortedList<>(new Comparator<Buffer>() {
         @Override
         public int compare(Buffer o1, Buffer o2) {
@@ -86,15 +88,20 @@ public class NetworkItem implements ParentListItem {
         public void notifyItemChanged(Integer element) {
         }
     };
+    private final UICallback callback1;
+    private final ElementCallback<Integer> callback2;
+    private final GeneralCallback<Boolean> booleanGeneralCallback;
     private ObservableSet<Integer> backingSet;
 
     public NetworkItem(AppContext context, QBufferViewConfig config, QNetwork network, BufferViewConfigAdapter bufferViewConfigAdapter) {
         this.context = context;
         this.config = config;
         this.network = network;
-        bufferViewConfigAdapter.showAll().addCallback(object -> setShowAll(object));
+        this.bufferViewConfigAdapter = bufferViewConfigAdapter;
+        booleanGeneralCallback = object -> setShowAll(object);
+        bufferViewConfigAdapter.showAll().addCallback(booleanGeneralCallback);
         setShowAll(bufferViewConfigAdapter.showAll().get());
-        this.buffers.addCallback(new UICallback() {
+        callback1 = new UICallback() {
             @Override
             public void notifyItemInserted(int position) {
                 bufferViewConfigAdapter.notifyChildItemInserted(NetworkItem.this, position);
@@ -136,8 +143,9 @@ public class NetworkItem implements ParentListItem {
                     this.notifyItemRemoved(position);
                 }
             }
-        });
-        context.client().bufferManager().bufferIds().addCallback(new ElementCallback<Integer>() {
+        };
+        this.buffers.addCallback(callback1);
+        callback2 = new ElementCallback<Integer>() {
             @Override
             public void notifyItemInserted(Integer element) {
             }
@@ -153,7 +161,8 @@ public class NetworkItem implements ParentListItem {
                     buffers.notifyItemChanged(buffer);
                 }
             }
-        });
+        };
+        context.client().bufferManager().bufferIds().addCallback(callback2);
     }
 
     public void populateList(ObservableSet<Integer> backingSet) {
@@ -193,4 +202,11 @@ public class NetworkItem implements ParentListItem {
     public String toString() {
         return String.valueOf(network);
     }
+
+    public void onDestroy() {
+        this.backingSet.removeCallback(callback);
+        bufferViewConfigAdapter.showAll().removeCallback(booleanGeneralCallback);
+        this.buffers.removeCallback(callback1);
+        context.client().bufferManager().bufferIds().removeCallback(callback2);
+    }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerEditActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerEditActivity.java
index 22dfc87d0b0a6ab3c28c991bfd560236f997da73..c864b1d356458e38a092f05a6235e0f5d30c7604 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerEditActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/server/NetworkServerEditActivity.java
@@ -183,12 +183,12 @@ public class NetworkServerEditActivity extends BoundActivity {
                         useSSL.isChecked(),
                         0,
                         host.getText().toString(),
-                        NumberHelper.parseInt(port.getText().toString(), -1),
+                        NumberHelper.parseInt(port.getText().toString(), 0),
                         password.getText().toString(),
                         useProxy.isChecked(),
                         NetworkServer.ProxyType.fromId((int) proxyType.getSelectedItemId()),
                         proxyHost.getText().toString(),
-                        NumberHelper.parseInt(proxyPort.getText().toString(), -1),
+                        NumberHelper.parseInt(proxyPort.getText().toString(), 0),
                         proxyUser.getText().toString(),
                         proxyPassword.getText().toString()
                 )));
diff --git a/app/src/main/java/de/kuschku/util/observables/lists/ObservableSortedList.java b/app/src/main/java/de/kuschku/util/observables/lists/ObservableSortedList.java
index 0fea481abd4884b7538b2f5c498211df9c7908d4..04eceab95b3cf9049fff9e88b889cc3ce004fd9f 100644
--- a/app/src/main/java/de/kuschku/util/observables/lists/ObservableSortedList.java
+++ b/app/src/main/java/de/kuschku/util/observables/lists/ObservableSortedList.java
@@ -87,7 +87,7 @@ public class ObservableSortedList<T> extends ArrayList<T> implements IObservable
     @Override
     public boolean add(T object) {
         int position = addInternal(object);
-        callback.notifyItemInserted(position);
+        callback.notifyItemInserted(indexOf(object));
         return position != -1;
     }
 
@@ -125,7 +125,7 @@ public class ObservableSortedList<T> extends ArrayList<T> implements IObservable
 
     @Override
     public boolean remove(Object object) {
-        int position = indexOf(object);
+        int position = super.indexOf(object);
         if (position == -1) {
             return false;
         } else {
diff --git a/app/src/main/res/layout/widget_chatmessage_action.xml b/app/src/main/res/layout/widget_chatmessage_action.xml
index f76132db77cfb4d85ef97507f03768078fc7b5d2..b98b974ff72614492e8680418ed7f0e6ffac7862 100644
--- a/app/src/main/res/layout/widget_chatmessage_action.xml
+++ b/app/src/main/res/layout/widget_chatmessage_action.xml
@@ -51,5 +51,6 @@
         android:layout_weight="1"
         android:clickable="true"
         android:textColor="?attr/colorForegroundAction"
+        android:textIsSelectable="true"
         android:textStyle="italic"/>
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_chatmessage_error.xml b/app/src/main/res/layout/widget_chatmessage_error.xml
index aacd2bc0e3c987c28b0a4990cc4f42d58b9c754c..33be8ade072cf3b3b94c0a3aaeb893094231ccba 100644
--- a/app/src/main/res/layout/widget_chatmessage_error.xml
+++ b/app/src/main/res/layout/widget_chatmessage_error.xml
@@ -52,5 +52,6 @@
         android:layout_weight="1"
         android:clickable="true"
         android:textColor="?attr/colorForegroundError"
+        android:textIsSelectable="true"
         android:textStyle="italic"/>
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_chatmessage_plain.xml b/app/src/main/res/layout/widget_chatmessage_plain.xml
index 930caad64c713ddfccdda2101883eb7e2e157c80..a96ef1347d3091a1dea2b1ccdaca86f7247038ee 100644
--- a/app/src/main/res/layout/widget_chatmessage_plain.xml
+++ b/app/src/main/res/layout/widget_chatmessage_plain.xml
@@ -50,5 +50,6 @@
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:clickable="true"
-        android:textColor="?attr/colorForeground"/>
+        android:textColor="?attr/colorForeground"
+        android:textIsSelectable="true"/>
 </LinearLayout>
diff --git a/app/src/main/res/layout/widget_chatmessage_server.xml b/app/src/main/res/layout/widget_chatmessage_server.xml
index 8255e3513b5c5ea70a68f9efd91a6d0633098201..3d0424d49bfe1d43a519ef06a4101b5cbb4ac366 100644
--- a/app/src/main/res/layout/widget_chatmessage_server.xml
+++ b/app/src/main/res/layout/widget_chatmessage_server.xml
@@ -52,5 +52,6 @@
         android:layout_weight="1"
         android:clickable="true"
         android:textColor="?attr/colorForegroundSecondary"
+        android:textIsSelectable="true"
         android:textStyle="italic"/>
 </LinearLayout>