further class refactor