diff --git a/projects/wobble_bobble/shaders/particle.inc b/projects/wobble_bobble/shaders/particle.inc
index ae584f1a01e064856087111d44af2f4b8b341766..f5791e201d93b2be32d66a6522add6392727b3f9 100644
--- a/projects/wobble_bobble/shaders/particle.inc
+++ b/projects/wobble_bobble/shaders/particle.inc
@@ -41,14 +41,20 @@ float weight_C(float x) {
 	}
 }
 
-vec3 voxel_particle_weight(vec3 voxel, ParticleMinimal particle) {
+float voxel_particle_weight(vec3 voxel, ParticleMinimal particle) {
 	if (particle.size <= 0.0f) {
-		return vec3(0.0f);
+		return 0.0f;
 	}
 	
 	vec3 delta = abs(particle.position - voxel) / particle.size;
 	
-	return vec3(weight_C(delta.x), weight_C(delta.y), weight_C(delta.z));
+	vec3 weight = vec3(
+		weight_C(delta.x),
+		weight_C(delta.y),
+		weight_C(delta.z)
+	);
+	
+	return weight.x * weight.y * weight.z;
 }
 
 float grad_weight_A(float x) {
@@ -88,12 +94,22 @@ vec3 voxel_particle_grad_weight(vec3 voxel, ParticleMinimal particle) {
 	vec3 sign = sign(sign_delta);
 	
 	vec3 weight = vec3(
+		weight_C(delta.x),
+		weight_C(delta.y),
+		weight_C(delta.z)
+	);
+	
+	vec3 grad_weight = vec3(
 		grad_weight_C(delta.x),
 		grad_weight_C(delta.y),
 		grad_weight_C(delta.z)
-	);
+	) * sign;
 	
-	return weight * sign;
+	return vec3(
+			grad_weight.x * weight.y * weight.z,
+			grad_weight.y * weight.z * weight.x,
+			grad_weight.z * weight.x * weight.y
+	);
 }
 
 #endif // PARTICLE_INC
\ No newline at end of file
diff --git a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
index d582986d94ee820071bf1d29b054b2e79fdaf363..14e01baca0c85fb0d4d9b492e886359f841c88fc 100644
--- a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
+++ b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
@@ -39,11 +39,9 @@ void main()	{
         memoryBarrierShared();
 
         for (uint i = 0; i < SHARED_PARTICLES_BATCH_SIZE; i++) {
-            vec3 weight = voxel_particle_weight(position, shared_particles[i]);
-
             gridValue += (
                 vec4(shared_particles[i].velocity, shared_particles[i].mass) *
-                weight.x * weight.y * weight.z
+                voxel_particle_weight(position, shared_particles[i])
             );
         }
     }
diff --git a/projects/wobble_bobble/shaders/update_particle_velocities.comp b/projects/wobble_bobble/shaders/update_particle_velocities.comp
index e1927eb8e9011357b075961199393ec74c8e9ba8..63f519a38d3cd1e783bbac2c19f4bf8e96301f3c 100644
--- a/projects/wobble_bobble/shaders/update_particle_velocities.comp
+++ b/projects/wobble_bobble/shaders/update_particle_velocities.comp
@@ -39,11 +39,10 @@ void main()	{
                         vec4 gridSample = texture(sampler3D(gridImage, gridSampler), voxel);
                         vec4 gridOldSample = texture(sampler3D(gridOldImage, gridSampler), voxel);
 
-                        vec3 weight = voxel_particle_weight(voxel, minimal);
-                        float w = (weight.x * weight.y * weight.z);
+                        float weight = voxel_particle_weight(voxel, minimal);
 
-                        velocity_pic += gridSample.xyz * w;
-                        velocity_flip += (gridSample.xyz - gridOldSample.xyz) * w;
+                        velocity_pic += gridSample.xyz * weight;
+                        velocity_flip += (gridSample.xyz - gridOldSample.xyz) * weight;
                     }
                 }
             }