diff --git a/src/our_utils.c b/src/our_utils.c
index 3628a19d4b55cf266eb41b963f691efd018af50f..d944f373c281cb401cb6057f9fe413737f5f4cc3 100644
--- a/src/our_utils.c
+++ b/src/our_utils.c
@@ -109,7 +109,7 @@ int wait_for_client(int sfd)
     return 0;
 }
 
-void write_stats_to_file(const char * pathname, transfer_stats_t * stats_file)
+void write_stats_to_file(const char * pathname, transfer_stats_t * stats_file, agents_t caller)
 {
     if (pathname ==  NULL || stats_file == NULL)
         return;
@@ -150,25 +150,27 @@ void write_stats_to_file(const char * pathname, transfer_stats_t * stats_file)
     ret = sprintf((char *) &buffer, "packet_ignored:%llu\n", stats_file->packet_ignored);
     ret = write(fd, buffer, strlen(buffer));
 
-    #ifdef __RECEIVER_UTILS_
-    ret = sprintf((char *) &buffer, "packet_duplicated:%llu\n", stats_file->packet_duplicated);
-    ret = write(fd, buffer, strlen(buffer));
+    if (caller == RECEIVER)
+    {
+        ret = sprintf((char *) &buffer, "packet_duplicated:%llu\n", stats_file->packet_duplicated);
+        ret = write(fd, buffer, strlen(buffer));
 
-    ret = sprintf((char *) &buffer, "packet_recovered:%llu\n", stats_file->packet_recovered);
-    ret = write(fd, buffer, strlen(buffer));
-    #endif 
-    #ifdef __SENDER_UTILS_H_
-    
-    ret = sprintf((char *) &buffer, "min_rtt:%llu ms\n", stats_file->min_rtt);
-    ret = write(fd, buffer, strlen(buffer));
+        ret = sprintf((char *) &buffer, "packet_recovered:%llu\n", stats_file->packet_recovered);
+        ret = write(fd, buffer, strlen(buffer));
+    }
 
-    ret = sprintf((char *) &buffer, "max_rtt:%llu ms\n", stats_file->max_rtt);
-    ret = write(fd, buffer, strlen(buffer));
+    if (caller == SENDER)
+    {
+        ret = sprintf((char *) &buffer, "min_rtt:%llu ms\n", stats_file->min_rtt);
+        ret = write(fd, buffer, strlen(buffer));
 
-    ret = sprintf((char *) &buffer, "packet_retransmitted:%llu\n", stats_file->packet_retransmitted);
-    ret = write(fd, buffer, strlen(buffer));
-    #endif
+        ret = sprintf((char *) &buffer, "max_rtt:%llu ms\n", stats_file->max_rtt);
+        ret = write(fd, buffer, strlen(buffer));
 
+        ret = sprintf((char *) &buffer, "packet_retransmitted:%llu\n", stats_file->packet_retransmitted);
+        ret = write(fd, buffer, strlen(buffer));
+    }    
+    
     close(fd);
     ret--; // dump
     DEBUG("Wrote the transfer statistics to %s.", pathname);
diff --git a/src/our_utils.h b/src/our_utils.h
index 8fbbc302ed7b7b2c8b9752ece94343ef7af68bfb..f992c76b2c7c84f914b3a52414d0e498f36a9509 100644
--- a/src/our_utils.h
+++ b/src/our_utils.h
@@ -30,17 +30,19 @@ typedef struct __attribute__((__packed__))
     unsigned long long int nack_sent;
     unsigned long long int nack_received;
     unsigned long long int packet_ignored;
-    #ifdef __RECEIVER_UTILS_
     unsigned long long int packet_duplicated;
     unsigned long long int packet_recovered;
-    #endif 
-    #ifdef __SENDER_UTILS_H_
     unsigned long long int min_rtt;
     unsigned long long int max_rtt;
     unsigned long long int packet_retransmitted;
-    #endif
 } transfer_stats_t;
 
+/* The type of agents */ 
+typedef enum{
+    SENDER,
+    RECEIVER,
+}agents_t;
+
 
 /**
  * @brief Resolve the resource name to an usable IPv6 address
@@ -83,9 +85,11 @@ int wait_for_client(int sfd);
  * 
  * @param pathname: The pathname to the stats file.
  * @param stats_file: Pointer to the stats file output.
+ * @param caller: To know the caller of the function.
+ * 
  * 
  * @returns In case of an error it is printed on the stderr.
  */ 
-void write_stats_to_file(const char * pathname, transfer_stats_t * stats_file);
+void write_stats_to_file(const char * pathname, transfer_stats_t * stats_file, agents_t caller);
 
 #endif
\ No newline at end of file
diff --git a/src/receiver_utils.c b/src/receiver_utils.c
index 35772bef0a2a3fa382d78ff55df6721482af01bb..8fad4fb23384cd4c260c337dcf4d411f39035e61 100644
--- a/src/receiver_utils.c
+++ b/src/receiver_utils.c
@@ -650,7 +650,7 @@ void receiver_read_write_loop(int sfd, const char * pathname)
         reception_loop(pfd, state);
     DEBUG("Done the transfer with done status being %s", (state->transfer_done) ? "true" : "false");
 
-    write_stats_to_file(pathname, state->stats);
+    write_stats_to_file(pathname, state->stats, RECEIVER);
     state_del(state);
     free(pfd);
 }
\ No newline at end of file
diff --git a/src/sender_utils.c b/src/sender_utils.c
index 58dcbe6ded9827a987c657d282cc37a5d9d81fbb..00d055c73100b7ccc873a0aa8b3384668e813dc8 100644
--- a/src/sender_utils.c
+++ b/src/sender_utils.c
@@ -39,7 +39,7 @@ sender_state_t *state_new(bool fec_enabled)
 
 void state_del(sender_state_t *state, const char * pathname)
 {
-     write_stats_to_file(pathname, state->stats);
+     write_stats_to_file(pathname, state->stats, SENDER);
      
     // To be sure, we free the pkt that might not have been freed (in case of an error or timeout)
     for (uint8_t i = 0; i < WINDOW_SIZE; i++)