diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java
index 5ccef02..adfab17 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/Tetris.java
@@ -4,7 +4,7 @@ import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
 import eu.mhsl.minenet.minigames.instance.game.stateless.types.tetris.game.TetrisGame;
 import eu.mhsl.minenet.minigames.instance.Dimension;
 import eu.mhsl.minenet.minigames.instance.game.stateless.types.tetris.game.Tetromino;
-import eu.mhsl.minenet.minigames.score.LastWinsScore;
+import eu.mhsl.minenet.minigames.score.PointsWinScore;
 import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator;
 import net.kyori.adventure.text.Component;
 import net.minestom.server.coordinate.Pos;
@@ -24,7 +24,7 @@ class Tetris extends StatelessGame {
     private final Map<Player, TetrisGame> tetrisGames = new HashMap<>();
 
     public Tetris() {
-        super(Dimension.THE_END.key, "Tetris", new LastWinsScore());
+        super(Dimension.THE_END.key, "Tetris", new PointsWinScore());
         this.setGenerator(new CircularPlateTerrainGenerator(30).setPlateHeight(0));
 
         eventNode()
@@ -108,7 +108,7 @@ class Tetris extends StatelessGame {
         if(tetrisGame == null) return;
         if(tetrisGame.lost && event.getPlayer().getGameMode() != GameMode.SPECTATOR) {
             event.getPlayer().setGameMode(GameMode.SPECTATOR);
-            getScore().insertResult(event.getPlayer());
+            getScore().insertResult(event.getPlayer(), tetrisGame.getScore());
             tetrisGame.sidebar.removeViewer(event.getPlayer());
         }
     }
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/game/TetrisGame.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/game/TetrisGame.java
index 6fecba9..c32c4d4 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/game/TetrisGame.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tetris/game/TetrisGame.java
@@ -103,6 +103,10 @@ public class TetrisGame {
         }
     }
 
+    public int getScore() {
+        return this.score;
+    }
+
 
     private boolean rotate(boolean clockwise) {
         if(this.lost || this.paused) return false;
diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/FirstWinsScore.java b/src/main/java/eu/mhsl/minenet/minigames/score/FirstWinsScore.java
index bc505dd..9595e6f 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/score/FirstWinsScore.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/score/FirstWinsScore.java
@@ -8,11 +8,21 @@ import java.time.Duration;
 import java.util.Set;
 
 public class FirstWinsScore extends Score {
+    @Override
+    public void insertResultImplementation(Set<Player> p, int points) {
+
+    }
+
     @Override
     public void insertResultImplementation(Set<Player> p) {
         getScores().add(p);
     }
 
+    @Override
+    public void insertResult(Player p, int points) {
+
+    }
+
     @Override
     protected TranslatableMessage scoreMessage() {
         return new TitleMessage(Duration.ofMillis(1000), Duration.ofSeconds(1)).appendTranslated("score#finish");
diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java b/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java
index c2bae16..c4a40b3 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/score/LastWinsScore.java
@@ -8,9 +8,19 @@ import java.time.Duration;
 import java.util.Set;
 
 public class LastWinsScore extends Score {
+    @Override
+    public void insertResultImplementation(Set<Player> p, int points) {
+
+    }
+
     @Override
     public void insertResultImplementation(Set<Player> p) {
-        getScores().add(0, p);
+        getScores().addFirst(p);
+    }
+
+    @Override
+    public void insertResult(Player p, int points) {
+
     }
 
     @Override
diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/NoScore.java b/src/main/java/eu/mhsl/minenet/minigames/score/NoScore.java
index 91478d5..232d874 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/score/NoScore.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/score/NoScore.java
@@ -10,11 +10,21 @@ public class NoScore extends Score {
     protected void checkGameEnd() {
     }
 
+    @Override
+    public void insertResultImplementation(Set<Player> p, int points) {
+
+    }
+
     @Override
     public void insertResultImplementation(Set<Player> p) {
 
     }
 
+    @Override
+    public void insertResult(Player p, int points) {
+
+    }
+
     @Override
     protected TranslatableMessage scoreMessage() {
         return null;
diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/PointsWinScore.java b/src/main/java/eu/mhsl/minenet/minigames/score/PointsWinScore.java
new file mode 100644
index 0000000..5164e65
--- /dev/null
+++ b/src/main/java/eu/mhsl/minenet/minigames/score/PointsWinScore.java
@@ -0,0 +1,40 @@
+package eu.mhsl.minenet.minigames.score;
+
+import eu.mhsl.minenet.minigames.message.TranslatableMessage;
+import eu.mhsl.minenet.minigames.message.type.TitleMessage;
+import eu.mhsl.minenet.minigames.util.MapUtil;
+import net.minestom.server.entity.Player;
+import org.apache.commons.lang3.NotImplementedException;
+
+import java.time.Duration;
+import java.util.*;
+
+public class PointsWinScore extends Score {
+    private Map<Set<Player>, Integer> scoreOrder = new HashMap<>();
+
+    @Override
+    public void insertResultImplementation(Set<Player> p, int points) {
+        this.scoreOrder.put(p, points);
+        this.scoreOrder = MapUtil.sortByValue(this.scoreOrder);
+        getScores().clear();
+        this.scoreOrder.forEach((player, integer) -> getScores().addFirst(player));
+    }
+
+    @Override
+    protected void insertResultImplementation(Set<Player> p) {
+        throw new NotImplementedException("PointsWinScore does not support adding entries without points");
+    }
+
+    @Override
+    public void insertResult(Player p, int points) {
+        if(hasResult(p)) return;
+        this.scoreMessage().send(p);
+        this.insertResultImplementation(Set.of(p), points);
+        this.checkGameEnd();
+    }
+
+    @Override
+    protected TranslatableMessage scoreMessage() {
+        return new TitleMessage(Duration.ofMillis(1000), Duration.ofSeconds(1)).appendTranslated("score#death");
+    }
+}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/score/Score.java b/src/main/java/eu/mhsl/minenet/minigames/score/Score.java
index 92d7385..38b54ae 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/score/Score.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/score/Score.java
@@ -45,7 +45,13 @@ public abstract class Score {
             setDone();
         }
     }
+
+    public abstract void insertResultImplementation(Set<Player> p, int points);
+
     protected abstract void insertResultImplementation(Set<Player> p);
+
+    public abstract void insertResult(Player p, int points);
+
     protected abstract TranslatableMessage scoreMessage();
 
     public void insertResult(Player p) {
diff --git a/src/main/java/eu/mhsl/minenet/minigames/util/MapUtil.java b/src/main/java/eu/mhsl/minenet/minigames/util/MapUtil.java
new file mode 100644
index 0000000..ac5506b
--- /dev/null
+++ b/src/main/java/eu/mhsl/minenet/minigames/util/MapUtil.java
@@ -0,0 +1,20 @@
+package eu.mhsl.minenet.minigames.util;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+public class MapUtil {
+    public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
+        List<Map.Entry<K, V>> list = new ArrayList<>(map.entrySet());
+        list.sort(Map.Entry.comparingByValue());
+
+        Map<K, V> result = new LinkedHashMap<>();
+        for (Map.Entry<K, V> entry : list) {
+            result.put(entry.getKey(), entry.getValue());
+        }
+
+        return result;
+    }
+}
\ No newline at end of file