diff --git a/app/src/main/java/de/kuschku/libquassel/CoreConnection.java b/app/src/main/java/de/kuschku/libquassel/CoreConnection.java
index 8d1967cfe0fa68a5c303bd6c4a0b073ff00962b9..291e2a4d91e66f02b23728e60e682e105e5dee67 100644
--- a/app/src/main/java/de/kuschku/libquassel/CoreConnection.java
+++ b/app/src/main/java/de/kuschku/libquassel/CoreConnection.java
@@ -37,8 +37,8 @@ import java.util.Locale;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.client.ClientData;
-import de.kuschku.libquassel.client.QClient;
 import de.kuschku.libquassel.events.ConnectionChangeEvent;
 import de.kuschku.libquassel.events.GeneralErrorEvent;
 import de.kuschku.libquassel.events.HandshakeFailedEvent;
@@ -75,7 +75,7 @@ public class CoreConnection {
     @NonNull
     private final BusProvider busProvider;
     @NonNull
-    private final QClient client;
+    private final Client client;
     @NonNull
     private final CertificateManager certificateManager;
     @Nullable
@@ -96,7 +96,7 @@ public class CoreConnection {
     public CoreConnection(@NonNull final ServerAddress address,
                           @NonNull final ClientData clientData,
                           @NonNull final BusProvider busProvider,
-                          @NonNull final QClient client,
+                          @NonNull final Client client,
                           @NonNull CertificateManager certificateManager) {
         this.address = address;
         this.clientData = clientData;
diff --git a/app/src/main/java/de/kuschku/libquassel/IProtocolHandler.java b/app/src/main/java/de/kuschku/libquassel/IProtocolHandler.java
index af97caddf30598f5f7bd9077dab25969063545bd..fdf74804bddf5c5fbf5108656f1b73b6c99c2987 100644
--- a/app/src/main/java/de/kuschku/libquassel/IProtocolHandler.java
+++ b/app/src/main/java/de/kuschku/libquassel/IProtocolHandler.java
@@ -23,7 +23,7 @@ package de.kuschku.libquassel;
 
 import android.support.annotation.NonNull;
 
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.functions.types.Heartbeat;
 import de.kuschku.libquassel.functions.types.HeartbeatReply;
 import de.kuschku.libquassel.functions.types.InitDataFunction;
@@ -60,5 +60,5 @@ public interface IProtocolHandler {
     void onEventMainThread(HeartbeatReply message);
 
     @NonNull
-    QClient getClient();
+    Client getClient();
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java b/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java
index 2bb87f1c9c87c1dff0331f8edcbebb590407d7df..d626b07bd26459997e2d67d296b2a3bba39d95be 100644
--- a/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java
+++ b/app/src/main/java/de/kuschku/libquassel/ProtocolHandler.java
@@ -26,7 +26,7 @@ import android.support.annotation.NonNull;
 import org.joda.time.DateTime;
 import org.joda.time.Interval;
 
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.events.ConnectionChangeEvent;
 import de.kuschku.libquassel.events.CoreSetupRequiredEvent;
 import de.kuschku.libquassel.events.GeneralErrorEvent;
@@ -51,11 +51,11 @@ import static de.kuschku.util.AndroidAssert.assertNotNull;
 
 public class ProtocolHandler implements IProtocolHandler {
     @NonNull
-    public final QClient client;
+    public final Client client;
     @NonNull
     private final BusProvider busProvider;
 
-    public ProtocolHandler(@NonNull BusProvider busProvider, @NonNull QClient client) {
+    public ProtocolHandler(@NonNull BusProvider busProvider, @NonNull Client client) {
         this.busProvider = busProvider;
         this.busProvider.handle.register(this);
         this.busProvider.event.register(this);
@@ -157,7 +157,7 @@ public class ProtocolHandler implements IProtocolHandler {
 
     @NonNull
     @Override
-    public QClient getClient() {
+    public Client getClient() {
         return client;
     }
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/QuasselClient.java b/app/src/main/java/de/kuschku/libquassel/QuasselClient.java
index c030f65889a67fa77a2deb6069c6bb2ebc3098c2..31be8d48ae9c5fc2365da6be8fb293bc5bda09ea 100644
--- a/app/src/main/java/de/kuschku/libquassel/QuasselClient.java
+++ b/app/src/main/java/de/kuschku/libquassel/QuasselClient.java
@@ -23,8 +23,8 @@ package de.kuschku.libquassel;
 
 import android.support.annotation.NonNull;
 
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.client.ClientData;
-import de.kuschku.libquassel.client.QClient;
 import de.kuschku.libquassel.localtypes.backlogstorage.BacklogStorage;
 import de.kuschku.libquassel.ssl.CertificateManager;
 import de.kuschku.util.ServerAddress;
@@ -37,7 +37,7 @@ public class QuasselClient {
     @NonNull
     public final ProtocolHandler handler;
     @NonNull
-    public final QClient client;
+    public final Client client;
     @NonNull
     public final CertificateManager certificateManager;
     @NonNull
@@ -53,7 +53,7 @@ public class QuasselClient {
         this.provider = provider;
         this.data = data;
         this.certificateManager = certificateManager;
-        this.client = new QClient(provider, backlogStorage);
+        this.client = new Client(provider, backlogStorage);
         this.handler = new ProtocolHandler(provider, this.client);
     }
 
diff --git a/app/src/main/java/de/kuschku/libquassel/client/AClient.java b/app/src/main/java/de/kuschku/libquassel/client/AClient.java
index 5775c77aec4d0b13956468b208abd82d4769901b..92cc32996ee15fd16378f9949b6ba514b9f74c79 100644
--- a/app/src/main/java/de/kuschku/libquassel/client/AClient.java
+++ b/app/src/main/java/de/kuschku/libquassel/client/AClient.java
@@ -39,10 +39,10 @@ import de.kuschku.libquassel.syncables.types.interfaces.QIdentity;
 import static de.kuschku.util.AndroidAssert.fail;
 import static junit.framework.Assert.assertNotNull;
 
-public abstract class AClient<T extends AClient<T>> extends SyncableObject<T> implements QClientInterface {
+public abstract class AClient<T extends AClient<T>> extends SyncableObject<T> implements QClient {
     @Override
     public void sendInput(BufferInfo info, String message) {
-        smartRpc("sendInput(BufferInfo, QString)", info, message);
+        smartRpc("sendInput(BufferInfo,QString)", info, message);
     }
 
     @Override
@@ -82,7 +82,7 @@ public abstract class AClient<T extends AClient<T>> extends SyncableObject<T> im
 
     @Override
     public void removeNetwork(int id) {
-        smartRpc("2removeNetwork(NetworkId)", id);
+        smartRpc("removeNetwork(NetworkId)", id);
     }
 
     @Override
diff --git a/app/src/main/java/de/kuschku/libquassel/client/QBufferManager.java b/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java
similarity index 97%
rename from app/src/main/java/de/kuschku/libquassel/client/QBufferManager.java
rename to app/src/main/java/de/kuschku/libquassel/client/BufferManager.java
index 9a8c9a9ec35fc2b874351a5b493e124a17908240..f415a1edaaf7fc76bb0c489fb6d9077848d48f0b 100644
--- a/app/src/main/java/de/kuschku/libquassel/client/QBufferManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/client/BufferManager.java
@@ -41,16 +41,16 @@ import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
 
 import static de.kuschku.util.AndroidAssert.assertNotNull;
 
-public class QBufferManager {
+public class BufferManager {
     @NonNull
     private final Map<Integer, Buffer> buffers = new HashMap<>();
-    private final QClient client;
+    private final Client client;
 
     // We cache those, because the networks might not be initialized at begin
     @NonNull
     private Map<String, Set<BufferInfo>> bufferInfos = new HashMap<>();
 
-    public QBufferManager(QClient client) {
+    public BufferManager(Client client) {
         this.client = client;
     }
 
diff --git a/app/src/main/java/de/kuschku/libquassel/client/Client.java b/app/src/main/java/de/kuschku/libquassel/client/Client.java
new file mode 100644
index 0000000000000000000000000000000000000000..a94de792c009797f6d3f543073490696252599ce
--- /dev/null
+++ b/app/src/main/java/de/kuschku/libquassel/client/Client.java
@@ -0,0 +1,444 @@
+/*
+ * 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.libquassel.client;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.util.Log;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import de.kuschku.libquassel.BusProvider;
+import de.kuschku.libquassel.events.ConnectionChangeEvent;
+import de.kuschku.libquassel.events.CriticalErrorEvent;
+import de.kuschku.libquassel.events.LagChangedEvent;
+import de.kuschku.libquassel.events.PasswordChangeEvent;
+import de.kuschku.libquassel.events.StatusMessageEvent;
+import de.kuschku.libquassel.functions.types.InitRequestFunction;
+import de.kuschku.libquassel.functions.types.SyncFunction;
+import de.kuschku.libquassel.localtypes.NotificationManager;
+import de.kuschku.libquassel.localtypes.backlogstorage.BacklogStorage;
+import de.kuschku.libquassel.message.Message;
+import de.kuschku.libquassel.objects.types.CoreStatus;
+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;
+import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewManager;
+import de.kuschku.libquassel.syncables.types.interfaces.QIgnoreListManager;
+import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
+import de.kuschku.libquassel.syncables.types.interfaces.QNetworkConfig;
+
+import static de.kuschku.util.AndroidAssert.assertNotNull;
+
+public class Client extends AClient {
+
+// synced
+
+    @NonNull
+    private final NetworkManager networkManager;
+    @NonNull
+    private final BufferManager bufferManager;
+    @NonNull
+    private final IdentityManager identityManager;
+    @NonNull
+    private final BacklogStorage backlogStorage;
+    @NonNull
+    private final NotificationManager notificationManager;
+    private final List<String> initRequests = new LinkedList<>();
+    private final List<Integer> backlogRequests = new LinkedList<>();
+    private final Map<String, List<SyncFunction>> bufferedSyncs = new HashMap<>();
+    private final QBacklogManager backlogManager;
+    private QBufferViewManager bufferViewManager;
+    // local
+    private QBufferSyncer bufferSyncer;
+    private QAliasManager aliasManager;
+    private QIgnoreListManager ignoreListManager;
+    private QNetworkConfig globalNetworkConfig;
+    private CoreStatus core;
+    private CoreInfo coreInfo;
+    private long latency;
+    private ConnectionChangeEvent.Status connectionStatus;
+
+    public Client(@NonNull BusProvider provider, @NonNull BacklogStorage backlogStorage) {
+        this.provider = provider;
+        this.networkManager = new NetworkManager(this);
+        this.bufferManager = new BufferManager(this);
+        this.identityManager = new IdentityManager(this);
+        this.backlogStorage = backlogStorage;
+        backlogStorage.setClient(this);
+        this.backlogManager = new BacklogManager(this, backlogStorage);
+        this.notificationManager = new NotificationManager(this);
+    }
+
+    public QBufferViewManager bufferViewManager() {
+        return bufferViewManager;
+    }
+
+    public QBufferSyncer bufferSyncer() {
+        return bufferSyncer;
+    }
+
+    public QAliasManager aliasManager() {
+        return aliasManager;
+    }
+
+    public QBacklogManager backlogManager() {
+        return backlogManager;
+    }
+
+    public QIgnoreListManager ignoreListManager() {
+        return ignoreListManager;
+    }
+
+    public QNetworkConfig globalNetworkConfig() {
+        return globalNetworkConfig;
+    }
+
+    @Override
+    public void _displayMsg(Message msg) {
+        backlogStorage.insertMessages(msg);
+    }
+
+    @Override
+    public void _displayStatusMsg(String network, String message) {
+        assertNotNull(provider);
+
+        provider.sendEvent(new StatusMessageEvent(network, message));
+    }
+
+    @Override
+    public void _bufferInfoUpdated(BufferInfo bufferInfo) {
+        bufferManager.updateBufferInfo(bufferInfo);
+    }
+
+    @Override
+    public void _identityCreated(Identity identity) {
+        identityManager.createIdentity(identity);
+    }
+
+    @Override
+    public void _identityRemoved(int id) {
+        identityManager.removeIdentity(id);
+    }
+
+    @Override
+    public void _networkCreated(int network) {
+        networkManager.createNetwork(network);
+    }
+
+    @Override
+    public void _networkRemoved(int network) {
+        networkManager.removeNetwork(network);
+    }
+
+    @Override
+    public void _passwordChanged(long peerPtr, boolean success) {
+        assertNotNull(provider);
+
+        if (peerPtr != 0x0000000000000000L)
+            provider.sendEvent(new CriticalErrorEvent("Your core has a critical vulnerability. Please update it."));
+        provider.sendEvent(new PasswordChangeEvent(success));
+    }
+
+    @Override
+    public void ___objectRenamed__(String type, String oldName, String newName) {
+
+    }
+
+    public ConnectionChangeEvent.Status connectionStatus() {
+        return connectionStatus;
+    }
+
+    public void setConnectionStatus(@NonNull ConnectionChangeEvent.Status connectionStatus) {
+        assertNotNull(provider);
+
+        this.connectionStatus = connectionStatus;
+        if (connectionStatus == ConnectionChangeEvent.Status.LOADING_BACKLOG) {
+            setConnectionStatus(ConnectionChangeEvent.Status.CONNECTED);
+        }
+        provider.sendEvent(new ConnectionChangeEvent(connectionStatus));
+    }
+
+    @Nullable
+    public Object unsafe_getObjectByIdentifier(@NonNull String className, @NonNull String objectName) {
+        switch (className) {
+            case "AliasManager": {
+                assertNotNull(aliasManager);
+                return aliasManager;
+            }
+            case "BacklogManager": {
+                assertNotNull(backlogManager);
+                return backlogManager;
+            }
+            case "BufferSyncer": {
+                assertNotNull(bufferSyncer);
+                return bufferSyncer;
+            }
+            case "BufferViewConfig": {
+                assertNotNull(bufferViewManager);
+                return bufferViewManager.bufferViewConfig(Integer.parseInt(objectName));
+            }
+            case "BufferViewManager": {
+                assertNotNull(bufferViewManager);
+                return bufferViewManager;
+            }
+            case "CoreInfo": {
+                assertNotNull(coreInfo);
+                return coreInfo;
+            }
+            case "Identity": {
+                return identityManager.identity(Integer.parseInt(objectName));
+            }
+            case "IgnoreListManager": {
+                assertNotNull(ignoreListManager);
+                return ignoreListManager;
+            }
+            case "IrcChannel": {
+                String[] split = objectName.split("/");
+                if (split.length != 2) {
+                    Log.w("libquassel", "malformatted object name: " + objectName);
+                    return null;
+                }
+                QNetwork network = networkManager.network(Integer.parseInt(split[0]));
+                if (network == null) {
+                    Log.w("libquassel", "Network doesn’t exist yet: " + objectName);
+                    return null;
+                }
+                return network.ircChannel(split[1]);
+            }
+            case "IrcUser": {
+                String[] split = objectName.split("/");
+                if (split.length != 2) {
+                    Log.w("libquassel", "malformatted object name: " + objectName);
+                    return null;
+                }
+                QNetwork network = networkManager.network(Integer.parseInt(split[0]));
+                if (network == null) {
+                    Log.w("libquassel", "Network doesn’t exist yet: " + objectName);
+                    return null;
+                }
+                return network.ircUser(split[1]);
+            }
+            case "Network": {
+                return networkManager.network(Integer.parseInt(objectName));
+            }
+            case "NetworkConfig": {
+                assertNotNull(globalNetworkConfig);
+                return globalNetworkConfig;
+            }
+            case "NetworkInfo": {
+                QNetwork network = networkManager().network(Integer.parseInt(objectName));
+                if (network == null)
+                    return null;
+                else
+                    return network.networkInfo();
+            }
+            default: {
+                Log.w("libquassel", "Unknown type: " + className + " : " + objectName);
+                return null;
+            }
+        }
+    }
+
+    @Nullable
+    public <T> T getObjectByIdentifier(@NonNull String className, @NonNull String objectName) {
+        Class<T> cl = QMetaTypeRegistry.<T>getType(className).cl;
+        return getObjectByIdentifier(cl, className, objectName);
+    }
+
+    @Nullable
+    public <T> T getObjectByIdentifier(@NonNull Class<T> cl, @NonNull String objectName) {
+        return getObjectByIdentifier(cl, cl.getSimpleName(), objectName);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Nullable
+    public <T> T getObjectByIdentifier(@NonNull Class<T> cl, @NonNull String className, @NonNull String objectName) {
+        Object obj = unsafe_getObjectByIdentifier(className, objectName);
+        // The fancy version of "instanceof" that works with erased types, too
+        if (obj == null || !cl.isAssignableFrom(obj.getClass()))
+            return null;
+        else
+            return (T) obj;
+    }
+
+    public void init(@NonNull SessionState sessionState) {
+        networkManager.init(sessionState.NetworkIds);
+        identityManager.init(sessionState.Identities);
+        bufferManager.init(sessionState.BufferInfos);
+
+        requestInitObject("BufferSyncer", "");
+        requestInitObject("BufferViewManager", "");
+        requestInitObject("AliasManager", "");
+        requestInitObject("NetworkConfig", "GlobalNetworkConfig");
+        requestInitObject("IgnoreListManager", "");
+        //sendInitRequest("TransferManager", "");
+        // This thing never gets sent...
+    }
+
+    @NonNull
+    public NetworkManager networkManager() {
+        return networkManager;
+    }
+
+    @NonNull
+    public BufferManager bufferManager() {
+        return bufferManager;
+    }
+
+    @NonNull
+    public IdentityManager identityManager() {
+        return identityManager;
+    }
+
+    public void requestInitObject(@NonNull String className, String objectName) {
+        assertNotNull(provider);
+
+        if (connectionStatus() == ConnectionChangeEvent.Status.INITIALIZING_DATA)
+            initRequests.add(hashName(className, objectName));
+
+        provider.dispatch(new InitRequestFunction(className, objectName));
+    }
+
+    public void initObject(String className, @NonNull String objectName, @NonNull SyncableObject object) {
+        assertNotNull(provider);
+
+        if (connectionStatus() == ConnectionChangeEvent.Status.INITIALIZING_DATA) {
+            initRequests.remove(hashName(className, objectName));
+            if (initRequests.isEmpty()) {
+                setConnectionStatus(ConnectionChangeEvent.Status.LOADING_BACKLOG);
+            }
+        }
+
+        object.init(objectName, provider, this);
+
+        // Execute cached sync requests
+        if (bufferedSyncs.size() > 0) {
+            String key = hashName(className, objectName);
+            if (bufferedSyncs.containsKey(key)) {
+                List<SyncFunction> functions = bufferedSyncs.get(key);
+                for (SyncFunction function : functions)
+                    provider.handle(function);
+                bufferedSyncs.remove(key);
+            }
+        }
+    }
+
+    @NonNull
+    private String hashName(String className, String objectName) {
+        return className + ":" + objectName;
+    }
+
+    public void initBacklog(int id) {
+        backlogRequests.remove((Integer) id);
+        requestInitBacklog(id, 0);
+        if (backlogRequests.isEmpty())
+            setConnectionStatus(ConnectionChangeEvent.Status.CONNECTED);
+    }
+
+    public void requestInitBacklog(int id, int amount) {
+        backlogRequests.add(id);
+        backlogManager.requestBacklogInitial(id, amount);
+    }
+
+    public void setLatency(long latency) {
+        assertNotNull(provider);
+
+        this.latency = latency;
+        provider.sendEvent(new LagChangedEvent(latency));
+    }
+
+    public CoreInfo coreInfo() {
+        return coreInfo;
+    }
+
+    public void setCoreInfo(CoreInfo coreInfo) {
+        this.coreInfo = coreInfo;
+    }
+
+    public CoreStatus core() {
+        return core;
+    }
+
+    public void setCore(CoreStatus core) {
+        this.core = core;
+    }
+
+    public long latency() {
+        return latency;
+    }
+
+    @NonNull
+    public NotificationManager notificationManager() {
+        return notificationManager;
+    }
+
+    public void setBufferSyncer(BufferSyncer bufferSyncer) {
+        this.bufferSyncer = bufferSyncer;
+    }
+
+    public void setBufferViewManager(BufferViewManager bufferViewManager) {
+        this.bufferViewManager = bufferViewManager;
+    }
+
+    public void setAliasManager(AliasManager aliasManager) {
+        this.aliasManager = aliasManager;
+    }
+
+    public void setIgnoreListManager(IgnoreListManager ignoreListManager) {
+        this.ignoreListManager = ignoreListManager;
+    }
+
+    public void setGlobalNetworkConfig(NetworkConfig globalNetworkConfig) {
+        this.globalNetworkConfig = globalNetworkConfig;
+    }
+
+
+    @NonNull
+    public BacklogStorage backlogStorage() {
+        return backlogStorage;
+    }
+
+    public void bufferSync(@NonNull SyncFunction packedFunc) {
+        String key = hashName(packedFunc.className, packedFunc.objectName);
+        if (connectionStatus() == ConnectionChangeEvent.Status.CONNECTED)
+            Log.d("libquassel", "Queueing sync: " + packedFunc);
+        if (!bufferedSyncs.containsKey(key))
+            bufferedSyncs.put(key, new LinkedList<>());
+        bufferedSyncs.get(key).add(packedFunc);
+    }
+}
diff --git a/app/src/main/java/de/kuschku/libquassel/client/QIdentityManager.java b/app/src/main/java/de/kuschku/libquassel/client/IdentityManager.java
similarity index 94%
rename from app/src/main/java/de/kuschku/libquassel/client/QIdentityManager.java
rename to app/src/main/java/de/kuschku/libquassel/client/IdentityManager.java
index 3dc1782d08c1e7457cf0b9a8284b93fa71920bf9..04d417aba54650ae9c76b991df32de08d683d11a 100644
--- a/app/src/main/java/de/kuschku/libquassel/client/QIdentityManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/client/IdentityManager.java
@@ -30,12 +30,12 @@ import java.util.Map;
 
 import de.kuschku.libquassel.syncables.types.interfaces.QIdentity;
 
-public class QIdentityManager {
+public class IdentityManager {
     @NonNull
     private final Map<Integer, QIdentity> identities = new HashMap<>();
-    private final QClient client;
+    private final Client client;
 
-    public QIdentityManager(QClient client) {
+    public IdentityManager(Client client) {
         this.client = client;
     }
 
diff --git a/app/src/main/java/de/kuschku/libquassel/client/QNetworkManager.java b/app/src/main/java/de/kuschku/libquassel/client/NetworkManager.java
similarity index 94%
rename from app/src/main/java/de/kuschku/libquassel/client/QNetworkManager.java
rename to app/src/main/java/de/kuschku/libquassel/client/NetworkManager.java
index a6a87902230ff264198861a70a56aced6dc56a33..9757b4c527c5c5c3833033276dc7ab5a88cc6b11 100644
--- a/app/src/main/java/de/kuschku/libquassel/client/QNetworkManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/client/NetworkManager.java
@@ -33,12 +33,12 @@ import java.util.Observable;
 import de.kuschku.libquassel.syncables.types.impl.Network;
 import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
 
-public class QNetworkManager extends Observable {
+public class NetworkManager extends Observable {
     @NonNull
     private final Map<Integer, QNetwork> networks = new HashMap<>();
-    private final QClient client;
+    private final Client client;
 
-    public QNetworkManager(QClient client) {
+    public NetworkManager(Client client) {
         this.client = client;
     }
 
diff --git a/app/src/main/java/de/kuschku/libquassel/client/QClient.java b/app/src/main/java/de/kuschku/libquassel/client/QClient.java
index 801df36fc8f345660b878c7a4074424c84c15078..0da325b311115c43b4a76d2a546e02dbdce07bb5 100644
--- a/app/src/main/java/de/kuschku/libquassel/client/QClient.java
+++ b/app/src/main/java/de/kuschku/libquassel/client/QClient.java
@@ -21,424 +21,66 @@
 
 package de.kuschku.libquassel.client;
 
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.util.Log;
-
-import java.util.HashMap;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 
-import de.kuschku.libquassel.BusProvider;
-import de.kuschku.libquassel.events.ConnectionChangeEvent;
-import de.kuschku.libquassel.events.CriticalErrorEvent;
-import de.kuschku.libquassel.events.LagChangedEvent;
-import de.kuschku.libquassel.events.PasswordChangeEvent;
-import de.kuschku.libquassel.events.StatusMessageEvent;
-import de.kuschku.libquassel.functions.types.InitRequestFunction;
-import de.kuschku.libquassel.functions.types.SyncFunction;
-import de.kuschku.libquassel.localtypes.NotificationManager;
-import de.kuschku.libquassel.localtypes.backlogstorage.BacklogStorage;
 import de.kuschku.libquassel.message.Message;
-import de.kuschku.libquassel.objects.types.CoreStatus;
-import de.kuschku.libquassel.objects.types.SessionState;
-import de.kuschku.libquassel.primitives.QMetaTypeRegistry;
+import de.kuschku.libquassel.objects.types.Command;
 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.primitives.types.QVariant;
+import de.kuschku.libquassel.syncables.Synced;
 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;
-import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewManager;
-import de.kuschku.libquassel.syncables.types.interfaces.QIgnoreListManager;
-import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
-import de.kuschku.libquassel.syncables.types.interfaces.QNetworkConfig;
-
-import static de.kuschku.util.AndroidAssert.assertNotNull;
-
-public class QClient extends AClient {
-
-// synced
-
-    @NonNull
-    private final QNetworkManager networkManager;
-    @NonNull
-    private final QBufferManager bufferManager;
-    @NonNull
-    private final QIdentityManager identityManager;
-    @NonNull
-    private final BacklogStorage backlogStorage;
-    @NonNull
-    private final NotificationManager notificationManager;
-    private final List<String> initRequests = new LinkedList<>();
-    private final List<Integer> backlogRequests = new LinkedList<>();
-    private final Map<String, List<SyncFunction>> bufferedSyncs = new HashMap<>();
-    private final QBacklogManager backlogManager;
-    private QBufferViewManager bufferViewManager;
-    // local
-    private QBufferSyncer bufferSyncer;
-    private QAliasManager aliasManager;
-    private QIgnoreListManager ignoreListManager;
-    private QNetworkConfig globalNetworkConfig;
-    private CoreStatus core;
-    private CoreInfo coreInfo;
-    private long latency;
-    private ConnectionChangeEvent.Status connectionStatus;
-
-    public QClient(@NonNull BusProvider provider, @NonNull BacklogStorage backlogStorage) {
-        this.provider = provider;
-        this.networkManager = new QNetworkManager(this);
-        this.bufferManager = new QBufferManager(this);
-        this.identityManager = new QIdentityManager(this);
-        this.backlogStorage = backlogStorage;
-        backlogStorage.setClient(this);
-        this.backlogManager = new BacklogManager(this, backlogStorage);
-        this.notificationManager = new NotificationManager(this);
-    }
-
-    public QBufferViewManager bufferViewManager() {
-        return bufferViewManager;
-    }
-
-    public QBufferSyncer bufferSyncer() {
-        return bufferSyncer;
-    }
-
-    public QAliasManager aliasManager() {
-        return aliasManager;
-    }
-
-    public QBacklogManager backlogManager() {
-        return backlogManager;
-    }
-
-    public QIgnoreListManager ignoreListManager() {
-        return ignoreListManager;
-    }
-
-    public QNetworkConfig globalNetworkConfig() {
-        return globalNetworkConfig;
-    }
-
-    @Override
-    public void _displayMsg(Message msg) {
-        backlogStorage.insertMessages(msg);
-    }
-
-    @Override
-    public void _displayStatusMsg(String network, String message) {
-        assertNotNull(provider);
-
-        provider.sendEvent(new StatusMessageEvent(network, message));
-    }
-
-    @Override
-    public void _bufferInfoUpdated(BufferInfo bufferInfo) {
-        bufferManager.updateBufferInfo(bufferInfo);
-    }
-
-    @Override
-    public void _identityCreated(Identity identity) {
-        identityManager.createIdentity(identity);
-    }
-
-    @Override
-    public void _identityRemoved(int id) {
-        identityManager.removeIdentity(id);
-    }
-
-    @Override
-    public void _networkCreated(int network) {
-        networkManager.createNetwork(network);
-    }
-
-    @Override
-    public void _networkRemoved(int network) {
-        networkManager.removeNetwork(network);
-    }
-
-    @Override
-    public void _passwordChanged(long peerPtr, boolean success) {
-        assertNotNull(provider);
-
-        if (peerPtr != 0x0000000000000000L)
-            provider.sendEvent(new CriticalErrorEvent("Your core has a critical vulnerability. Please update it."));
-        provider.sendEvent(new PasswordChangeEvent(success));
-    }
-
-    @Override
-    public void ___objectRenamed__(String type, String oldName, String newName) {
-
-    }
-
-    public ConnectionChangeEvent.Status connectionStatus() {
-        return connectionStatus;
-    }
-
-    public void setConnectionStatus(@NonNull ConnectionChangeEvent.Status connectionStatus) {
-        assertNotNull(provider);
-
-        this.connectionStatus = connectionStatus;
-        if (connectionStatus == ConnectionChangeEvent.Status.LOADING_BACKLOG) {
-            setConnectionStatus(ConnectionChangeEvent.Status.CONNECTED);
-        }
-        provider.sendEvent(new ConnectionChangeEvent(connectionStatus));
-    }
-
-    @Nullable
-    public Object unsafe_getObjectByIdentifier(@NonNull String className, @NonNull String objectName) {
-        switch (className) {
-            case "AliasManager": {
-                assertNotNull(aliasManager);
-                return aliasManager;
-            }
-            case "BacklogManager": {
-                assertNotNull(backlogManager);
-                return backlogManager;
-            }
-            case "BufferSyncer": {
-                assertNotNull(bufferSyncer);
-                return bufferSyncer;
-            }
-            case "BufferViewConfig": {
-                assertNotNull(bufferViewManager);
-                return bufferViewManager.bufferViewConfig(Integer.parseInt(objectName));
-            }
-            case "BufferViewManager": {
-                assertNotNull(bufferViewManager);
-                return bufferViewManager;
-            }
-            case "CoreInfo": {
-                assertNotNull(coreInfo);
-                return coreInfo;
-            }
-            case "Identity": {
-                return identityManager.identity(Integer.parseInt(objectName));
-            }
-            case "IgnoreListManager": {
-                assertNotNull(ignoreListManager);
-                return ignoreListManager;
-            }
-            case "IrcChannel": {
-                String[] split = objectName.split("/");
-                if (split.length != 2) {
-                    Log.w("libquassel", "malformatted object name: " + objectName);
-                    return null;
-                }
-                QNetwork network = networkManager.network(Integer.parseInt(split[0]));
-                if (network == null) {
-                    Log.w("libquassel", "Network doesn’t exist yet: " + objectName);
-                    return null;
-                }
-                return network.ircChannel(split[1]);
-            }
-            case "IrcUser": {
-                String[] split = objectName.split("/");
-                if (split.length != 2) {
-                    Log.w("libquassel", "malformatted object name: " + objectName);
-                    return null;
-                }
-                QNetwork network = networkManager.network(Integer.parseInt(split[0]));
-                if (network == null) {
-                    Log.w("libquassel", "Network doesn’t exist yet: " + objectName);
-                    return null;
-                }
-                return network.ircUser(split[1]);
-            }
-            case "Network": {
-                return networkManager.network(Integer.parseInt(objectName));
-            }
-            case "NetworkConfig": {
-                assertNotNull(globalNetworkConfig);
-                return globalNetworkConfig;
-            }
-            case "NetworkInfo": {
-                QNetwork network = networkManager().network(Integer.parseInt(objectName));
-                if (network == null)
-                    return null;
-                else
-                    return network.networkInfo();
-            }
-            default: {
-                Log.w("libquassel", "Unknown type: " + className + " : " + objectName);
-                return null;
-            }
-        }
-    }
-
-    @Nullable
-    public <T> T getObjectByIdentifier(@NonNull String className, @NonNull String objectName) {
-        Class<T> cl = QMetaTypeRegistry.<T>getType(className).cl;
-        return getObjectByIdentifier(cl, className, objectName);
-    }
-
-    @Nullable
-    public <T> T getObjectByIdentifier(@NonNull Class<T> cl, @NonNull String objectName) {
-        return getObjectByIdentifier(cl, cl.getSimpleName(), objectName);
-    }
-
-    @SuppressWarnings("unchecked")
-    @Nullable
-    public <T> T getObjectByIdentifier(@NonNull Class<T> cl, @NonNull String className, @NonNull String objectName) {
-        Object obj = unsafe_getObjectByIdentifier(className, objectName);
-        // The fancy version of "instanceof" that works with erased types, too
-        if (obj == null || !cl.isAssignableFrom(obj.getClass()))
-            return null;
-        else
-            return (T) obj;
-    }
-
-    public void init(@NonNull SessionState sessionState) {
-        networkManager.init(sessionState.NetworkIds);
-        identityManager.init(sessionState.Identities);
-        bufferManager.init(sessionState.BufferInfos);
-
-        requestInitObject("BufferSyncer", "");
-        requestInitObject("BufferViewManager", "");
-        requestInitObject("AliasManager", "");
-        requestInitObject("NetworkConfig", "GlobalNetworkConfig");
-        requestInitObject("IgnoreListManager", "");
-        //sendInitRequest("TransferManager", "");
-        // This thing never gets sent...
-    }
-
-    @NonNull
-    public QNetworkManager networkManager() {
-        return networkManager;
-    }
-
-    @NonNull
-    public QBufferManager bufferManager() {
-        return bufferManager;
-    }
-
-    @NonNull
-    public QIdentityManager identityManager() {
-        return identityManager;
-    }
-
-    public void requestInitObject(@NonNull String className, String objectName) {
-        assertNotNull(provider);
-
-        if (connectionStatus() == ConnectionChangeEvent.Status.INITIALIZING_DATA)
-            initRequests.add(hashName(className, objectName));
-
-        provider.dispatch(new InitRequestFunction(className, objectName));
-    }
-
-    public void initObject(String className, @NonNull String objectName, @NonNull SyncableObject object) {
-        assertNotNull(provider);
-
-        if (connectionStatus() == ConnectionChangeEvent.Status.INITIALIZING_DATA) {
-            initRequests.remove(hashName(className, objectName));
-            if (initRequests.isEmpty()) {
-                setConnectionStatus(ConnectionChangeEvent.Status.LOADING_BACKLOG);
-            }
-        }
-
-        object.init(objectName, provider, this);
+import de.kuschku.libquassel.syncables.types.impl.NetworkInfo;
+import de.kuschku.libquassel.syncables.types.interfaces.QIdentity;
 
-        // Execute cached sync requests
-        if (bufferedSyncs.size() > 0) {
-            String key = hashName(className, objectName);
-            if (bufferedSyncs.containsKey(key)) {
-                List<SyncFunction> functions = bufferedSyncs.get(key);
-                for (SyncFunction function : functions)
-                    provider.handle(function);
-                bufferedSyncs.remove(key);
-            }
-        }
-    }
+public interface QClient {
+    @Synced
+    void sendInput(BufferInfo info, String message);
 
-    @NonNull
-    private String hashName(String className, String objectName) {
-        return className + ":" + objectName;
-    }
+    @Synced
+    void sendInput(Command command);
 
-    public void initBacklog(int id) {
-        backlogRequests.remove((Integer) id);
-        requestInitBacklog(id, 0);
-        if (backlogRequests.isEmpty())
-            setConnectionStatus(ConnectionChangeEvent.Status.CONNECTED);
-    }
+    @Synced
+    void createIdentity(QIdentity identity);
 
-    public void requestInitBacklog(int id, int amount) {
-        backlogRequests.add(id);
-        backlogManager.requestBacklogInitial(id, amount);
-    }
+    @Synced
+    void updateIdentity(int id, final Map<String, QVariant> serialized);
 
-    public void setLatency(long latency) {
-        assertNotNull(provider);
+    @Synced
+    void removeIdentity(int id);
 
-        this.latency = latency;
-        provider.sendEvent(new LagChangedEvent(latency));
-    }
+    @Synced
+    void createNetwork(NetworkInfo info);
 
-    public CoreInfo coreInfo() {
-        return coreInfo;
-    }
+    @Synced
+    void createNetwork(NetworkInfo info, List<String> persistentChannels);
 
-    public void setCoreInfo(CoreInfo coreInfo) {
-        this.coreInfo = coreInfo;
-    }
+    @Synced
+    void updateNetwork(NetworkInfo info);
 
-    public CoreStatus core() {
-        return core;
-    }
+    @Synced
+    void removeNetwork(int id);
 
-    public void setCore(CoreStatus core) {
-        this.core = core;
-    }
+    @Synced
+    void changePassword(String username, String oldPassword, String newPassword);
 
-    public long latency() {
-        return latency;
-    }
+    void _displayMsg(final Message msg);
 
-    @NonNull
-    public NotificationManager notificationManager() {
-        return notificationManager;
-    }
+    void _displayStatusMsg(String network, String message);
 
-    public void setBufferSyncer(BufferSyncer bufferSyncer) {
-        this.bufferSyncer = bufferSyncer;
-    }
+    void _bufferInfoUpdated(BufferInfo bufferInfo);
 
-    public void setBufferViewManager(BufferViewManager bufferViewManager) {
-        this.bufferViewManager = bufferViewManager;
-    }
+    void _identityCreated(Identity identity);
 
-    public void setAliasManager(AliasManager aliasManager) {
-        this.aliasManager = aliasManager;
-    }
+    void _identityRemoved(int id);
 
-    public void setIgnoreListManager(IgnoreListManager ignoreListManager) {
-        this.ignoreListManager = ignoreListManager;
-    }
+    void _networkCreated(int network);
 
-    public void setGlobalNetworkConfig(NetworkConfig globalNetworkConfig) {
-        this.globalNetworkConfig = globalNetworkConfig;
-    }
+    void _networkRemoved(int network);
 
+    void _passwordChanged(long peerPtr, boolean success);
 
-    @NonNull
-    public BacklogStorage backlogStorage() {
-        return backlogStorage;
-    }
+    void ___objectRenamed__(String type, String oldName, String newName);
 
-    public void bufferSync(@NonNull SyncFunction packedFunc) {
-        String key = hashName(packedFunc.className, packedFunc.objectName);
-        if (connectionStatus() == ConnectionChangeEvent.Status.CONNECTED)
-            Log.d("libquassel", "Queueing sync: " + packedFunc);
-        if (!bufferedSyncs.containsKey(key))
-            bufferedSyncs.put(key, new LinkedList<>());
-        bufferedSyncs.get(key).add(packedFunc);
-    }
+    void login(String username, String password);
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/client/QClientInterface.java b/app/src/main/java/de/kuschku/libquassel/client/QClientInterface.java
deleted file mode 100644
index 3a06501d4e91c853d6be82305288974381674a1d..0000000000000000000000000000000000000000
--- a/app/src/main/java/de/kuschku/libquassel/client/QClientInterface.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * 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.libquassel.client;
-
-import java.util.List;
-import java.util.Map;
-
-import de.kuschku.libquassel.message.Message;
-import de.kuschku.libquassel.objects.types.Command;
-import de.kuschku.libquassel.primitives.types.BufferInfo;
-import de.kuschku.libquassel.primitives.types.QVariant;
-import de.kuschku.libquassel.syncables.Synced;
-import de.kuschku.libquassel.syncables.types.impl.Identity;
-import de.kuschku.libquassel.syncables.types.impl.NetworkInfo;
-import de.kuschku.libquassel.syncables.types.interfaces.QIdentity;
-
-public interface QClientInterface {
-    @Synced
-    void sendInput(BufferInfo info, String message);
-
-    @Synced
-    void sendInput(Command command);
-
-    @Synced
-    void createIdentity(QIdentity identity);
-
-    @Synced
-    void updateIdentity(int id, final Map<String, QVariant> serialized);
-
-    @Synced
-    void removeIdentity(int id);
-
-    @Synced
-    void createNetwork(NetworkInfo info);
-
-    @Synced
-    void createNetwork(NetworkInfo info, List<String> persistentChannels);
-
-    @Synced
-    void updateNetwork(NetworkInfo info);
-
-    @Synced
-    void removeNetwork(int id);
-
-    @Synced
-    void changePassword(String username, String oldPassword, String newPassword);
-
-    void _displayMsg(final Message msg);
-
-    void _displayStatusMsg(String network, String message);
-
-    void _bufferInfoUpdated(BufferInfo bufferInfo);
-
-    void _identityCreated(Identity identity);
-
-    void _identityRemoved(int id);
-
-    void _networkCreated(int network);
-
-    void _networkRemoved(int network);
-
-    void _passwordChanged(long peerPtr, boolean success);
-
-    void ___objectRenamed__(String type, String oldName, String newName);
-
-    void login(String username, String password);
-}
diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/NotificationManager.java b/app/src/main/java/de/kuschku/libquassel/localtypes/NotificationManager.java
index 752eaccb2fbb36637a7e535149e1bc09c333cd47..d270922ee99ebcdafd6c4b9e07a81223b555df17 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/NotificationManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/NotificationManager.java
@@ -28,7 +28,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.regex.Pattern;
 
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.message.Message;
 import de.kuschku.util.observables.lists.ObservableComparableSortedList;
 
@@ -38,9 +38,9 @@ public class NotificationManager {
     @NonNull
     private final List<HighlightRule> highlights = new ArrayList<>();
     @NonNull
-    private final QClient client;
+    private final Client client;
 
-    public NotificationManager(@NonNull QClient client) {
+    public NotificationManager(@NonNull Client client) {
         this.client = client;
     }
 
diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogmanagers/BacklogFilter.java b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogmanagers/BacklogFilter.java
index fc0fe5f101fefb878212a4271a382fff56ef3793..63dee1ad264f3af0cf2bcec4a66026aa85c3882b 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogmanagers/BacklogFilter.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogmanagers/BacklogFilter.java
@@ -30,7 +30,7 @@ import org.joda.time.DateTimeUtils;
 import java.util.HashSet;
 import java.util.Set;
 
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.message.Message;
 import de.kuschku.libquassel.primitives.types.BufferInfo;
 import de.kuschku.libquassel.syncables.types.interfaces.QNetwork;
@@ -39,7 +39,7 @@ import de.kuschku.util.observables.lists.ObservableSortedList;
 
 public class BacklogFilter implements UICallback {
     @NonNull
-    private final QClient client;
+    private final Client client;
     private final int bufferId;
     @NonNull
     private final ObservableSortedList<Message> unfiltered;
@@ -52,7 +52,7 @@ public class BacklogFilter implements UICallback {
     @Nullable
     private DateTime earliestMessage;
 
-    public BacklogFilter(@NonNull QClient client, int bufferId, @NonNull ObservableSortedList<Message> unfiltered, @NonNull ObservableSortedList<Message> filtered) {
+    public BacklogFilter(@NonNull Client client, int bufferId, @NonNull ObservableSortedList<Message> unfiltered, @NonNull ObservableSortedList<Message> filtered) {
         this.client = client;
         this.bufferId = bufferId;
         this.unfiltered = unfiltered;
diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/BacklogStorage.java b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/BacklogStorage.java
index 2abb6b12757ef6086443900ffd1bf84456d85b13..7f7dc0ab94477ca82f00ff626af06ce74f6b9436 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/BacklogStorage.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/BacklogStorage.java
@@ -24,7 +24,7 @@ package de.kuschku.libquassel.localtypes.backlogstorage;
 import android.support.annotation.IntRange;
 import android.support.annotation.NonNull;
 
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.localtypes.backlogmanagers.BacklogFilter;
 import de.kuschku.libquassel.message.Message;
 import de.kuschku.util.observables.lists.ObservableSortedList;
@@ -43,5 +43,5 @@ public interface BacklogStorage {
 
     void insertMessages(Message... messages);
 
-    void setClient(QClient client);
+    void setClient(Client client);
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/MemoryBacklogStorage.java b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/MemoryBacklogStorage.java
index 86d88d50a58d4b7ccbdfa5dbe3c092d64b77ebbc..c1720e105334bd6ceb44f4b10cfbd17dba3fa7c5 100644
--- a/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/MemoryBacklogStorage.java
+++ b/app/src/main/java/de/kuschku/libquassel/localtypes/backlogstorage/MemoryBacklogStorage.java
@@ -25,7 +25,7 @@ import android.support.annotation.IntRange;
 import android.support.annotation.NonNull;
 import android.util.SparseArray;
 
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.localtypes.backlogmanagers.BacklogFilter;
 import de.kuschku.libquassel.message.Message;
 import de.kuschku.util.observables.lists.ObservableComparableSortedList;
@@ -41,7 +41,7 @@ public class MemoryBacklogStorage implements BacklogStorage {
     @NonNull
     private final SparseArray<BacklogFilter> filters = new SparseArray<>();
 
-    private QClient client;
+    private Client client;
 
     @NonNull
     @Override
@@ -79,7 +79,7 @@ public class MemoryBacklogStorage implements BacklogStorage {
         }
     }
 
-    public void setClient(QClient client) {
+    public void setClient(Client client) {
         this.client = client;
     }
 
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/SyncableObject.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/SyncableObject.java
index 370a29635e23c7206f4dc4d6d44119267f503676..ecf46760c5e7e672e69a32da568fe70a14a68e5a 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/SyncableObject.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/SyncableObject.java
@@ -31,7 +31,7 @@ import java.util.List;
 import java.util.Observable;
 
 import de.kuschku.libquassel.BusProvider;
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.functions.types.RpcCallFunction;
 import de.kuschku.libquassel.functions.types.SyncFunction;
 import de.kuschku.libquassel.primitives.types.QVariant;
@@ -43,7 +43,7 @@ import static de.kuschku.util.AndroidAssert.assertNotNull;
 public abstract class SyncableObject<T extends SyncableObject<T>> extends Observable implements QSyncableObject<T> {
     @Nullable
     protected BusProvider provider;
-    protected QClient client;
+    protected Client client;
     protected boolean initialized = false;
     @Nullable
     private String objectName;
@@ -110,7 +110,7 @@ public abstract class SyncableObject<T extends SyncableObject<T>> extends Observ
 
     @CallSuper
     @Override
-    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull QClient client) {
+    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull Client client) {
         this.provider = provider;
         this.objectName = objectName;
         this.client = client;
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/AliasManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/AliasManager.java
index c54fbcc428cddcc9a35dcf2c5546a68e095827e5..95c530531c4fff01add4303fce1667bb6676b1d5 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/AliasManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/AliasManager.java
@@ -35,7 +35,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import de.kuschku.libquassel.BusProvider;
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.objects.types.Command;
 import de.kuschku.libquassel.primitives.types.BufferInfo;
 import de.kuschku.libquassel.primitives.types.QVariant;
@@ -61,7 +61,7 @@ public class AliasManager extends AAliasManager<AliasManager> {
     private List<String> names = new ArrayList<>();
     private List<Alias> aliases = new ArrayList<>();
 
-    private QClient client;
+    private Client client;
 
     public AliasManager(@NonNull List<String> names, @NonNull List<String> extensions) {
         for (int i = 0; i < names.size(); i++) {
@@ -223,7 +223,7 @@ public class AliasManager extends AAliasManager<AliasManager> {
     }
 
     @Override
-    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull QClient client) {
+    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull Client client) {
         this.client = client;
         super.init(objectName, provider, client);
         client.setAliasManager(this);
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java
index 97365304789c270684d33541eb005aee0284bf12..e732e424be0be5dc87ff063b05d91815e57691ba 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BacklogManager.java
@@ -27,7 +27,7 @@ import android.support.annotation.Nullable;
 import java.util.List;
 import java.util.Map;
 
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.localtypes.backlogmanagers.BacklogFilter;
 import de.kuschku.libquassel.localtypes.backlogstorage.BacklogStorage;
 import de.kuschku.libquassel.message.Message;
@@ -36,10 +36,10 @@ import de.kuschku.libquassel.syncables.types.abstracts.ABacklogManager;
 import de.kuschku.util.observables.lists.ObservableComparableSortedList;
 
 public class BacklogManager extends ABacklogManager<BacklogManager> {
-    private final QClient client;
+    private final Client client;
     private final BacklogStorage storage;
 
-    public BacklogManager(QClient client, BacklogStorage storage) {
+    public BacklogManager(Client client, BacklogStorage storage) {
         this.client = client;
         this.storage = storage;
     }
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferSyncer.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferSyncer.java
index 03ed15500b770d4ce0214cea228b27a43338baa0..b6cdcfd23ddab3b63d8d9fa888b20408ef40b379 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferSyncer.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferSyncer.java
@@ -27,7 +27,7 @@ import android.util.SparseIntArray;
 import java.util.Map;
 
 import de.kuschku.libquassel.BusProvider;
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.localtypes.buffers.Buffer;
 import de.kuschku.libquassel.message.Message;
 import de.kuschku.libquassel.primitives.types.QVariant;
@@ -152,7 +152,7 @@ public class BufferSyncer extends ABufferSyncer<BufferSyncer> {
     }
 
     @Override
-    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull QClient client) {
+    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull Client client) {
         super.init(objectName, provider, client);
         client.setBufferSyncer(this);
     }
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java
index 38a4789f240dd269092800f65b7d765762fcd8dc..43ff8e36469993e9335fc9faf86f3f2b0b538123 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewConfig.java
@@ -29,7 +29,7 @@ import java.util.Map;
 import java.util.Set;
 
 import de.kuschku.libquassel.BusProvider;
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.primitives.types.QVariant;
 import de.kuschku.libquassel.syncables.serializers.BufferViewConfigSerializer;
 import de.kuschku.libquassel.syncables.types.abstracts.ABufferViewConfig;
@@ -302,7 +302,7 @@ public class BufferViewConfig extends ABufferViewConfig<BufferViewConfig> {
     }
 
     @Override
-    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull QClient client) {
+    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull Client client) {
         bufferViewId = Integer.parseInt(objectName);
         super.init(objectName, provider, client);
         client.bufferViewManager()._addBufferViewConfig(this);
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewManager.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewManager.java
index b664e815fc9f3d820786d0f2224e10163bfeb7b9..5d95e2194eae758b28a159c881732dafbfd4cafe 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewManager.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/BufferViewManager.java
@@ -31,7 +31,7 @@ import java.util.Map;
 import java.util.Set;
 
 import de.kuschku.libquassel.BusProvider;
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.primitives.types.QVariant;
 import de.kuschku.libquassel.syncables.types.abstracts.ABufferViewManager;
 import de.kuschku.libquassel.syncables.types.interfaces.QBufferViewConfig;
@@ -105,7 +105,7 @@ public class BufferViewManager extends ABufferViewManager<BufferViewManager> {
     }
 
     @Override
-    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull QClient client) {
+    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull Client client) {
         super.init(objectName, provider, client);
         for (int id : cachedIds) {
             client.requestInitObject("BufferViewConfig", String.valueOf(id));
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/CoreInfo.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/CoreInfo.java
index 615a8bc48bb89cd2e4e8601a9f2f5a51a7eda634..3642474d3a5e0d4e7d0ba407902af817166ef731 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/CoreInfo.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/CoreInfo.java
@@ -26,7 +26,7 @@ import android.support.annotation.NonNull;
 import java.util.Map;
 
 import de.kuschku.libquassel.BusProvider;
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.primitives.types.QVariant;
 import de.kuschku.libquassel.syncables.types.abstracts.ACoreInfo;
 
@@ -55,7 +55,7 @@ public class CoreInfo extends ACoreInfo<CoreInfo> {
     }
 
     @Override
-    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull QClient client) {
+    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull Client client) {
         super.init(objectName, provider, client);
         client.setCoreInfo(this);
     }
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Identity.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Identity.java
index 3c98fcd34ade9c5f80382a7347c7eb71ef708945..b0d9ac1249b3ff78bf443e06fd97b925d3134bbd 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Identity.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Identity.java
@@ -29,7 +29,7 @@ import java.util.List;
 import java.util.Map;
 
 import de.kuschku.libquassel.BusProvider;
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.primitives.types.QVariant;
 import de.kuschku.libquassel.syncables.types.abstracts.AIdentity;
 import de.kuschku.libquassel.syncables.types.interfaces.QIdentity;
@@ -394,7 +394,7 @@ public class Identity extends AIdentity<Identity> {
     }
 
     @Override
-    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull QClient client) {
+    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull Client client) {
         super.init(objectName, provider, client);
         client.identityManager().createIdentity(this);
     }
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 a932909247c189ac8b4665b04581a042ab268289..2ec5211e4cecb0dc136175fd15685365f2ca9037 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
@@ -29,7 +29,7 @@ import java.util.Map;
 import java.util.regex.Pattern;
 
 import de.kuschku.libquassel.BusProvider;
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.message.Message;
 import de.kuschku.libquassel.primitives.types.QVariant;
 import de.kuschku.libquassel.syncables.serializers.IgnoreListManagerSerializer;
@@ -143,7 +143,7 @@ public class IgnoreListManager extends AIgnoreListManager<IgnoreListManager> {
     }
 
     @Override
-    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull QClient client) {
+    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull Client client) {
         super.init(objectName, provider, client);
         client.setIgnoreListManager(this);
     }
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java
index c9e53b4f3d965a0adb050900f4b9fdc8eac15493..ee9ff1506c870f708e496a08430df85cc44a6516 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcChannel.java
@@ -36,7 +36,7 @@ import java.util.Map;
 import java.util.Set;
 
 import de.kuschku.libquassel.BusProvider;
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.primitives.types.QVariant;
 import de.kuschku.libquassel.syncables.serializers.IrcChannelSerializer;
 import de.kuschku.libquassel.syncables.types.abstracts.AIrcChannel;
@@ -416,7 +416,7 @@ public class IrcChannel extends AIrcChannel<IrcChannel> {
 
     @SuppressWarnings("unchecked")
     @Override
-    public void init(QNetwork network, QClient client) {
+    public void init(QNetwork network, Client client) {
         this.client = client;
         this.network = network;
 
@@ -479,7 +479,7 @@ public class IrcChannel extends AIrcChannel<IrcChannel> {
     }
 
     @Override
-    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull QClient client) {
+    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull Client client) {
         super.init(objectName, provider, client);
         String[] split = objectName.split("/", 2);
         assertEquals(split.length, 2);
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java
index 66b907e1a0935e56271f1302dad3e058f15a049b..23666611e687e7fcaa1bf4df688cadc1c637d4a2 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/IrcUser.java
@@ -35,7 +35,7 @@ import java.util.Map;
 import java.util.Set;
 
 import de.kuschku.libquassel.BusProvider;
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.primitives.types.QVariant;
 import de.kuschku.libquassel.syncables.types.abstracts.AIrcUser;
 import de.kuschku.libquassel.syncables.types.interfaces.QIrcChannel;
@@ -432,7 +432,7 @@ public class IrcUser extends AIrcUser<IrcUser> {
     }
 
     @Override
-    public void init(QNetwork network, QClient client) {
+    public void init(QNetwork network, Client client) {
         this.network = network;
         this.client = client;
 
@@ -446,7 +446,7 @@ public class IrcUser extends AIrcUser<IrcUser> {
     }
 
     @Override
-    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull QClient client) {
+    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull Client client) {
         super.init(objectName, provider, client);
         String[] split = objectName.split("/", 2);
         assertEquals(split.length, 2);
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java
index 4548a6ab25bb8a6a95b63c83bc7741a4af8330fc..2878e8420aaae8b22c9cfd8ea28c7013c2865e89 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/Network.java
@@ -34,7 +34,7 @@ import java.util.Observable;
 import java.util.Observer;
 
 import de.kuschku.libquassel.BusProvider;
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.objects.types.NetworkServer;
 import de.kuschku.libquassel.primitives.types.QVariant;
 import de.kuschku.libquassel.syncables.types.abstracts.ANetwork;
@@ -747,7 +747,7 @@ public class Network extends ANetwork<Network> implements Observer {
     }
 
     @Override
-    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull QClient client) {
+    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull Client client) {
         super.init(objectName, provider, client);
         networkInfo._setNetworkId(Integer.parseInt(objectName));
         client.networkManager().createNetwork(this);
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/NetworkConfig.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/NetworkConfig.java
index 3b5146a9b26d8a3f320a11d7975fed8cfa92e25e..ff014fc9282f56fea8fa6137f0b594b709b7f3ca 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/NetworkConfig.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/impl/NetworkConfig.java
@@ -26,7 +26,7 @@ import android.support.annotation.NonNull;
 import java.util.Map;
 
 import de.kuschku.libquassel.BusProvider;
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.primitives.types.QVariant;
 import de.kuschku.libquassel.syncables.types.abstracts.ANetworkConfig;
 
@@ -185,7 +185,7 @@ public class NetworkConfig extends ANetworkConfig<NetworkConfig> {
     }
 
     @Override
-    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull QClient client) {
+    public void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull Client client) {
         super.init(objectName, provider, client);
         client.setGlobalNetworkConfig(this);
     }
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIrcChannel.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIrcChannel.java
index 4427a5c8b717231a09810d736ffb9c66fe9becc9..4daa26bca1448491034690e605b2f6599f2c4928 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIrcChannel.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIrcChannel.java
@@ -25,7 +25,7 @@ import android.support.annotation.NonNull;
 
 import java.util.List;
 
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.syncables.Synced;
 
 public interface QIrcChannel {
@@ -145,5 +145,5 @@ public interface QIrcChannel {
 
     void _removeChannelMode(final char mode, final String value);
 
-    void init(QNetwork network, QClient client);
+    void init(QNetwork network, Client client);
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIrcUser.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIrcUser.java
index e321051b3850dd89d0f751eaaf3ae8df3f8c1f0d..e16222be7f27325f30f443b16caf438f0f8ea867 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIrcUser.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QIrcUser.java
@@ -27,7 +27,7 @@ import org.joda.time.DateTime;
 
 import java.util.List;
 
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.syncables.Synced;
 
 public interface QIrcUser {
@@ -203,5 +203,5 @@ public interface QIrcUser {
 
     void _removeUserModes(final String modes);
 
-    void init(QNetwork network, QClient client);
+    void init(QNetwork network, Client client);
 }
diff --git a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QSyncableObject.java b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QSyncableObject.java
index 9779f74bc4bb5a936987e67a816dfc69234949b8..f45f7d02a5591076be591503e1671d6f680d5a44 100644
--- a/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QSyncableObject.java
+++ b/app/src/main/java/de/kuschku/libquassel/syncables/types/interfaces/QSyncableObject.java
@@ -27,7 +27,7 @@ import android.support.annotation.Nullable;
 import java.util.Map;
 
 import de.kuschku.libquassel.BusProvider;
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.libquassel.primitives.types.QVariant;
 
 public interface QSyncableObject<T extends QSyncableObject> {
@@ -50,5 +50,5 @@ public interface QSyncableObject<T extends QSyncableObject> {
 
     void setObjectName(@Nullable String objectName);
 
-    void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull QClient client);
+    void init(@NonNull String objectName, @NonNull BusProvider provider, @NonNull Client client);
 }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/AppContext.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/AppContext.java
index 61bbc8ee4b0d2b70cae388eba9bc6c05fdcc689f..1ff313ca85c30483000c2f234893802f6a99a5a0 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/AppContext.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/theme/AppContext.java
@@ -24,13 +24,13 @@ package de.kuschku.quasseldroid_ng.ui.theme;
 import android.support.annotation.NonNull;
 
 import de.kuschku.libquassel.BusProvider;
-import de.kuschku.libquassel.client.QClient;
+import de.kuschku.libquassel.client.Client;
 import de.kuschku.quasseldroid_ng.ui.chat.WrappedSettings;
 
 public class AppContext {
     private ThemeUtil themeUtil;
     private WrappedSettings settings;
-    private QClient client;
+    private Client client;
     private BusProvider provider;
 
     public ThemeUtil themeUtil() {
@@ -61,16 +61,16 @@ public class AppContext {
         return this;
     }
 
-    public QClient client() {
+    public Client client() {
         return client;
     }
 
-    public void setClient(QClient client) {
+    public void setClient(Client client) {
         this.client = client;
     }
 
     @NonNull
-    public AppContext withClient(QClient client) {
+    public AppContext withClient(Client client) {
         setClient(client);
         return this;
     }