         return XCConfigurationList(reference: self.reference,
                                    buildConfigurations: buildConfigurations,
                                    defaultConfigurationName: self.defaultConfigurationName)
-
+        
     }
     
+    /// Returns a new XCConfigurationList with a given configuration name.
+    ///
+    /// - Parameter name: configuration name.
+    /// - Returns: new configuration list with the given configuration name.
     public func withDefaultConfigurationName(name: String) -> XCConfigurationList {
         return XCConfigurationList(reference: self.reference,
                                    buildConfigurations: self.buildConfigurations,
                                    defaultConfigurationName: name)
     }
     
-    // MARK: - Hashable
+}
+
+// MARK: - XCConfigurationList Extension (PBXProjPlistSerializable)
+
+extension XCConfigurationList: PBXProjPlistSerializable {
     
-    public static func == (lhs: XCConfigurationList,
-                           rhs: XCConfigurationList) -> Bool {
-        return lhs.reference == rhs.reference &&
-        lhs.buildConfigurations == rhs.buildConfigurations &&
-        lhs.defaultConfigurationIsVisible == rhs.defaultConfigurationIsVisible
-    }
-    
-    public var hashValue: Int { return self.reference.hashValue }
-    
-    // MARK: - PBXProjPlistSerializable
+    public static var isa: String = "XCConfigurationList"
     
     func pbxProjPlistElement(proj: PBXProj) -> (key: PBXProjPlistCommentedString, value: PBXProjPlistValue) {
         var dictionary: [PBXProjPlistCommentedString: PBXProjPlistValue] = [:]
         dictionary["isa"] = .string(PBXProjPlistCommentedString(XCConfigurationList.isa))
         dictionary["buildConfigurations"] = .array(buildConfigurations
-            .map { configuration in
-                let comment: String? = config(from: configuration, proj: proj)
-                return .string(PBXProjPlistCommentedString(configuration, comment: comment))
+            .map { .string(PBXProjPlistCommentedString($0, comment: proj.objects.configName(from: $0)))
         })
         dictionary["defaultConfigurationIsVisible"] = .string(PBXProjPlistCommentedString("\(defaultConfigurationIsVisible)"))
         dictionary["defaultConfigurationName"] = .string(PBXProjPlistCommentedString(defaultConfigurationName))
         return (key: PBXProjPlistCommentedString(self.reference,
                                                  comment: plistComment(proj: proj)),
                 value: .dictionary(dictionary))
-    }
-
-    private func config(from reference: UUID, proj: PBXProj) -> String? {
-        return proj.objects.buildConfigurations
-            .filter { $0.reference == reference }
-            .map { $0.name }
-            .first
     }
     
     private func plistComment(proj: PBXProj) -> String? {

        }
        return nil
    }
}

        self.defaultConfigurationName = defaultConfigurationName
        self.defaultConfigurationIsVisible = defaultConfigurationIsVisible
    }

}

extension XCConfigurationList {
    
    /// Returns a new configuration list adding a configuration.
    ///
