added interfaces and their partial implementations