broke generators out to it's own module