some more refactoring  + additional operators