diff --git a/allocate.c b/allocate.c
index 9d26980c3149be452f0b91ff6e1bee9f86934aea..8a8fdf41bbce077412d6904ddb15b1c41772e17a 100644
--- a/allocate.c
+++ b/allocate.c
@@ -22,6 +22,7 @@ typedef struct {
     int justStarted;
     int startTime;
     int timeRemAtStartTime;
+    int finished;
 } process;
 
 typedef struct {
@@ -182,9 +183,10 @@ int main(int argc, char *argv[]) {
             headData(completedProcesses);
             process * currProc = currNode->data;
             while ( currNode ){
-                if ( currProc!= NULL &&  currProc->timeCompleted >= currentTime  ) {
+                if ( currProc!= NULL &&  currProc->timeCompleted <= currentTime   && !currProc->finished) {
                     printf("%d,FINISHED,pid=%s,proc_remaining=%d\n",
                            currProc->timeCompleted, currProc->processID, numProcessesLeft);
+                    currProc->finished = -1;
                 }
                 currNode = currNode->next;
                 if (currNode) currProc = currNode->data;
@@ -240,9 +242,10 @@ int main(int argc, char *argv[]) {
         headData(completedProcesses);
         process * currProc = currNode->data;
         while ( currNode ){
-            if ( currProc!= NULL &&  currProc->timeCompleted >= currentTime  ) {
+            if ( currProc!= NULL &&  currProc->timeCompleted >= currentTime  && currProc->finished ) {
                 printf("%d,FINISHED,pid=%s,proc_remaining=%d\n",
                        currProc->timeCompleted, currProc->processID, numProcessesLeft);
+                currProc->finished = -1;
             }
             currNode = currNode->next;
             if (currNode) currProc = currNode->data;
@@ -360,6 +363,7 @@ void initializeProcess(char data[], process *newProcess) {
     newProcess->timeRemaining = newProcess->executionTime;
     newProcess->timeRemAtStartTime = newProcess->timeRemaining;
     newProcess->justStarted = 0;
+    newProcess->finished = 0;
 }
 
 process *headData(llist *q) {