diff --git a/src/ftp/Controller.java b/src/ftp/Controller.java
index 0316c1dceb5c81914ce0003dc8c38c650676aa9f..ce797fce420443bb7fa8448fc2957d287a886fc0 100644
--- a/src/ftp/Controller.java
+++ b/src/ftp/Controller.java
@@ -117,6 +117,20 @@ public class Controller extends Server {
             file.setStoreAcksQuota(r);
 
             send("STORE_TO " + ports, client);
+
+
+            Boolean fileStored = false;
+            while (!fileStored) {
+                if (file.ackCheck()) {
+                    file.setStoreInProgress(false);
+                    file.setStoreComplete(true);
+                    fileStored = true;
+
+                    threadIDOutput("Store of file " + filename + " complete");
+
+                    send("STORE_COMPLETE", client);
+                }
+            }
         }
 
         else if (command.equals("STORE_ACK")) {
@@ -124,13 +138,6 @@ public class Controller extends Server {
             DStoreFile file = fileIndex.get(filename);
 
             file.storeAck();
-
-            if ( file.ackCheck() ) {
-                file.setStoreInProgress(false);
-                file.setStoreComplete(true);
-
-                threadIDOutput("Store of file " + filename + " complete");
-            }
         }
 
         else if (command.equals("LOAD")) {
diff --git a/src/ftp/DStore.java b/src/ftp/DStore.java
index c684ff1550ff5ed6b86223f0a661403debcb139d..af5d2469e82ffc6c2e1fb2829e813393749de8ed 100644
--- a/src/ftp/DStore.java
+++ b/src/ftp/DStore.java
@@ -104,6 +104,9 @@ public class DStore extends Server {
 
             String response = readSocket(client);
             if (response.equals("ACK")) threadIDOutput("Successfully joined Controller");
+
+
+            closeConnection(client);
         }
 
         else if (command.equals("STORE")) {
@@ -125,6 +128,8 @@ public class DStore extends Server {
                 if (controller != null) {
                     send("STORE_ACK " + filename, controller);
                 } else threadIDErr("Unable to connect to Controller");
+
+                closeConnection(controller);
             }
 
         else if (command.equals("LOAD_DATA")) {
diff --git a/src/ftp/Server.java b/src/ftp/Server.java
index 383dbb2a7767059f9d3d22042fb35785fd2f1eda..59c55ec55e61ef4b87cfdd1f00ce22e3b5fb42e9 100644
--- a/src/ftp/Server.java
+++ b/src/ftp/Server.java
@@ -21,9 +21,13 @@ public abstract class Server {
                         public void run() {
                             try {
                                 threadIDOutput("Connection Accepted");
-                                String request = readSocket(client);
-                                handleRequest(request, client);
-                                client.close();
+                                Boolean closed = false;
+                                while (!closed) {
+                                    String request = readSocket(client);
+                                    if (request == null) closed = true;
+                                    else handleRequest(request, client);
+                                }
+                                closeConnection(client);
                             } catch (Exception e) {
                                 threadIDErr("Exception thrown: " + e.getMessage());
                             }
@@ -98,4 +102,10 @@ public abstract class Server {
         System.err.println("Thread ID: " + Thread.currentThread().getId() + " " + output);
     }
 
+
+
+    protected void closeConnection(Socket client) {
+        try {client.close(); threadIDOutput("Connection Closed");} catch (IOException e) {threadIDErr(e.getMessage());}
+    }
+
 }
\ No newline at end of file