 public struct NewChordExtension: ChordDescription {
   public var type: NewChordExtensionType
   public var accident: NewChordAccidentType
-
-  public init(type: NewChordExtensionType, accident: NewChordAccidentType = .natural) {
+  public var isMajor: Bool
+  public var isAdded: Bool
+
+  public init(type: NewChordExtensionType, accident: NewChordAccidentType = .natural, isMajor: Bool = false, isAdded: Bool = false) {
     self.type = type
     self.accident = accident
-  }
-
-  public var notation: String {
-    return "\(accident.notation)\(type.notation)"
-  }
-
-  public var description: String {
-    return "\(accident) \(type)"
+    self.isMajor = isMajor
+    self.isAdded = isAdded
+  }
+
+  public var notation: String {
+    if isMajor {
+      return "maj\(accident.notation)\(type.notation)"
+    } else if isAdded {
+      return "add\(accident.notation)\(type.notation)"
+    } else {
+      return "\(accident.notation)\(type.notation)"
+    }
+  }
+
+  public var description: String {
+    return "\(isAdded ? "Added " : "")\(accident) \(type)"
   }
 
   public static var all: [NewChordExtension] {


  public var description: String {
    return "\(key) \(type)"
  }

  public static var all: [NewChord] {

}

public struct NewChord: ChordDescription {
  public private(set) var key: NoteType
  public private(set) var type: NewChordType
  public private(set) var inversion: Int

  public init(key: NoteType, type: NewChordType, inversion: Int = 0) {
    self.key = key
    self.type = type
    self.inversion = inversion
  }

  public var notation: String {
