added particle generation