diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/Client.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/Client.java
index b5a7bba5bbd19ada0ebf6fefaaaf33f2c3a8b492..b05b700bfa6354463857b213bd26ad77b9749bd1 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/Client.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/Client.java
@@ -1,40 +1,78 @@
 package com.galaxytrucker.galaxytruckerreloaded.Communication;
 
+import com.galaxytrucker.galaxytruckerreloaded.Server.RequestObject;
+import com.galaxytrucker.galaxytruckerreloaded.Server.ResponseObject;
 import lombok.NonNull;
 
+import java.io.*;
 import java.net.Socket;
 
 public class Client {
 
-    /** Client socket for network communication */
+    /**
+     * Client socket for network communication
+     */
     private Socket socket;
 
-    /** ClientControllerCommunicator for logic handling */
-    private ClientControllerCommunicator clientControllerCommunicator;
-
-    /**
-     * - Request and Response from and to the server.
-     * */
-    public String sendAndReceive(){
-        // View clicks something
-        // Controller issues a request
-        // Client ships request to server
-        // receive response
-        // give response to controller
-        // update views
-        // return server response as string
-        return null;
-    }
+    /**
+     * Used to send data
+     */
+    private PrintWriter send;
 
-    /** Constructor
-     *  Loop for receiving Data
-     * */
-    public Client(@NonNull String ipAddress, @NonNull int port) throws IllegalArgumentException{
-        clientControllerCommunicator = new ClientControllerCommunicator();
+    /**
+     * Used to receive data
+     */
+    private BufferedReader receive;
+
+    /**
+     * ObjectOutputStream for sending objects
+     */
+    private ObjectOutputStream sendObject;
+
+    /**
+     * ObjectInputStream for receiving objects
+     */
+    private ObjectInputStream receiveObject;
+
+    /**
+     * Send a request to the server
+     * @return the server's response
+     */
+    public ResponseObject sendAndReceive(RequestObject requestObject) throws IllegalArgumentException {
         try {
-            this.socket = new Socket(ipAddress,port);
+            sendObject.writeObject(requestObject);
+            return (ResponseObject) receiveObject.readObject();
         }
         catch (Exception e){
+            e.printStackTrace();
+            throw new IllegalArgumentException(e.getMessage());
+        }
+    }
+
+    /**
+     * Login
+     */
+    public boolean login(String username) throws IllegalArgumentException {
+        try {
+            send.println("[LOGIN]:" + username);
+            return receive.readLine().equals("[ACCEPTED]");
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new IllegalArgumentException(e.getMessage());
+        }
+    }
+
+    /**
+     * Constructor
+     */
+    public Client(@NonNull String ipAddress, @NonNull int port) throws IllegalArgumentException {
+        try {
+            socket = new Socket(ipAddress, port);
+            send = new PrintWriter(socket.getOutputStream(), true);
+            receive = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+            sendObject = new ObjectOutputStream(socket.getOutputStream());
+            receiveObject = new ObjectInputStream(socket.getInputStream());
+        } catch (Exception e) {
             e.printStackTrace();
             throw new IllegalArgumentException("Couldn't initialize connection to server");
         }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java
index c85118a766fd10c9bed4de0e70e2f2f99e387ad1..32c776cb91e787e81d33f34dc5e06c6fe01ff3e5 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java
@@ -1,5 +1,6 @@
 package com.galaxytrucker.galaxytruckerreloaded.Server;
 
+import java.io.*;
 import java.net.Socket;
 
 public class ClientHandler implements Runnable {
@@ -13,12 +14,34 @@ public class ClientHandler implements Runnable {
     /** ServerServiceCommunicator */
     private ServerServiceCommunicator serverServiceCommunicator;
 
+    /** Used to send data */
+    private PrintWriter send;
+
+    /** Used to receive data */
+    private BufferedReader receive;
+
+    /** ObjectOutputStream for sending objects */
+    private ObjectOutputStream sendObject;
+
+    /** ObjectInputStream for receiving objects */
+    private ObjectInputStream receiveObject;
+
     /** Constructor
      * @param clientSocket - the client's socket
      * @param server - the server */
-    public ClientHandler(Socket clientSocket,Server server){
+    public ClientHandler(Socket clientSocket,Server server) throws IllegalArgumentException {
         this.clientSocket = clientSocket;
         this.server = server;
+        try {
+            sendObject = new ObjectOutputStream(clientSocket.getOutputStream());
+            receiveObject = new ObjectInputStream(clientSocket.getInputStream());
+            send = new PrintWriter(clientSocket.getOutputStream(),true);
+            receive = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new IllegalArgumentException();
+        }
     }
 
     /** Run */
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestObject.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestObject.java
new file mode 100644
index 0000000000000000000000000000000000000000..8379a87b60a6b39c27ae7d608cec1cdb3949c3e0
--- /dev/null
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestObject.java
@@ -0,0 +1,19 @@
+package com.galaxytrucker.galaxytruckerreloaded.Server;
+
+import com.galaxytrucker.galaxytruckerreloaded.Model.Ship;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class RequestObject {
+
+    /** Type of Request */
+    private RequestType requestType;
+
+    /** Username */
+    private String username;
+
+    /** Ship */
+    private Ship ship;
+}
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestType.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestType.java
new file mode 100644
index 0000000000000000000000000000000000000000..8615f415376d09c38d244fd0d47c6b020a5fe848
--- /dev/null
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestType.java
@@ -0,0 +1,5 @@
+package com.galaxytrucker.galaxytruckerreloaded.Server;
+
+public enum RequestType {
+    LOGIN
+}
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ResponseObject.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ResponseObject.java
new file mode 100644
index 0000000000000000000000000000000000000000..e4456aae02ee651e2198baedb375eb7c1971c196
--- /dev/null
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ResponseObject.java
@@ -0,0 +1,4 @@
+package com.galaxytrucker.galaxytruckerreloaded.Server;
+
+public class ResponseObject {
+}
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java
index ef7f9d8b1abf4d4187f5b1b6e4c0ff9c53bbd139..53554153ed9148388ba6d69b4df3fe53159bd34f 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java
@@ -2,7 +2,6 @@ package com.galaxytrucker.galaxytruckerreloaded.Server;
 
 
 import com.galaxytrucker.galaxytruckerreloaded.Communication.Client;
-import lombok.NonNull;
 
 import java.net.ServerSocket;
 import java.net.Socket;
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ServerServiceCommunicator.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ServerServiceCommunicator.java
index 59ddc12cfbad4b698a080f3a44f1432c1d3f4e2e..709b20aded5250f06778d8b0a14af1555a1997ec 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ServerServiceCommunicator.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ServerServiceCommunicator.java
@@ -2,7 +2,6 @@ package com.galaxytrucker.galaxytruckerreloaded.Server;
 
 import com.galaxytrucker.galaxytruckerreloaded.Model.Ship;
 import lombok.AccessLevel;
-import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 
 @RequiredArgsConstructor(access = AccessLevel.PUBLIC)