separate some interface methods into abstract classes to enforce access control