refactored EM