         duration.weeks = _getWeeksDuration now, date
         duration.months = _getMonthsDuration now, date
         duration.years = _getYearsDuration now, date
-        duration.remainingSeconds = _getRemainingSeconds now, date        
-        duration.remainingMinutes = _getRemainingMinutes now, date        
-        duration.remainingHours = _getRemainingHours now, date
-        duration.remainingDays = _getRemainingDays now, date
-        duration.remainingDaysInYear = _getRemainingDaysInYear now, date
+        duration.leftOverSeconds = _getLeftOverSeconds now, date        
+        duration.leftOverMinutes = _getLeftOverMinutes now, date        
+        duration.leftOverHours = _getLeftOverHours now, date
+        duration.leftOverDays = _getLeftOverDays now, date
+        duration.leftOverDaysInYear = _getLeftOverDaysInYear now, date
 
         duration
 

        if Math.abs(duration.years) >= 1
            if duration.years >= 0
                return "#{duration.years} years,
                    #{duration.remainingDaysInYear} days,
                    and #{duration.remainingHours} hours,
                    #{duration.remainingMinutes} minutes,
                    #{duration.remainingSeconds} seconds ago"
            else
                return "in #{Math.abs(duration.years)} years,
                    #{Math.abs(duration.remainingDaysInYear)} days,
                    #{Math.abs(duration.remainingHours)} hours,
                    #{Math.abs(duration.remainingMinutes)} minutes,
                    #{Math.abs(duration.remainingSeconds)} seconds"
        
        else if Math.abs(duration.months) >= 1
            if duration.months >= 0
                return "#{duration.months} months,
                    #{duration.remainingDays} days,
                    and #{duration.remainingHours} hours,
                    #{duration.remainingMinutes} minutes,
                    #{duration.remainingSeconds} seconds ago"
            else
                return "in #{Math.abs(duration.months)} months,
                    #{Math.abs(duration.remainingDays)} days,
                    and #{Math.abs(duration.remainingHours)} hours,
                    #{Math.abs(duration.remainingMinutes)} minutes,
                    #{Math.abs(duration.remainingSeconds)} seconds"
        
        else if Math.abs(duration.weeks) >= 1
            if duration.weeks >= 0
                return "#{duration.weeks} weeks,
                    #{duration.remainingDays} days,
                    and #{duration.remainingHours} hours,
                    #{duration.remainingMinutes} minutes,
                    #{duration.remainingSeconds} seconds ago"
            else
                return "in #{Math.abs(duration.weeks)} weeks,
                    #{Math.abs(duration.remainingDays)} days,
                    and #{Math.abs(duration.remainingHours)} hours,
                    #{Math.abs(duration.remainingMinutes)} minutes,
                    #{Math.abs(duration.remainingSeconds)} seconds"
        
        else if Math.abs(duration.days) >= 1
            if duration.days >= 0
                return "#{duration.days} days,
                    #{duration.remainingHours} hours,
                    #{duration.remainingMinutes} minutes,
                    #{duration.remainingSeconds} seconds ago"
            else
                return "in #{Math.abs(duration.days)} days,
                    #{Math.abs(duration.remainingHours)} hours,
                    #{Math.abs(duration.remainingMinutes)} minutes,
                    #{Math.abs(duration.remainingSeconds)} seconds"
        
        else if Math.abs(duration.hours) >= 1
            if duration.hours >= 0
                return "#{duration.hours}hr,
                    #{duration.remainingMinutes} minutes,
                    #{duration.remainingSeconds} seconds ago"
            else
                return "in #{Math.abs(duration.hours)}hr,
                    #{Math.abs(duration.remainingMinutes)} minutes,
                    #{Math.abs(duration.remainingSeconds)} seconds"
        
        else if Math.abs(duration.minutes) >= 1
            if duration.minutes >= 0
                return "#{duration.minutes}m,
                    #{duration.remainingSeconds} seconds ago"
            else
                return "in #{Math.abs(duration.minutes)}m,
                    #{Math.abs(duration.remainingSeconds)} seconds"
        
        else
            # less than 1 minute ago

            
            return if _years >= 0 then Math.floor _years else Math.ceil _years

        _getLeftOverSeconds = (now, date) ->
            _ms = _getMsDuration now, date
            _seconds = _convertMsToSeconds(_ms % factors.minutes)

            return if _seconds >= 0 then Math.floor _seconds else Math.ceil _seconds

        _getLeftOverMinutes = (now, date) ->
            _ms = _getMsDuration now, date
            _minutes = _convertMsToMinutes(_ms % factors.hours)

            return if _minutes >= 0 then Math.floor _minutes else Math.ceil _minutes

        _getLeftOverHours = (now, date) ->
            _ms = _getMsDuration now, date
            _hours = _convertMsToHours(_ms % factors.days)

            # doesn't work correctly for some durations
            return if _hours >= 0 then Math.floor _hours else Math.ceil _hours

        _getLeftOverDays = (now, date) ->
            _ms = _getMsDuration now, date
            _days = _convertMsToDays(_ms % factors.weeks)

            return if _days >= 0 then Math.floor _days else Math.ceil _days

        _getLeftOverDaysInYear = (now, date) =>
            _days = _getDaysDuration now, date
            _years = _getYearsDuration now, date

