diff --git a/app/build.gradle b/app/build.gradle
index 6db8021a5574b9f1a51a454ce50c0ec666fb1584..7075e8a67857ee9cc1840553ef067159741f2bda 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -61,7 +61,7 @@ if (versionPropsFile.exists() && versionPropsFile.canRead()) {
     versionProps.load(new FileInputStream(versionPropsFile))
     def runTasks = gradle.startParameter.taskNames
     versionBuild = Integer.valueOf(versionProps['VERSION_BUILD'].toString())
-    if (!(runTasks.intersect([':app:assembleBeta', 'assembleBeta', ':app:assembleRelease', 'assembleRelease']).empty)) {
+    if (':app:assembleBeta' in runTasks || 'assembleBeta' in runTasks || ':app:assembleRelease' in runTasks || 'assembleRelease' in runTasks || ':app:assemblebeta' in runTasks || 'assemblebeta' in runTasks || ':app:assemblerelease' in runTasks || 'assemblerelease' in runTasks) {
         println "Increasing version number"
         versionBuild = versionBuild + 1
     }
diff --git a/app/src/main/java/de/kuschku/libquassel/BusProvider.java b/app/src/main/java/de/kuschku/libquassel/BusProvider.java
index 46119430fccb6aba4bf8238844b84627b67098dd..7f3eeb4a0626926ab827c8e37a913983e5c0c196 100644
--- a/app/src/main/java/de/kuschku/libquassel/BusProvider.java
+++ b/app/src/main/java/de/kuschku/libquassel/BusProvider.java
@@ -32,7 +32,6 @@ import org.greenrobot.eventbus.ThreadMode;
 import java.util.UUID;
 
 import de.kuschku.libquassel.events.BacklogReceivedEvent;
-import de.kuschku.libquassel.events.GeneralErrorEvent;
 import de.kuschku.libquassel.events.LagChangedEvent;
 
 public class BusProvider {
diff --git a/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java b/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java
index b86050154b18538cdc391f643d81136bb9dbabc8..8b8abd9d6b9bfc10f283c8491b8712410d8c9b8c 100644
--- a/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java
+++ b/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java
@@ -29,8 +29,6 @@ import org.greenrobot.eventbus.ThreadMode;
 import org.joda.time.DateTime;
 import org.joda.time.Interval;
 
-import java.util.logging.Logger;
-
 import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.events.ConnectionChangeEvent;
 import de.kuschku.libquassel.events.CoreSetupRequiredEvent;
diff --git a/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java b/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java
index 35c1a9be11a94a45003aff8ba40aca52b53fe5ed..f58fc882ccf240e011d3a4a1652b0b1fba91dee9 100644
--- a/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java
@@ -40,7 +40,6 @@ import de.kuschku.libquassel.localtypes.buffers.ChannelBuffer;
 import de.kuschku.libquassel.localtypes.buffers.QueryBuffer;
 import de.kuschku.libquassel.localtypes.buffers.StatusBuffer;
 import de.kuschku.libquassel.primitives.types.BufferInfo;
-import de.kuschku.libquassel.syncables.types.impl.BufferViewConfig;
 import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig;
 import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel;
 import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser;
diff --git a/app/src/main/java/de/kuschku/libquassel/client/Client.java b/app/src/main/java/de/kuschku/libquassel/client/Client.java
index 4c7fa00c513ddd92bbbd0f6315346df380482450..d67818b8d6d58fd4c1c02a5aea2d6e465151bf67 100644
--- a/app/src/main/java/de/kuschku/libquassel/client/Client.java
+++ b/app/src/main/java/de/kuschku/libquassel/client/Client.java
@@ -48,14 +48,9 @@ import de.kuschku.libquassel.objects.types.SessionState;
 import de.kuschku.libquassel.primitives.QMetaTypeRegistry;
 import de.kuschku.libquassel.primitives.types.BufferInfo;
 import de.kuschku.libquassel.syncables.types.SyncableObject;
-import de.kuschku.libquassel.syncables.types.impl.AliasManager;
 import de.kuschku.libquassel.syncables.types.impl.BacklogManager;
-import de.kuschku.libquassel.syncables.types.impl.BufferSyncer;
-import de.kuschku.libquassel.syncables.types.impl.BufferViewManager;
 import de.kuschku.libquassel.syncables.types.impl.CoreInfo;
 import de.kuschku.libquassel.syncables.types.impl.Identity;
-import de.kuschku.libquassel.syncables.types.impl.IgnoreListManager;
-import de.kuschku.libquassel.syncables.types.impl.NetworkConfig;
 import de.kuschku.libquassel.syncables.types.interfaces.QAliasManager;
 import de.kuschku.libquassel.syncables.types.interfaces.QBacklogManager;
 import de.kuschku.libquassel.syncables.types.interfaces.QBufferSyncer;
diff --git a/app/src/main/java/de/kuschku/libquassel/client/IdentityManager.java b/app/src/main/java/de/kuschku/libquassel/client/IdentityManager.java
index 9a1fe8ef6102943c8eae514bd14e8ffd5ae3cf2b..ca33f53b937ecb00cb64f6200a02e299b41aa605 100644
--- a/app/src/main/java/de/kuschku/libquassel/client/IdentityManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/client/IdentityManager.java
@@ -30,10 +30,27 @@ import java.util.List;
 import java.util.Map;
 
 import de.kuschku.libquassel.syncables.types.interfaces.QIdentity;
+import de.kuschku.util.observables.lists.ObservableSortedList;
 
 public class IdentityManager {
     @NonNull
     private final Map<Integer, QIdentity> identities = new HashMap<>();
+    private final ObservableSortedList<QIdentity> identityList = new ObservableSortedList<>(QIdentity.class, new ObservableSortedList.ItemComparator<QIdentity>() {
+        @Override
+        public int compare(QIdentity o1, QIdentity o2) {
+            return o1.id() - o2.id();
+        }
+
+        @Override
+        public boolean areContentsTheSame(QIdentity oldItem, QIdentity newItem) {
+            return oldItem.equals(newItem);
+        }
+
+        @Override
+        public boolean areItemsTheSame(QIdentity item1, QIdentity item2) {
+            return item1.id() == item2.id();
+        }
+    });
     private final Client client;
 
     public IdentityManager(Client client) {
@@ -42,6 +59,7 @@ public class IdentityManager {
 
     public void createIdentity(@NonNull QIdentity identity) {
         identities.put(identity.id(), identity);
+        identityList.add(identity);
     }
 
     public void removeIdentity(@IntRange(from = 0) int id) {
@@ -58,4 +76,8 @@ public class IdentityManager {
             createIdentity(identity);
         }
     }
+
+    public ObservableSortedList<QIdentity> identities() {
+        return identityList;
+    }
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/client/NetworkManager.java b/app/src/main/java/de/kuschku/libquassel/client/NetworkManager.java
index 2d4b90f4b02f83975130b99addbf4d994a9b006c..84351a543ae69fb4a2feec62cb2bb13e0714620a 100644
--- a/app/src/main/java/de/kuschku/libquassel/client/NetworkManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/client/NetworkManager.java
@@ -24,26 +24,39 @@ package de.kuschku.libquassel.client;
 import android.support.annotation.IntRange;
 import android.support.annotation.NonNull;
 
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Observable;
 
 import de.kuschku.libquassel.syncables.types.impl.Network;
 import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
-import de.kuschku.util.observables.lists.ObservableSet;
 import de.kuschku.util.observables.lists.ObservableSortedList;
 
+import static de.kuschku.util.AndroidAssert.assertNotNull;
+
 public class NetworkManager extends Observable {
     @NonNull
     private final Map<Integer, QNetwork> networks = new HashMap<>();
     @NonNull
-    private final ObservableSortedList<QNetwork> list = new ObservableSortedList<>(QNetwork.class, new ObservableSortedList.ItemComparator<QNetwork>() {
+    private final ObservableSortedList<QNetwork> list = new ObservableSortedList<QNetwork>(QNetwork.class, new ObservableSortedList.ItemComparator<QNetwork>() {
         @Override
         public int compare(QNetwork o1, QNetwork o2) {
-            return o1 == null && o2 == null ? 0 : o1 == null ? 1 : o2 == null ? -1 : o1.networkName().compareTo(o2.networkName());
+            assertNotNull(o1);
+            assertNotNull(o2);
+
+            String name1 = o1.networkName();
+            String name2 = o2.networkName();
+
+            if (name1 == null && name2 == null) {
+                return 0;
+            } else if (name1 == null) {
+                return 1;
+            } else if (name2 == null) {
+                return -1;
+            } else {
+                return name1.compareTo(name2);
+            }
         }
 
         @Override
@@ -55,7 +68,21 @@ public class NetworkManager extends Observable {
         public boolean areItemsTheSame(QNetwork item1, QNetwork item2) {
             return item1.networkId() == item2.networkId();
         }
-    });
+    }) {
+        @Override
+        public boolean add(QNetwork object) {
+            if (object == null)
+                throw new Error();
+            return super.add(object);
+        }
+
+        @Override
+        public void add(int location, QNetwork object) {
+            if (object == null)
+                throw new Error();
+            super.add(location, object);
+        }
+    };
     @NonNull
     private final Client client;
 
@@ -69,7 +96,7 @@ public class NetworkManager extends Observable {
 
     public void createNetwork(@NonNull QNetwork network) {
         QNetwork qNetwork = networks.get(network.networkId());
-        if (list.contains(qNetwork))
+        if (qNetwork != null && list.contains(qNetwork))
             list.remove(qNetwork);
         networks.put(network.networkId(), network);
         list.add(network);
@@ -80,7 +107,9 @@ public class NetworkManager extends Observable {
     }
 
     public void removeNetwork(@IntRange(from = 0) int network) {
-        list.remove(networks.get(network));
+        QNetwork qNetwork = networks.get(network);
+        if (qNetwork != null)
+            list.remove(qNetwork);
         networks.remove(network);
     }
 
diff --git a/app/src/main/java/de/kuschku/libquassel/message/Message.java b/app/src/main/java/de/kuschku/libquassel/message/Message.java
index 0fffb912a8d772673bfc2c512483171c4a6df40c..99bd029dc78ab3e6b9c256273d053996e80b01f7 100644
--- a/app/src/main/java/de/kuschku/libquassel/message/Message.java
+++ b/app/src/main/java/de/kuschku/libquassel/message/Message.java
@@ -23,7 +23,6 @@ package de.kuschku.libquassel.message;
 
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
-import android.util.Log;
 
 import com.raizlabs.android.dbflow.annotation.Column;
 import com.raizlabs.android.dbflow.annotation.ForeignKey;
@@ -67,12 +66,6 @@ public class Message extends BaseModel implements ContentComparable<Message> {
 
     public LocalDate date;
 
-    public LocalDate getLocalDate() {
-        if (date == null)
-            date = time.toLocalDate();
-        return date;
-    }
-
     public static Message create(int id, DateTime time, Type type, Flags flags, BufferInfo bufferInfo, String sender, String content) {
         Message message = new Message();
         message.id = id;
@@ -85,6 +78,12 @@ public class Message extends BaseModel implements ContentComparable<Message> {
         return message;
     }
 
+    public LocalDate getLocalDate() {
+        if (date == null)
+            date = time.toLocalDate();
+        return date;
+    }
+
     @NonNull
     @Override
     public String toString() {
diff --git a/app/src/main/java/de/kuschku/libquassel/objects/serializers/ClientLoginSerializer.java b/app/src/main/java/de/kuschku/libquassel/objects/serializers/ClientLoginSerializer.java
index f08d8826af2ac3f79dbf795ba989b5a5fe456c1d..15936211f49bc49d0105cab898fd76e9b0a20c16 100644
--- a/app/src/main/java/de/kuschku/libquassel/objects/serializers/ClientLoginSerializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/objects/serializers/ClientLoginSerializer.java
@@ -33,8 +33,6 @@ import de.kuschku.libquassel.objects.types.ClientLogin;
 import de.kuschku.libquassel.primitives.QMetaType;
 import de.kuschku.libquassel.primitives.types.QVariant;
 
-import static de.kuschku.util.AndroidAssert.assertNotNull;
-
 @SuppressWarnings({"unchecked", "ConstantConditions"})
 public class ClientLoginSerializer implements ObjectSerializer<ClientLogin> {
     @NonNull
diff --git a/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupDataSerializer.java b/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupDataSerializer.java
index f268b17abe5d5e320691a1447dc2efe8f3635fc5..73cb431fc2877612a901d4626ebd05d9ba792faf 100644
--- a/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupDataSerializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupDataSerializer.java
@@ -33,8 +33,6 @@ import de.kuschku.libquassel.objects.types.CoreSetupData;
 import de.kuschku.libquassel.primitives.QMetaType;
 import de.kuschku.libquassel.primitives.types.QVariant;
 
-import static de.kuschku.util.AndroidAssert.assertNotNull;
-
 @SuppressWarnings({"unchecked", "ConstantConditions"})
 public class CoreSetupDataSerializer implements ObjectSerializer<CoreSetupData> {
     @NonNull
diff --git a/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupRejectSerializer.java b/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupRejectSerializer.java
index adb24bf870c81367540feeb9f1518f661c46a79f..ebef8b2e3a3451cc71757334e9ffac6a77592385 100644
--- a/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupRejectSerializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/objects/serializers/CoreSetupRejectSerializer.java
@@ -33,8 +33,6 @@ import de.kuschku.libquassel.objects.types.CoreSetupReject;
 import de.kuschku.libquassel.primitives.QMetaType;
 import de.kuschku.libquassel.primitives.types.QVariant;
 
-import static de.kuschku.util.AndroidAssert.assertNotNull;
-
 @SuppressWarnings({"unchecked", "ConstantConditions"})
 public class CoreSetupRejectSerializer implements ObjectSerializer<CoreSetupReject> {
     @NonNull
diff --git a/app/src/main/java/de/kuschku/libquassel/objects/serializers/NetworkServerSerializer.java b/app/src/main/java/de/kuschku/libquassel/objects/serializers/NetworkServerSerializer.java
index 0b0d94e7f78531e79a92aa13c8bd8e69a8e1ca22..3aca99af8340be584b5fc33d955377b09ffa54a1 100644
--- a/app/src/main/java/de/kuschku/libquassel/objects/serializers/NetworkServerSerializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/objects/serializers/NetworkServerSerializer.java
@@ -33,8 +33,6 @@ import de.kuschku.libquassel.objects.types.NetworkServer;
 import de.kuschku.libquassel.primitives.QMetaType;
 import de.kuschku.libquassel.primitives.types.QVariant;
 
-import static de.kuschku.util.AndroidAssert.assertNotNull;
-
 @SuppressWarnings({"unchecked", "ConstantConditions"})
 public class NetworkServerSerializer implements ObjectSerializer<NetworkServer> {
     @NonNull
diff --git a/app/src/main/java/de/kuschku/libquassel/objects/serializers/SetupDataInitializer.java b/app/src/main/java/de/kuschku/libquassel/objects/serializers/SetupDataInitializer.java
index a86ae2d90e1d1e3d9bb0f6300985673ea317d034..eac46bd79c74fef97223e298b25063a1dfb7a7cd 100644
--- a/app/src/main/java/de/kuschku/libquassel/objects/serializers/SetupDataInitializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/objects/serializers/SetupDataInitializer.java
@@ -33,8 +33,6 @@ import de.kuschku.libquassel.objects.types.SetupData;
 import de.kuschku.libquassel.primitives.QMetaType;
 import de.kuschku.libquassel.primitives.types.QVariant;
 
-import static de.kuschku.util.AndroidAssert.assertNotNull;
-
 @SuppressWarnings({"unchecked", "ConstantConditions"})
 public class SetupDataInitializer implements ObjectSerializer<SetupData> {
     @NonNull
diff --git a/app/src/main/java/de/kuschku/libquassel/objects/serializers/StorageBackendSerializer.java b/app/src/main/java/de/kuschku/libquassel/objects/serializers/StorageBackendSerializer.java
index 9150c045a32ae029189809c927a2f324d9f135fa..1d1e8549edb7d4be5747293ff108de001f69411a 100644
--- a/app/src/main/java/de/kuschku/libquassel/objects/serializers/StorageBackendSerializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/objects/serializers/StorageBackendSerializer.java
@@ -34,8 +34,6 @@ import de.kuschku.libquassel.objects.types.StorageBackend;
 import de.kuschku.libquassel.primitives.QMetaType;
 import de.kuschku.libquassel.primitives.types.QVariant;
 
-import static de.kuschku.util.AndroidAssert.assertNotNull;
-
 @SuppressWarnings({"unchecked", "ConstantConditions"})
 public class StorageBackendSerializer implements ObjectSerializer<StorageBackend> {
     @NonNull
diff --git a/app/src/main/java/de/kuschku/libquassel/objects/serializers/StringObjectMapSerializer.java b/app/src/main/java/de/kuschku/libquassel/objects/serializers/StringObjectMapSerializer.java
index 135708e5183a203281fea3cb682feb098fae441b..b57b2be7c770df3e6276ec8b41f8c3204cce66b5 100644
--- a/app/src/main/java/de/kuschku/libquassel/objects/serializers/StringObjectMapSerializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/objects/serializers/StringObjectMapSerializer.java
@@ -31,8 +31,6 @@ import de.kuschku.libquassel.functions.types.SerializedFunction;
 import de.kuschku.libquassel.functions.types.UnpackedFunction;
 import de.kuschku.libquassel.primitives.types.QVariant;
 
-import static de.kuschku.util.AndroidAssert.assertNotNull;
-
 @SuppressWarnings({"unchecked", "ConstantConditions"})
 public class StringObjectMapSerializer<T> implements ObjectSerializer<Map<String, T>> {
     @NonNull
diff --git a/app/src/main/java/de/kuschku/libquassel/objects/types/CoreStatus.java b/app/src/main/java/de/kuschku/libquassel/objects/types/CoreStatus.java
index cb963987613845a859bc1ab6a4c1872a9f6f0f76..ab9807acea6bf220fa4233193bc3d806d752f3ea 100644
--- a/app/src/main/java/de/kuschku/libquassel/objects/types/CoreStatus.java
+++ b/app/src/main/java/de/kuschku/libquassel/objects/types/CoreStatus.java
@@ -76,36 +76,44 @@ public class CoreStatus {
                         case UInt: {
                             defaults.putInt(key, (int) value.data);
                             types.putString(key, "int");
-                        } break;
+                        }
+                        break;
                         case Short:
                         case UShort: {
                             defaults.putShort(key, (short) value.data);
                             types.putString(key, "short");
-                        } break;
+                        }
+                        break;
                         case Long:
                         case ULong: {
                             defaults.putLong(key, (long) value.data);
                             types.putString(key, "long");
-                        } break;
+                        }
+                        break;
                         case Bool: {
                             defaults.putBoolean(key, (boolean) value.data);
                             types.putString(key, "boolean");
-                        } break;
+                        }
+                        break;
                         case Double: {
                             bundle.putDouble(key, (double) value.data);
                             types.putString(key, "double");
-                        } break;
+                        }
+                        break;
                         case Float: {
                             defaults.putDouble(key, (float) value.data);
                             types.putString(key, "float");
-                        } break;
+                        }
+                        break;
                         case QString: {
                             defaults.putString(key, (String) value.data);
                             types.putString(key, "string");
-                        } break;
+                        }
+                        break;
                         default: {
                             Log.w("CoreSetup", "Found configuration element with incompatible type: " + key + " : " + value.type.type);
-                        } break;
+                        }
+                        break;
                     }
                 } else {
                     defaults.putString(key, "");
diff --git a/app/src/main/java/de/kuschku/libquassel/primitives/serializers/ByteArraySerializer.java b/app/src/main/java/de/kuschku/libquassel/primitives/serializers/ByteArraySerializer.java
index f4bd4e4de118e0d81ed3f921fba39daa958a7ea6..57345559c68c0cf01bc11e487c937fe6d659e8e4 100644
--- a/app/src/main/java/de/kuschku/libquassel/primitives/serializers/ByteArraySerializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/primitives/serializers/ByteArraySerializer.java
@@ -23,7 +23,6 @@ package de.kuschku.libquassel.primitives.serializers;
 
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
-import android.util.Log;
 
 import com.google.common.base.Charsets;
 
diff --git a/app/src/main/java/de/kuschku/libquassel/primitives/serializers/UserTypeSerializer.java b/app/src/main/java/de/kuschku/libquassel/primitives/serializers/UserTypeSerializer.java
index fa637e5ca2b24fed39c9b3ae19e5dc595965c356..018faf12f39d802ddc3fb60e4bf4da3174e31dd0 100644
--- a/app/src/main/java/de/kuschku/libquassel/primitives/serializers/UserTypeSerializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/primitives/serializers/UserTypeSerializer.java
@@ -29,7 +29,6 @@ import java.nio.channels.ByteChannel;
 import java.util.Map;
 
 import de.kuschku.libquassel.objects.serializers.ObjectSerializer;
-import de.kuschku.libquassel.primitives.QMetaType;
 import de.kuschku.libquassel.primitives.types.QVariant;
 
 import static de.kuschku.util.AndroidAssert.assertNotNull;
diff --git a/app/src/main/java/de/kuschku/libquassel/primitives/serializers/VariantMapSerializer.java b/app/src/main/java/de/kuschku/libquassel/primitives/serializers/VariantMapSerializer.java
index 202e69a8b3a837a95ba256365e51c6d8b92a1556..8c0a745aaa62b1404eab11c972185cd6da9a5fd0 100644
--- a/app/src/main/java/de/kuschku/libquassel/primitives/serializers/VariantMapSerializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/primitives/serializers/VariantMapSerializer.java
@@ -22,7 +22,6 @@
 package de.kuschku.libquassel.primitives.serializers;
 
 import android.support.annotation.NonNull;
-import android.util.Log;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
diff --git a/app/src/main/java/de/kuschku/libquassel/primitives/types/BufferInfo.java b/app/src/main/java/de/kuschku/libquassel/primitives/types/BufferInfo.java
index f29a3421a3e76b95187058f368bbc7b9b6dd9985..85899e7e4223ec1b53571220f7e351988fe93bf4 100644
--- a/app/src/main/java/de/kuschku/libquassel/primitives/types/BufferInfo.java
+++ b/app/src/main/java/de/kuschku/libquassel/primitives/types/BufferInfo.java
@@ -28,8 +28,6 @@ import com.raizlabs.android.dbflow.annotation.PrimaryKey;
 import com.raizlabs.android.dbflow.annotation.Table;
 import com.raizlabs.android.dbflow.structure.BaseModel;
 
-import java.util.List;
-
 import de.kuschku.libquassel.localtypes.orm.ConnectedDatabase;
 
 @Table(database = ConnectedDatabase.class)
@@ -78,7 +76,7 @@ public class BufferInfo extends BaseModel {
         QUERY(0x04),
         GROUP(0x08);
 
-        public static final int ALL = STATUS.id | CHANNEL.id| QUERY.id | GROUP.id;
+        public static final int ALL = STATUS.id | CHANNEL.id | QUERY.id | GROUP.id;
 
         public final short id;
 
diff --git a/app/src/main/java/de/kuschku/libquassel/protocols/DatastreamPeer.java b/app/src/main/java/de/kuschku/libquassel/protocols/DatastreamPeer.java
index 8b05a4e3331bf159063f8465f712ad2153b4a565..e34f01e179ecb19fe4eb5c263f0bdc16eb12d727 100644
--- a/app/src/main/java/de/kuschku/libquassel/protocols/DatastreamPeer.java
+++ b/app/src/main/java/de/kuschku/libquassel/protocols/DatastreamPeer.java
@@ -23,7 +23,6 @@ package de.kuschku.libquassel.protocols;
 
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
-import android.util.Log;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Lists;
@@ -38,7 +37,6 @@ import java.nio.BufferOverflowException;
 import java.nio.BufferUnderflowException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/BufferViewManagerSerializer.java b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/BufferViewManagerSerializer.java
index 2f15fa3dc8cf2e3b7d327fe61dba0f400ead0e83..fa938c6f8d208ce0aac77837f3655660964d4407 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/BufferViewManagerSerializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/BufferViewManagerSerializer.java
@@ -63,7 +63,7 @@ public class BufferViewManagerSerializer implements ObjectSerializer<QBufferView
     private List<Integer> getBufferViewIds(@NonNull QBufferViewManager data) {
         List<Integer> bufferViewIds = new ArrayList<>(data.bufferViewConfigs().size());
         for (QBufferViewConfig config : data.bufferViewConfigs())
-        bufferViewIds.add(config.bufferViewId());
+            bufferViewIds.add(config.bufferViewId());
         return bufferViewIds;
     }
 
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IgnoreListManagerSerializer.java b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IgnoreListManagerSerializer.java
index c250b9540e7b9deb8495a55d08a5467008384c88..5bae42e86f981e1418030aa1251488ce310ea9a9 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IgnoreListManagerSerializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IgnoreListManagerSerializer.java
@@ -35,7 +35,6 @@ import de.kuschku.libquassel.functions.types.UnpackedFunction;
 import de.kuschku.libquassel.objects.serializers.ObjectSerializer;
 import de.kuschku.libquassel.primitives.types.QVariant;
 import de.kuschku.libquassel.syncables.types.impl.IgnoreListManager;
-import de.kuschku.libquassel.syncables.types.interfaces.QIgnoreListManager;
 
 import static de.kuschku.util.AndroidAssert.assertNotNull;
 
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java
index d7c8c2cdbcbe4ec065e9cd4177927d61ebce80c8..d65982b04283113614f675d40bee7efeadaa91c1 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/IrcUserSerializer.java
@@ -36,8 +36,6 @@ import de.kuschku.libquassel.objects.serializers.ObjectSerializer;
 import de.kuschku.libquassel.primitives.types.QVariant;
 import de.kuschku.libquassel.syncables.types.impl.IrcUser;
 
-import static de.kuschku.util.AndroidAssert.assertNotNull;
-
 @SuppressWarnings({"unchecked", "ConstantConditions"})
 public class IrcUserSerializer implements ObjectSerializer<IrcUser> {
     @NonNull
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkInfoSerializer.java b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkInfoSerializer.java
index 0a216321e0d6dc06c4104cfd4c14a46b39e18789..144899f3277a38f156727987201e42d13265fb30 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkInfoSerializer.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/serializers/NetworkInfoSerializer.java
@@ -23,7 +23,6 @@ package de.kuschku.libquassel.syncables.serializers;
 
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
-import android.util.Log;
 
 import java.util.HashMap;
 import java.util.List;
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferViewConfig.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferViewConfig.java
index c37fcf7ebae62246fca03321c02c52f27b835d6b..ebb98ef1d7808084263a36336c6a18c9dd005db5 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferViewConfig.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ABufferViewConfig.java
@@ -98,7 +98,7 @@ public abstract class ABufferViewConfig extends SyncableObject<QBufferViewConfig
     @Override
     public void requestAddBuffer(int bufferId, int pos) {
         _requestAddBuffer(bufferId, pos);
-        sync("requestAddBuffer", new String[] { "BufferId", intName }, new Object[] { bufferId, pos });
+        sync("requestAddBuffer", new String[]{"BufferId", intName}, new Object[]{bufferId, pos});
     }
 
     @Override
@@ -110,7 +110,7 @@ public abstract class ABufferViewConfig extends SyncableObject<QBufferViewConfig
     @Override
     public void requestMoveBuffer(int bufferId, int pos) {
         _requestMoveBuffer(bufferId, pos);
-        sync("requestMoveBuffer", new String[] { "BufferId", intName }, new Object[] { bufferId, pos });
+        sync("requestMoveBuffer", new String[]{"BufferId", intName}, new Object[]{bufferId, pos});
     }
 
     @Override
@@ -122,18 +122,18 @@ public abstract class ABufferViewConfig extends SyncableObject<QBufferViewConfig
     @Override
     public void requestRemoveBuffer(int bufferId) {
         _requestRemoveBuffer(bufferId);
-        sync("requestRemoveBuffer", new String[] { "BufferId" }, new Object[] { bufferId });
+        sync("requestRemoveBuffer", new String[]{"BufferId"}, new Object[]{bufferId});
     }
 
     @Override
     public void removeBufferPermanently(int bufferId) {
         _removeBufferPermanently(bufferId);
-        sync("removeBufferPermanently", new String[] { "BufferId" }, new Object[] { bufferId });
+        sync("removeBufferPermanently", new String[]{"BufferId"}, new Object[]{bufferId});
     }
 
     @Override
     public void requestRemoveBufferPermanently(int bufferId) {
         _requestRemoveBufferPermanently(bufferId);
-        sync("requestRemoveBufferPermanently", new String[] { "BufferId" }, new Object[] { bufferId });
+        sync("requestRemoveBufferPermanently", new String[]{"BufferId"}, new Object[]{bufferId});
     }
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/AIgnoreListManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/AIgnoreListManager.java
index 8aaa2153713968497d85076dc79d2380ff9e9a02..0219ca64734465d80b5022ed56ad3959a793fadb 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/AIgnoreListManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/AIgnoreListManager.java
@@ -27,9 +27,7 @@ import java.util.Map;
 
 import de.kuschku.libquassel.message.Message;
 import de.kuschku.libquassel.primitives.types.QVariant;
-import de.kuschku.libquassel.syncables.serializers.IgnoreListManagerSerializer;
 import de.kuschku.libquassel.syncables.types.SyncableObject;
-import de.kuschku.libquassel.syncables.types.impl.IgnoreListManager;
 import de.kuschku.libquassel.syncables.types.interfaces.QIgnoreListManager;
 import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
 
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ANetwork.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ANetwork.java
index 67e1edfb239ac3baf51efc28c541c6d5a06f7e5b..4d8cda1086a89a624cfd5481cb1320bdeb65f581 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ANetwork.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/abstracts/ANetwork.java
@@ -22,7 +22,6 @@
 package de.kuschku.libquassel.syncables.types.abstracts;
 
 import android.support.annotation.NonNull;
-import android.util.Log;
 
 import java.util.List;
 
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IgnoreListManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IgnoreListManager.java
index f4f788135c03a553d657c19d6f3c0d099670737f..ce232172cd7375e50c4c1a7b3fa0624b26cdfb04 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IgnoreListManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IgnoreListManager.java
@@ -157,6 +157,16 @@ public class IgnoreListManager extends AIgnoreListManager {
         return ignoreList;
     }
 
+    @Override
+    public void requestUpdate() {
+        requestUpdate(IgnoreListManagerSerializer.get().toVariantMap(this));
+    }
+
+    @Override
+    public List<? extends IgnoreListItem> ignoreList() {
+        return ignoreList;
+    }
+
     public class IgnoreListItem {
         private final IgnoreType type;
         @NonNull
@@ -173,6 +183,27 @@ public class IgnoreListManager extends AIgnoreListManager {
             this(IgnoreType.of(type), ignoreRule, isRegEx, StrictnessType.of(strictness), ScopeType.of(scope), scopeRule, isActive);
         }
 
+        public IgnoreListItem(IgnoreType type, @Nullable String ignoreRule, boolean isRegEx, StrictnessType strictness, ScopeType scope, @Nullable String scopeRule, boolean isActive) {
+            if (scopeRule == null)
+                scopeRule = "";
+            if (ignoreRule == null)
+                ignoreRule = "";
+
+            this.type = type;
+            this.ignoreRule = new SmartRegEx(ignoreRule, Pattern.CASE_INSENSITIVE, SmartRegEx.Syntax.WILDCARD);
+            this.isRegEx = isRegEx;
+            this.strictness = strictness;
+            this.scope = scope;
+            this.isActive = isActive;
+
+            String[] scopeRules = scopeRule.split(";");
+            this.scopeRule = scopeRule;
+            this.scopeRules = new SmartRegEx[scopeRules.length];
+            for (int i = 0; i < scopeRules.length; i++) {
+                this.scopeRules[i] = new SmartRegEx(scopeRules[i].trim(), Pattern.CASE_INSENSITIVE, SmartRegEx.Syntax.WILDCARD);
+            }
+        }
+
         public IgnoreType getType() {
             return type;
         }
@@ -203,27 +234,6 @@ public class IgnoreListManager extends AIgnoreListManager {
             return isActive;
         }
 
-        public IgnoreListItem(IgnoreType type, @Nullable String ignoreRule, boolean isRegEx, StrictnessType strictness, ScopeType scope, @Nullable String scopeRule, boolean isActive) {
-            if (scopeRule == null)
-                scopeRule = "";
-            if (ignoreRule == null)
-                ignoreRule = "";
-
-            this.type = type;
-            this.ignoreRule = new SmartRegEx(ignoreRule, Pattern.CASE_INSENSITIVE, SmartRegEx.Syntax.WILDCARD);
-            this.isRegEx = isRegEx;
-            this.strictness = strictness;
-            this.scope = scope;
-            this.isActive = isActive;
-
-            String[] scopeRules = scopeRule.split(";");
-            this.scopeRule = scopeRule;
-            this.scopeRules = new SmartRegEx[scopeRules.length];
-            for (int i = 0; i < scopeRules.length; i++) {
-                this.scopeRules[i] = new SmartRegEx(scopeRules[i].trim(), Pattern.CASE_INSENSITIVE, SmartRegEx.Syntax.WILDCARD);
-            }
-        }
-
         public boolean matches(@NonNull String text) {
             return ignoreRule.matches(text, !isRegEx);
         }
@@ -261,14 +271,4 @@ public class IgnoreListManager extends AIgnoreListManager {
                     '}';
         }
     }
-
-    @Override
-    public void requestUpdate() {
-        requestUpdate(IgnoreListManagerSerializer.get().toVariantMap(this));
-    }
-
-    @Override
-    public List<? extends IgnoreListItem> ignoreList() {
-        return ignoreList;
-    }
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewConfig.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewConfig.java
index 7857caac4d4780a8f75ad2ab29e29f5c90524246..d7bea989c721c4035a269fe3c72d0d53341ee634 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewConfig.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewConfig.java
@@ -71,6 +71,7 @@ public interface QBufferViewConfig extends QSyncableObject<QBufferViewConfig> {
     int allowedBufferTypes();
 
     boolean isBufferTypeAllowed(BufferInfo.Type type);
+
     void setBufferTypeAllowed(BufferInfo.Type type, boolean allowed);
 
     @Synced
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewManager.java
index 80a0d9e61360b3cd22210e5f0d797d0b879de61b..227c8efb8276eae793506d2837b7a7bd5e57cd73 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QBufferViewManager.java
@@ -55,5 +55,5 @@ public interface QBufferViewManager extends QSyncableObject<QBufferViewManager>
 
     void checkForNewBuffers(int bufferId);
 
-    Map<Integer,QBufferViewConfig> bufferViewConfigMap();
+    Map<Integer, QBufferViewConfig> bufferViewConfigMap();
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIgnoreListManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIgnoreListManager.java
index 28b139dca242d98a6e0d1ea0a53cc13c15d9dac1..743c31c9bfae6b588eba60ae1ffb1e968fef7435 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIgnoreListManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIgnoreListManager.java
@@ -23,7 +23,6 @@ package de.kuschku.libquassel.syncables.types.interfaces;
 
 import android.support.annotation.NonNull;
 
-import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigSpinnerAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigSpinnerAdapter.java
index 2bea8319140add7050e9d252d4c29b471305488c..dfe270e47c5a0db123dea5a45e00d62a0913c9dd 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigSpinnerAdapter.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/BufferViewConfigSpinnerAdapter.java
@@ -26,7 +26,6 @@ import android.database.DataSetObserver;
 import android.support.annotation.Nullable;
 import android.support.v7.view.ContextThemeWrapper;
 import android.support.v7.widget.ThemedSpinnerAdapter;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -69,7 +68,7 @@ public class BufferViewConfigSpinnerAdapter implements ThemedSpinnerAdapter, Gen
     @Override
     public View getDropDownView(int position, View convertView, ViewGroup parent) {
         LayoutInflater inflater = LayoutInflater.from(new ContextThemeWrapper(parent.getContext(), theme));
-        TextView view = (TextView) inflater.inflate(R.layout.widget_md_spinner_item, parent, false);
+        TextView view = (TextView) inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false);
         QBufferViewConfig config = (QBufferViewConfig) getItem(position);
         view.setText(config == null ? "" : config.bufferViewName());
         return view;
@@ -115,7 +114,7 @@ public class BufferViewConfigSpinnerAdapter implements ThemedSpinnerAdapter, Gen
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
         LayoutInflater inflater = LayoutInflater.from(parent.getContext());
-        TextView view = (TextView) inflater.inflate(R.layout.widget_md_spinner_item, parent, false);
+        TextView view = (TextView) inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false);
         QBufferViewConfig viewConfig = (QBufferViewConfig) getItem(position);
         view.setText(viewConfig == null ? "" : viewConfig.bufferViewName());
         return view;
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 203ce96adb31699d140cfa149e38bdaac5257c1d..4a825e1259d7246a7fca1c06ec96d06373815ef6 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
@@ -39,7 +39,6 @@ import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.SearchView;
 import android.support.v7.widget.Toolbar;
-import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
@@ -76,7 +75,6 @@ import de.kuschku.libquassel.localtypes.buffers.QueryBuffer;
 import de.kuschku.libquassel.message.Message;
 import de.kuschku.libquassel.objects.types.CoreSetupData;
 import de.kuschku.libquassel.objects.types.SetupData;
-import de.kuschku.libquassel.primitives.QMetaType;
 import de.kuschku.libquassel.primitives.types.QVariant;
 import de.kuschku.libquassel.syncables.types.interfaces.QBacklogManager;
 import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel;
@@ -507,7 +505,8 @@ public class MainActivity extends BoundActivity {
                             configData
                     ))));
                 }
-            } break;
+            }
+            break;
         }
     }
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java
index 0f345f9e1c227adefad369f7c8b8c4f807360ad3..8a58e12f5d01b31bd75f4ad751c46b9689d8a2d1 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/chatview/ChatMessageRenderer.java
@@ -274,27 +274,9 @@ public class ChatMessageRenderer {
         }
     }
 
-    private static class MessageStyleContainer {
-        public final
-        @ColorInt
-        int textColor;
-        public final int fontstyle;
-        public final
-        @ColorInt
-        int timeColor;
-        public final
-        @ColorInt
-        int bgColor;
-
-        public MessageStyleContainer(int textColor, int fontstyle, int timeColor, int bgColor) {
-            this.textColor = textColor;
-            this.fontstyle = fontstyle;
-            this.timeColor = timeColor;
-            this.bgColor = bgColor;
-        }
-    }
-
-    public @LayoutRes int getLayoutRes(Message.Type type) {
+    public
+    @LayoutRes
+    int getLayoutRes(Message.Type type) {
         switch (type) {
             default:
             case Plain:
@@ -321,4 +303,24 @@ public class ChatMessageRenderer {
                 return R.layout.widget_chatmessage_error;
         }
     }
+
+    private static class MessageStyleContainer {
+        public final
+        @ColorInt
+        int textColor;
+        public final int fontstyle;
+        public final
+        @ColorInt
+        int timeColor;
+        public final
+        @ColorInt
+        int bgColor;
+
+        public MessageStyleContainer(int textColor, int fontstyle, int timeColor, int bgColor) {
+            this.textColor = textColor;
+            this.fontstyle = fontstyle;
+            this.timeColor = timeColor;
+            this.bgColor = bgColor;
+        }
+    }
 }
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 fd767b28be937b68b42f6e118356f5e2f9977652..dd692cde0b7eb01751ac707cb18349db211a54f7 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
@@ -30,7 +30,6 @@ import android.view.LayoutInflater;
 import android.view.ViewGroup;
 
 import de.kuschku.libquassel.message.Message;
-import de.kuschku.quasseldroid_ng.R;
 import de.kuschku.quasseldroid_ng.ui.theme.AppContext;
 import de.kuschku.util.observables.AutoScroller;
 import de.kuschku.util.observables.callbacks.UICallback;
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 d127c291d0714474d6ac57d51645b618ec73431e..e66a61dee82781048f1bb4feb9367d8e550c6bc5 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
@@ -44,6 +44,8 @@ import de.kuschku.util.observables.callbacks.ElementCallback;
 import de.kuschku.util.observables.callbacks.UICallback;
 import de.kuschku.util.observables.lists.ObservableSortedList;
 
+import static de.kuschku.util.AndroidAssert.assertNotNull;
+
 public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkViewHolder, BufferViewHolder> implements OnBufferClickListener, OnBufferLongClickListener {
     private final AppContext context;
     private final ObservableSortedList<NetworkItem> items;
@@ -138,7 +140,32 @@ public class BufferViewConfigAdapter extends ExpandableRecyclerAdapter<NetworkVi
         final ObservableSortedList<NetworkItem> networkItems = new ObservableSortedList<>(NetworkItem.class, new ObservableSortedList.ItemComparator<NetworkItem>() {
             @Override
             public int compare(NetworkItem o1, NetworkItem o2) {
-                return o1 == null && o2 == null ? 0 : o1 == null ? 1 : o2 == null ? -1 : o1.getNetwork().networkName().compareTo(o2.getNetwork().networkName());
+                assertNotNull(o1);
+                assertNotNull(o2);
+
+                QNetwork network1 = o1.getNetwork();
+                QNetwork network2 = o2.getNetwork();
+
+                if (network1 == null && network2 == null) {
+                    return 0;
+                } else if (network1 == null) {
+                    return 1;
+                } else if (network2 == null) {
+                    return -1;
+                } else {
+                    String name1 = network1.networkName();
+                    String name2 = network2.networkName();
+
+                    if (name1 == null && name2 == null) {
+                        return 0;
+                    } else if (name1 == null) {
+                        return 1;
+                    } else if (name2 == null) {
+                        return -1;
+                    } else {
+                        return name1.compareTo(name2);
+                    }
+                }
             }
 
             @Override
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListCreateActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListCreateActivity.java
index 7a8bd37ce8b6994829b300cbd250004bcb8f04f8..6fcaf8ee0ba8677d2739086ce3efab515308d755 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListCreateActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListCreateActivity.java
@@ -24,7 +24,6 @@ package de.kuschku.quasseldroid_ng.ui.coresettings.chatlist;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.v7.widget.Toolbar;
-import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.widget.CheckBox;
@@ -127,7 +126,8 @@ public class ChatListCreateActivity extends BoundActivity {
                     bufferViewManager.createBufferView(config);
                 }
                 finish();
-            } return true;
+            }
+            return true;
             default:
                 return super.onOptionsItemSelected(item);
         }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListEditActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListEditActivity.java
index 0dc94a3993e6ce982e19800c7ad009872284dfdc..d7403d5fd833d043e9717b9da7e02a7bd3922a69 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListEditActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListEditActivity.java
@@ -35,7 +35,9 @@ import butterknife.Bind;
 import butterknife.ButterKnife;
 import de.kuschku.libquassel.primitives.types.BufferInfo;
 import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig;
+import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
 import de.kuschku.quasseldroid_ng.R;
+import de.kuschku.quasseldroid_ng.ui.coresettings.network.NetworkSpinnerAdapter;
 import de.kuschku.util.backports.Objects;
 import de.kuschku.util.servicebound.BoundActivity;
 
@@ -73,6 +75,7 @@ public class ChatListEditActivity extends BoundActivity {
 
     int id;
     private QBufferViewConfig config;
+    private NetworkSpinnerAdapter networkSpinnerAdapter;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -89,6 +92,9 @@ public class ChatListEditActivity extends BoundActivity {
         setContentView(R.layout.activity_chatlist_edit);
         ButterKnife.bind(this);
 
+        networkSpinnerAdapter = new NetworkSpinnerAdapter(this);
+        network.setAdapter(networkSpinnerAdapter);
+
         setSupportActionBar(toolbar);
         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
     }
@@ -108,6 +114,9 @@ public class ChatListEditActivity extends BoundActivity {
                     if (!Objects.equals(name, config.bufferViewName()))
                         config.setBufferViewName(name);
 
+                    if (config.networkId() != (int) network.getSelectedItemId())
+                        config.setNetworkId((int) network.getSelectedItemId());
+
                     int allowedBufferTypes = config.allowedBufferTypes();
                     config.setBufferTypeAllowed(BufferInfo.Type.CHANNEL, this.showChannels.isChecked());
                     config.setBufferTypeAllowed(BufferInfo.Type.QUERY, this.showQueries.isChecked());
@@ -132,7 +141,8 @@ public class ChatListEditActivity extends BoundActivity {
 
                     finish();
                 }
-            } return true;
+            }
+            return true;
             default:
                 return super.onOptionsItemSelected(item);
         }
@@ -140,6 +150,7 @@ public class ChatListEditActivity extends BoundActivity {
 
     @Override
     protected void onConnected() {
+        networkSpinnerAdapter.setNetworkManager(context.client().networkManager());
         setConfig(context.client().bufferViewManager().bufferViewConfig(id));
     }
 
@@ -148,7 +159,7 @@ public class ChatListEditActivity extends BoundActivity {
 
         if (config != null) {
             name.setText(config.bufferViewName());
-            //network
+            network.setSelection(getSelectedNetworkIndex(config));
             showChannels.setChecked(config.isBufferTypeAllowed(BufferInfo.Type.CHANNEL));
             showQueries.setChecked(config.isBufferTypeAllowed(BufferInfo.Type.QUERY));
             hideInactiveChats.setChecked(config.hideInactiveBuffers());
@@ -159,8 +170,20 @@ public class ChatListEditActivity extends BoundActivity {
         }
     }
 
+    private int getSelectedNetworkIndex(QBufferViewConfig config) {
+        QNetwork network;
+        if (context.client() == null) {
+            return 0;
+        } else if ((network = context.client().networkManager().network(config.networkId())) == null) {
+            return 0;
+        } else {
+            return context.client().networkManager().networks().indexOf(network) + 1;
+        }
+    }
+
     @Override
     protected void onDisconnected() {
+        networkSpinnerAdapter.setNetworkManager(null);
         setConfig(null);
     }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListListActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListListActivity.java
index d76f35b14caab7f778db5fcbffa8ae307be4d3bc..bb39606ab0d2997ec70b23f22a59e0a3451911e2 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListListActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/chatlist/ChatListListActivity.java
@@ -57,6 +57,18 @@ public class ChatListListActivity extends BoundActivity {
     Toolbar toolbar;
 
     ChatListAdapter adapter;
+    OnQBufferViewConfigClickListener clickListener = config -> {
+        if (config != null) {
+            Intent intent = new Intent(this, ChatListEditActivity.class);
+            intent.putExtra("id", config.bufferViewId());
+            startActivity(intent);
+        }
+    };
+    OnQBufferViewConfigDeleteListener deleteListener = config -> {
+        if (manager != null && config != null) {
+            manager.deleteBufferView(config.bufferViewId());
+        }
+    };
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -89,6 +101,14 @@ public class ChatListListActivity extends BoundActivity {
         adapter.setManager(null);
     }
 
+    interface OnQBufferViewConfigClickListener {
+        void onClick(QBufferViewConfig config);
+    }
+
+    interface OnQBufferViewConfigDeleteListener {
+        void onDelete(QBufferViewConfig config);
+    }
+
     private class ChatListAdapter extends RecyclerView.Adapter<ChatListViewHolder> {
         QBufferViewManager manager;
         AdapterUICallbackWrapper wrapper = new AdapterUICallbackWrapper(this);
@@ -121,28 +141,6 @@ public class ChatListListActivity extends BoundActivity {
         }
     }
 
-    interface OnQBufferViewConfigClickListener {
-        void onClick(QBufferViewConfig config);
-    }
-
-    interface OnQBufferViewConfigDeleteListener {
-        void onDelete(QBufferViewConfig config);
-    }
-
-    OnQBufferViewConfigClickListener clickListener = config -> {
-        if (config != null) {
-            Intent intent = new Intent(this, ChatListEditActivity.class);
-            intent.putExtra("id", config.bufferViewId());
-            startActivity(intent);
-        }
-    };
-
-    OnQBufferViewConfigDeleteListener deleteListener = config -> {
-        if (manager != null && config != null) {
-            manager.deleteBufferView(config.bufferViewId());
-        }
-    };
-
     class ChatListViewHolder extends RecyclerView.ViewHolder {
 
         @Bind(R.id.chatlist_name)
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentitySpinnerAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentitySpinnerAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..fd65808ad0ff30a1d6e2db81ec00d007f4c4ae40
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/identity/IdentitySpinnerAdapter.java
@@ -0,0 +1,179 @@
+/*
+ * 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.quasseldroid_ng.ui.coresettings.identity;
+
+import android.content.res.Resources;
+import android.database.DataSetObserver;
+import android.support.annotation.Nullable;
+import android.support.v7.view.ContextThemeWrapper;
+import android.support.v7.widget.ThemedSpinnerAdapter;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import de.kuschku.libquassel.client.IdentityManager;
+import de.kuschku.libquassel.syncables.types.interfaces.QIdentity;
+import de.kuschku.quasseldroid_ng.R;
+import de.kuschku.util.observables.callbacks.GeneralCallback;
+import de.kuschku.util.observables.callbacks.UICallback;
+import de.kuschku.util.observables.lists.ObservableSortedList;
+
+public class IdentitySpinnerAdapter implements ThemedSpinnerAdapter, GeneralCallback {
+    private ObservableSortedList<QIdentity> identities;
+    @Nullable
+    private Resources.Theme theme;
+
+    private Set<DataSetObserver> observers = new HashSet<>();
+
+    public void setIdentityManager(IdentityManager identityManager) {
+        this.identities = identityManager.identities();
+        this.identities.addCallback(new UICallback() {
+            @Override
+            public void notifyItemInserted(int position) {
+                notifyChanged(null);
+            }
+
+            @Override
+            public void notifyItemChanged(int position) {
+                notifyChanged(null);
+            }
+
+            @Override
+            public void notifyItemRemoved(int position) {
+                notifyChanged(null);
+            }
+
+            @Override
+            public void notifyItemMoved(int from, int to) {
+                notifyChanged(null);
+            }
+
+            @Override
+            public void notifyItemRangeInserted(int position, int count) {
+                notifyChanged(null);
+            }
+
+            @Override
+            public void notifyItemRangeChanged(int position, int count) {
+                notifyChanged(null);
+            }
+
+            @Override
+            public void notifyItemRangeRemoved(int position, int count) {
+                notifyChanged(null);
+            }
+        });
+        notifyChanged(null);
+    }
+
+    @Nullable
+    @Override
+    public Resources.Theme getDropDownViewTheme() {
+        return theme;
+    }
+
+    @Override
+    public void setDropDownViewTheme(@Nullable Resources.Theme theme) {
+        this.theme = theme;
+    }
+
+    @Override
+    public View getDropDownView(int position, View convertView, ViewGroup parent) {
+        LayoutInflater inflater = LayoutInflater.from(new ContextThemeWrapper(parent.getContext(), theme));
+        TextView view = (TextView) inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false);
+        QIdentity config = getItem(position);
+        view.setText(config == null ? "" : config.identityName());
+        return view;
+    }
+
+    @Override
+    public void registerDataSetObserver(DataSetObserver observer) {
+        observers.add(observer);
+    }
+
+    @Override
+    public void unregisterDataSetObserver(DataSetObserver observer) {
+        observers.remove(observer);
+    }
+
+    @Override
+    public int getCount() {
+        return identities == null ? 0 : identities.size();
+    }
+
+    @Override
+    public QIdentity getItem(int position) {
+        if (position >= 0 && identities != null && position < identities.size())
+            return identities.get(position);
+        else
+            return null;
+    }
+
+    @Override
+    public long getItemId(int position) {
+        QIdentity identity = getItem(position);
+        if (identity != null)
+            return identity.id();
+        else
+            return -1;
+    }
+
+    @Override
+    public boolean hasStableIds() {
+        return true;
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
+        TextView view = (TextView) inflater.inflate(R.layout.widget_spinner_item_inline, parent, false);
+        QIdentity identity = getItem(position);
+        view.setText(identity == null ? "" : identity.identityName());
+        return view;
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        return 0;
+    }
+
+    @Override
+    public int getViewTypeCount() {
+        return 1;
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return getCount() == 0;
+    }
+
+    @Override
+    public void notifyChanged(Object o) {
+        for (DataSetObserver observer : observers) {
+            observer.onChanged();
+        }
+    }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/AllNetworksItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/AllNetworksItem.java
new file mode 100644
index 0000000000000000000000000000000000000000..25c7f587ffe91524aa6b89e3dec4c9e3930d9cb9
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/AllNetworksItem.java
@@ -0,0 +1,743 @@
+/*
+ * 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.quasseldroid_ng.ui.coresettings.network;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import java.util.List;
+
+import de.kuschku.libquassel.objects.types.NetworkServer;
+import de.kuschku.libquassel.syncables.types.impl.IrcChannel;
+import de.kuschku.libquassel.syncables.types.impl.NetworkInfo;
+import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel;
+import de.kuschku.libquassel.syncables.types.interfaces.QIrcUser;
+import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
+import de.kuschku.quasseldroid_ng.R;
+import de.kuschku.util.irc.chanmodes.IrcModeProvider;
+import de.kuschku.util.observables.callbacks.GeneralCallback;
+
+class AllNetworksItem implements QNetwork {
+    private final Context context;
+
+    public AllNetworksItem(Context context) {
+        this.context = context;
+    }
+
+    @Override
+    public int networkId() {
+        return 0;
+    }
+
+    @Override
+    public boolean isMyNick(String nick) {
+        return false;
+    }
+
+    @Override
+    public boolean isMe(QIrcUser ircuser) {
+        return false;
+    }
+
+    @Override
+    public boolean isChannelName(String channelname) {
+        return false;
+    }
+
+    @Override
+    public boolean isConnected() {
+        return false;
+    }
+
+    @Override
+    public void setConnected(boolean isConnected) {
+
+    }
+
+    @Override
+    public ConnectionState connectionState() {
+        return null;
+    }
+
+    @Override
+    public String prefixToMode(char prefix) {
+        return null;
+    }
+
+    @Override
+    public String prefixToMode(String prefix) {
+        return null;
+    }
+
+    @Override
+    public String modeToPrefix(char mode) {
+        return null;
+    }
+
+    @Override
+    public String modeToPrefix(String mode) {
+        return null;
+    }
+
+    @Override
+    public int modeToIndex(String mode) {
+        return 0;
+    }
+
+    @NonNull
+    @Override
+    public ChannelModeType channelModeType(char mode) {
+        return null;
+    }
+
+    @NonNull
+    @Override
+    public ChannelModeType channelModeType(String mode) {
+        return null;
+    }
+
+    @Override
+    public String networkName() {
+        return context.getString(R.string.all_networks);
+    }
+
+    @Override
+    public String currentServer() {
+        return null;
+    }
+
+    @Override
+    public String myNick() {
+        return null;
+    }
+
+    @Override
+    public int latency() {
+        return 0;
+    }
+
+    @Override
+    public QIrcUser me() {
+        return null;
+    }
+
+    @Override
+    public int identity() {
+        return 0;
+    }
+
+    @NonNull
+    @Override
+    public List<String> nicks() {
+        return null;
+    }
+
+    @NonNull
+    @Override
+    public List<String> channels() {
+        return null;
+    }
+
+    @Override
+    public List<NetworkServer> serverList() {
+        return null;
+    }
+
+    @Override
+    public boolean useRandomServer() {
+        return false;
+    }
+
+    @Override
+    public List<String> perform() {
+        return null;
+    }
+
+    @Override
+    public boolean useAutoIdentify() {
+        return false;
+    }
+
+    @Override
+    public String autoIdentifyService() {
+        return null;
+    }
+
+    @Override
+    public String autoIdentifyPassword() {
+        return null;
+    }
+
+    @Override
+    public boolean useSasl() {
+        return false;
+    }
+
+    @Override
+    public String saslAccount() {
+        return null;
+    }
+
+    @Override
+    public String saslPassword() {
+        return null;
+    }
+
+    @Override
+    public boolean useAutoReconnect() {
+        return false;
+    }
+
+    @Override
+    public int autoReconnectInterval() {
+        return 0;
+    }
+
+    @Override
+    public short autoReconnectRetries() {
+        return 0;
+    }
+
+    @Override
+    public boolean unlimitedReconnectRetries() {
+        return false;
+    }
+
+    @Override
+    public boolean rejoinChannels() {
+        return false;
+    }
+
+    @Override
+    public NetworkInfo networkInfo() {
+        return null;
+    }
+
+    @Override
+    public List<String> prefixes() {
+        return null;
+    }
+
+    @Override
+    public List<String> prefixModes() {
+        return null;
+    }
+
+    @Override
+    public IrcModeProvider modeProvider() {
+        return null;
+    }
+
+    @Override
+    public void determinePrefixes() {
+
+    }
+
+    @Override
+    public boolean supports(String param) {
+        return false;
+    }
+
+    @Override
+    public String support(String param) {
+        return null;
+    }
+
+    @Override
+    public QIrcUser ircUser(String nickname) {
+        return null;
+    }
+
+    @NonNull
+    @Override
+    public List<QIrcUser> ircUsers() {
+        return null;
+    }
+
+    @Override
+    public int ircUserCount() {
+        return 0;
+    }
+
+    @Override
+    public QIrcChannel newIrcChannel(String channelname) {
+        return null;
+    }
+
+    @Nullable
+    @Override
+    public QIrcChannel ircChannel(String channelname) {
+        return null;
+    }
+
+    @NonNull
+    @Override
+    public List<QIrcChannel> ircChannels() {
+        return null;
+    }
+
+    @Override
+    public int ircChannelCount() {
+        return 0;
+    }
+
+    @Override
+    public String codecForServer() {
+        return null;
+    }
+
+    @Override
+    public String codecForEncoding() {
+        return null;
+    }
+
+    @Override
+    public String codecForDecoding() {
+        return null;
+    }
+
+    @Override
+    public String defaultCodecForServer() {
+        return null;
+    }
+
+    @Override
+    public String defaultCodecForEncoding() {
+        return null;
+    }
+
+    @Override
+    public String defaultCodecForDecoding() {
+        return null;
+    }
+
+    @Override
+    public void setDefaultCodecForServer(String name) {
+
+    }
+
+    @Override
+    public void setDefaultCodecForEncoding(String name) {
+
+    }
+
+    @Override
+    public void setDefaultCodecForDecoding(String name) {
+
+    }
+
+    @Override
+    public boolean autoAwayActive() {
+        return false;
+    }
+
+    @Override
+    public void setAutoAwayActive(boolean active) {
+
+    }
+
+    @Override
+    public void _setAutoAwayActive(boolean active) {
+
+    }
+
+    @Override
+    public void setNetworkName(String networkName) {
+
+    }
+
+    @Override
+    public void _setNetworkName(String networkName) {
+
+    }
+
+    @Override
+    public void setCurrentServer(String currentServer) {
+
+    }
+
+    @Override
+    public void _setCurrentServer(String currentServer) {
+
+    }
+
+    @Override
+    public void _setConnected(boolean isConnected) {
+
+    }
+
+    @Override
+    public void setConnectionState(int state) {
+
+    }
+
+    @Override
+    public void _setConnectionState(int state) {
+
+    }
+
+    @Override
+    public void setMyNick(String mynick) {
+
+    }
+
+    @Override
+    public void _setMyNick(String mynick) {
+
+    }
+
+    @Override
+    public void setLatency(int latency) {
+
+    }
+
+    @Override
+    public void _setLatency(int latency) {
+
+    }
+
+    @Override
+    public void setIdentity(int identityId) {
+
+    }
+
+    @Override
+    public void _setIdentity(int identityId) {
+
+    }
+
+    @Override
+    public void setServerList(List<NetworkServer> serverList) {
+
+    }
+
+    @Override
+    public void _setServerList(List<NetworkServer> serverList) {
+
+    }
+
+    @Override
+    public void setUseRandomServer(boolean useRandomServer) {
+
+    }
+
+    @Override
+    public void _setUseRandomServer(boolean useRandomServer) {
+
+    }
+
+    @Override
+    public void setPerform(List<String> performs) {
+
+    }
+
+    @Override
+    public void _setPerform(List<String> performs) {
+
+    }
+
+    @Override
+    public void setUseAutoIdentify(boolean useAutoIdentify) {
+
+    }
+
+    @Override
+    public void _setUseAutoIdentify(boolean useAutoIdentify) {
+
+    }
+
+    @Override
+    public void setAutoIdentifyService(String autoIdentifyService) {
+
+    }
+
+    @Override
+    public void _setAutoIdentifyService(String autoIdentifyService) {
+
+    }
+
+    @Override
+    public void setAutoIdentifyPassword(String autoIdentifyPassword) {
+
+    }
+
+    @Override
+    public void _setAutoIdentifyPassword(String autoIdentifyPassword) {
+
+    }
+
+    @Override
+    public void setUseSasl(boolean useSasl) {
+
+    }
+
+    @Override
+    public void _setUseSasl(boolean useSasl) {
+
+    }
+
+    @Override
+    public void setSaslAccount(String saslAccount) {
+
+    }
+
+    @Override
+    public void _setSaslAccount(String saslAccount) {
+
+    }
+
+    @Override
+    public void setSaslPassword(String saslPassword) {
+
+    }
+
+    @Override
+    public void _setSaslPassword(String saslPassword) {
+
+    }
+
+    @Override
+    public void setUseAutoReconnect(boolean useAutoReconnect) {
+
+    }
+
+    @Override
+    public void _setUseAutoReconnect(boolean useAutoReconnect) {
+
+    }
+
+    @Override
+    public void setAutoReconnectInterval(int autoReconnectInterval) {
+
+    }
+
+    @Override
+    public void _setAutoReconnectInterval(int autoReconnectInterval) {
+
+    }
+
+    @Override
+    public void setAutoReconnectRetries(short autoReconnectRetries) {
+
+    }
+
+    @Override
+    public void _setAutoReconnectRetries(short autoReconnectRetries) {
+
+    }
+
+    @Override
+    public void setUnlimitedReconnectRetries(boolean unlimitedReconnectRetries) {
+
+    }
+
+    @Override
+    public void _setUnlimitedReconnectRetries(boolean unlimitedReconnectRetries) {
+
+    }
+
+    @Override
+    public void setRejoinChannels(boolean rejoinChannels) {
+
+    }
+
+    @Override
+    public void _setRejoinChannels(boolean rejoinChannels) {
+
+    }
+
+    @Override
+    public void setCodecForServer(String codecName) {
+
+    }
+
+    @Override
+    public void _setCodecForServer(String codecName) {
+
+    }
+
+    @Override
+    public void setCodecForEncoding(String codecName) {
+
+    }
+
+    @Override
+    public void _setCodecForEncoding(String codecName) {
+
+    }
+
+    @Override
+    public void setCodecForDecoding(String codecName) {
+
+    }
+
+    @Override
+    public void _setCodecForDecoding(String codecName) {
+
+    }
+
+    @Override
+    public void addSupport(String param) {
+
+    }
+
+    @Override
+    public void _addSupport(String param) {
+
+    }
+
+    @Override
+    public void addSupport(String param, String value) {
+
+    }
+
+    @Override
+    public void _addSupport(String param, String value) {
+
+    }
+
+    @Override
+    public void removeSupport(String param) {
+
+    }
+
+    @Override
+    public void _removeSupport(String param) {
+
+    }
+
+    @Override
+    public void addIrcUser(String hostmask) {
+
+    }
+
+    @Override
+    public void _addIrcUser(String hostmask) {
+
+    }
+
+    @Override
+    public void addIrcChannel(String channel) {
+
+    }
+
+    @Override
+    public void _addIrcChannel(String channel) {
+
+    }
+
+    @Override
+    public QIrcUser updateNickFromMask(String mask) {
+        return null;
+    }
+
+    @Override
+    public QIrcUser _updateNickFromMask(String mask) {
+        return null;
+    }
+
+    @Override
+    public void ircUserNickChanged(String oldNick, String newnick) {
+
+    }
+
+    @Override
+    public void _ircUserNickChanged(String oldNick, String newnick) {
+
+    }
+
+    @Override
+    public void connect() {
+
+    }
+
+    @Override
+    public void _connect() {
+
+    }
+
+    @Override
+    public void disconnect() {
+
+    }
+
+    @Override
+    public void _disconnect() {
+
+    }
+
+    @Override
+    public void setNetworkInfo(NetworkInfo info) {
+
+    }
+
+    @Override
+    public void _setNetworkInfo(NetworkInfo info) {
+
+    }
+
+    @Override
+    public void removeIrcUser(QIrcUser ircuser) {
+
+    }
+
+    @Override
+    public void _removeIrcUser(QIrcUser ircuser) {
+
+    }
+
+    @Override
+    public void removeIrcChannel(QIrcChannel ircChannel) {
+
+    }
+
+    @Override
+    public void _removeIrcChannel(QIrcChannel ircChannel) {
+
+    }
+
+    @Override
+    public void removeChansAndUsers() {
+
+    }
+
+    @Override
+    public void _removeChansAndUsers() {
+
+    }
+
+    @Override
+    public void _addIrcChannel(IrcChannel ircChannel) {
+
+    }
+
+    @Override
+    public void addObserver(GeneralCallback<QNetwork> o) {
+
+    }
+
+    @Override
+    public void deleteObserver(GeneralCallback<QNetwork> o) {
+
+    }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/FakeNetworksWrapper.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/FakeNetworksWrapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..3001c4ebfd652e5831c855cb965ebd07587421c6
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/FakeNetworksWrapper.java
@@ -0,0 +1,114 @@
+/*
+ * 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.quasseldroid_ng.ui.coresettings.network;
+
+import android.content.Context;
+import android.database.DataSetObserver;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
+import de.kuschku.util.observables.callbacks.UICallback;
+import de.kuschku.util.observables.lists.ObservableSortedList;
+
+public class FakeNetworksWrapper {
+    private ObservableSortedList<QNetwork> base;
+    private QNetwork fakeNetwork;
+    private Set<DataSetObserver> observers = new HashSet<>();
+    private UICallback callback = new UICallback() {
+        @Override
+        public void notifyItemInserted(int position) {
+            notifyChanged();
+        }
+
+        @Override
+        public void notifyItemChanged(int position) {
+            notifyChanged();
+        }
+
+        @Override
+        public void notifyItemRemoved(int position) {
+            notifyChanged();
+        }
+
+        @Override
+        public void notifyItemMoved(int from, int to) {
+            notifyChanged();
+        }
+
+        @Override
+        public void notifyItemRangeInserted(int position, int count) {
+            notifyChanged();
+        }
+
+        @Override
+        public void notifyItemRangeChanged(int position, int count) {
+            notifyChanged();
+        }
+
+        @Override
+        public void notifyItemRangeRemoved(int position, int count) {
+            notifyChanged();
+        }
+    };
+
+    public FakeNetworksWrapper(Context context) {
+        this.fakeNetwork = new AllNetworksItem(context);
+    }
+
+    public void setBase(ObservableSortedList<QNetwork> base) {
+        if (this.base != null)
+            this.base.removeCallback(callback);
+        this.base = base;
+        if (this.base != null)
+            this.base.addCallback(callback);
+        notifyChanged();
+    }
+
+    public QNetwork get(int position) {
+        if (position == 0)
+            return fakeNetwork;
+        else if (position > 0 && position <= base.size() && base != null)
+            return base.get(position - 1);
+        else
+            return null;
+    }
+
+    public int getCount() {
+        return base == null ? 1 : base.size() + 1;
+    }
+
+    public void addObserver(DataSetObserver observer) {
+        observers.add(observer);
+    }
+
+    public void removeObserver(DataSetObserver observer) {
+        observers.remove(observer);
+    }
+
+    public void notifyChanged() {
+        for (DataSetObserver observer : observers) {
+            observer.onChanged();
+        }
+    }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkCreateActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkCreateActivity.java
index 0c4f3e27ae9f692f42bc6464ff3fd679b8cefdf0..7df0ba42d81bafcb0b5987a478ecb661fb146742 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkCreateActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkCreateActivity.java
@@ -26,7 +26,6 @@ import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.v7.widget.SwitchCompat;
 import android.support.v7.widget.Toolbar;
-import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
@@ -42,6 +41,7 @@ import butterknife.Bind;
 import butterknife.ButterKnife;
 import de.kuschku.libquassel.syncables.types.impl.NetworkInfo;
 import de.kuschku.quasseldroid_ng.R;
+import de.kuschku.quasseldroid_ng.ui.coresettings.identity.IdentitySpinnerAdapter;
 import de.kuschku.util.servicebound.BoundActivity;
 
 public class NetworkCreateActivity extends BoundActivity {
@@ -100,6 +100,7 @@ public class NetworkCreateActivity extends BoundActivity {
     CheckBox unlimitedAutoReconnectRetries;
 
     int id;
+    IdentitySpinnerAdapter spinnerAdapter = new IdentitySpinnerAdapter();
     private NetworkInfo networkInfo;
 
     public static void expand(final ViewGroup v) {
@@ -109,13 +110,12 @@ public class NetworkCreateActivity extends BoundActivity {
         // Older versions of android (pre API 21) cancel animations for views with a height of 0.
         v.getLayoutParams().height = 1;
         v.setVisibility(View.VISIBLE);
-        Animation a = new Animation()
-        {
+        Animation a = new Animation() {
             @Override
             protected void applyTransformation(float interpolatedTime, Transformation t) {
                 v.getLayoutParams().height = interpolatedTime == 1
                         ? ViewGroup.LayoutParams.WRAP_CONTENT
-                        : (int)(targetHeight * interpolatedTime);
+                        : (int) (targetHeight * interpolatedTime);
                 v.setAlpha(interpolatedTime);
                 v.requestLayout();
             }
@@ -127,21 +127,20 @@ public class NetworkCreateActivity extends BoundActivity {
         };
 
         // 1dp/ms
-        a.setDuration((int)(targetHeight / v.getContext().getResources().getDisplayMetrics().density));
+        a.setDuration((int) (targetHeight / v.getContext().getResources().getDisplayMetrics().density));
         v.startAnimation(a);
     }
 
     public static void collapse(final ViewGroup v) {
         final int initialHeight = v.getMeasuredHeight();
 
-        Animation a = new Animation()
-        {
+        Animation a = new Animation() {
             @Override
             protected void applyTransformation(float interpolatedTime, Transformation t) {
-                if(interpolatedTime == 1){
+                if (interpolatedTime == 1) {
                     v.setVisibility(View.GONE);
-                }else{
-                    v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime);
+                } else {
+                    v.getLayoutParams().height = initialHeight - (int) (initialHeight * interpolatedTime);
                     v.setAlpha(1 - interpolatedTime);
                     v.requestLayout();
                 }
@@ -153,7 +152,7 @@ public class NetworkCreateActivity extends BoundActivity {
             }
         };
 
-        a.setDuration((int)(initialHeight / v.getContext().getResources().getDisplayMetrics().density));
+        a.setDuration((int) (initialHeight / v.getContext().getResources().getDisplayMetrics().density));
         v.startAnimation(a);
     }
 
@@ -175,6 +174,8 @@ public class NetworkCreateActivity extends BoundActivity {
         setSupportActionBar(toolbar);
         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 
+        identity.setAdapter(spinnerAdapter);
+
         useCustomCodecs.setOnCheckedChangeListener(this::updateCustomCodecsVisible);
         updateCustomCodecsVisible(null, useCustomCodecs.isChecked());
 
@@ -225,13 +226,12 @@ public class NetworkCreateActivity extends BoundActivity {
 
             group.getLayoutParams().height = 1;
             group.setVisibility(View.VISIBLE);
-            Animation a = new Animation()
-            {
+            Animation a = new Animation() {
                 @Override
                 protected void applyTransformation(float interpolatedTime, Transformation t) {
                     group.getLayoutParams().height = interpolatedTime == 1
                             ? ViewGroup.LayoutParams.WRAP_CONTENT
-                            : (int)(targetHeight * interpolatedTime);
+                            : (int) (targetHeight * interpolatedTime);
                     group.requestLayout();
                 }
 
@@ -241,19 +241,18 @@ public class NetworkCreateActivity extends BoundActivity {
                 }
             };
 
-            a.setDuration((int)(targetHeight / group.getContext().getResources().getDisplayMetrics().density));
+            a.setDuration((int) (targetHeight / group.getContext().getResources().getDisplayMetrics().density));
             group.startAnimation(a);
         } else {
             final int initialHeight = group.getMeasuredHeight();
 
-            Animation a = new Animation()
-            {
+            Animation a = new Animation() {
                 @Override
                 protected void applyTransformation(float interpolatedTime, Transformation t) {
-                    if(interpolatedTime == 1){
+                    if (interpolatedTime == 1) {
                         group.setVisibility(View.GONE);
-                    }else{
-                        group.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime);
+                    } else {
+                        group.getLayoutParams().height = initialHeight - (int) (initialHeight * interpolatedTime);
                         group.requestLayout();
                     }
                 }
@@ -264,7 +263,7 @@ public class NetworkCreateActivity extends BoundActivity {
                 }
             };
 
-            a.setDuration((int)(initialHeight / group.getContext().getResources().getDisplayMetrics().density));
+            a.setDuration((int) (initialHeight / group.getContext().getResources().getDisplayMetrics().density));
             group.startAnimation(a);
         }
     }
@@ -307,7 +306,8 @@ public class NetworkCreateActivity extends BoundActivity {
 
                     finish();
                 }
-            } return true;
+            }
+            return true;
             default:
                 return super.onOptionsItemSelected(item);
         }
@@ -315,11 +315,11 @@ public class NetworkCreateActivity extends BoundActivity {
 
     @Override
     protected void onConnected() {
-
+        spinnerAdapter.setIdentityManager(context.client().identityManager());
     }
 
     @Override
     protected void onDisconnected() {
-
+        spinnerAdapter.setIdentityManager(null);
     }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkEditActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkEditActivity.java
index 167d65d1624639cd8110f90db2f73ea21bd3bd00..b61ea8b7f57a9fe087b79d8dfb5583bfd091feb1 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkEditActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkEditActivity.java
@@ -26,7 +26,6 @@ import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.v7.widget.SwitchCompat;
 import android.support.v7.widget.Toolbar;
-import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
@@ -41,8 +40,10 @@ import android.widget.Spinner;
 import butterknife.Bind;
 import butterknife.ButterKnife;
 import de.kuschku.libquassel.syncables.types.impl.NetworkInfo;
+import de.kuschku.libquassel.syncables.types.interfaces.QIdentity;
 import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
 import de.kuschku.quasseldroid_ng.R;
+import de.kuschku.quasseldroid_ng.ui.coresettings.identity.IdentitySpinnerAdapter;
 import de.kuschku.util.backports.Objects;
 import de.kuschku.util.servicebound.BoundActivity;
 
@@ -65,43 +66,44 @@ public class NetworkEditActivity extends BoundActivity {
     SwitchCompat useCustomCodecs;
     @Bind(R.id.groupCustomCodecs)
     ViewGroup groupCustomCodecs;
-        @Bind(R.id.codecForServer)
-        EditText codecForServer;
-        @Bind(R.id.codecForEncoding)
-        EditText codecForEncoding;
-        @Bind(R.id.codecForDecoding)
-        EditText codecForDecoding;
+    @Bind(R.id.codecForServer)
+    EditText codecForServer;
+    @Bind(R.id.codecForEncoding)
+    EditText codecForEncoding;
+    @Bind(R.id.codecForDecoding)
+    EditText codecForDecoding;
 
     @Bind(R.id.useAutoIdentify)
     SwitchCompat useAutoIdentify;
     @Bind(R.id.groupAutoIdentify)
     ViewGroup groupAutoIdentify;
-        @Bind(R.id.autoIdentifyService)
-        EditText autoIdentifyService;
-        @Bind(R.id.autoIdentifyPassword)
-        EditText autoIdentifyPassword;
+    @Bind(R.id.autoIdentifyService)
+    EditText autoIdentifyService;
+    @Bind(R.id.autoIdentifyPassword)
+    EditText autoIdentifyPassword;
 
     @Bind(R.id.useSasl)
     SwitchCompat useSasl;
     @Bind(R.id.groupSasl)
     ViewGroup groupSasl;
-        @Bind(R.id.saslAccount)
-        EditText saslAccount;
-        @Bind(R.id.saslPassword)
-        EditText saslPassword;
+    @Bind(R.id.saslAccount)
+    EditText saslAccount;
+    @Bind(R.id.saslPassword)
+    EditText saslPassword;
 
     @Bind(R.id.useAutoReconnect)
     SwitchCompat useAutoReconnect;
     @Bind(R.id.groupAutoReconnect)
     ViewGroup groupAutoReconnect;
-        @Bind(R.id.autoReconnectInterval)
-        EditText autoReconnectInterval;
-        @Bind(R.id.autoReconnectRetries)
-        EditText autoReconnectRetries;
-        @Bind(R.id.unlimitedAutoReconnectRetries)
-        CheckBox unlimitedAutoReconnectRetries;
+    @Bind(R.id.autoReconnectInterval)
+    EditText autoReconnectInterval;
+    @Bind(R.id.autoReconnectRetries)
+    EditText autoReconnectRetries;
+    @Bind(R.id.unlimitedAutoReconnectRetries)
+    CheckBox unlimitedAutoReconnectRetries;
 
     int id;
+    IdentitySpinnerAdapter spinnerAdapter = new IdentitySpinnerAdapter();
     private QNetwork network;
 
     public static void expand(final ViewGroup v) {
@@ -111,13 +113,12 @@ public class NetworkEditActivity extends BoundActivity {
         // Older versions of android (pre API 21) cancel animations for views with a height of 0.
         v.getLayoutParams().height = 1;
         v.setVisibility(View.VISIBLE);
-        Animation a = new Animation()
-        {
+        Animation a = new Animation() {
             @Override
             protected void applyTransformation(float interpolatedTime, Transformation t) {
                 v.getLayoutParams().height = interpolatedTime == 1
                         ? ViewGroup.LayoutParams.WRAP_CONTENT
-                        : (int)(targetHeight * interpolatedTime);
+                        : (int) (targetHeight * interpolatedTime);
                 v.setAlpha(interpolatedTime);
                 v.requestLayout();
             }
@@ -129,21 +130,20 @@ public class NetworkEditActivity extends BoundActivity {
         };
 
         // 1dp/ms
-        a.setDuration((int)(targetHeight / v.getContext().getResources().getDisplayMetrics().density));
+        a.setDuration((int) (targetHeight / v.getContext().getResources().getDisplayMetrics().density));
         v.startAnimation(a);
     }
 
     public static void collapse(final ViewGroup v) {
         final int initialHeight = v.getMeasuredHeight();
 
-        Animation a = new Animation()
-        {
+        Animation a = new Animation() {
             @Override
             protected void applyTransformation(float interpolatedTime, Transformation t) {
-                if(interpolatedTime == 1){
+                if (interpolatedTime == 1) {
                     v.setVisibility(View.GONE);
-                }else{
-                    v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime);
+                } else {
+                    v.getLayoutParams().height = initialHeight - (int) (initialHeight * interpolatedTime);
                     v.setAlpha(1 - interpolatedTime);
                     v.requestLayout();
                 }
@@ -155,7 +155,7 @@ public class NetworkEditActivity extends BoundActivity {
             }
         };
 
-        a.setDuration((int)(initialHeight / v.getContext().getResources().getDisplayMetrics().density));
+        a.setDuration((int) (initialHeight / v.getContext().getResources().getDisplayMetrics().density));
         v.startAnimation(a);
     }
 
@@ -177,6 +177,8 @@ public class NetworkEditActivity extends BoundActivity {
         setSupportActionBar(toolbar);
         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
 
+        identity.setAdapter(spinnerAdapter);
+
         useCustomCodecs.setOnCheckedChangeListener(this::updateCustomCodecsVisible);
         updateCustomCodecsVisible(null, useCustomCodecs.isChecked());
 
@@ -271,7 +273,8 @@ public class NetworkEditActivity extends BoundActivity {
 
                     finish();
                 }
-            } return true;
+            }
+            return true;
             default:
                 return super.onOptionsItemSelected(item);
         }
@@ -280,6 +283,7 @@ public class NetworkEditActivity extends BoundActivity {
     @Override
     protected void onConnected() {
         setNetwork(context.client().networkManager().network(id));
+        spinnerAdapter.setIdentityManager(context.client().identityManager());
     }
 
     private void setNetwork(QNetwork network) {
@@ -288,6 +292,7 @@ public class NetworkEditActivity extends BoundActivity {
         NetworkInfo networkInfo = this.network.networkInfo();
         if (networkInfo != null) {
             networkName.setText(networkInfo.networkName());
+            identity.setSelection(getIdentityPosition(networkInfo));
             useCustomCodecs.setChecked(networkInfo.codecForServer() != null || networkInfo.codecForEncoding() != null || networkInfo.codecForDecoding() != null);
             codecForServer.setText(networkInfo.codecForServer());
             codecForEncoding.setText(networkInfo.codecForEncoding());
@@ -311,8 +316,14 @@ public class NetworkEditActivity extends BoundActivity {
         }
     }
 
+    private int getIdentityPosition(NetworkInfo networkInfo) {
+        QIdentity identity = context.client().identityManager().identity(networkInfo.identity());
+        return context.client().identityManager().identities().indexOf(identity);
+    }
+
     @Override
     protected void onDisconnected() {
         setNetwork(null);
+        spinnerAdapter.setIdentityManager(null);
     }
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkListActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkListActivity.java
index fd93e5901fc9ebf0c4576b8c2b3939f997194b98..9ce432d2122180f4bd1e2412a56ee975b2acf479 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkListActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkListActivity.java
@@ -38,11 +38,8 @@ import android.widget.TextView;
 import butterknife.Bind;
 import butterknife.ButterKnife;
 import de.kuschku.libquassel.client.NetworkManager;
-import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig;
-import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewManager;
 import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
 import de.kuschku.quasseldroid_ng.R;
-import de.kuschku.util.observables.callbacks.UICallback;
 import de.kuschku.util.observables.callbacks.wrappers.AdapterUICallbackWrapper;
 import de.kuschku.util.servicebound.BoundActivity;
 
@@ -60,6 +57,18 @@ public class NetworkListActivity extends BoundActivity {
     Toolbar toolbar;
 
     ChatListAdapter adapter;
+    OnQNetworkClickListener clickListener = network -> {
+        if (network != null) {
+            Intent intent = new Intent(this, NetworkEditActivity.class);
+            intent.putExtra("id", network.networkId());
+            startActivity(intent);
+        }
+    };
+    OnQNetworkDeleteListener deleteListener = network -> {
+        if (manager != null && network != null) {
+            context.client().removeNetwork(network.networkId());
+        }
+    };
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -92,6 +101,14 @@ public class NetworkListActivity extends BoundActivity {
         adapter.setManager(null);
     }
 
+    interface OnQNetworkClickListener {
+        void onClick(QNetwork network);
+    }
+
+    interface OnQNetworkDeleteListener {
+        void onDelete(QNetwork network);
+    }
+
     private class ChatListAdapter extends RecyclerView.Adapter<NetworkViewHolder> {
         NetworkManager manager;
         AdapterUICallbackWrapper wrapper = new AdapterUICallbackWrapper(this);
@@ -124,28 +141,6 @@ public class NetworkListActivity extends BoundActivity {
         }
     }
 
-    interface OnQNetworkClickListener {
-        void onClick(QNetwork network);
-    }
-
-    interface OnQNetworkDeleteListener {
-        void onDelete(QNetwork network);
-    }
-
-    OnQNetworkClickListener clickListener = network -> {
-        if (network != null) {
-            Intent intent = new Intent(this, NetworkEditActivity.class);
-            intent.putExtra("id", network.networkId());
-            startActivity(intent);
-        }
-    };
-
-    OnQNetworkDeleteListener deleteListener = network -> {
-        if (manager != null && network != null) {
-            context.client().removeNetwork(network.networkId());
-        }
-    };
-
     class NetworkViewHolder extends RecyclerView.ViewHolder {
 
         @Bind(R.id.network_name)
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkSpinnerAdapter.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkSpinnerAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..591fea3904a0c2b895de6796936cd62e475e1fb3
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/coresettings/network/NetworkSpinnerAdapter.java
@@ -0,0 +1,130 @@
+/*
+ * 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.quasseldroid_ng.ui.coresettings.network;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.database.DataSetObserver;
+import android.support.annotation.Nullable;
+import android.support.v7.view.ContextThemeWrapper;
+import android.support.v7.widget.ThemedSpinnerAdapter;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import de.kuschku.libquassel.client.NetworkManager;
+import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
+import de.kuschku.quasseldroid_ng.R;
+
+public class NetworkSpinnerAdapter implements ThemedSpinnerAdapter {
+    @Nullable
+    private Resources.Theme theme;
+    private FakeNetworksWrapper wrapper;
+
+    public NetworkSpinnerAdapter(Context context) {
+        wrapper = new FakeNetworksWrapper(context);
+    }
+
+
+    public void setNetworkManager(NetworkManager networkManager) {
+        wrapper.setBase(networkManager.networks());
+    }
+
+    @Nullable
+    @Override
+    public Resources.Theme getDropDownViewTheme() {
+        return theme;
+    }
+
+    @Override
+    public void setDropDownViewTheme(@Nullable Resources.Theme theme) {
+        this.theme = theme;
+    }
+
+    @Override
+    public View getDropDownView(int position, View convertView, ViewGroup parent) {
+        LayoutInflater inflater = LayoutInflater.from(new ContextThemeWrapper(parent.getContext(), theme));
+        TextView view = (TextView) inflater.inflate(R.layout.widget_spinner_item_toolbar, parent, false);
+        QNetwork networks = getItem(position);
+        view.setText(networks == null ? "" : networks.networkName());
+        return view;
+    }
+
+    @Override
+    public void registerDataSetObserver(DataSetObserver observer) {
+        wrapper.addObserver(observer);
+    }
+
+    @Override
+    public void unregisterDataSetObserver(DataSetObserver observer) {
+        wrapper.removeObserver(observer);
+    }
+
+    @Override
+    public int getCount() {
+        return wrapper.getCount();
+    }
+
+    @Override
+    public QNetwork getItem(int position) {
+        return wrapper.get(position);
+    }
+
+    @Override
+    public long getItemId(int position) {
+        QNetwork network = getItem(position);
+        if (network != null)
+            return network.networkId();
+        else
+            return -1;
+    }
+
+    @Override
+    public boolean hasStableIds() {
+        return true;
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
+        TextView view = (TextView) inflater.inflate(R.layout.widget_spinner_item_inline, parent, false);
+        QNetwork networks = getItem(position);
+        view.setText(networks == null ? "" : networks.networkName());
+        return view;
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        return 0;
+    }
+
+    @Override
+    public int getViewTypeCount() {
+        return 1;
+    }
+
+    @Override
+    public boolean isEmpty() {
+        return getCount() == 0;
+    }
+}
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CoreSetupActivity.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CoreSetupActivity.java
index 8bd440dd77f08bbe076f85af05295851eabf349e..6101150239eb2c426c450ab57791b0b7bcc66171 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CoreSetupActivity.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/CoreSetupActivity.java
@@ -33,19 +33,13 @@ import android.view.View;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.UUID;
 
 import butterknife.Bind;
 import butterknife.ButterKnife;
 import de.kuschku.quasseldroid_ng.R;
-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.CoreBackendSelectSlide;
 import de.kuschku.quasseldroid_ng.ui.setup.slides.CoreBackendSetupSlide;
 import de.kuschku.quasseldroid_ng.ui.setup.slides.SlideFragment;
-import de.kuschku.util.accounts.Account;
-import de.kuschku.util.accounts.AccountManager;
 
 public class CoreSetupActivity extends AppCompatActivity implements ValidUpdateCallback {
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/StorageBackendItem.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/StorageBackendItem.java
index 2ed84321415b71479419c54de9ca780aebed75ca..0bbe03c3fac400c9bc0ea9f63aa53a60871504f0 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/StorageBackendItem.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/StorageBackendItem.java
@@ -23,9 +23,7 @@ package de.kuschku.quasseldroid_ng.ui.setup;
 
 import android.content.Context;
 import android.content.res.ColorStateList;
-import android.os.Bundle;
 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;
@@ -37,7 +35,6 @@ import com.mikepenz.materialdrawer.model.AbstractDrawerItem;
 import com.mikepenz.materialdrawer.util.DrawerUIUtils;
 
 import de.kuschku.quasseldroid_ng.R;
-import de.kuschku.util.accounts.Account;
 
 public class StorageBackendItem extends AbstractDrawerItem<StorageBackendItem, StorageBackendItem.ViewHolder> {
     private final String displayName;
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java
index fcd92767f4422fb55fb1a5b6e013bfd89b87425b..2809fac09f32b4df182a984bf0c3873343e168c4 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupCoreSlide.java
@@ -25,7 +25,6 @@ import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.annotation.StringRes;
 import android.support.design.widget.TextInputEditText;
-import android.support.v7.widget.AppCompatEditText;
 import android.text.Editable;
 import android.text.TextWatcher;
 import android.view.LayoutInflater;
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java
index b51e1d726129d97e4d2afdc386f1f0bc39b1d3fc..4cd770a663b75f4a34da8522e22eb8e076ed38ce 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupNameSlide.java
@@ -25,7 +25,6 @@ import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.annotation.StringRes;
 import android.support.design.widget.TextInputEditText;
-import android.support.v7.widget.AppCompatEditText;
 import android.text.Editable;
 import android.text.TextWatcher;
 import android.view.LayoutInflater;
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java
index 75d90be878022d7d92a155da11594d23de9ea531..29305bc836c8bbfd71f8b6d2bcf93e59ce9fbab7 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/AccountSetupUserSlide.java
@@ -25,7 +25,6 @@ import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.annotation.StringRes;
 import android.support.design.widget.TextInputEditText;
-import android.support.v7.widget.AppCompatEditText;
 import android.text.Editable;
 import android.text.TextWatcher;
 import android.view.LayoutInflater;
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSelectSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSelectSlide.java
index 4f72c3c32d42c61a82414d797ea6e74ec846f938..5bc4a47d97e5ba12b15cf71a86d234b1f513ef35 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSelectSlide.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSelectSlide.java
@@ -33,18 +33,11 @@ import android.view.ViewGroup;
 import com.mikepenz.fastadapter.FastAdapter;
 import com.mikepenz.fastadapter.IItem;
 import com.mikepenz.fastadapter.adapters.ItemAdapter;
-import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
 
-import java.util.Iterator;
 import java.util.List;
-import java.util.Set;
 
 import de.kuschku.quasseldroid_ng.R;
-import de.kuschku.quasseldroid_ng.ui.setup.AccountItem;
 import de.kuschku.quasseldroid_ng.ui.setup.StorageBackendItem;
-import de.kuschku.util.accounts.AccountManager;
-import de.kuschku.util.backports.Optional;
-import de.kuschku.util.backports.Optionals;
 
 public class CoreBackendSelectSlide extends SlideFragment {
     private FastAdapter<IItem> fastAdapter;
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSetupSlide.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSetupSlide.java
index 2fcfbf6a1fb0f5c67e7f1800bffb59f073289d97..68ab29647d6432b0dd0e460add3812696b1b0e10 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSetupSlide.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/setup/slides/CoreBackendSetupSlide.java
@@ -23,21 +23,17 @@ package de.kuschku.quasseldroid_ng.ui.setup.slides;
 
 import android.content.Context;
 import android.os.Bundle;
-import android.os.Parcelable;
 import android.support.annotation.Nullable;
 import android.support.annotation.StringRes;
 import android.support.design.widget.TextInputEditText;
 import android.support.design.widget.TextInputLayout;
 import android.support.v7.widget.AppCompatCheckBox;
-import android.support.v7.widget.AppCompatEditText;
 import android.text.Editable;
 import android.text.InputType;
 import android.text.TextWatcher;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.EditText;
 import android.widget.LinearLayout;
 
 import java.util.ArrayList;
@@ -49,14 +45,9 @@ import butterknife.ButterKnife;
 import de.kuschku.quasseldroid_ng.R;
 
 public class CoreBackendSetupSlide extends SlideFragment {
-    private Map<String, InputItemWrapper> items = new HashMap<>();
-
     @Bind(R.id.container)
     LinearLayout container;
-
-    private Map<String, Bundle> storageBackends = new HashMap<>();
     Bundle storageBackend;
-
     TextWatcher watcher = new TextWatcher() {
         @Override
         public void beforeTextChanged(CharSequence s, int start, int count, int after) {
@@ -71,6 +62,8 @@ public class CoreBackendSetupSlide extends SlideFragment {
         public void afterTextChanged(Editable s) {
         }
     };
+    private Map<String, InputItemWrapper> items = new HashMap<>();
+    private Map<String, Bundle> storageBackends = new HashMap<>();
 
     @Override
     public void setArguments(Bundle args) {
@@ -162,44 +155,50 @@ public class CoreBackendSetupSlide extends SlideFragment {
         return R.string.slideAccountcoreDescription;
     }
 
-    private interface InputItemWrapper<T> {
-        String key();
-        T getValue();
-        boolean isValid();
-        View getView(Context context, ViewGroup parent);
-        void onDestroy();
-        void putValue(Bundle in);
-    }
-
     private <T> InputItemWrapper<T> getInputItemWrapper(String key, String type, T defValue) {
         InputItemWrapper result;
         switch (type) {
             case "boolean": {
                 result = new BooleanInputItem(key, (Boolean) defValue);
-            } break;
+            }
+            break;
             case "short":
             case "int":
             case "long":
             case "float":
             case "double": {
                 result = new NumberInputItem(key, (Number) defValue, type);
-            } break;
+            }
+            break;
             default:
             case "string": {
                 result = new StringInputItem(key, (String) defValue);
-            } break;
+            }
+            break;
         }
         return result;
     }
 
+    private interface InputItemWrapper<T> {
+        String key();
+
+        T getValue();
+
+        boolean isValid();
+
+        View getView(Context context, ViewGroup parent);
+
+        void onDestroy();
+
+        void putValue(Bundle in);
+    }
+
     class BooleanInputItem implements InputItemWrapper<Boolean> {
         private final String key;
         private final Boolean defValue;
-
-        private View view;
-
         @Bind(R.id.checkBox)
         AppCompatCheckBox checkBox;
+        private View view;
 
         public BooleanInputItem(String key, Boolean defValue) {
             this.key = key;
@@ -247,15 +246,12 @@ public class CoreBackendSetupSlide extends SlideFragment {
     class NumberInputItem implements InputItemWrapper<Number> {
         private final String key;
         private final Number defValue;
-        private String type;
-
-        private View view;
-
         @Bind(R.id.inputLayout)
         TextInputLayout inputLayout;
-
         @Bind(R.id.editText)
         TextInputEditText editText;
+        private String type;
+        private View view;
 
         public NumberInputItem(String key, Number defValue, String type) {
             this.key = key;
@@ -330,19 +326,24 @@ public class CoreBackendSetupSlide extends SlideFragment {
             switch (type) {
                 case "short": {
                     in.putShort(key, (short) getValue());
-                } break;
+                }
+                break;
                 case "int": {
                     in.putInt(key, (int) getValue());
-                } break;
+                }
+                break;
                 case "long": {
                     in.putLong(key, (long) getValue());
-                } break;
+                }
+                break;
                 case "float": {
                     in.putFloat(key, (float) getValue());
-                } break;
+                }
+                break;
                 case "double": {
                     in.putDouble(key, (double) getValue());
-                } break;
+                }
+                break;
             }
         }
     }
@@ -350,14 +351,11 @@ public class CoreBackendSetupSlide extends SlideFragment {
     class StringInputItem implements InputItemWrapper<String> {
         private final String key;
         private final String defValue;
-
-        private View view;
-
         @Bind(R.id.inputLayout)
         TextInputLayout inputLayout;
-
         @Bind(R.id.editText)
         TextInputEditText editText;
+        private View view;
 
         public StringInputItem(String key, String defValue) {
             this.key = key;
diff --git a/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java b/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java
index af6b7effe425a5f953053d5270b9aa9d4c2821b6..e4bfdfec4df137eda30cd425d666e02812440444 100644
--- a/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java
+++ b/app/src/main/java/de/kuschku/util/servicebound/BoundActivity.java
@@ -28,7 +28,6 @@ import android.os.IBinder;
 import android.support.annotation.Nullable;
 import android.support.annotation.StyleRes;
 import android.support.v7.app.AppCompatActivity;
-import android.util.Log;
 
 import org.greenrobot.eventbus.Subscribe;
 import org.greenrobot.eventbus.ThreadMode;
@@ -40,7 +39,6 @@ import de.kuschku.quasseldroid_ng.service.QuasselService;
 import de.kuschku.quasseldroid_ng.ui.chat.util.ServiceHelper;
 import de.kuschku.quasseldroid_ng.ui.theme.AppContext;
 import de.kuschku.quasseldroid_ng.ui.theme.AppTheme;
-import de.kuschku.util.AndroidAssert;
 import de.kuschku.util.accounts.Account;
 
 public abstract class BoundActivity extends AppCompatActivity {
@@ -115,9 +113,11 @@ public abstract class BoundActivity extends AppCompatActivity {
             provider.event.register(this);
     }
 
-    protected void onConnected() {}
+    protected void onConnected() {
+    }
 
-    protected void onDisconnected() {}
+    protected void onDisconnected() {
+    }
 
     @Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
     public void onConnectionStatusChange(ConnectionChangeEvent event) {
diff --git a/app/src/main/res/layout/activity_chatlist_edit.xml b/app/src/main/res/layout/activity_chatlist_edit.xml
index 2fe00f61e9ad0eabab00ac7ec15bf79d69e5cf27..877ee28bc9a1d551ca72bf0188938a216f1e700c 100644
--- a/app/src/main/res/layout/activity_chatlist_edit.xml
+++ b/app/src/main/res/layout/activity_chatlist_edit.xml
@@ -23,10 +23,11 @@
 
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical"
-    android:background="?attr/colorBackground">
+    android:background="?attr/colorBackground"
+    android:orientation="vertical">
 
     <android.support.design.widget.AppBarLayout
         android:id="@+id/appBar"
@@ -46,9 +47,9 @@
         android:layout_height="match_parent">
 
         <LinearLayout
-            android:orientation="vertical"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:orientation="vertical"
             android:padding="16dp">
 
             <android.support.design.widget.TextInputLayout
@@ -65,7 +66,7 @@
 
             <LinearLayout
                 android:layout_width="match_parent"
-                android:layout_height="72dp"
+                android:layout_height="wrap_content"
                 android:orientation="vertical"
                 android:paddingTop="16dp">
 
@@ -73,19 +74,20 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center_vertical"
-                    android:textSize="12sp"
                     android:paddingBottom="8dp"
                     android:paddingLeft="3dp"
                     android:paddingRight="3dp"
-                    android:text="Network"/>
+                    android:text="Network"
+                    android:textSize="12sp"/>
 
                 <android.support.v7.widget.AppCompatSpinner
                     android:id="@+id/network"
                     style="@style/Base.Widget.AppCompat.Spinner.Underlined"
                     android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
+                    android:layout_height="48dp"
                     android:layout_gravity="center_vertical"
-                    android:paddingBottom="8dp"/>
+                    android:layout_marginBottom="8dp"
+                    app:popupTheme="@style/AppTheme.PopupOverlay"/>
 
             </LinearLayout>
 
@@ -127,7 +129,7 @@
 
             <LinearLayout
                 android:layout_width="match_parent"
-                android:layout_height="72dp"
+                android:layout_height="wrap_content"
                 android:orientation="vertical"
                 android:paddingTop="16dp">
 
@@ -135,19 +137,20 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center_vertical"
-                    android:textSize="12sp"
                     android:paddingBottom="8dp"
                     android:paddingLeft="3dp"
                     android:paddingRight="3dp"
-                    android:text="Minimum Activity"/>
+                    android:text="Minimum Activity"
+                    android:textSize="12sp"/>
 
                 <android.support.v7.widget.AppCompatSpinner
                     android:id="@+id/minimumActivity"
                     style="@style/Base.Widget.AppCompat.Spinner.Underlined"
                     android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
+                    android:layout_height="48dp"
                     android:layout_gravity="center_vertical"
-                    android:paddingBottom="8dp"/>
+                    android:layout_marginBottom="8dp"
+                    app:popupTheme="@style/AppTheme.PopupOverlay"/>
 
             </LinearLayout>
 
diff --git a/app/src/main/res/layout/activity_network_edit.xml b/app/src/main/res/layout/activity_network_edit.xml
index 3f46e15a9700ff231e3c92d46a59b49a39a6c4ab..f8d64bd4bf89a6b5a5d5a907f5d72f2ea3733efb 100644
--- a/app/src/main/res/layout/activity_network_edit.xml
+++ b/app/src/main/res/layout/activity_network_edit.xml
@@ -23,6 +23,7 @@
 
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="?attr/colorBackground"
@@ -65,7 +66,7 @@
 
             <LinearLayout
                 android:layout_width="match_parent"
-                android:layout_height="72dp"
+                android:layout_height="wrap_content"
                 android:orientation="vertical"
                 android:paddingTop="16dp">
 
@@ -73,7 +74,7 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center_vertical"
-                    android:paddingBottom="8dp"
+                    android:layout_marginBottom="8dp"
                     android:paddingLeft="3dp"
                     android:paddingRight="3dp"
                     android:text="identity"
@@ -83,9 +84,10 @@
                     android:id="@+id/identity"
                     style="@style/Base.Widget.AppCompat.Spinner.Underlined"
                     android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
+                    android:layout_height="48dp"
                     android:layout_gravity="center_vertical"
-                    android:paddingBottom="8dp"/>
+                    android:layout_marginBottom="8dp"
+                    app:popupTheme="@style/AppTheme.PopupOverlay"/>
 
             </LinearLayout>
 
diff --git a/app/src/main/res/layout/widget_md_spinner_item.xml b/app/src/main/res/layout/widget_spinner_item_inline.xml
similarity index 75%
rename from app/src/main/res/layout/widget_md_spinner_item.xml
rename to app/src/main/res/layout/widget_spinner_item_inline.xml
index 0a057aeeff8997648b3a0d42564f46b19d11b87d..8c20aa8c8f39fa7241be4a949acd912bcd15dc2a 100644
--- a/app/src/main/res/layout/widget_md_spinner_item.xml
+++ b/app/src/main/res/layout/widget_spinner_item_inline.xml
@@ -20,11 +20,9 @@
   -->
 
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@android:id/text1"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:gravity="center_vertical"
-    android:minHeight="?attr/actionBarSize"
-    android:paddingLeft="16dp"
-    android:paddingRight="16dp"
-    android:textAppearance="?android:attr/textAppearanceListItemSmall" />
+          android:id="@android:id/text1"
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          android:gravity="center_vertical"
+          android:minHeight="48dp"
+          android:textAppearance="?android:attr/textAppearanceListItemSmall" />
diff --git a/app/src/main/res/layout/widget_spinner_item_toolbar.xml b/app/src/main/res/layout/widget_spinner_item_toolbar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f7b95bc327188cf4003e40ea19cdd62ad1094341
--- /dev/null
+++ b/app/src/main/res/layout/widget_spinner_item_toolbar.xml
@@ -0,0 +1,30 @@
+<?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/>.
+  -->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+          android:id="@android:id/text1"
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          android:gravity="center_vertical"
+          android:minHeight="?attr/actionBarSize"
+          android:paddingLeft="16dp"
+          android:paddingRight="16dp"
+          android:textAppearance="?android:attr/textAppearanceListItemSmall"/>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f7778fbf8cbe5abc5c65483650beb2c608f21299..b9de9c4ae9c6e59927b92c56aab50e11ac3c71a6 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -101,4 +101,6 @@
     <string name="action_unhide">Make Visible</string>
     <string name="action_hide_temp">Hide Temporarily</string>
     <string name="action_hide_perm">Hide Permanently</string>
+
+    <string name="all_networks">All Networks</string>
 </resources>