It became obvious when working out the logic for the less than operator function that the choice of storing the angle in degrees, minutes, and seconds (DMS) was an inferior one. It requires that each denomination component of the angle has to interact with the other components (e.g. when adding two second components that exceed 60, a 1 has to be carried to the minutes). Since the program specification in the book specifically says to use DMS, I decided to convert all angle (DMS) type parameters to decimal degrees before doing any calculations (and then back to DMS if necessary). Of course, it would be preferable to just dump the use of DMS altogether in favor of decimal degrees for internal functions and storage. The DMS to decimal conversion function was very straightforward and elegant, but the decimal to DMS function became a little messy because of Fortran's lack of an intrinsic function to return the fractional part of a floating-point number. Generally, the logic for the function revolves around repeatedly splitting the integer and fractional parts of decimal degree input, assigning the integer part to the respective DMS output, and multiplying the fractional part by 60. Using these conversion functions, the overloaded operation functions merely needed to be wrappers to usher the angle type into native operations. In the following test runs, the right operand is 45° 30' 30" and the left operand is user-entered. Enter an angle in degrees, minutes, and seconds: 0 0 1 Less Than Sum: 45 30' 31" Difference: 45 -30' -29" Enter an angle in degrees, minutes, and seconds: 45 30 31 Greater Than Sum: 91 1' 1" Difference: 0 0' 1" Enter an angle in degrees, minutes, and seconds: 45 30 30 Equal Sum: 91 1' 0" Difference: 0 0' 0"