diff --git a/src/Controller.java b/src/Controller.java
index 129de965e6a359a816176ade5533ede48af1d6da..46c08b82b92a295f874a7e4616ae54d013ccade0 100644
--- a/src/Controller.java
+++ b/src/Controller.java
@@ -76,7 +76,18 @@ public class Controller {
     /**
      * TODO Send store commands to client
      */
-    private static void storeCommand(Socket client) {
+    private static synchronized void storeCommand(Socket client) {
+        //If file already exists, send error
+
+        //If file does not exist, add as empty entry, select r DStores
+
+        //Send list of store ports to client
+
+        //Wait for store ack from each client
+
+        //If any not received, remove from index and decrease DStore numbers
+
+        //If all received, send ack to client, store list to index & increment DStore numbers
 
     }
 
@@ -147,49 +158,49 @@ public class Controller {
     }
 
     /**
-     * TODO Remove given file from all DStores
+     * Remove given file from all DStores
      */
     private static void removeCommand(String fileName, Socket client) {
         try {
             //Create output stream to client
             PrintWriter clientOut = new PrintWriter(new OutputStreamWriter(client.getOutputStream()));
+            int[] stores;
 
-            //If file does not exist
-            if (!index.containsKey(fileName)) {
-                clientOut.println("ERROR_FILE_DOES_NOT_EXIST");
-                clientOut.flush();
-            } else {
-                //Get list of DStores associated with given filename
-                int[] stores = index.get(fileName);
+            synchronized (index) {
+                if (!index.containsKey(fileName)) {
+                    //If file does not exist, send error message
+                    clientOut.println("ERROR_FILE_DOES_NOT_EXIST");
+                    clientOut.flush();
+                    return;
+                } else {
+                    //If file does exist, get dStores & remove from index
+                    stores = index.get(fileName);
+                    index.remove(fileName);
+                }
+            }
 
-                //For each DStore, send "delete filename" command in new thread
-                for (int store : stores) {
-                    decreaseDStore(store);
-
-                    new Thread(() -> {
-                        try {
-                            //Send "REMOVE filename"
-                            PrintWriter out = new PrintWriter(dStores.get(store).getOutputStream());
-                            out.println("REMOVE " + fileName);
-                            out.flush();
-
-                            //Wait for acknowledgement
-                            BufferedReader in = new BufferedReader(new InputStreamReader(dStores.get(store).getInputStream()));
-                            while (true) {
-                                String response = in.readLine();
-                                if(!(response == null) && response.equals("REMOVE_ACK " + fileName)){
-                                    break;
-                                }
-                            }
-                        } catch (Exception e) {
-                            System.out.println("error "+e);
-                        }
-                    }).start();
+            synchronized (dStores) {
+                //Reduce file count for each DStore
+                synchronized (storeNumbers) {
+                    for (int store : stores) {
+                        decreaseDStore(store);
+                    }
                 }
 
-                //Remove file from index
-                synchronized (index) {
-                    index.remove(fileName);
+                //Send remove command for each DStore
+                for (int store : stores) {
+                    PrintWriter out = new PrintWriter(dStores.get(store).getOutputStream());
+                    out.println("REMOVE " + fileName);
+                    out.flush();
+
+                    //Wait for acknowledgement
+                    BufferedReader in = new BufferedReader(new InputStreamReader(dStores.get(store).getInputStream()));
+                    while (true) {
+                        String response = in.readLine();
+                        if(!(response == null) && response.equals("REMOVE_ACK " + fileName)){
+                            break;
+                        }
+                    }
                 }
 
                 //Send acknowledgement to client
@@ -197,7 +208,7 @@ public class Controller {
                 clientOut.flush();
                 clientOut.close();
             }
-        }catch (Exception e) {
+        } catch (Exception e) {
             System.out.println("error "+e);
         }
     }
@@ -285,10 +296,12 @@ public class Controller {
      */
     private static void addDStore(int portNo, int depth){
         synchronized (dStores) {
-            if (!storeNumbers.containsKey(depth)) {
-                storeNumbers.put(depth, (new ArrayList<>()));
+            synchronized (storeNumbers) {
+                if (!storeNumbers.containsKey(depth)) {
+                    storeNumbers.put(depth, (new ArrayList<>()));
+                }
+                storeNumbers.get(depth).add(portNo);
             }
-            storeNumbers.get(depth).add(portNo);
         }
     }
 
@@ -296,14 +309,12 @@ public class Controller {
      * Increase number of files given DStore has by 1
      */
     private static void increaseDStore(int portNo) {
-        synchronized (storeNumbers) {
-            for (int i = 0; ; i++) {
-                if (storeNumbers.get(i).contains(portNo)) {
-                    storeNumbers.get(i).remove(portNo);
+        for (int i = 0; ; i++) {
+            if (storeNumbers.get(i).contains(portNo)) {
+                storeNumbers.get(i).remove(portNo);
 
-                    addDStore(portNo, i + 1);
-                    break;
-                }
+                addDStore(portNo, i + 1);
+                break;
             }
         }
     }
@@ -312,14 +323,12 @@ public class Controller {
      * Decrease number of files given DStore has by 1
      */
     private static void decreaseDStore(int portNo) {
-        synchronized (storeNumbers) {
-            for (int i = 0; ; i++) {
-                if (storeNumbers.get(i).contains(portNo)) {
-                    storeNumbers.get(i).remove(portNo);
+        for (int i = 0; ; i++) {
+            if (storeNumbers.get(i).contains(portNo)) {
+                storeNumbers.get(i).remove(portNo);
 
-                    addDStore(portNo, i - 1);
-                    break;
-                }
+                addDStore(portNo, i - 1);
+                break;
             }
         }
     }