The goal of the hash conversion is to preserve the data as expressed by the user. For example, I would like to avoid a YAML podfile changing as being serialized again by CP (with this implementation if the user specified the master repo source on purpose it would be deleted). So I don't think that the sources need any special handling. FYI, the target definition is handled in this way because it has dedicated subclass and is not composed by primitive data types like strings, and arrays (as the other keys).