diff --git a/.gitignore b/.gitignore
index db44c8a723e017349e18633821c8ee475d15621c..3e5f27cda91dfd3f7c2fcabd25b2e18e05a7ac74 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
 .settings/
 .project
 .classpath
+/data.csv
diff --git a/src/main/java/lab/GameController.java b/src/main/java/lab/GameController.java
index 9d52ea1e382775d3ee6ea3edaa3da27dc2c2ad85..0c2c83bbce921a41af06160079d0eea8df5bbfe9 100644
--- a/src/main/java/lab/GameController.java
+++ b/src/main/java/lab/GameController.java
@@ -1,14 +1,37 @@
 	package lab;
 
+import static java.util.Comparator.comparingInt;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Random;
+import java.util.Scanner;
+import java.util.Set;
+
 import javafx.animation.AnimationTimer;
 import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
 import javafx.fxml.FXML;
 import javafx.scene.canvas.Canvas;
 import javafx.scene.control.Label;
+import javafx.scene.control.ListView;
 import javafx.scene.control.Slider;
+import javafx.scene.control.TextField;
 
 public class GameController {
 
+	private static final String FILE_NAME = "data.csv";
+
 	private World world;
 	
 	@FXML
@@ -26,12 +49,24 @@ public class GameController {
 	@FXML
 	private Label hits;
 	
+	@FXML
+	private TextField nameField;
+	
+	@FXML
+	private ListView<Score> scoreList;
+	
+	private List<Score> highScores;
+	
 	private AnimationTimer animationTimer;
 	
 	public GameController() {
 	}
 	
 	public void startGame() {
+		scoreList.setItems(FXCollections.observableList(new LinkedList<>()));
+		highScores = scoreList.getItems();
+		
+		
 		this.world = new World(canvas.getWidth(), canvas.getHeight());
 		this.world.setGameListener(new GameListenerImpl());
 		//Draw scene on a separate thread to avoid blocking UI.
@@ -55,6 +90,54 @@ public class GameController {
 		world.fire();
 	}
 	
+	@FXML
+	private void gameOver() {
+		Random rnd = new Random();
+		int score = rnd.nextInt(11);
+		highScores.add(new Score(nameField.getText(), score));
+		highScores.sort(comparingInt(Score::getScore).reversed());
+		
+	}
+	
+	@FXML
+	private void highScores() {
+		Set<Score> tempSet = new LinkedHashSet<>();
+		tempSet.addAll(highScores);
+		highScores.clear();
+		highScores.addAll(tempSet);
+	}
+	
+	@FXML
+	private void save() {
+		try(PrintWriter pw = new PrintWriter(new FileWriter(FILE_NAME))) {
+			for (Score score: highScores) {
+				pw.printf("%s;%d\n", score.getName(), score.getScore());
+			}
+			
+			/*Iterator<Score> iterator = highScores.iterator();
+			while (iterator.hasNext()) {
+				Score score = iterator.next();
+				pw.printf("%s;%d\n", score.getName(), score.getScore());
+				iterator.remove();
+			}*/
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	@FXML
+	private void load() {
+		highScores.clear();
+		try (Scanner scanner = new Scanner(new File(FILE_NAME)).useDelimiter("[;\\n]")) {
+			while(scanner.hasNext()) {
+				String name = scanner.next();
+				int value = scanner.nextInt();
+				highScores.add(new Score(name, value));
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
 	
 	private void angleChanged(ObservableValue<? extends Number> observable
 								, Number oldValue, Number newValue) {
diff --git a/src/main/java/lab/Score.java b/src/main/java/lab/Score.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e5ffb4b9a119b75017dfce17f328852a3d50f5b
--- /dev/null
+++ b/src/main/java/lab/Score.java
@@ -0,0 +1,38 @@
+package lab;
+
+public class Score {
+	private final String name;
+	private final int score;
+	
+	public Score(String name, int score) {
+		this.name = name;
+		this.score = score;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+	public int getScore() {
+		return score;
+	}
+	
+	
+	@Override
+	public String toString() {
+		return name + ": " + score;
+	}
+	
+	@Override
+	public boolean equals(Object obj) {
+		if (obj instanceof Score other) {
+			return this.name.equals(other.name);
+		}
+		return false;
+	}
+	
+	@Override
+	public int hashCode() {
+		return name.hashCode();
+	}
+}
diff --git a/src/main/java/lab/Score2.java b/src/main/java/lab/Score2.java
new file mode 100644
index 0000000000000000000000000000000000000000..88cd8b126f7c96c13162e6c3c214f14041eba445
--- /dev/null
+++ b/src/main/java/lab/Score2.java
@@ -0,0 +1,8 @@
+package lab;
+
+public record Score2(String name, int score) {
+
+	
+	
+	
+}
diff --git a/src/main/java/lab/World.java b/src/main/java/lab/World.java
index 65dc08fdc44503487e64cf12d36ad10e48d21286..04bc1c2e98d4beb5d6b1f28d2f44616716d407d7 100644
--- a/src/main/java/lab/World.java
+++ b/src/main/java/lab/World.java
@@ -21,7 +21,6 @@ public class World {
 	private DrawableSimulable []entities; 
 	
 	public World(double width, double height) {
-		super();
 		this.width = width;
 		this.height = height;
 		Cannon cannon = new Cannon(this, new Point2D(50, 50), new Point2D(100, 20));
diff --git a/src/main/resources/lab/GameView.fxml b/src/main/resources/lab/GameView.fxml
index e0732c4641c1ecbf46598064b90e1aa66c27711e..0ca87357c0b4395f9e417acf324fbf61ef6ca532 100644
--- a/src/main/resources/lab/GameView.fxml
+++ b/src/main/resources/lab/GameView.fxml
@@ -5,14 +5,17 @@
 <?import javafx.scene.canvas.Canvas?>
 <?import javafx.scene.control.Button?>
 <?import javafx.scene.control.Label?>
+<?import javafx.scene.control.ListView?>
 <?import javafx.scene.control.Slider?>
+<?import javafx.scene.control.TextField?>
 <?import javafx.scene.layout.BorderPane?>
 <?import javafx.scene.layout.ColumnConstraints?>
 <?import javafx.scene.layout.GridPane?>
 <?import javafx.scene.layout.HBox?>
 <?import javafx.scene.layout.RowConstraints?>
+<?import javafx.scene.layout.VBox?>
 
-<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" fx:controller="lab.GameController">
+<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" xmlns="http://javafx.com/javafx/18" xmlns:fx="http://javafx.com/fxml/1" fx:controller="lab.GameController">
    <bottom>
       <HBox alignment="CENTER" BorderPane.alignment="CENTER_LEFT">
          <children>
@@ -41,11 +44,25 @@
                   <Label text="Shoots:" />
                   <Label fx:id="shoots" text="0" GridPane.columnIndex="1" />
                   <Label text="Hits:" GridPane.rowIndex="1" />
-                  <Label fx:id="hits" text="0" GridPane.rowIndex="1" GridPane.columnIndex="1" />
+                  <Label fx:id="hits" text="0" GridPane.columnIndex="1" GridPane.rowIndex="1" />
                </children>
             </GridPane>
             <Canvas fx:id="canvas" height="400.0" width="600.0" />
          </children>
       </Group>
    </center>
+   <left>
+      <VBox prefWidth="100.0" BorderPane.alignment="CENTER">
+         <children>
+            <TextField fx:id="nameField" />
+            <Button mnemonicParsing="false" onAction="#gameOver" prefWidth="100.0" text="Game Over" />
+            <Button mnemonicParsing="false" onAction="#highScores" prefWidth="100.0" text="High Scores" />
+            <Button mnemonicParsing="false" onAction="#save" prefWidth="100.0" text="Save" />
+            <Button mnemonicParsing="false" onAction="#load" prefWidth="100.0" text="Load" />
+         </children>
+      </VBox>
+   </left>
+   <right>
+      <ListView fx:id="scoreList" prefWidth="200.0" BorderPane.alignment="CENTER" />
+   </right>
 </BorderPane>