diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInventoryTransactionTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInventoryTransactionTranslator.java
index 27dd19ca4..06343110e 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInventoryTransactionTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInventoryTransactionTranslator.java
@@ -131,22 +131,18 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve
                     InventoryAction anvilResult = null;
                     InventoryAction anvilInput = null;
                     for (InventoryAction action : packet.getActions()) {
-                        if (action.getSource().getContainerId() == ContainerId.ANVIL_RESULT) {
+                        if (action.getSource().getContainerId() == ContainerId.ANVIL_MATERIAL) {
+                            //useless packet
+                            return;
+                        } else if (action.getSource().getContainerId() == ContainerId.ANVIL_RESULT) {
                             anvilResult = action;
-                        } else if (action.getSource().getContainerId() == ContainerId.CONTAINER_INPUT) {
+                        } else if (translator.bedrockSlotToJava(action) == 0) {
                             anvilInput = action;
                         }
                     }
                     ItemData itemName = null;
                     if (anvilResult != null) {
                         itemName = anvilResult.getFromItem();
-                        actions = new ArrayList<>(2);
-                        for (InventoryAction action : packet.getActions()) { //packet sent by client when grabbing anvil output needs useless actions stripped
-                            if (!(action.getSource().getContainerId() == ContainerId.CONTAINER_INPUT ||
-                                    action.getSource().getContainerId() == ContainerId.ANVIL_MATERIAL)) {
-                                actions.add(action);
-                            }
-                        }
                     } else if (anvilInput != null) {
                         itemName = anvilInput.getToItem();
                     }
@@ -161,6 +157,11 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve
                         ClientRenameItemPacket renameItemPacket = new ClientRenameItemPacket(rename);
                         session.getDownstream().getSession().send(renameItemPacket);
                     }
+                    if (anvilResult != null) {
+                        //client will send another packet to grab anvil output
+                        //this packet was only used to send rename packet
+                        return;
+                    }
                 }
 
                 if (actions.size() == 2) {
@@ -494,7 +495,7 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve
             ItemStack clickedItem = inventory.getItem(action.slot);
             short actionId = (short) inventory.getTransactionId().getAndIncrement();
             boolean craftingOutput = (inventory.getId() == 0 || inventory.getWindowType() == WindowType.CRAFTING) && action.slot == 0;
-            if (craftingOutput)
+            if (craftingOutput || translator.isOutputSlot(action.slot))
                 refresh = true;
             ClientWindowActionPacket clickPacket = new ClientWindowActionPacket(inventory.getId(),
                     actionId, action.slot, !planIter.hasNext() && refresh ? refreshItem : fixStack(clickedItem),
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/AnvilInventoryTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/AnvilInventoryTranslator.java
index 53750130d..ee5e63899 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/AnvilInventoryTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/AnvilInventoryTranslator.java
@@ -28,6 +28,14 @@ package org.geysermc.connector.network.translators.inventory;
 import com.nukkitx.protocol.bedrock.data.ContainerId;
 import com.nukkitx.protocol.bedrock.data.ContainerType;
 import com.nukkitx.protocol.bedrock.data.InventoryAction;
+import com.nukkitx.protocol.bedrock.data.ItemData;
+import com.nukkitx.protocol.bedrock.packet.InventoryContentPacket;
+import com.nukkitx.protocol.bedrock.packet.InventorySlotPacket;
+import org.geysermc.connector.inventory.Inventory;
+import org.geysermc.connector.network.session.GeyserSession;
+import org.geysermc.connector.network.translators.TranslatorsInit;
+
+import java.util.Arrays;
 
 public class AnvilInventoryTranslator extends BlockInventoryTranslator {
     public AnvilInventoryTranslator() {
@@ -45,12 +53,18 @@ public class AnvilInventoryTranslator extends BlockInventoryTranslator {
                 return slotnum + this.size + 27;
             }
         } else {
-            if (action.getSource().getContainerId() == ContainerId.ANVIL_RESULT) {
-                return 2;
-            } else {
-                return slotnum;
+            if (action.getSource().getContainerId() == ContainerId.CURSOR) {
+                switch (slotnum) {
+                    case 1:
+                        return 0;
+                    case 2:
+                        return 1;
+                    case 50:
+                        return 2;
+                }
             }
         }
+        return slotnum;
     }
 
     @Override