Refactored data classes to use interfaces.
Add license headers.