diff --git a/src/main/java/lab/DrawingThread.java b/src/main/java/lab/DrawingThread.java
new file mode 100755
index 0000000000000000000000000000000000000000..5d6c0f0bf74b14fc4a6cc67a046bec0a0df363a9
--- /dev/null
+++ b/src/main/java/lab/DrawingThread.java
@@ -0,0 +1,37 @@
+package lab;
+
+import javafx.animation.AnimationTimer;
+import javafx.scene.canvas.Canvas;
+import javafx.scene.canvas.GraphicsContext;
+
+public class DrawingThread extends AnimationTimer {
+
+	private final Canvas canvas;
+	
+	private final GraphicsContext gc;
+
+	private final World world;
+	
+	private long lasttime = -1;
+
+	public DrawingThread(Canvas canvas, World world) {
+		this.canvas = canvas;
+		this.gc = canvas.getGraphicsContext2D();
+		this.world = world;
+	}
+
+	/**
+	  * Draws objects into the canvas. Put you code here. 
+	 */
+	@Override
+	public void handle(long now) {
+		gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight());
+		world.draw(gc);
+		if (lasttime > 0) {
+			//time are in nanoseconds and method simulate expects seconds
+			world.simulate((now - lasttime) / 1e9);
+		}
+		lasttime = now;
+	}
+
+}
diff --git a/src/main/java/lab/GameController.java b/src/main/java/lab/GameController.java
index 889d6a1525bf0e419a03681359103201ee90e569..538557076a8345ca2c92ffc8fcdf4b450c7aebc8 100644
--- a/src/main/java/lab/GameController.java
+++ b/src/main/java/lab/GameController.java
@@ -16,19 +16,7 @@ public class GameController {
 	public void startGame() {
 		this.world = new World(canvas.getWidth(), canvas.getHeight());	
 		//Draw scene on a separate thread to avoid blocking UI.
-		animationTimer = new AnimationTimer() {
-			private Long previous;
-			
-			@Override
-			public void handle(long now) {
-				if (previous == null) {
-					previous = now;
-				} else {
-					drawScene((now - previous)/1e9);
-					previous = now;
-				}
-			}
-		};
+		animationTimer = new DrawingThread(canvas, world);
 		animationTimer.start();
 	}
 
@@ -36,11 +24,6 @@ public class GameController {
 	public void stopGame() {
 		animationTimer.stop();
 	}
-	
-	private void drawScene(double deltaT) {
-		world.draw(canvas);
-		world.simulate(deltaT);
-	}
 
 	
 }
diff --git a/src/main/java/lab/World.java b/src/main/java/lab/World.java
index ead7806d7311180d84ebdb855ce31a51a0da13ed..dd53bc3857b678cb9c898b7cfccc58b6978fe10b 100644
--- a/src/main/java/lab/World.java
+++ b/src/main/java/lab/World.java
@@ -3,7 +3,6 @@ package lab;
 import java.util.Random;
 
 import javafx.geometry.Point2D;
-import javafx.scene.canvas.Canvas;
 import javafx.scene.canvas.GraphicsContext;
 
 public class World {
@@ -37,9 +36,8 @@ public class World {
 		return new Point2D(worldPoint.getX(), height - worldPoint.getY());
 	}
 
-	public void draw(Canvas canvas) {
-		GraphicsContext gc = canvas.getGraphicsContext2D();
-		gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight());
+	public void draw(GraphicsContext gc) {
+		gc.clearRect(0, 0, width, height);
 		for(DrawableSimulable entity: entities) {
 			entity.draw(gc);
 		}
@@ -61,16 +59,7 @@ public class World {
 				}
 			}
 		}
-		/*bulletAnimatted.simulate(timeDelta);
-		cannon.simulate(timeDelta);
 		
-		for(Dragon dragon: dragons) {
-			if (bulletAnimatted.overlaps(dragon)) {
-				dragon.hit();
-				bulletAnimatted.reload();
-			}
-			dragon.simulate(timeDelta);
-		}*/
 	}
 
 	public double getWidth() {