a first stab at the interfaces and a simple implementation