Separated interfaces from implementations, and started putting factory
methods back into the data classes.