diff --git a/src/events/map/characterMove.ts b/src/events/map/characterMove.ts
index 21248d7..05be78a 100644
--- a/src/events/map/characterMove.ts
+++ b/src/events/map/characterMove.ts
@@ -55,7 +55,7 @@ export default class CharacterMove extends BaseEvent {
       if (mapEventTile?.type === 'BLOCK') break
       if (mapEventTile?.type === 'TELEPORT' && mapEventTile.teleport) {
         await this.handleMapEventTile(mapEventTile as MapEventTileWithTeleport)
-        break
+        return
       }
 
       // Update position first
diff --git a/src/services/teleportService.ts b/src/services/teleportService.ts
index cf1b441..36f4880 100644
--- a/src/services/teleportService.ts
+++ b/src/services/teleportService.ts
@@ -48,13 +48,6 @@ class TeleportService {
       const currentMapId = mapCharacter.character.map?.id
       const io = SocketManager.getIO()
 
-      // Handle current map cleanup
-      if (currentMapId) {
-        socket.leave(currentMapId)
-        MapManager.removeCharacter(characterId)
-        io.in(currentMapId).emit('map:character:leave', characterId)
-      }
-
       // Update character position and map
       await mapCharacter
         .getCharacter()
@@ -64,6 +57,26 @@ class TeleportService {
         .setMap(targetMap.getMap())
         .save()
 
+      // If the current map is the target map and we are not joining, send move event
+      if (currentMapId === options.targetMapId && !options.isInitialJoin) {
+        // If the current map is the target map, send move event
+        io.in(currentMapId).emit('map:character:move', {
+          characterId: mapCharacter.character.id,
+          positionX: options.targetX,
+          positionY: options.targetY,
+          rotation: options.rotation ?? 0,
+          isMoving: false
+        })
+        return true
+      }
+
+      // Handle current map cleanup
+      if (currentMapId) {
+        socket.leave(currentMapId)
+        MapManager.removeCharacter(characterId)
+        io.in(currentMapId).emit('map:character:leave', characterId)
+      }
+
       // Join new map
       socket.join(options.targetMapId)
       targetMap.addCharacter(mapCharacter.getCharacter())