diff --git a/src/sender_utils.c b/src/sender_utils.c
index cc8e8b53dd8575c74d1ed8bd183a6726a408868a..4ad2a6bdd6363681c2eb4aaf98da43d66c9f7598 100644
--- a/src/sender_utils.c
+++ b/src/sender_utils.c
@@ -58,16 +58,15 @@ bool can_send(sender_state_t *state)
     }
     else if (state->last_pkt_sent == LAST_DATA_PKT)
     {
-        // I want to be sure all the data pkt has been received before letting know the receiver
+        // I want to be sure that all the PTYPE_DATA have been received before letting know the receiver
         // it was the end of the file (so that I can set a timer for timeout)
         return state->s_window_size == MAX_WINDOW_SIZE;
     }
-    // Case: we're in FEC mode, the closing pkt has been sent but we will still send a last FEC if possible
-    else if ((state->fec_enabled) && (state->last_pkt_sent == CLOSING_PKT) && (state->FEC_nbr > 0))
+    // Case: we're in FEC mode, the closing pkt has been sent but we still want to send a last FEC if 4 PTYPE_DATA have been stacked
+    else if ((state->fec_enabled) && (state->last_pkt_sent == CLOSING_PKT) && (state->FEC_nbr == 4))
     {
         return true;
     }
-    // Case last FEC has been sended
     else
     {
         return false;
@@ -269,10 +268,14 @@ void construct_FEC(sender_state_t *state, pkt_t *pkt)
     uint8_t payload[MAX_PAYLOAD_SIZE];
     uint8_t *p1 = (uint8_t *) pkt_get_payload(state->FEC);
     uint8_t *p2 = (uint8_t *) pkt_get_payload(pkt);
-    for (int i = 0; i < MAX_PAYLOAD_SIZE; i++)
+    for (int i = 0; i < pkt_get_length(pkt); i++)
     {
         payload[i] = p1[i] ^ p2[i];
     }
+    for (int i = pkt_get_length(pkt); i < MAX_PAYLOAD_SIZE; i++)
+    {
+        payload[i] = p1[i];
+    }
     pkt_set_payload(state->FEC, (const char *) payload, MAX_PAYLOAD_SIZE);
 
     state->FEC_nbr++;
@@ -313,7 +316,7 @@ int send_FEC(sender_state_t *state, int socket_fd)
 int read_and_send(sender_state_t *state, int sending_fd, int socket_fd)
 {
     // Checking whether I need to send a PTYPE_FEC or PTYPE_DATA
-    if ((state->fec_enabled) && ((state->FEC_nbr == 4) || ((state->last_pkt_sent == CLOSING_PKT) && (state->FEC_nbr > 0))))
+    if (state->fec_enabled && (state->FEC_nbr == 4))
     {
         return send_FEC(state, socket_fd);
     }
diff --git a/tests/run_sender_receiver.sh b/tests/run_sender_receiver.sh
index 2658c3d6224c5ac44749ac6104eb267a96692e3a..b7f5a82345a852a3d9c2fde74a9f22b7589522c6 100755
--- a/tests/run_sender_receiver.sh
+++ b/tests/run_sender_receiver.sh
@@ -47,6 +47,8 @@ if [ -d "${DIR}" ]; then
 fi
 mkdir "${DIR}" 2>/dev/null
 
+echo -e "\nSimulation ${mode}"
+
 # Checking if we're using the linksimulator or not
 if [ "$#" -gt 6 ]; then
 
@@ -59,7 +61,7 @@ if [ "$#" -gt 6 ]; then
     echo -e "The linksimulator paramateres are:
         \t\t-ERROR RATE: ${ERROR_RATE}%    \t-DELAY:  ${DELAY}ms
         \t\t-CUT RATE:   ${CUT_RATE}%      \t-JITTER: ${JITTER}ms 
-        \t\t-LOSS RATE:  ${LOSS_RATE}%\n"
+        \t\t-LOSS RATE:  ${LOSS_RATE}%"
 
     # The next 2 lines come from: https://unix.stackexchange.com/questions/55913/whats-the-easiest-way-to-find-an-unused-local-port
     # We use this to be sure we're using unused port
@@ -140,6 +142,8 @@ else  # We check the return value of the receiver
         echo -e "${RED}Crash of the receiver!${NC}"
         cat ${receiver_logs}
         err=1
+    else
+        err=0
     fi
 fi
 
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
index e3317a9a2a1b760f5bd31b05013337a5b27fa908..4714bd3f763e59ffa508479aeb674f35868cf661 100755
--- a/tests/run_tests.sh
+++ b/tests/run_tests.sh
@@ -3,6 +3,10 @@
 BROWN='\033[0;33m'
 NC='\033[0m'
 
+my_sender="sender"
+my_receiver="receiver"
+
+
 # Note that this assumes to be called from the Makefile, you may want to adapt it.
 FILESIZE="" 
 TEST_FILES_DIR=./tests_files/
@@ -44,21 +48,36 @@ advanced_test_files=(
 #   let i++
 
 # done
-echo -e "Finished Simple tests."
+# echo -e "Finished Simple tests."
+
+modes=(
+  'with_FEC'
+  'without_FEC'
+)
+
+ERROR_RATE=5
+CUT_RATE=5
+DELAY=100
+JITTER=100
+LOSS_RATE=1 
+
+dir="tests_logs/advanced_tests/"
 
 if [ -d linksimulator/ ]; then
   echo -e "\nStarting advanced tests ...\n"
   # Now we ran the advanced tests
   i=1
-  for FILENAME in "${advanced_test_files[@]}"; do 
-    FILESIZE=$(stat -c%s "$FILENAME")
-    echo -e "\n${BROWN}($i/${#advanced_test_files[@]}) Sending the file \"$FILENAME\"  \t[$FILESIZE bytes] with linksimulator and Valgrind${NC}"
-    ./tests/advanced_test.sh $FILENAME
-
-    if [ $? -ne 0 ]; then 
-      echo "Tests terminated cause of a failed test"
-      exit 0
-    fi
+  for file in "${advanced_test_files[@]}"; do 
+    filesize=$(stat -c%s "$file")
+    echo -e "\n${BROWN}($i/${#advanced_test_files[@]}) Sending the file \"$file\"  \t[$filesize bytes] with linksimulator and Valgrind${NC}"
+    for mode in "${modes[@]}"; do
+      ./tests/run_sender_receiver.sh $my_sender $my_receiver $file $dir $mode \
+                          $ERROR_RATE $CUT_RATE $DELAY $JITTER $LOSS_RATE
+      if [ $? -ne 0 ]; then 
+          echo "Tests terminated cause of a failed test"
+          exit 0
+      fi
+    done
     let i++
   done
   echo "Finished Advanced tests."