diff --git a/src/GUI/icon/circle.png b/resources/circle.png
similarity index 100%
rename from src/GUI/icon/circle.png
rename to resources/circle.png
diff --git a/src/GUI/icon/eraser.png b/resources/eraser.png
similarity index 100%
rename from src/GUI/icon/eraser.png
rename to resources/eraser.png
diff --git a/src/GUI/icon/freehand.png b/resources/freehand.png
similarity index 100%
rename from src/GUI/icon/freehand.png
rename to resources/freehand.png
diff --git a/src/GUI/icon/line.png b/resources/line.png
similarity index 100%
rename from src/GUI/icon/line.png
rename to resources/line.png
diff --git a/src/GUI/icon/oval.png b/resources/oval.png
similarity index 100%
rename from src/GUI/icon/oval.png
rename to resources/oval.png
diff --git a/src/GUI/icon/palette.png b/resources/palette.png
similarity index 100%
rename from src/GUI/icon/palette.png
rename to resources/palette.png
diff --git a/src/GUI/icon/rectangle.png b/resources/rectangle.png
similarity index 100%
rename from src/GUI/icon/rectangle.png
rename to resources/rectangle.png
diff --git a/src/GUI/icon/square.png b/resources/square.png
similarity index 100%
rename from src/GUI/icon/square.png
rename to resources/square.png
diff --git a/src/GUI/icon/text.png b/resources/text.png
similarity index 100%
rename from src/GUI/icon/text.png
rename to resources/text.png
diff --git a/src/GUI/DrawingArea.java b/src/GUI/DrawingArea.java
index 227329927351e162be4fa4393a2013d2f73a3327..6282dfd62a8d890332f3bc3ca669c8523e4835ac 100644
--- a/src/GUI/DrawingArea.java
+++ b/src/GUI/DrawingArea.java
@@ -93,6 +93,8 @@ public class DrawingArea extends JPanel implements MouseMotionListener, MouseLis
     public void clear() {
 
         image = new BufferedImage(AREA_WIDTH, AREA_HEIGHT, BufferedImage.TYPE_INT_ARGB);
+        g2 = (Graphics2D) image.getGraphics();
+        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
         repaint();
 
     }
@@ -113,6 +115,7 @@ public class DrawingArea extends JPanel implements MouseMotionListener, MouseLis
 /// Eraser has no border color ///
             Color borderColor = currentMode != Mode.ERASE ? shapeColor : Color.WHITE;
             g2.setColor(borderColor);
+            g2.setStroke(lineStroke);
             g2.draw(drawing);
         }
     }
diff --git a/src/GUI/PaintGUI.java b/src/GUI/PaintGUI.java
index 78265a94fee2eb865f7cc7ce59fb1fe62c0c35dc..bf6c13b8510f83203590b7b48f3ee1696b5c4447 100644
--- a/src/GUI/PaintGUI.java
+++ b/src/GUI/PaintGUI.java
@@ -1,7 +1,6 @@
 package GUI;
 
 import client.Client;
-import remote.IDrawingUpdate;
 
 import javax.imageio.ImageIO;
 import javax.swing.*;
@@ -59,24 +58,15 @@ public class PaintGUI extends JPanel {
 
         /// Set up button icons ///
         try {
-            String path = System.getProperty("user.dir");
-            System.out.println(path);
-            File palettePic = new File(path + "/src/GUI/icon/palette.png");
-            File freehandPic = new File(path + "/src/GUI/icon/freehand.png");
-            File linePic = new File(path + "/src/GUI/icon/line.png");
-            File circlePic = new File(path + "/src/GUI/icon/circle.png");
-            File rectPic = new File(path + "/src/GUI/icon/rectangle.png");
-            File ovalPic = new File(path + "/src/GUI/icon/oval.png");
-            File eraserPic = new File(path + "/src/GUI/icon/eraser.png");
-            File textPic = new File(path + "/src/GUI/icon/text.png");
-            BufferedImage paletteIcon = ImageIO.read(palettePic);
-            BufferedImage freehandIcon = ImageIO.read(freehandPic);
-            BufferedImage lineIcon = ImageIO.read(linePic);
-            BufferedImage circleIcon = ImageIO.read(circlePic);
-            BufferedImage rectIcon = ImageIO.read(rectPic);
-            BufferedImage ovalIcon = ImageIO.read(ovalPic);
-            BufferedImage eraserIcon = ImageIO.read(eraserPic);
-            BufferedImage textIcon = ImageIO.read(textPic);
+            BufferedImage paletteIcon = ImageIO.read(getClass().getResource("/palette.png"));
+            BufferedImage freehandIcon = ImageIO.read(getClass().getResource("/freehand.png"));
+            BufferedImage lineIcon = ImageIO.read(getClass().getResource("/line.png"));
+            BufferedImage circleIcon = ImageIO.read(getClass().getResource("/circle.png"));
+            BufferedImage rectIcon = ImageIO.read(getClass().getResource("/rectangle.png"));
+            BufferedImage ovalIcon = ImageIO.read(getClass().getResource("/oval.png"));
+            BufferedImage eraserIcon = ImageIO.read(getClass().getResource("/eraser.png"));
+            BufferedImage textIcon = ImageIO.read(getClass().getResource("/text.png"));
+
             colorPaletteBtn = new JButton(new ImageIcon(paletteIcon));
             colorPaletteBtn.addActionListener(actionListener);
             freehandBtn = new JButton(new ImageIcon(freehandIcon));
@@ -107,7 +97,7 @@ public class PaintGUI extends JPanel {
         //        setFontBtn = new JButton("Font");
 //        setFontBtn.addActionListener(actionListener);
         textInput = new JTextField("Text here.");
-        textInput.setColumns(8);
+        textInput.setColumns(13);
         textInput.addFocusListener(focusListener);
 //        textInput.setVisible(false);
         textSize = new JTextField("12");
@@ -409,7 +399,13 @@ public class PaintGUI extends JPanel {
 
     private void setTextDetail() {
         String textString = textInput.getText();
-        int size = Integer.parseInt(textSize.getText());
+        int size = 12;  // default
+        if (!textSize.getText().isEmpty()) {
+            size = Integer.parseInt(textSize.getText());
+        }
+        else {
+            textSize.setText(Integer.toString(size));
+        }
 
         drawingArea.setModeText(textString, size);
     }
diff --git a/src/GUI/StartScreen.java b/src/GUI/StartScreen.java
index 6b6a4b53bfb7466916b97ed4f06073b92d3c927c..6b030e1fada0d4a4b0576dbc088fd53aa94b93e8 100644
--- a/src/GUI/StartScreen.java
+++ b/src/GUI/StartScreen.java
@@ -46,43 +46,47 @@ public class StartScreen {
                 String userName = usernameField.getText();
                 String password = new String(passwordField.getPassword());
 
-                int connectionStatus = client.connect(userName, serverAddress, password);
-
-                if( connectionStatus == 1 )
-                {
-                    frame.setVisible(false);
-                    frame.dispose();
-                    if (client.getApplicationMain().getFrame() == null) {
-                        client.startApplication();
+                if (userName.length() <= 15) {
+                    int connectionStatus = client.connect(userName, serverAddress, password);
+                    if( connectionStatus == 1 )
+                    {
+                        frame.setVisible(false);
+                        frame.dispose();
+                        if (client.getApplicationMain().getFrame() == null) {
+                            client.startApplication();
+                        }
+                        else {
+                            client.clearChat();
+                            client.clearDrawingArea();
+                            client.setVisibleApplication();
+                        }
+
+                    }
+                    else if( connectionStatus == 2 || connectionStatus == 6 )
+                    {
+                        showErrorMessage("Duplicate usernameField: Please enter a new usernameField");
+                    }
+                    else if( connectionStatus == 3 )
+                    {
+                        showErrorMessage("Cannot connect to server: Please check the server address");
                     }
-                    else {
-                        client.clearChat();
-                        client.clearDrawingArea();
+                    else if( connectionStatus == 4 )
+                    {
+                        showErrorMessage("Incorrect Password");
+                    }
+                    else if( connectionStatus == 5 )
+                    {
+                        frame.setVisible(false);
+                        frame.dispose();
                         client.setVisibleApplication();
                     }
-
-                }
-                else if( connectionStatus == 2 || connectionStatus == 6 )
-                {
-                    showErrorMessage("Duplicate usernameField: Please enter a new usernameField");
-                }
-                else if( connectionStatus == 3 )
-                {
-                    showErrorMessage("Cannot connect to server: Please check the server address");
-                }
-                else if( connectionStatus == 4 )
-                {
-                    showErrorMessage("Incorrect Password");
-                }
-                else if( connectionStatus == 5 )
-                {
-                    frame.setVisible(false);
-                    frame.dispose();
-                    client.setVisibleApplication();
+                    else
+                    {
+                        showErrorMessage("Unknown Connection Status");
+                    }
                 }
-                else
-                {
-                    showErrorMessage("Unknown Connection Status");
+                else {
+                    showErrorMessage("Username must be less or equal to 15 characters");
                 }
             }
         }
diff --git a/src/client/Client.java b/src/client/Client.java
index a9ca1b3b1ec660e097ede6d0cebefa7401f7738b..acfe956e63539b52110b1831e0570e2d2a1f87c5 100644
--- a/src/client/Client.java
+++ b/src/client/Client.java
@@ -93,9 +93,9 @@ public class Client
     }
 
 
-    public Client(String username) throws RemoteException, NoSuchProviderException, NoSuchAlgorithmException
+    public Client() throws RemoteException, NoSuchProviderException, NoSuchAlgorithmException
     {
-        this.defaultUserName = username;
+        this.defaultUserName = DEFAULT_USERNAME;
         this.clientUpdate = new ClientUpdate(this);
         this.chatUpdate = new ChatUpdate(this);
         this.drawingUpdate = new DrawingUpdate(this);
@@ -108,7 +108,7 @@ public class Client
     {
         try
         {
-            Client client = new Client(args[0]);
+            Client client = new Client();
             client.showStartScreen();
         }
         catch (Exception e)
diff --git a/src/server/DrawingController.java b/src/server/DrawingController.java
index ebbadcacc84bde7256f2f82920f16fd8b5e01b82..38a850dfd4cb60d66164a30eae13543b837f88ad 100644
--- a/src/server/DrawingController.java
+++ b/src/server/DrawingController.java
@@ -34,7 +34,7 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
 
     @Override
     public boolean broadcastText(String fromClient, String text, Font font, Color color, Point startPoint) throws RemoteException {
-        System.out.print("Broadcasting drawing to everyone...");
+//        System.out.print("Broadcasting drawing to everyone...");
 
         g2 = (Graphics2D) bufferedImage.getGraphics();
         g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
@@ -55,7 +55,7 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
             }
         }
 
-        System.out.print("...DONE\n");
+//        System.out.print("...DONE\n");
 
         return true;
     }
@@ -63,7 +63,7 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
 
     @Override
     public boolean broadcastDrawing(String fromClient, Shape drawing, String mode, Color color, int strokeSize) throws RemoteException {
-        System.out.print("Broadcasting drawing to everyone...");
+//        System.out.print("Broadcasting drawing to everyone...");
 
         g2 = (Graphics2D) bufferedImage.getGraphics();
         g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
@@ -97,13 +97,13 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
             }
         }
 
-        System.out.print("...DONE\n");
+//        System.out.print("...DONE\n");
 
         return true;
     }
 
     public boolean broadcastDraggingDrawing(String fromClient, Shape drawing, String mode, Color color, int strokeSize) throws RemoteException {
-        System.out.print("Broadcasting dragging drawing to everyone...");
+//        System.out.print("Broadcasting dragging drawing to everyone...");
 
         g2 = (Graphics2D) bufferedImage.getGraphics();
         g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
@@ -137,13 +137,13 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
             }
         }
 
-        System.out.print("...DONE\n");
+//        System.out.print("...DONE\n");
 
         return true;
     }
 
     public boolean broadcastClearCanvas(String fromClient) throws RemoteException {
-        System.out.print("Broadcasting canvas clearance to everyone...");
+//        System.out.print("Broadcasting canvas clearance to everyone...");
 
         IDrawingUpdate client;
 
@@ -159,7 +159,7 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
             }
         }
 
-        System.out.print("...DONE\n");
+//        System.out.print("...DONE\n");
 
         return true;
     }
@@ -188,7 +188,7 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
 
 
     public boolean broadcastUpdateImage(String fromClient) throws RemoteException {
-        System.out.print("Broadcasting new image loading to everyone...");
+//        System.out.print("Broadcasting new image loading to everyone...");
 
         try {
 
@@ -216,7 +216,7 @@ public class DrawingController extends UnicastRemoteObject implements IDrawingCo
             err.printStackTrace();
         }
 
-        System.out.print("...DONE\n");
+//        System.out.print("...DONE\n");
 
         return true;
     }
diff --git a/src/server/Server.java b/src/server/Server.java
index 9e0084d77316ae0cdabc05dc2755b48cf327bef0..b65b320e1acd0861b99fa9eeb41d0cb345a9c8cc 100644
--- a/src/server/Server.java
+++ b/src/server/Server.java
@@ -50,7 +50,7 @@ public class Server
         {
             Server server = new Server();
 
-            server.run();
+            server.run(args[0]);
         }
         catch( Exception e )
         {
@@ -58,15 +58,15 @@ public class Server
         }
     }
 
-    public void run() throws RemoteException
+    public void run(String serverIP) throws RemoteException
     {
-        String serverIP = "";
-        try {
-            InetAddress inetAddress = InetAddress.getLocalHost();
-            serverIP = inetAddress.getHostAddress();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
+//        String serverIP = "";
+//        try {
+//            InetAddress inetAddress = InetAddress.getLocalHost();
+//            serverIP = inetAddress.getHostAddress();
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
 
         System.setProperty("java.rmi.server.hostname", serverIP);
 
@@ -91,16 +91,18 @@ public class Server
 
         System.out.println("Server is ready");
 
-        printIP();
+        printIP(serverIP);
     }
 
-    private void printIP()
+    private void printIP(String serverIP)
     {
         InetAddress inetAddress = null;
 
         try
         {
-            inetAddress = InetAddress.getLocalHost();
+            if (serverIP.isEmpty()) {
+                inetAddress = InetAddress.getLocalHost();
+            } else inetAddress = InetAddress.getByName(serverIP);
         }
         catch (UnknownHostException e)
         {