Initial commit

Adding some interfaces and basic implementations.