We should specify the requirement for the factory to have a public no-arg constructor here, shouldn't we?