add characters collection and refactors the factory