Making it more object like: adding interfaces

Still work in progress