     
     func contentString(withMetadata: Bool, ID3: Bool, timeTag: Bool, translation: Bool) -> String {
         var content = ""
-        // FIXME: missing metadata
-//        if withMetadata {
-//            content += metadata.map {
-//                return "[\($0.key):\($0.value)]\n"
-//            }.joined()
-//        }
+        if withMetadata {
+            content += metadata.description
+        }
         if ID3 {
             content += idTags.map {
                 return "[\($0.key.rawValue):\($0.value)]\n"

    }
}

extension Lyrics.MetaData.Source: Equatable {
    static func ==(lhs: Lyrics.MetaData.Source, rhs: Lyrics.MetaData.Source) -> Bool {
        return lhs.rawValue == rhs.rawValue

    }
}

// MARK: CustomStringConvertible

extension Lyrics.MetaData: CustomStringConvertible {
    
    public var description: String {
        return Mirror(reflecting: self).children.map { "[\($0!):\($1)]\n" }.joined()
    }
}

extension Lyrics.IDTagKey: CustomStringConvertible {
    
    public var description: String {
