big refactor, add generations module