diff --git a/src/game.rs b/src/game.rs
index 3c7c8fd..c98f48e 100644
--- a/src/game.rs
+++ b/src/game.rs
@@ -290,8 +290,7 @@ fn collision_event_system(
 							.clamp(Vec4::ZERO, Vec4::ONE);
 
 						// If color approximately white
-						if app_state.current() == &AppState::Game
-							&& new_color.min_element() >= 0.9
+						if app_state.current() == &AppState::Game && new_color.min_element() >= 0.9
 						{
 							app_state.replace(AppState::Win).ok();
 						}
diff --git a/src/particle_effect.rs b/src/particle_effect.rs
index b711548..26e275a 100644
--- a/src/particle_effect.rs
+++ b/src/particle_effect.rs
@@ -1,5 +1,5 @@
 use bevy::{prelude::*, sprite::Mesh2dHandle};
-use rand::Rng;
+use rand::{rngs::ThreadRng, Rng};
 use rand_distr::{Distribution, UnitCircle};
 
 #[cfg(not(target_arch = "wasm32"))]
@@ -68,15 +68,20 @@ pub struct ParticleComponent {
 }
 
 impl ParticleComponent {
-	pub fn new() -> Self {
+	pub fn new(rng: &mut ThreadRng) -> Self {
 		let mut particle_component: Self = Self::default();
-		particle_component.randomize_velocity(MIN_VELOCITY, MAX_VELOCITY);
+		particle_component.randomize_velocity(rng, MIN_VELOCITY, MAX_VELOCITY);
 		particle_component
 	}
 
-	pub fn randomize_velocity(&mut self, min_velocity: f32, max_velocity: f32) {
-		let random_direction: [f32; 2] = UnitCircle.sample(&mut rand::thread_rng());
-		let random_magnitude: f32 = rand::thread_rng().gen_range(min_velocity..max_velocity);
+	pub fn randomize_velocity(
+		&mut self,
+		rng: &mut ThreadRng,
+		min_velocity: f32,
+		max_velocity: f32,
+	) {
+		let random_direction: [f32; 2] = UnitCircle.sample(rng);
+		let random_magnitude: f32 = rng.gen_range(min_velocity..max_velocity);
 		self.velocity = Vec3::new(random_direction[0], random_direction[1], 0.0) * random_magnitude;
 	}
 }
@@ -87,6 +92,8 @@ fn particle_effect_startup(
 	particle_mesh: Res<ParticleMesh>,
 	mut materials: ResMut<Assets<ColorMaterial>>,
 ) {
+	let mut rng = rand::thread_rng();
+
 	for _p in 0..POOL_COUNT {
 		let color_mesh = ColorMesh2dBundle {
 			mesh: particle_mesh.square.clone(),
@@ -96,7 +103,7 @@ fn particle_effect_startup(
 
 		commands
 			.spawn_bundle(color_mesh)
-			.insert(ParticleComponent::new());
+			.insert(ParticleComponent::new(&mut rng));
 	}
 }
 
@@ -110,6 +117,8 @@ fn particle_effect_system(
 	mut particle_effect: ResMut<ParticleEffectResource>,
 	time: Res<Time>,
 ) {
+	let mut rng = rand::thread_rng();
+
 	let delta_seconds: f32 = f32::max(0.001, time.delta_seconds());
 	let delta_position: Vec3 = particle_effect.translation - particle_effect.prev_translation;
 	// let overall_velocity: Vec3 = delta_position / delta_seconds;
@@ -124,7 +133,7 @@ fn particle_effect_system(
 			.distance_squared(particle_effect.translation);
 		if squared_distance > particle_effect.radius_squared {
 			transform.translation = particle_effect.translation;
-			particle_component.randomize_velocity(MIN_VELOCITY, MAX_VELOCITY);
+			particle_component.randomize_velocity(&mut rng, MIN_VELOCITY, MAX_VELOCITY);
 		}
 
 		if let Some(material) = materials.get_mut(color_material) {