Supporting data sources that are not hashes, using transactions, and dealing with empty data in collections