add EM implementation