more refactoring, why the hell not