diff --git a/src/components/gameMaster/zoneEditor/partials/Toolbar.vue b/src/components/gameMaster/zoneEditor/partials/Toolbar.vue
index fd03439..f14bbcc 100644
--- a/src/components/gameMaster/zoneEditor/partials/Toolbar.vue
+++ b/src/components/gameMaster/zoneEditor/partials/Toolbar.vue
@@ -171,13 +171,26 @@ function handleClick(tool: string) {
   selectEraserOpen.value = tool === 'eraser' ? !selectEraserOpen.value : false
 }
 
-// Key bindings
+function cycleToolMode(tool: 'pencil' | 'eraser') {
+  const modes = ['tile', 'object', 'teleport', 'blocking tile'];
+  const currentMode = tool === 'pencil' ? zoneEditorStore.drawMode : zoneEditorStore.eraserMode;
+  const currentIndex = modes.indexOf(currentMode);
+  const nextIndex = (currentIndex + 1) % modes.length;
+  const nextMode = modes[nextIndex];
+
+  if (tool === 'pencil') {
+    setDrawMode(nextMode);
+  } else {
+    setEraserMode(nextMode);
+  }
+}
+
 function initKeyShortcuts(event: KeyboardEvent) {
   if (!zoneEditorStore.zone) return
   // prevent if focused on composables
   if (document.activeElement?.tagName === 'INPUT') return
 
-  const keyActions: any = {
+  const keyActions: { [key: string]: string } = {
     m: 'move',
     p: 'pencil',
     e: 'eraser',
@@ -186,7 +199,12 @@ function initKeyShortcuts(event: KeyboardEvent) {
   }
 
   if (keyActions.hasOwnProperty(event.key)) {
-    handleClick(keyActions[event.key])
+    const tool = keyActions[event.key];
+    if ((tool === 'pencil' || tool === 'eraser') && zoneEditorStore.tool === tool) {
+      cycleToolMode(tool);
+    } else {
+      handleClick(tool);
+    }
   }
 }