diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java
index 7aa64f1f7..e85dc689d 100644
--- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java
+++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java
@@ -28,8 +28,6 @@ package org.geysermc.geyser.network;
 import com.github.steveice10.mc.protocol.codec.MinecraftCodec;
 import com.github.steveice10.mc.protocol.codec.PacketCodec;
 import com.nukkitx.protocol.bedrock.BedrockPacketCodec;
-import com.nukkitx.protocol.bedrock.v527.Bedrock_v527;
-import com.nukkitx.protocol.bedrock.v534.Bedrock_v534;
 import com.nukkitx.protocol.bedrock.v544.Bedrock_v544;
 import com.nukkitx.protocol.bedrock.v545.Bedrock_v545;
 import com.nukkitx.protocol.bedrock.v554.Bedrock_v554;
diff --git a/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java b/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java
index edcbeefa7..887f42a8e 100644
--- a/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java
+++ b/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java
@@ -123,6 +123,19 @@ public class DimensionUtils {
         stopSoundPacket.setSoundName("");
         session.sendUpstreamPacket(stopSoundPacket);
 
+        // Kind of silly but Bedrock 1.19.50 requires an acknowledgement after the
+        // initial chunks are sent, prior to the client acknowledgement
+        if (GameProtocol.supports1_19_50(session)) {
+            // Note: send this before chunks are sent. Fixed https://github.com/GeyserMC/Geyser/issues/3421
+            PlayerActionPacket ackPacket = new PlayerActionPacket();
+            ackPacket.setRuntimeEntityId(player.getGeyserId());
+            ackPacket.setAction(PlayerActionType.DIMENSION_CHANGE_SUCCESS);
+            ackPacket.setBlockPosition(Vector3i.ZERO);
+            ackPacket.setResultPosition(Vector3i.ZERO);
+            ackPacket.setFace(0);
+            session.sendUpstreamPacket(ackPacket);
+        }
+
         // TODO - fix this hack of a fix by sending the final dimension switching logic after sections have been sent.
         // The client wants sections sent to it before it can successfully respawn.
         ChunkUtils.sendEmptyChunks(session, player.getPosition().toInt(), 3, true);
@@ -137,18 +150,6 @@ public class DimensionUtils {
                 session.removeFog("minecraft:fog_hell");
             }
         }
-
-        // Kind of silly but Bedrock 1.19.50 requires an acknowledgement after the
-        // initial chunks are sent, prior to the client acknowledgement
-        if (GameProtocol.supports1_19_50(session)) {
-            PlayerActionPacket ackPacket = new PlayerActionPacket();
-            ackPacket.setRuntimeEntityId(player.getGeyserId());
-            ackPacket.setAction(PlayerActionType.DIMENSION_CHANGE_SUCCESS);
-            ackPacket.setBlockPosition(Vector3i.ZERO);
-            ackPacket.setResultPosition(Vector3i.ZERO);
-            ackPacket.setFace(0);
-            session.sendUpstreamPacket(ackPacket);
-        }
     }
 
     public static void setBedrockDimension(GeyserSession session, String javaDimension) {