further refactoring
even more refactoring