diff --git a/src/mtime_timedelta.c b/src/mtime_timedelta.c
index 24e01b4870be56b49fbcd0cd0c53c5255037d9c6..01ecc091f040f895d4f9ed397dfec36a84b9909b 100644
--- a/src/mtime_timedelta.c
+++ b/src/mtime_timedelta.c
@@ -1074,20 +1074,19 @@ divideTimeDeltaInSeconds(struct _timedelta* dividend, struct _timedelta* divisor
     {
       if ((dividend->year == 0) && (dividend->month == 0) &&  (divisor->year == 0) && (divisor->month == 0))
 	{
-	  int64_t dividend_in_ms = (dividend->day * NO_OF_SEC_IN_A_DAY + dividend->hour * NO_OF_SEC_IN_A_HOUR + 
-				   dividend->minute * NO_OF_SEC_IN_A_MINUTE + dividend->second) * NO_OF_MS_IN_A_SECOND + dividend->ms;
-
-	  int64_t divisor_in_ms  = (divisor->day  * NO_OF_SEC_IN_A_DAY + divisor->hour * NO_OF_SEC_IN_A_HOUR  + 
-				   divisor->minute  * NO_OF_SEC_IN_A_MINUTE + divisor->second ) * NO_OF_MS_IN_A_SECOND + divisor->ms;
+          intmax_t numerator   = (intmax_t) ((dividend->day * 86400 + dividend->minute * 60 + dividend->second) * 1000 + dividend->ms);
+          intmax_t denominator = (intmax_t) ((divisor->day  * 86400 + divisor->minute  * 60 + divisor->second ) * 1000 + divisor->ms);
            
-           if(divisor_in_ms == 0) /* Division by zero is illegal. */
-             return NULL; 
+          if (denominator == 0) /* Division by zero is illegal. */
+            return NULL;
 
-           quo_ret->quotient  = (int64_t)(dividend_in_ms/divisor_in_ms);
-           quo_ret->remainder_in_ms = dividend_in_ms - quo_ret->quotient*divisor_in_ms; //remainder is reported in ms.
+          imaxdiv_t div = imaxdiv(numerator, denominator);
+           
+          quo_ret->quotient        = (int64_t) div.quot;          
+          quo_ret->remainder_in_ms = (int64_t) div.rem;
 
-           return quo_ret;
-         }
+          return quo_ret;
+        }
       else /* Only seconds supported */
         return NULL; 
     }