diff --git a/projects/wobble_bobble/shaders/particle.inc b/projects/wobble_bobble/shaders/particle.inc
index dbe0254e4a36f57b6d39d6e4375120875140dba4..ddb07e7854e90f7468a6e98db9f2343d5daf82c1 100644
--- a/projects/wobble_bobble/shaders/particle.inc
+++ b/projects/wobble_bobble/shaders/particle.inc
@@ -33,12 +33,15 @@ struct Simulation {
 	float size;
 	float lame1;
 	float lame2;
+	
 	int form;
 	int type;
 	float K;
 	float E;
+	
 	float gamma;
 	int mode;
+	float gravity;
 };
 
 const float PI = 3.1415926535897932384626433832795;
diff --git a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
index 236ff763edfbd4f58f4edaeed27ac64804b330ce..ade23ae766508dbe448d8197ad9c8249d61425c2 100644
--- a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
+++ b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
@@ -9,7 +9,11 @@ layout(set=0, binding=0, std430) readonly buffer particleBuffer {
     Particle particles [];
 };
 
-layout(set=0, binding=1, rgba32f) restrict writeonly uniform image3D gridImage;
+layout(set=0, binding=1) uniform simulationBlock {
+    Simulation simulation;
+};
+
+layout(set=0, binding=2, rgba32f) restrict writeonly uniform image3D gridImage;
 
 layout( push_constant ) uniform constants {
     float t;
@@ -73,7 +77,7 @@ void main()	{
         gridValue.xyz = vec3(0.0f);
     }
 
-    gridValue.xyz += vec3(0.0f, -9.81f * dts * gridValue.w, 0.0f);
+    gridValue.xyz += vec3(0.0f, -simulation.gravity * dts * gridValue.w, 0.0f);
 
     bvec3 lowerID = lessThanEqual(gl_GlobalInvocationID, ivec3(0));
     bvec3 negativeVelocity = lessThan(gridValue.xyz, vec3(0.0f));
diff --git a/projects/wobble_bobble/src/main.cpp b/projects/wobble_bobble/src/main.cpp
index d15d3a6a1283db89326bcb3faa80eeacfaf5a018..de12087422fc19968271b32f2d811deaf3e4de8d 100644
--- a/projects/wobble_bobble/src/main.cpp
+++ b/projects/wobble_bobble/src/main.cpp
@@ -33,12 +33,15 @@ struct Simulation {
 	float size;
 	float lame1;
 	float lame2;
+	
 	int form;
 	int type;
 	float K;
 	float E;
+	
 	float gamma;
 	int mode;
+	float gravity;
 };
 
 struct Physics {
@@ -348,6 +351,7 @@ int main(int argc, const char **argv) {
 	sim->E = 35.0f;
 	sim->gamma = 1.330f;
 	sim->mode = SIM_MODE_RANDOM;
+	sim->gravity = 9.81f;
 	
 	resetParticles(particles, initialVelocity, sim->density, sim->size, sim->form, sim->mode);
 	
@@ -378,7 +382,8 @@ int main(int argc, const char **argv) {
 	{
 		vkcv::DescriptorWrites writes;
 		writes.storageBufferWrites.push_back(vkcv::BufferDescriptorWrite(0, particles.getHandle()));
-		writes.storageImageWrites.push_back(vkcv::StorageImageDescriptorWrite(1, grid.getHandle()));
+		writes.uniformBufferWrites.push_back(vkcv::BufferDescriptorWrite(1, simulation.getHandle()));
+		writes.storageImageWrites.push_back(vkcv::StorageImageDescriptorWrite(2, grid.getHandle()));
 		core.writeDescriptorSet(transformParticlesToGridSets[0], writes);
 	}
 	
@@ -833,11 +838,11 @@ int main(int argc, const char **argv) {
 		ImGui::Spacing();
 		
 		ImGui::BeginGroup();
-		ImGui::SliderFloat("Bulk Modulus", &(sim->K), 0.0f, 100.0f);
-		ImGui::SliderFloat("Young's Modulus", &(sim->E), 0.0f, 100.0f);
+		ImGui::SliderFloat("Bulk Modulus", &(sim->K), 0.0f, 1000.0f);
+		ImGui::SliderFloat("Young's Modulus", &(sim->E), 0.0f, 1000.0f);
 		ImGui::SliderFloat("Heat Capacity Ratio", &(sim->gamma), 1.0f, 2.0f);
-		ImGui::SliderFloat("Lame1", &(sim->lame1), 0.0f, 100.0f);
-		ImGui::SliderFloat("Lame2", &(sim->lame2), 0.0f, 100.0f);
+		ImGui::SliderFloat("Lame1", &(sim->lame1), 0.0f, 1000.0f);
+		ImGui::SliderFloat("Lame2", &(sim->lame2), 0.0f, 1000.0f);
 		ImGui::EndGroup();
 
 		ImGui::Spacing();
@@ -853,6 +858,8 @@ int main(int argc, const char **argv) {
 			resetParticles(particles, initialVelocity, sim->density, sim->size, sim->form, sim->mode);
 		}
 		
+		ImGui::SliderFloat("Gravity", &(sim->gravity), 0.0f, 10.0f);
+		
 		ImGui::End();
 		gui.endGUI();