diff --git a/pom.xml b/pom.xml
index 8bdcd5d2f15bc0347ce8212d6bcdea6aa01c6009..6bd5f9946ef2b3a7ffee8f8f073582471b9caa25 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,24 +3,24 @@
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>vsb-cs-java1</groupId>
-	<artifactId>lab06</artifactId>
+	<artifactId>lab08</artifactId>
 	<version>0.0.1-SNAPHOST</version>
 	<packaging>jar</packaging>
 	<properties>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<maven.compiler.source>11</maven.compiler.source>
-		<maven.compiler.target>11</maven.compiler.target>
+		<maven.compiler.source>17</maven.compiler.source>
+		<maven.compiler.target>17</maven.compiler.target>
 	</properties>
 	<dependencies>
 		<dependency>
 			<groupId>org.openjfx</groupId>
 			<artifactId>javafx-controls</artifactId>
-			<version>11</version>
+			<version>17.0.2</version>
 		</dependency>
 		<dependency>
 			<groupId>org.openjfx</groupId>
 			<artifactId>javafx-fxml</artifactId>
-			<version>11</version>
+			<version>17.0.2</version>
 		</dependency>
 		<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
 		<dependency>
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 001db374a86150c5e2fe2773be6b0e01e32c4e0e..1b2763c1b5575cc672e6ac3c3b91f471f4121c94 100644
--- a/src/main/java/lab/GameController.java
+++ b/src/main/java/lab/GameController.java
@@ -60,7 +60,7 @@ public class GameController {
 		this.world = new World(canvas.getWidth(), canvas.getHeight());
 		this.world.setGameListener(new GameListenerImpl());
 		//Draw scene on a separate thread to avoid blocking UI.
-		animationTimer = new AnimationTimerImpl();
+		animationTimer = new DrawingThread(canvas, world);
 		angleSlider.valueProperty().addListener(this::angleChanged);
 		world.setCannonAngle(angleSlider.getValue());
 		
@@ -74,10 +74,6 @@ public class GameController {
 		animationTimer.stop();
 	}
 	
-	private void drawScene(double deltaT) {
-		world.draw(canvas);
-		world.simulate(deltaT);
-	}
 	
 	@FXML
 	private void firePressed() {
@@ -139,20 +135,6 @@ public class GameController {
 		scoreList.setItems(FXCollections.observableList(highScores));
 	}
 	
-	private final class AnimationTimerImpl extends AnimationTimer {
-		private Long previous;
-
-		@Override
-		public void handle(long now) {
-			if (previous == null) {
-				previous = now;
-			} else {
-				drawScene((now - previous)/1e9);
-				previous = now;
-			}
-		}
-	}
-
 	private class GameListenerImpl implements GameListener {
 
 		@Override
diff --git a/src/main/java/lab/World.java b/src/main/java/lab/World.java
index 9fb2e23b138fc91bc73455181e5080449975d01f..65dc08fdc44503487e64cf12d36ad10e48d21286 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 {
@@ -45,9 +44,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, getWidth(), getHeight());
 		for(DrawableSimulable entity: entities) {
 			entity.draw(gc);
 		}