more work, refactoring