Changed interfaces to abstract classes. implment some basics.