implement general structure of EM