diff --git a/src/GUI/ChatScreen.form b/src/GUI/ChatScreen.form
index 62e6e34eb874be74427ea0edf4f88a6c4a99be32..05bc77bc7c92c0705b176c7bbc1ab31ab2bf8e08 100644
--- a/src/GUI/ChatScreen.form
+++ b/src/GUI/ChatScreen.form
@@ -35,7 +35,7 @@
           </hspacer>
         </children>
       </grid>
-      <grid id="b37e3" binding="x" layout-manager="GridLayoutManager" row-count="4" column-count="4" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+      <grid id="b37e3" layout-manager="GridLayoutManager" row-count="4" column-count="4" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
         <margin top="0" left="0" bottom="0" right="0"/>
         <constraints>
           <grid row="1" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
@@ -107,10 +107,10 @@
           </component>
         </children>
       </grid>
-      <grid id="be22c" binding="ryanPanel" custom-create="true" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+      <grid id="c0bac" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
         <margin top="0" left="0" bottom="0" right="0"/>
         <constraints>
-          <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
+          <grid row="0" column="0" row-span="2" col-span="1" vsize-policy="3" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false"/>
         </constraints>
         <properties/>
         <border type="none"/>
diff --git a/src/GUI/ChatScreen.java b/src/GUI/ChatScreen.java
index 9449615087d77f8d09f7bf7527073f37aa8248eb..1deb3f47c46a0b8727edbd500d988532358b56ae 100644
--- a/src/GUI/ChatScreen.java
+++ b/src/GUI/ChatScreen.java
@@ -1,12 +1,25 @@
 package GUI;
 
+import client.Client;
+import remote.IChatController;
+import remote.IClientController;
+
 import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.rmi.RemoteException;
 
 public class ChatScreen {
 
     public JPanel panel2;
     private JButton quitButton;
     private JButton send;
+
+    public JTextArea getChatOutputArea()
+    {
+        return chatOutputArea;
+    }
+
     private JTextArea chatOutputArea;
     private JTextArea chatInputArea;
     private JTextArea userListArea;
@@ -14,16 +27,65 @@ public class ChatScreen {
     private JPanel x;
     private JFrame frame;
 
-    public ChatScreen(){
+    private Client client;
+
+    public void setChatOutput(String message)
+    {
+        this.chatOutputArea.setText(message);
+    }
+
+    ActionListener actionListener = new ActionListener()
+    {
+        public void actionPerformed(ActionEvent e)
+        {
+            if (e.getSource() == send)
+            {
+                String message = chatInputArea.getText();
+                chatInputArea.setText("");
+                IChatController chatController = client.getChatController();
+                try
+                {
+                    System.out.println("Send button pressed");
+                    chatController.broadcastMessage(client.getUserName(), message);
+                }
+                catch (RemoteException ex)
+                {
+                    ex.printStackTrace();
+                }
+            }
+            else if (e.getSource() == quitButton)
+            {
+                IClientController clientController = client.getClientController();
+                try
+                {
+                    System.out.println("Quit button pressed");
+                    clientController.quit(client.getUserName());
+                    System.exit(0);
+                }
+                catch (RemoteException ex)
+                {
+                    ex.printStackTrace();
+                }
+            }
+        }
+
+    };
+
 
+    public ChatScreen(Client client)
+    {
+        this.client = client;
+        quitButton.addActionListener(actionListener);
+        send.addActionListener(actionListener);
         frame = new JFrame("App");
         frame.setContentPane(panel2);
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.pack();
         frame.setVisible(true);
         createUIComponents();
-
     }
+
+
     private void createUIComponents() {
         ryanPanel = new PaintGUI().getGlobal();
 
diff --git a/src/GUI/PaintGUI.java b/src/GUI/PaintGUI.java
index f63f737bb61ae12d6cd36dd5ec5b50f551e04b3f..74d68ce593ed415444844dbbf67269dc2b951cd1 100644
--- a/src/GUI/PaintGUI.java
+++ b/src/GUI/PaintGUI.java
@@ -1,5 +1,7 @@
 package GUI;
 
+import client.DrawingArea;
+
 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.ActionEvent;
diff --git a/src/GUI/StartScreen.java b/src/GUI/StartScreen.java
index 8c64799bbb8150d20f6d9e5cf24dd8b362554c28..6fdb1bdad02e8540b44c4cafefbd81f36830a104 100644
--- a/src/GUI/StartScreen.java
+++ b/src/GUI/StartScreen.java
@@ -40,14 +40,13 @@ public class StartScreen {
                 {
                     frame.setVisible(false);
                     frame.dispose();
-                    client.run();
+                    //client.doSomething();
+                    new ChatScreen(client);
                 }
                 else
                 {
                     showErrorMessage("Could not connect to server...");
                 }
-
-                //new ChatScreen();
             }
         }
 
diff --git a/src/client/ChatUpdate.java b/src/client/ChatUpdate.java
index 93cce44f87ee930cab1fab6d47f2e560d65d03d8..72682a9249b2ceae23b1a156d620252df2fdd778 100644
--- a/src/client/ChatUpdate.java
+++ b/src/client/ChatUpdate.java
@@ -8,14 +8,21 @@ import java.rmi.server.UnicastRemoteObject;
 
 public class ChatUpdate extends UnicastRemoteObject implements IChatUpdate, Serializable
 {
-    public ChatUpdate() throws RemoteException
+    private Client client;
+
+    public ChatUpdate(Client client) throws RemoteException
     {
         super();
+        this.client = client;
     }
 
     @Override
     public boolean notifyChat(String fromClient, String message) throws RemoteException
     {
+//        client.getChatScreen().setChatOutput(message);
+        client.getChatScreen().getChatOutputArea().setText(message);
+
+        //client.setReceivedMessage(message);
         System.out.println(fromClient + ": " + message);
         return true;
     }
diff --git a/src/client/Client.java b/src/client/Client.java
index 4601865c0c8d078ecb6bd7a3acb8d17f160a3fe3..6a1845d0631815a7f46c925bda139d1f841f03a8 100644
--- a/src/client/Client.java
+++ b/src/client/Client.java
@@ -1,5 +1,6 @@
 package client;
 
+import GUI.ChatScreen;
 import remote.IChatController;
 import remote.IClientController;
 import client.ChatUpdate;
@@ -25,11 +26,37 @@ public class Client
 
     private StartScreen startScreen;
 
+    public ChatScreen getChatScreen()
+    {
+        return chatScreen;
+    }
+
+    private ChatScreen chatScreen;
+
+
+
+    private String receivedMessage;
+
+    public IChatController getChatController()
+    {
+        return chatController;
+    }
+
+    public IClientController getClientController()
+    {
+        return clientController;
+    }
+
     public void setUsername(String userName)
     {
         this.userName = userName;
     }
 
+    public String getUserName()
+    {
+        return this.userName;
+    }
+
     public void setServerAddress(String serverAddress)
     {
         this.serverAddress = serverAddress;
@@ -38,7 +65,7 @@ public class Client
     public Client() throws RemoteException
     {
         this.userName = "DefaultUser";
-        this.chatUpdate = new ChatUpdate();
+        this.chatUpdate = new ChatUpdate(this);
         this.startScreen = new StartScreen(this);
         this.drawingUpdate = new DrawingUpdate();
     }
@@ -56,12 +83,13 @@ public class Client
         }
     }
 
-    public void run()
+    public void doSomething()
     {
-        //connect();
+//        new ChatScreen();
 
         try
         {
+            new ChatScreen(this);
             System.out.println("Sleeping...");
             TimeUnit.MINUTES.sleep(5);
         }
@@ -95,7 +123,13 @@ public class Client
         return false;
     }
 
+    public String getReceivedMessage()
+    {
+        return receivedMessage;
+    }
 
-
-
+    public void setReceivedMessage(String receivedMessage)
+    {
+        this.receivedMessage = receivedMessage;
+    }
 }
\ No newline at end of file
diff --git a/src/client/Client1.java b/src/client/Client1.java
deleted file mode 100644
index 18d3b752c54b0006fae74cd71db0722b8018cc0f..0000000000000000000000000000000000000000
--- a/src/client/Client1.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package client;
-
-import remote.IChatController;
-import remote.IClientController;
-
-import java.rmi.NotBoundException;
-import java.rmi.RemoteException;
-import java.rmi.registry.LocateRegistry;
-import java.rmi.registry.Registry;
-import java.util.concurrent.TimeUnit;
-
-public class Client1
-{
-    private String userName;
-    private Registry registryServer;
-    private IChatController chatController;
-    private IClientController clientController;
-    private ChatUpdate chatUpdate;
-
-    public Client1(String userName) throws RemoteException
-    {
-        this.userName = userName;
-        this.chatUpdate = new ChatUpdate();
-    }
-
-    public static void main(String[] args)
-    {
-        try
-        {
-            Client1 client1 = new Client1("Hai");
-            client1.run();
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-        }
-    }
-
-    public void run() throws RemoteException, NotBoundException
-    {
-        connect();
-
-        try
-        {
-            TimeUnit.MINUTES.sleep(5);
-        }
-        catch(Exception e)
-        {
-            e.printStackTrace();
-        }
-    }
-
-    public boolean connect() throws RemoteException, NotBoundException
-    {
-        registryServer = LocateRegistry.getRegistry("localhost");
-
-        chatController = (IChatController) registryServer.lookup("ChatController");
-        clientController = (IClientController) registryServer.lookup("ClientController");
-
-        System.out.println(userName + " fetched all controller from RMI registry");
-
-        if ( clientController.join(userName, this.chatUpdate ) )
-        {
-            System.out.println(userName + " registered at server");
-
-            return true;
-        }
-
-        return false;
-    }
-
-
-}
\ No newline at end of file
diff --git a/src/client/Client2.java b/src/client/Client2.java
deleted file mode 100644
index 3eda56bbcb3ba7adc889775fffdd352da89fe084..0000000000000000000000000000000000000000
--- a/src/client/Client2.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package client;
-
-import remote.IChatController;
-import remote.IClientController;
-import client.ChatUpdate;
-
-import java.rmi.NotBoundException;
-import java.rmi.RemoteException;
-import java.rmi.registry.LocateRegistry;
-import java.rmi.registry.Registry;
-import java.util.concurrent.TimeUnit;
-
-public class Client2
-{
-    private String userName;
-    private Registry registryServer;
-    private IChatController chatController;
-    private IClientController clientController;
-    private ChatUpdate chatUpdate;
-
-    public Client2(String userName) throws RemoteException
-    {
-        this.userName = userName;
-        this.chatUpdate = new ChatUpdate();
-    }
-
-    public static void main(String[] args)
-    {
-        try
-        {
-            Client2 client1 = new Client2("Max");
-            client1.run();
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-        }
-    }
-
-    public void run() throws RemoteException, NotBoundException
-    {
-        connect();
-
-        chatController.broadcast(userName, "Hello");
-
-        try
-        {
-            TimeUnit.MINUTES.sleep(5);
-        }
-        catch(Exception e)
-        {
-            e.printStackTrace();
-        }
-    }
-
-    public boolean connect() throws RemoteException, NotBoundException
-    {
-        registryServer = LocateRegistry.getRegistry("localhost");
-
-        chatController = (IChatController) registryServer.lookup("ChatController");
-        clientController = (IClientController) registryServer.lookup("ClientController");
-
-        System.out.println(userName + " fetched all controller from RMI registry");
-
-        if ( clientController.join(userName, this.chatUpdate ) )
-        {
-            System.out.println(userName + " registered at server");
-
-            return true;
-        }
-
-        return false;
-    }
-
-
-}
\ No newline at end of file
diff --git a/src/client/PaintGUI.java b/src/client/PaintGUI.java
deleted file mode 100644
index 02ea1bce4399175d6903809aea3653751cd2046e..0000000000000000000000000000000000000000
--- a/src/client/PaintGUI.java
+++ /dev/null
@@ -1,219 +0,0 @@
-package client;
-
-import javax.swing.*;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-
-public class PaintGUI {
-
-
-    String[] shapes = {"Freehand", "Line", "Circle", "Rectangle", "Oval", "Eraser"};
-    String[] colors = {"Aqua", "Black", "Blue", "Fuchsia", "Gray", "Green", "Lime", "Maroon", "Navy", "Olive", "Purple", "Red", "Silver", "Teal", "White", "Yellow"};
-    JFrame frame;
-    JButton clearBtn, newBtn, openBtn, saveBtn, saveAsBtn, closeBtn;
-    JComboBox colorOptions;
-    JComboBox shapeOptions;
-
-    DrawingArea drawingArea;
-
-    JFileChooser fileChooser= new JFileChooser();
-    JPanel toolbox = new JPanel();
-    JPanel fileControl = new JPanel();
-    ActionListener actionListener = new ActionListener() {
-
-        public void actionPerformed(ActionEvent e) {
-
-/// Clear button ///
-            if (e.getSource() == clearBtn) {
-                drawingArea.clear();
-
-/// Create new canvas ///
-            } else if (e.getSource() == newBtn) {
-                int returnVal = JOptionPane.showConfirmDialog(new JFrame(), "Save your current whiteboard?", "Save or Discard", JOptionPane.YES_NO_CANCEL_OPTION);
-                if (returnVal == JOptionPane.YES_OPTION) {
-
-                    drawingArea.saveFile();
-                    drawingArea.clear();
-
-                } else if (returnVal == JOptionPane.NO_OPTION) {
-
-                    drawingArea.clear();
-
-                }
-
-// Open file (PNG only) ///
-            } else if (e.getSource() == openBtn) {
-                int returnVal = fileChooser.showOpenDialog(frame);
-                if (returnVal == JFileChooser.APPROVE_OPTION) {
-                    File file = fileChooser.getSelectedFile();
-                    drawingArea.openFile(file);
-                }
-
-/// Save under project directory without filename (PNG file with default filename) ///
-            } else if (e.getSource() == saveBtn) {
-                drawingArea.saveFile();
-
-/// Save with other filename (PNG only) ///
-            } else if (e.getSource() == saveAsBtn) {
-                fileChooser = new JFileChooser();
-                int returnVal = fileChooser.showSaveDialog(frame);
-                if (returnVal == JFileChooser.APPROVE_OPTION) {
-                    File file = fileChooser.getSelectedFile();
-                    drawingArea.saveAsFile(file);
-                }
-
-/// Close application ///
-            } else if (e.getSource() == closeBtn) {
-                System.exit(0);
-
-/// Choose drawing color ///
-            } else if (e.getSource() == colorOptions) {
-
-                String colorChosen = (String) colorOptions.getSelectedItem();
-
-                switch (colorChosen){
-                    case "Aqua":
-                        drawingArea.setColorAqua();
-                        break;
-                    case "Black":
-                        drawingArea.setColorBlack();
-                        break;
-                    case "Blue":
-                        drawingArea.setColorBlue();
-                        break;
-                    case "Fuchsia":
-                        drawingArea.setColorFuchsia();
-                        break;
-                    case "Gray":
-                        drawingArea.setColorGray();
-                        break;
-                    case "Green":
-                        drawingArea.setColorGreen();
-                        break;
-                    case "Lime":
-                        drawingArea.setColorLime();
-                        break;
-                    case "Maroon":
-                        drawingArea.setColorMaroon();
-                        break;
-                    case "Navy":
-                        drawingArea.setColorNavy();
-                        break;
-                    case "Olive":
-                        drawingArea.setColorOlive();
-                        break;
-                    case "Purple":
-                        drawingArea.setColorPurple();
-                        break;
-                    case "Red":
-                        drawingArea.setColorRed();
-                        break;
-                    case "Silver":
-                        drawingArea.setColorSilver();
-                        break;
-                    case "Teal":
-                        drawingArea.setColorTeal();
-                        break;
-                    case "White":
-                        drawingArea.setColorWhite();
-                        break;
-                    case "Yellow":
-                        drawingArea.setColorYellow();
-                        break;
-                }
-
-/// Choose drawing tool ///
-            } else if (e.getSource() == shapeOptions) {
-
-                String shapeChosen = (String) shapeOptions.getSelectedItem();
-
-                switch (shapeChosen){
-                    case "Freehand":
-                        drawingArea.setModeFreehand();
-                        break;
-                    case "Line":
-                        drawingArea.setModeLine();
-                        break;
-                    case "Circle":
-                        drawingArea.setModeCircle();
-                        break;
-                    case "Rectangle":
-                        drawingArea.setModeRectangle();
-                        break;
-                    case "Oval":
-                        drawingArea.setModeOval();
-                        break;
-                    case "Eraser":
-                        drawingArea.setModeErase();
-                        break;
-                }
-            }
-        }
-    };
-
-/// Main program ///
-    public static void main(String[] args) {
-        new PaintGUI().createAndShowGUI();
-    }
-
-
-/// GUI setup ///
-    private void createAndShowGUI() {
-
-/// Main drawing area ///
-        drawingArea = new DrawingArea();
-
-/// Set up main frame and container ///
-        frame = new JFrame("Shared Whiteboard System");
-        JFrame.setDefaultLookAndFeelDecorated(true);
-        Container content = frame.getContentPane();
-        content.setLayout(new BorderLayout());
-
-/// Set up elements ///
-        shapeOptions = new JComboBox(shapes);
-        shapeOptions.addActionListener(actionListener);
-        colorOptions = new JComboBox(colors);
-        colorOptions.setSelectedItem("Black");
-        colorOptions.addActionListener(actionListener);
-        clearBtn = new JButton("Clear");
-        clearBtn.addActionListener(actionListener);
-        newBtn = new JButton("New");
-        newBtn.addActionListener(actionListener);
-        openBtn = new JButton("Open");
-        openBtn.addActionListener(actionListener);
-        saveBtn = new JButton("Save");
-        saveBtn.addActionListener(actionListener);
-        saveAsBtn = new JButton("Save As");
-        saveAsBtn.addActionListener(actionListener);
-        closeBtn = new JButton("Close");
-        closeBtn.addActionListener(actionListener);
-
-/// Toolbox panel ///
-        toolbox.add(colorOptions);
-        toolbox.add(shapeOptions);
-        toolbox.add(clearBtn);
-
-/// File control panel ///
-        fileControl.add(newBtn);
-        fileControl.add(openBtn);
-        fileControl.add(saveBtn);
-        fileControl.add(saveAsBtn);
-        fileControl.add(closeBtn);
-
-/// Layout ///
-        content.add(fileControl, BorderLayout.NORTH);
-        content.add(drawingArea);
-        content.add(toolbox, BorderLayout.SOUTH);
-
-/// Miscellaneous ///
-        frame.setSize(800, 600);
-        frame.setLocationRelativeTo( null );
-        frame.setResizable(false);
-        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-        frame.setVisible(true);
-
-    }
-
-}
\ No newline at end of file