improved subgroup pushing and pulling