after refactor, then add Enumerable