diff --git a/fact.c b/fact.c
index 64113a14bd9ce63ca90adeac96a87a57ef40a66f..ec6d12fce69b4271b251a97b35a96d8f7fd0af0f 100644
--- a/fact.c
+++ b/fact.c
@@ -1,5 +1,5 @@
 //
-// Modified on 26/04/2020.
+// Modified on 09/05/2020.
 //
 #include <errno.h>
 #include <sys/types.h>
@@ -106,17 +106,24 @@ factor* prime_divs (unsigned long numbr) {
 
 void *read_write() {
     factor *dividers;
+    long in_number;
     unsigned long number;
+    long neg_number = 0;
 
     // Read input file line by line till the end of file (eof)
     while (!feof(f.in)) {
-        fscanf(f.in, "%lu\n", &number); // Read number to be factored
+        fscanf(f.in, "%ld\n", &in_number); // Read number to be factored
 	    /* Check if the number is > 2
 	     * in this case skip the number and
 	     * leave a message in the file
 	     */
-	    if(number > 2) {
+	    if((in_number > 2) || (in_number < -2)) {
             /* Verify if the number is prime or not, in this case the dividers are calculated */
+            /* Handle negative number to calculate prime dividers *********NEW***********/
+            if(in_number < -2) {
+                neg_number = in_number;
+            }
+            number = abs(in_number);
             dividers = prime_divs(number); // Core function of the app //
 
             /* MUTEX LOCK - CONTROL OF CRITICAL ACCESS - START  */
@@ -124,14 +131,21 @@ void *read_write() {
                 printf("\nmutex_lock-mutex_readwrite %s\n", strerror(errno));
                 exit(EXIT_FAILURE);
             }
+            /* Handle negative number to calculate prime dividers *********NEW********** */
+            if (neg_number != 0) {
+                in_number = neg_number;
+                neg_number = 0;
+            }
             if (dividers->cnt != 0) {
-                fprintf(f.out, "%lu ", dividers->number);
+                /* fprintf(f.out, "%lu ", dividers->number); ********** OLD *********** */
+                fprintf(f.out, "%ld", in_number); /* ********NEW********** */
                 int i;
                 for (i = 0; i < dividers->cnt; i++) {
                     fprintf(f.out, " %lu", dividers->prime_dividers[i]);
                 }
             } else { // For internal command test
-                fprintf(f.out, "%lu ", dividers->number);
+                fprintf(f.out, "%ld", in_number); /* ********NEW********** */
+               /* fprintf(f.out, "%lu ", dividers->number); *********** OLD ********** */
             }
             /*  MUTEX UNLOCK - CONTROL OF CRITICAL ACCESS - END  */
             if (pthread_mutex_unlock(&mutex_readwrite) != 0) {
@@ -141,7 +155,7 @@ void *read_write() {
             fprintf(f.out, "\n");
             free(dividers);
         } else {
-            fprintf(f.out, "The number %lu is not > 2, discarded\n", number);
+            fprintf(f.out, "%ld\n", in_number);
 	    }
     }
     pthread_exit((void *) 0); // thread exit: normal termination => 0
@@ -158,9 +172,10 @@ int main (int argc, char *argv[]) {
     char *thread_arg;   //
     int NO_THREADS = DEFAULT_NO_THREADS; // Define default number of threads
 
-    /* WARNING: ONLY NUMBER POSITIVE AND >2 ARE ACCEPTED */
-    printf("!!! WARNING: ONLY POSITIVE NUMBER AND >2 ARE ACCEPTED !!!\n");
-    printf("      OTHERWISE THE PROGRAMME CANNOT RUN CORRECTLY\n\n");
+    /* WARNING: ONLY NUMBER POSITIVE AND >2 ARE ACCEPTED
+     *printf("!!! WARNING: ONLY POSITIVE NUMBER AND >2 ARE ACCEPTED !!!\n");
+     *printf("      OTHERWISE THE PROGRAMME CANNOT RUN CORRECTLY\n\n");
+     */
 
     if (argc == 3) { // Check if the number of argument is correct
         inputfile = argv[1];
@@ -174,6 +189,13 @@ int main (int argc, char *argv[]) {
             exit(EXIT_FAILURE);
         }
         NO_THREADS = atoi(argv[2]);
+        /* If the number of threads is <= 0 ************* VERSION UPDATE ***************
+         * NO_THREADS is set to DEFAULT_NO_THREADS
+         */
+        if(NO_THREADS <= 0) {
+            NO_THREADS = 1;
+            printf("The threads number cannot be <= 0 - Threads number set to 1\n");
+        }
         if(NO_THREADS > MAX_NO_THREADS) {
             printf("Threads requested > %d\n", MAX_NO_THREADS);
             exit(EXIT_FAILURE);
@@ -232,4 +254,4 @@ int main (int argc, char *argv[]) {
     fclose(f.in);
     fclose(f.out);
     return (EXIT_SUCCESS);
-}
\ No newline at end of file
+}