Refactored ParticleFactory