[WIP] Make the structure better

This will make the interfaces the important thing and everything else which is a implementation detail.

Ref #12