diff --git a/projects/wobble_bobble/shaders/update_particle_deformation.comp b/projects/wobble_bobble/shaders/update_particle_deformation.comp
index 9711d48ad5fc733c2a78a7cb4a7281d90e861fe8..8cd2aabe439764d4572502667d3f587d2f8726e5 100644
--- a/projects/wobble_bobble/shaders/update_particle_deformation.comp
+++ b/projects/wobble_bobble/shaders/update_particle_deformation.comp
@@ -25,7 +25,7 @@ void main()	{
 
         mat3 velocity_gradient = mat3(0.0f);
 
-        uint i, j, k;
+        int i, j, k;
 
         for (i = -gridWindow.x; i <= gridWindow.x; i++) {
             for (j = -gridWindow.y; j <= gridWindow.y; j++) {
diff --git a/projects/wobble_bobble/shaders/update_particle_velocities.comp b/projects/wobble_bobble/shaders/update_particle_velocities.comp
index 123ac83a24e9e54d36518d98eac3ad62cf1f80dc..e1927eb8e9011357b075961199393ec74c8e9ba8 100644
--- a/projects/wobble_bobble/shaders/update_particle_velocities.comp
+++ b/projects/wobble_bobble/shaders/update_particle_velocities.comp
@@ -1,5 +1,6 @@
 #version 450
 #extension GL_GOOGLE_include_directive : enable
+#extension GL_EXT_control_flow_attributes : enable
 
 layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
 
@@ -23,9 +24,10 @@ void main()	{
         ivec3 gridResolution = textureSize(sampler3D(gridImage, gridSampler), 0);
         ivec3 gridWindow = ivec3(minimal.size * 2.0f * gridResolution);
 
-        vec3 velocity = vec3(minimal.velocity);
+        vec3 velocity_pic = vec3(0.0f);
+        vec3 velocity_flip = vec3(minimal.velocity);
 
-        uint i, j, k;
+        int i, j, k;
 
         for (i = -gridWindow.x; i <= gridWindow.x; i++) {
             for (j = -gridWindow.y; j <= gridWindow.y; j++) {
@@ -38,14 +40,16 @@ void main()	{
                         vec4 gridOldSample = texture(sampler3D(gridOldImage, gridSampler), voxel);
 
                         vec3 weight = voxel_particle_weight(voxel, minimal);
+                        float w = (weight.x * weight.y * weight.z);
 
-                        velocity += (weight.x * weight.y * weight.z) * (gridSample.xyz - gridOldSample.xyz);
+                        velocity_pic += gridSample.xyz * w;
+                        velocity_flip += (gridSample.xyz - gridOldSample.xyz) * w;
                     }
                 }
             }
         }
 
-        particles[gl_GlobalInvocationID.x].minimal.velocity = velocity;
+        particles[gl_GlobalInvocationID.x].minimal.velocity = mix(velocity_pic, velocity_flip, 0.95f);
     }
 
     memoryBarrierBuffer();
diff --git a/projects/wobble_bobble/src/main.cpp b/projects/wobble_bobble/src/main.cpp
index 1049305cab2ad960cc70fb37e5cfbeb6bcb3a3e0..4e7635488a3c61d0f14e790a9b141fca0a578687 100644
--- a/projects/wobble_bobble/src/main.cpp
+++ b/projects/wobble_bobble/src/main.cpp
@@ -40,7 +40,7 @@ void distributeParticles(Particle *particles, size_t count, const glm::vec3& cen
 		
 		particles[i].position = center + offset;
 		particles[i].size = size;
-		particles[i].velocity = glm::vec3(0.0f, 0.1f, 0.0f);
+		particles[i].velocity = glm::vec3(0.0f);
 		
 		volume += size;
 	}