             forLowerPitchSpelling pitchSpelling: PitchSpelling
         ) -> Float
         {
-            return [.b, .e].contains(pitchSpelling.letterName) ? difference - 1 : difference
-        }
-    }
-    
-    /// Third interval family.
-    public class Third: EnumFamily, ImperfectIntervalQualityType {
-        
-        /// diminished Third interval.
-        public static let diminished: EnumKind = .diminishedThird
-        
-        /// minor Third interval.
-        public static let minor: EnumKind = .minorThird
-        
-        /// major Third interval.
-        public static let major: EnumKind = .majorThird
-        
-        /// augmented Third interval.
-        public static let augmented: EnumKind = .augmentedThird
+            return pitchSpelling.letterName == .f ? difference + 1 : difference
+        }
+    }
+    
+    /// Fifth interval family.
+    public class Fifth: EnumFamily, PerfectIntervalQuatlityType {
+        
+        /// diminished Fifth interval.
+        public static let diminished: EnumKind = .diminishedFifth
+        
+        /// perfect Fifth interval.
+        public static let perfect: EnumKind = .perfectFifth
+        
+        /// augmented Fifth interval.
+        public static let augmented: EnumKind = .augmentedFifth
+        
+        public override class var members: [EnumKind] { return perfectMembers }
+    
+        public override class func kind(
+            forPitchSpellingDyad pitchSpellingDyad: PitchSpellingDyad
+        ) -> EnumKind
+        {
+            let difference = directionDifference(fromPitchSpellingDyad: pitchSpellingDyad)
+            return intervalQuality(fromDirectionDifference: difference)
+        }
+        
+        static func adjustDifference(difference: Float,
+            forLowerPitchSpelling pitchSpelling: PitchSpelling
+        ) -> Float
+        {
+            return pitchSpelling.letterName == .b ? difference - 1 : difference
+        }
+    }
+    
+    /// Sixth interval family.
+    public class Sixth: EnumFamily, ImperfectIntervalQualityType {
+        
+        /// diminished Sixth interval.
+        public static let diminished: EnumKind = .diminishedSixth
+        
+        /// minor Sixth interval.
+        public static let minor: EnumKind = .minorSixth
+        
+        /// major Sixth interval.
+        public static let major: EnumKind = .majorSixth
+        
+        /// augmented Sixth interval.
+        public static let augmented: EnumKind = .augmentedSixth
+        
+        public override class var members: [EnumKind] { return imperfectMembers }
+        
+        public override class func kind(
+            forPitchSpellingDyad pitchSpellingDyad: PitchSpellingDyad
+            ) -> EnumKind
+        {
+            let difference = directionDifference(fromPitchSpellingDyad: pitchSpellingDyad)
+            return intervalQuality(fromDirectionDifference: difference)
+        }
+    }
+    
+    /// Seventh interval family.
+    public class Seventh: EnumFamily, ImperfectIntervalQualityType {
+        
+        /// diminished Seventh interval.
+        public static let diminished: EnumKind = .diminishedSeventh
+        
+        /// minor Seventh interval.
+        public static let minor: EnumKind = .minorSeventh
+        
+        /// major Seventh interval.
+        public static let major: EnumKind = .majorSeventh
+        
+        /// augmented Seventh interal.
+        public static let augmented: EnumKind = .augmentedSeventh
         
         public override class var members: [EnumKind] { return imperfectMembers }
         

        
        public override class var members: [EnumKind] { return imperfectMembers }
        
        // DEFAULT Impefect implementation
        public override class func kind(forPitchSpellingDyad pitchSpellingDyad: PitchSpellingDyad)
            -> EnumKind
        {

        }
    }
    
    public class var members: [EnumKind] { return [] }
    
    public class var subFamilies: [EnumFamily.Type] {
