some exploring refactoring