     
     // MARK: Unchanged Token
     
-    private mutating func unchangedToken(_ first: UnicodeScalar) throws -> TypographizerToken {
+    private mutating func unchangedToken(_ first: UnicodeScalar) throws -> Token {
         var tokenText = String(first)
-        self.previousScalar = first
+        previousScalar = first
         
         loop: while let ch = nextScalar() {
             switch ch {

    }
    
    
    private mutating func nextToken() throws -> TypographizerToken? {
        while let ch = nextScalar() {
            switch ch {
            case "´",
                 "`":
                // FIXME: Replacing a combining accent only works for the very first scalar in a string
                return TypographizerToken(.apostrophe, self.apostrophe)
            case "\"",
                 "'",
                 "-":
                return try self.fixableToken(ch)
            case "<" where self.isHTML:
                return try self.htmlToken()
            default:
                return try self.unchangedToken(ch)
            }
        }
        return nil

             "lv",
             "sk",
             "sl":
            openingDoubleQuote = "„"
            closingDoubleQuote = "“"
            openingSingleQuote = "\u{201A}"
            closingSingleQuote = "‘"
        case "de_CH":
            openingDoubleQuote = "«"
            closingDoubleQuote = "»"
            openingSingleQuote = "‹"
            closingSingleQuote = "›"
        case "bs",
             "fi",
             "sv":
            openingDoubleQuote = "”"
            closingDoubleQuote = "”"
            openingSingleQuote = "’"
            closingSingleQuote = "’"
        case "fr":
            openingDoubleQuote = "«\u{00A0}"
            closingDoubleQuote = "\u{00A0}»"
            openingSingleQuote = "‹\u{00A0}"
            closingSingleQuote = "\u{00A0}›"
        case "hu",
             "pl",
             "ro":
            openingDoubleQuote = "„"
            closingDoubleQuote = "”"
            openingSingleQuote = "’"
            closingSingleQuote = "’"
        case "ja":
            openingDoubleQuote = "「"
            closingDoubleQuote = "」"
            openingSingleQuote = "『"
            closingSingleQuote = "』"
        case "ru",
             "no",
             "nn":
            openingDoubleQuote = "«"
            closingDoubleQuote = "»"
            openingSingleQuote = "’"
            closingSingleQuote = "’"
        case "en",
             "nl": // contemporary Dutch style
            fallthrough
        default:
            openingDoubleQuote = "“"
            closingDoubleQuote = "”"
            openingSingleQuote = "‘"
            closingSingleQuote = "’"
        }
    }
    
    mutating func refreshTextIterator() {
        textIterator = text.unicodeScalars.makeIterator()
    }
    
    mutating func typographize() -> String {
        #if DEBUG
            var startTime: Date?
            if isMeasurePerformanceEnabled {
                startTime = Date()
            }
        #endif
        
        var tokens = [Token]()
        do {
            while let token = try nextToken() {
                tokens.append(token)
            }
        } catch {
                if isDebugModeEnabled {
                    #if DEBUG
                        print("Typographizer iterator triggered an error.")
                        abort()
                    #endif
                } else {
                    return text // return unchanged text
                }
        }
        
