refactor (ongoing, working)