Added some base classes still need to implemented with design