     public init?(name: String) {
         
         // create or fetch from cache
-        guard let fontConfigPattern = FontConfigPatternCache[name] ?? FcPattern(name: name)
+        guard let (fontConfigPattern, family) = FontConfigPatternCache[name] ?? FcPattern(name: name)
             else { return nil }
         
         // cache new FcPattern
         if FontConfigPatternCache[name] == nil {
             
-            FontConfigPatternCache[name] = fontConfigPattern
+            FontConfigPatternCache[name] = (fontConfigPattern, family)
         }
         
         let face = FontFace(fontConfigPattern: fontConfigPattern)

        options.hintStyle = CAIRO_HINT_STYLE_NONE
        
        self.name = name
        self.internalFont = ScaledFont(face: face, matrix: Matrix.identity, currentTransformation: Matrix.identity, options: options)
    }
}

// MARK: - Private

private var FontConfigPatternCache = [String: OpaquePointer]()

/// Initialize a pointer to a `FcPattern` object created from the specified PostScript font name.
private func FcPattern(name: String) -> OpaquePointer? {
    
    guard var pattern = FcPatternCreate()
        else { return nil }

    // success
    cleanup.shouldCleanup = false
    
    return (pattern, family)
}

// MARK: - String Extensions
