M2 and M1 implementation