     @abbrs ?= [@abbr]
     @abbrs = @abbrs.split(/s/) if typeof @abbrs == 'string'
     @abbr ?= @abbrs[0]
-    if @rootPitch?
-      @rootName or= NoteNames[@rootPitch]
+
+    @rootName or= NoteNames[@rootPitch] if @rootPitch?
     if @rootName?
-      @rootPitch ?= parsePitchClass(@rootName)
+      @rootPitch ?=
+        if @rootName.match(/\d/) then pitchFromScientificNotation(@rootName) else parsePitchClass(@rootName)
+      @pitches = (pitch + @rootPitch for pitch in @pitchClasses)
       rootlessAbbr = @abbr
       rootlessFullName = @fullName
       Object.defineProperty this, 'name', get: -> "#{@rootName}#{rootlessAbbr}"
       Object.defineProperty this, 'fullName', get: -> "#{@rootName} #{rootlessFullName}"
+
     degrees = (1 + 2 * i for i in [0..@pitchClasses.length])
     degrees[1] = {'Sus2':2, 'Sus4':4}[@name] || degrees[1]
     degrees[3] = 6 if @name.match /6/
+
     @components = for pc, pci in @pitchClasses
       name = IntervalNames[pc]
       degree = degrees[pci]

  [naturalName, accidentals] = match[1...]
  pitch = SharpNoteNames.indexOf(naturalName.toUpperCase())
  pitch += AccidentalValues[c] for c in accidentals
  return pitch



    throw new Error("Couldn''t find chord with pitch classes #{pitchClasses}") unless chord
    return chord

Chords = [
  {name: 'Major', abbrs: ['', 'M'], pitchClasses: '047'},
  {name: 'Minor', abbr: 'm', pitchClasses: '037'},
  {name: 'Augmented', abbrs: ['+', 'aug'], pitchClasses: '048'},
