diff --git a/allocate.c b/allocate.c
index 6548d0876742c6d93caacf87857d35449e93a82b..462e4da82a08973e5eedf0c43ceebf541dc28347 100644
--- a/allocate.c
+++ b/allocate.c
@@ -28,7 +28,7 @@ typedef struct {
     //int CPUi;
     int totalExecutionTimeRemaining; //add all the times of the process
     llist *processQueue;
-    int numPorc;
+    int numProcessesRemaining;
 } CPU;
 
 void initializeProcess(char data[], process *newProcess);
@@ -38,7 +38,7 @@ process *headData(llist *q);
 process *parallelParent(llist *processQueue, char *parentPid);
 
 void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, llist *processesComplete,
-                         llist *parallelProcesses, int *numProcessesLeft, int *numProcessComplete, int cpuID);
+                         llist *parallelProcesses, int *numProcessesLeft, int *numProcessComplete, CPU * CPUs, int cpuID);
 
 void printQEntry(process *p);
 
@@ -102,15 +102,12 @@ int main(int argc, char *argv[]) {
     for (int i = 0; i < numCPU; i++) {
         CPUs[i].totalExecutionTimeRemaining = 0;
         CPUs[i].processQueue = llist_create(NULL);// is making list
+        CPUs[i].numProcessesRemaining = 0;
     }
 
     //main loop
     if (f != NULL) {
-
-        //iterate over arriving processes
-
-
-        //while (fgets(line, sizeof line, f) != NULL) {
+        //  iterate over arriving processes
         while (newProcess = getNextProcessB(f, arrivalLounge, readAhead)) {
 
             //printf("process id:%s  process arrival time: %d\n", newProcess->processID, newProcess->timeArrived);
@@ -125,7 +122,7 @@ int main(int argc, char *argv[]) {
                 advanceProcessQueue(CPUs[j].processQueue, currentTime, deltaTime, completedProcesses,
                                     paralellizedProcesses,
                                     &numProcessesLeft,
-                                    &numberProcessesFinished, j);
+                                    &numberProcessesFinished, CPUs, j);
                 if (CPUs[j].totalExecutionTimeRemaining - deltaTime < 0) {
                     CPUs[j].totalExecutionTimeRemaining = 0;
                 } else {
@@ -146,6 +143,7 @@ int main(int argc, char *argv[]) {
                                   currentTime, shortestTimeRemaining);
                 numProcessesLeft += 1;
                 CPUs[shortestTimeRemaining].totalExecutionTimeRemaining += newProcess->executionTime;
+                CPUs[shortestTimeRemaining].numProcessesRemaining += 1;
             } else if (newProcess->parallelisable == 'p') { // Parallelizable processes need to be split up
                 // calculate number of sub processes and execution times for sub processes
                 int quot = newProcess->executionTime / numCPU;
@@ -167,6 +165,8 @@ int main(int argc, char *argv[]) {
                     parableProcess[i].timeRemaining = parableProcess[i].executionTime;
                     parableProcess[i].timeRemAtStartTime = newProcess->timeRemAtStartTime;
                     addProcessToQueue(CPUs[i].processQueue, &parableProcess[i], currentTime, i);
+                    CPUs[i].totalExecutionTimeRemaining += newProcess->executionTime;
+                    CPUs[i].numProcessesRemaining += 1;
                 }
                 numProcessesLeft += 1;
                 llist_push(paralellizedProcesses, newProcess);
@@ -213,7 +213,7 @@ int main(int argc, char *argv[]) {
         for (int j = 0; j < numCPU; j++) {
             advanceProcessQueue(CPUs[j].processQueue, currentTime, deltaTime, completedProcesses, paralellizedProcesses,
                                 &numProcessesLeft,
-                                &numberProcessesFinished, j);
+                                &numberProcessesFinished, CPUs, j);
             if (CPUs[j].totalExecutionTimeRemaining - deltaTime < 0) {
                 CPUs[j].totalExecutionTimeRemaining = 0;
             } else {
@@ -328,7 +328,7 @@ process *parallelParent(llist *q, char *parentPid) {
 // period then pop them off the queue and add them to a completed processes list.
 void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, llist *processesComplete,
                          llist *paralellProcesses,
-                         int *numProcessesLeft, int *numProcessComplete, int cpuID) {
+                         int *numProcessesLeft, int *numProcessComplete, CPU * CPUs, int cpuID) {
     process *headProcess;
     process *paralizedProcess;
     char parentPid[11];
@@ -362,6 +362,7 @@ void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, ll
                 }
                 llist_pop(processQueue);
                 headProcess = headData(processQueue);
+                CPUs[cpuID].numProcessesRemaining -= 1;
                 if (headProcess){
                     headProcess->justStarted = -1;
                     headProcess->startTime = currentTime - deltaTime;
@@ -377,6 +378,7 @@ void advanceProcessQueue(llist *processQueue, int currentTime, int deltaTime, ll
                 llist_push(processesComplete, headProcess);
                 llist_pop(processQueue);
                 headProcess = headData(processQueue);
+                CPUs[cpuID].numProcessesRemaining -= 1;
                 if (headProcess){
                     headProcess->justStarted = -1;
                     headProcess->startTime = currentTime - deltaTime;