refactor Particle