wrapping up the groups abstraction