anchor.diff:    INTEGER,        INTENT(IN)    :: m
   
     self % minute = self % minute+m
  -  IF(self % minute >= 60)THEN
  -    CALL self % addHours(self % minute/60)
  -    self % minute = MOD(self % minute,60)
  -  ELSEIF(self % minute < 0)THEN
  -    CALL self % addHours(self % minute/60-1)
  -    self % minute = MOD(self % minute,60)+60
  -  ENDIF
  +
  +  DO
  +    IF(self % minute >= 60)THEN
  +      CALL self % addHours(self % minute/60)
  +      self % minute = MOD(self % minute,60)
  +    ELSEIF(self % minute < 0)THEN
  +      CALL self % addHours(self % minute/60-1)
  +      self % minute = MOD(self % minute,60)+60
  +    ELSE
  +      EXIT
  +    ENDIF
  +  ENDDO
   
   ENDSUBROUTINE addMinutes
   !======================================================================>
  
positive.code: 
    self % millisecond = self % millisecond+ms
  
    IF(self % millisecond >= 1000)THEN
      CALL self % addSeconds(self % millisecond/1000)
      self % millisecond = MOD(self % millisecond,1000)
    ELSEIF(self % millisecond < 0)THEN
      CALL self % addSeconds(self % millisecond/1000-1)
      self % millisecond = MOD(self % millisecond,1000)+1000
    ENDIF
  
  ENDSUBROUTINE addMilliseconds
  !======================================================================>
  
negative.code:   INTEGER,        INTENT(IN)    :: s
  
    self % second = self % second+s
  
    DO
      IF(self % second >= 60)THEN
        CALL self % addMinutes(self % second/60)
        self % second = MOD(self % second,60)
      ELSEIF(self % second < 0)THEN
        CALL self % addMinutes(self % second/60-1)
        self % second = MOD(self % second,60)+60
      ELSE
        EXIT
      ENDIF
    ENDDO
  
  ENDSUBROUTINE addSeconds
  !======================================================================>
  