implement subgroups