calculation not bitwise, allow override primary_key, refactor specs
don't require static groups when using the singleton methods