added semigroups