more refactoring and some more effect classes (not tested...)