diff --git a/images/simulation.png b/images/simulation.png
index a60e96c9ce7d04a746f6799df47b419e57bf0555..b28559b5d79d805e3aa70320bb5944075605e38d 100644
Binary files a/images/simulation.png and b/images/simulation.png differ
diff --git a/src/03-simulation/Simulation.ts b/src/03-simulation/Simulation.ts
index ca4346b52becdf59a16ceb319e12b723a03dfe7d..c3626f9fef42e76c30ca1675bd663571d09148be 100644
--- a/src/03-simulation/Simulation.ts
+++ b/src/03-simulation/Simulation.ts
@@ -22,7 +22,7 @@ export class Simulation implements PipelineObserver {
                         Simulation.current = p;
                         let x = [p.position.x, p.position.y, p.position.z,
                             p.velocity.x, p.velocity.y, p.velocity.z];
-                        x = SimulationData.INTEGRATORS[SimulationData.integratorType].step(x, h, Simulation.derivation);
+                        x = SimulationData.INTEGRATORS[SimulationData.integrationMethod].step(x, h, Simulation.derivation);
                         p.setState(x[0], x[1], x[2], x[3], x[4], x[5]);
                     }
                 });
diff --git a/src/03-simulation/SimulationData.ts b/src/03-simulation/SimulationData.ts
index efa529423f11cab8bdd686dc7de7f450e6ac2d2c..ccffc023de71e755c0f3d1479f5d62c6cc3a1410 100644
--- a/src/03-simulation/SimulationData.ts
+++ b/src/03-simulation/SimulationData.ts
@@ -6,9 +6,10 @@ import { Particle } from './physics/particle';
 import { EulerIntegrator, Integrator, MidpointIntegrator, RungeKuttaIntegrator } from './physics/Integrators';
 
 document.addEventListener('keydown', (event: KeyboardEvent) => {
-
     if (event.key === 'e') {
         SimulationData.switchParticlePhysics();
+    } else if (event.key === 'w') {
+        SimulationData.paused = !SimulationData.paused;
     }
 });
 
@@ -16,6 +17,8 @@ class SimulationData implements PipelineGUI, PipelineRenderable {
 
     public static container: THREE.Group = new THREE.Group();
 
+    public static paused: boolean = false;
+
     // cloth settings
     public static readonly MAX_TOTAL_MASS = 10;
     public static readonly MIN_TOTAL_MASS = 0.1;
@@ -59,12 +62,9 @@ class SimulationData implements PipelineGUI, PipelineRenderable {
         new RungeKuttaIntegrator
     ]
 
-    public static integratorType: number = 2;
-    public static stepSize: number = 0;
-
-    public static setEuler = () => { SimulationData.integratorType = 0; }
-    public static setMidpoint = () => { SimulationData.integratorType = 1; }
-    public static setRungeKutta = () => { SimulationData.integratorType = 2; }
+    public static integrationMethod: number = 2;
+    public static stepSizeMethod: number = 0;
+    public static errorMax: number = 0;
 
     public static resetExternalForce(): void {
         SimulationData.externalForce.x = 0;
@@ -73,6 +73,7 @@ class SimulationData implements PipelineGUI, PipelineRenderable {
     }
 
     public static generateTextile(): void {
+
         // 1. reset pList
         delete SimulationData.pList;
         SimulationData.pList = new Array<Array<Particle>>();
@@ -344,9 +345,8 @@ class SimulationData implements PipelineGUI, PipelineRenderable {
     }
 
     gui(gui: GUI): void {
-
-
         const general = gui.addFolder('General');
+        general.add(SimulationData, 'paused').name("Pause Simulation").listen();
         general.add(SimulationData, 'totalMass', SimulationData.MIN_TOTAL_MASS, SimulationData.MAX_TOTAL_MASS)
             .step(0.1).name('Total Mass').onChange(SimulationData.changedParticleSize);
         general.add(SimulationData, 'width', SimulationData.MIN_WIDTH, SimulationData.MAX_WIDTH)
@@ -356,12 +356,11 @@ class SimulationData implements PipelineGUI, PipelineRenderable {
         general.add(SimulationData, 'resolution', SimulationData.MIN_RESOLUTION, SimulationData.MAX_RESOLUTION)
             .step(1).name('Resolution').onChange(SimulationData.generateTextile);
         general.open();
-        
 
         const integration = gui.addFolder('Integrator');
-        integration.add(SimulationData, 'setEuler').name('Euler').onChange(()=>{console.log(SimulationData.integratorType)});
-        integration.add(SimulationData, 'setMidpoint').name('Midpoint').onChange(()=>{console.log(SimulationData.integratorType)});
-        integration.add(SimulationData, 'setRungeKutta').name('Runge Kutta (4th order)').onChange(()=>{console.log(SimulationData.integratorType)});
+        integration.add(SimulationData, 'integrationMethod', { 'Euler': 0, 'Midpoint': 1, 'Runge-Kutta': 2 }).name('Method');
+        integration.add(SimulationData, 'stepSizeMethod', { 'Fixed': 0, 'Adaptive': 1 }).name('Step Size');
+        integration.add(SimulationData, 'errorMax', -30, 0, 1).name('Error Max');
         integration.open();
 
         const extForce = general.addFolder('External Force');