diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java
index 0f3cd47..b593623 100755
--- a/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java
+++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/Main.java
@@ -4,27 +4,23 @@ import eu.mhsl.craftattack.worldmuseum.commands.GamemodeCommand;
 import eu.mhsl.craftattack.worldmuseum.commands.GcCommand;
 import eu.mhsl.craftattack.worldmuseum.commands.TeleportCommand;
 import eu.mhsl.craftattack.worldmuseum.listener.ChunkUnloading;
-import eu.mhsl.craftattack.worldmuseum.listener.ClickListener;
+import eu.mhsl.craftattack.worldmuseum.listener.CompassUseListener;
+import eu.mhsl.craftattack.worldmuseum.listener.InventoryClickListener;
 import eu.mhsl.craftattack.worldmuseum.util.Config;
 import eu.mhsl.craftattack.worldmuseum.worlds.World;
 import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
+import eu.mhsl.craftattack.worldmuseum.worldswiching.CompassManager;
 import net.minestom.server.MinecraftServer;
-import net.minestom.server.coordinate.Pos;
 import net.minestom.server.entity.GameMode;
 import net.minestom.server.entity.Player;
 import net.minestom.server.event.GlobalEventHandler;
+import net.minestom.server.event.inventory.InventoryPreClickEvent;
 import net.minestom.server.event.player.PlayerChunkUnloadEvent;
 import net.minestom.server.event.player.PlayerLoginEvent;
 import net.minestom.server.event.player.PlayerUseItemEvent;
-import net.minestom.server.instance.InstanceContainer;
 import net.minestom.server.instance.InstanceManager;
-import net.minestom.server.instance.block.Block;
 import net.minestom.server.timer.TaskSchedule;
 
-
-import java.util.ArrayList;
-import java.util.List;
-
 public class Main {
     static int PORT = 25565;
     static String IP = "0.0.0.0";
@@ -36,6 +32,8 @@ public class Main {
         InstanceManager instanceManager = MinecraftServer.getInstanceManager();
 
         //temp
+//        MinecraftServer.getConnectionManager().setPlayerProvider(ExploringPlayer::new);
+        MinecraftServer.setChunkViewDistance(8);
         MinecraftServer.getSchedulerManager().scheduleTask(new TablistUpdateTask(), TaskSchedule.tick(20), TaskSchedule.tick(20));
 
         //load eu.mhsl.craftattack.worldmuseum.worlds / configExample file
@@ -47,12 +45,17 @@ public class Main {
         config.loadConfig();
         World startworld = config.getStart_world();
 
+        //CompassManager
+        CompassManager compassManager = CompassManager.getInstance();
+        compassManager.loadCommpassManager();
+
         // Add an event callback to specify the spawning instance (and the spawn position)
         GlobalEventHandler globalEventHandler = MinecraftServer.getGlobalEventHandler();
 
         //listeners
-        globalEventHandler.addListener(PlayerUseItemEvent.class, new ClickListener());
+        globalEventHandler.addListener(PlayerUseItemEvent.class, new CompassUseListener());
         globalEventHandler.addListener(PlayerChunkUnloadEvent.class, new ChunkUnloading());
+        globalEventHandler.addListener(InventoryPreClickEvent.class, new InventoryClickListener());
 
         //commands
         MinecraftServer.getCommandManager().register(new TeleportCommand());
@@ -62,21 +65,15 @@ public class Main {
         globalEventHandler.addListener(PlayerLoginEvent.class, event -> {
             final Player player = event.getPlayer();
             event.setSpawningInstance(startworld);
+
             player.setRespawnPoint(startworld.getSpawn());
             player.setGameMode(GameMode.CREATIVE);
-
-
-
-
-//            for (int i = 0; i< WorldManager.getInstance().getWorlds().size(); i++) {
-//                if (WorldManager.getInstance().getWorlds().get(i).isEnabled()) {
-//                    player.getInventory().setItemStack(i, WorldManager.getInstance().getWorlds().get(i).getItem());
-//                } else {
-//                    System.out.println("Es gibt nicht aktivierte Welten!");
-//                }
-//            }
+            player.getInventory().setItemStack(0, compassManager.getCompass());
         });
 
+
+
+
         try {
             PORT = Integer.parseInt(args[0]);
         } catch (Exception e) {
diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/ClickListener.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/ClickListener.java
deleted file mode 100755
index d4464b7..0000000
--- a/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/ClickListener.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package eu.mhsl.craftattack.worldmuseum.listener;
-
-import eu.mhsl.craftattack.worldmuseum.worlds.World;
-import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
-import net.minestom.server.entity.Player;
-import net.minestom.server.event.player.PlayerUseItemEvent;
-import net.minestom.server.item.ItemStack;
-import java.util.function.Consumer;
-
-public class ClickListener implements Consumer<PlayerUseItemEvent> {
-
-    @Override
-    public void accept(PlayerUseItemEvent playerUseItemEvent) {
-        Player p = playerUseItemEvent.getPlayer();
-        ItemStack usedItem = playerUseItemEvent.getItemStack();
-
-        for (int i = 0; i < WorldManager.getInstance().getWorlds().size(); i++) {
-            World world =  WorldManager.getInstance().getWorlds().get(i);
-
-            if (world.getItem().equals(usedItem)) {
-                if (p.getInstance().equals(world)) {
-                    tpToSpawn(p, world);
-                    return;
-                };
-                p.setInstance(world, world.getSpawn());
-            }
-        }
-
-    }
-    private void tpToSpawn(Player player, World world) {
-        player.teleport(world.getSpawn());
-    }
-}
diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/CompassUseListener.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/CompassUseListener.java
new file mode 100755
index 0000000..faa2e7c
--- /dev/null
+++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/CompassUseListener.java
@@ -0,0 +1,20 @@
+package eu.mhsl.craftattack.worldmuseum.listener;
+
+import eu.mhsl.craftattack.worldmuseum.worldswiching.CompassManager;
+import net.minestom.server.entity.Player;
+import net.minestom.server.event.player.PlayerUseItemEvent;
+import net.minestom.server.item.ItemStack;
+import java.util.function.Consumer;
+
+public class CompassUseListener implements Consumer<PlayerUseItemEvent> {
+
+    @Override
+    public void accept(PlayerUseItemEvent playerUseItemEvent) {
+        Player p = playerUseItemEvent.getPlayer();
+        ItemStack usedItem = playerUseItemEvent.getItemStack();
+        CompassManager compassManager = CompassManager.getInstance();
+
+        if (!usedItem.equals(compassManager.getCompass())) return;
+        p.openInventory(compassManager.getInventory());
+    }
+}
diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/InventoryClickListener.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/InventoryClickListener.java
new file mode 100644
index 0000000..a5e65f8
--- /dev/null
+++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/listener/InventoryClickListener.java
@@ -0,0 +1,33 @@
+package eu.mhsl.craftattack.worldmuseum.listener;
+
+import eu.mhsl.craftattack.worldmuseum.worlds.World;
+import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
+import net.minestom.server.entity.Player;
+import net.minestom.server.event.inventory.InventoryPreClickEvent;
+
+import java.util.Iterator;
+import java.util.function.Consumer;
+
+public class InventoryClickListener implements Consumer<InventoryPreClickEvent> {
+    @Override
+    public void accept(InventoryPreClickEvent inventoryPreClickEvent) {
+        Player p = inventoryPreClickEvent.getPlayer();
+        inventoryPreClickEvent.setCancelled(true);
+        WorldManager worldManager = WorldManager.getInstance();
+        Iterator iterator = worldManager.getWorlds().iterator();
+        while (iterator.hasNext()) {
+            World w = (World) iterator.next();
+            if (!w.getItem().equals(inventoryPreClickEvent.getClickedItem())) continue;
+            if (p.getInstance().equals(w)) {
+                p.closeInventory();
+                p.teleport(w.getSpawn());
+                return;
+            } else {
+                p.closeInventory();
+                p.setInstance(w);
+                p.teleport(w.getSpawn());
+                return;
+            }
+        }
+    }
+}
diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/worlds/World.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/worlds/World.java
index bdf7414..cf0fdab 100755
--- a/src/main/java/eu/mhsl/craftattack/worldmuseum/worlds/World.java
+++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/worlds/World.java
@@ -11,19 +11,18 @@ import net.minestom.server.item.ItemStack;
 import net.minestom.server.item.Material;
 import net.minestom.server.utils.NamespaceID;
 import net.minestom.server.world.DimensionType;
-
 import java.io.*;
 import java.util.UUID;
 
 public class World extends InstanceContainer {
-    private static DimensionType dimension = DimensionType.builder(NamespaceID.from("mhsl:worldview_by_olischma")).height(400).ambientLight(2.0f).build();
-    private File file;
+    private final static DimensionType dimension = DimensionType.builder(NamespaceID.from("mhsl:worldview_by_olischma")).height(400).ambientLight(2.0f).build();
+    private final File file;
     private ItemStack item;
     private String name = "default";
     private Pos spawn = new Pos(0,0,0);
     private Material material = Material.GRASS_BLOCK;
     private boolean enabled = false;
-    private String defaultConfig = "{\n" +
+    private final String defaultConfig = "{\n" +
             "  \"enabled\": false,\n" +
             "  \"name\": \"DEFAULT_NAME\",\n" +
             "  \"material\": \"GRASS_BLOCK\",\n" +
diff --git a/src/main/java/eu/mhsl/craftattack/worldmuseum/worldswiching/CompassManager.java b/src/main/java/eu/mhsl/craftattack/worldmuseum/worldswiching/CompassManager.java
new file mode 100644
index 0000000..442d2f0
--- /dev/null
+++ b/src/main/java/eu/mhsl/craftattack/worldmuseum/worldswiching/CompassManager.java
@@ -0,0 +1,35 @@
+package eu.mhsl.craftattack.worldmuseum.worldswiching;
+
+import eu.mhsl.craftattack.worldmuseum.worlds.World;
+import eu.mhsl.craftattack.worldmuseum.worlds.WorldManager;
+import net.kyori.adventure.text.Component;
+import net.minestom.server.inventory.Inventory;
+import net.minestom.server.inventory.InventoryType;
+import net.minestom.server.item.ItemStack;
+import net.minestom.server.item.Material;
+public class CompassManager {
+    static CompassManager instance;
+
+    ItemStack compass;
+    Inventory inventory;
+    public static CompassManager getInstance() {
+        if (instance == null) instance = new CompassManager();
+        return instance;
+    }
+    public void loadCommpassManager() {
+        compass = ItemStack.builder(Material.COMPASS).displayName(Component.text("World-changer")).build();
+        inventory = new Inventory(InventoryType.CHEST_1_ROW, Component.text("World-changer"));
+
+        for (World w : WorldManager.getInstance().getWorlds()) {
+            inventory.addItemStack(w.getItem());
+        }
+    }
+
+    public ItemStack getCompass() {
+        return compass;
+    }
+
+    public Inventory getInventory() {
+        return inventory;
+    }
+}