particle implementation