Started adding interface definitions and some implementation.