diff --git a/api.lua b/api.lua
index d27d878..bdc5945 100644
--- a/api.lua
+++ b/api.lua
@@ -32,14 +32,7 @@ XEnchanting = {
         ['default:sword_bronze'] = 22,
         ['default:sword_steel'] = 14,
         ['default:sword_mese'] = 15,
-        ['default:sword_diamond'] = 10,
-        -- hoes
-        ['farming:hoe_wood'] = 15,
-        ['farming:hoe_stone'] = 5,
-        ['farming:hoe_steel'] = 14,
-        ['farming:hoe_bronze'] = 22,
-        ['farming:hoe_mese'] = 15,
-        ['farming:hoe_diamond'] = 10,
+        ['default:sword_diamond'] = 10
     },
     roman_numbers = {
         [1] = 'I',
@@ -343,14 +336,14 @@ function XEnchanting.get_enchanted_tool_capabilities(self, tool_def, enchantment
     }
 end
 
-function XEnchanting.set_enchanted_tool(self, itemstack, level, player_name)
+function XEnchanting.set_enchanted_tool(self, pos, itemstack, level, player_name)
     local data = self.form_context[player_name].data
-    local pos = self.form_context[player_name].pos
     local capabilities = data.slots[level].tool_cap_data.tool_capabilities
     local description = data.slots[level].tool_cap_data.enchantments_desc
     local final_enchantments = data.slots[level].final_enchantments
     local inv = minetest.get_meta(pos):get_inventory()
     local tool_def = minetest.registered_tools[itemstack:get_name()]
+    local node_meta = minetest.get_meta(pos)
 
     if not tool_def then
         return
@@ -374,7 +367,7 @@ function XEnchanting.set_enchanted_tool(self, itemstack, level, player_name)
     self.randomseed = tonumber(tostring(os.time()):reverse():sub(1, 9)) --[[@as number]]
 
     local formspec = self:get_formspec(pos, player_name)
-    minetest.show_formspec(player_name, 'x_enchanting:table', formspec)
+    node_meta:set_string('formspec', formspec)
 
     minetest.sound_play('x_enchanting_enchant', {
         gain = 0.3,
diff --git a/table.lua b/table.lua
index a56d56c..9c8dd48 100644
--- a/table.lua
+++ b/table.lua
@@ -70,6 +70,9 @@ minetest.register_node('x_enchanting:table', {
 
         meta:set_string('owner', player_name)
         meta:set_string('infotext', S('Enchanting Table') .. ' (' .. S('owned by') .. ' ' .. player_name .. ')')
+
+        local formspec = XEnchanting:get_formspec(pos, player_name)
+        meta:set_string('formspec', formspec)
     end,
     ---@param pos Vector
     ---@param node NodeDef
@@ -77,6 +80,7 @@ minetest.register_node('x_enchanting:table', {
     ---@param itemstack ItemStack
     ---@param pointed_thing? PointedThingDef
     on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
+        local meta = minetest.get_meta(pos)
         local p_name = clicker:get_player_name()
 
         if minetest.is_protected(pos, p_name) then
@@ -103,11 +107,11 @@ minetest.register_node('x_enchanting:table', {
             local data = XEnchanting:get_enchantment_data(#bookshelfs, minetest.registered_tools[item_stack:get_name()])
             local formspec = XEnchanting:get_formspec(pos, p_name, data)
 
-            minetest.show_formspec(p_name, 'x_enchanting:table', formspec)
+            meta:set_string('formspec', formspec)
         else
             local formspec = XEnchanting:get_formspec(pos, p_name)
 
-            minetest.show_formspec(p_name, 'x_enchanting:table', formspec)
+            meta:set_string('formspec', formspec)
         end
 
         return itemstack
@@ -326,8 +330,9 @@ minetest.register_node('x_enchanting:table', {
     ---@param stack ItemStack
     ---@param player ObjectRef
     on_metadata_inventory_put = function(pos, listname, index, stack, player)
+        local meta = minetest.get_meta(pos)
         local p_name = player:get_player_name()
-        local inv = minetest.get_meta(pos):get_inventory()
+        local inv = meta:get_inventory()
 
         if not inv:is_empty('item') then
             -- bookshelfs
@@ -341,11 +346,11 @@ minetest.register_node('x_enchanting:table', {
             local data = XEnchanting:get_enchantment_data(#bookshelfs, minetest.registered_tools[item_stack:get_name()])
             local formspec = XEnchanting:get_formspec(pos, p_name, data)
 
-            minetest.show_formspec(p_name, 'x_enchanting:table', formspec)
+            meta:set_string('formspec', formspec)
         else
             local formspec = XEnchanting:get_formspec(pos, p_name)
 
-            minetest.show_formspec(p_name, 'x_enchanting:table', formspec)
+            meta:set_string('formspec', formspec)
         end
     end,
     ---@param pos Vector
@@ -354,8 +359,9 @@ minetest.register_node('x_enchanting:table', {
     ---@param stack ItemStack
     ---@param player ObjectRef
     on_metadata_inventory_take = function(pos, listname, index, stack, player)
+        local meta = minetest.get_meta(pos)
         local p_name = player:get_player_name()
-        local inv = minetest.get_meta(pos):get_inventory()
+        local inv = meta:get_inventory()
 
         if not inv:is_empty('item') then
             -- bookshelfs
@@ -369,70 +375,70 @@ minetest.register_node('x_enchanting:table', {
             local data = XEnchanting:get_enchantment_data(#bookshelfs, minetest.registered_tools[item_stack:get_name()])
             local formspec = XEnchanting:get_formspec(pos, p_name, data)
 
-            minetest.show_formspec(p_name, 'x_enchanting:table', formspec)
+            meta:set_string('formspec', formspec)
         else
             local formspec = XEnchanting:get_formspec(pos, p_name)
 
-            minetest.show_formspec(p_name, 'x_enchanting:table', formspec)
+            meta:set_string('formspec', formspec)
         end
+    end,
+    -- form receive fields
+    ---@param pos Vector
+    ---@param formname string
+    ---@param fields table
+    ---@param sender ObjectRef
+    on_receive_fields = function(pos, formname, fields, sender)
+        local p_name = sender:get_player_name()
+
+        if fields.quit then
+            XEnchanting.form_context[p_name] = nil
+            return
+        end
+
+        local selected_slot
+
+        if fields.slot_1 and fields.slot_1 ~= '' then
+            selected_slot = 1
+        elseif fields.slot_2 and fields.slot_2 ~= '' then
+            selected_slot = 2
+        elseif fields.slot_3 and fields.slot_3 ~= '' then
+            selected_slot = 3
+        end
+
+        if not XEnchanting.form_context[p_name] or not selected_slot then
+            return
+        end
+
+        local inv = minetest.get_meta(pos):get_inventory()
+
+        if inv:is_empty('trade') or inv:is_empty('item') then
+            return
+        end
+
+        local trade_stack = inv:get_stack('trade', 1)
+        local data = XEnchanting.form_context[p_name].data
+
+        if trade_stack:get_count() < selected_slot or not data then
+            return
+        end
+
+        local item_stack = inv:get_stack('item', 1)
+        local is_enchanted = item_stack:get_meta():get_int('is_enchanted')
+
+        if is_enchanted == 1 then
+            return
+        end
+
+        -- Enchant item
+        XEnchanting:set_enchanted_tool(
+            pos,
+            item_stack,
+            selected_slot,
+            p_name
+        )
     end
 })
 
--- form receive fields
----@param player ObjectRef
----@param formname string
----@param fields table
-minetest.register_on_player_receive_fields(function(player, formname, fields)
-    local p_name = player:get_player_name()
-
-    if formname ~= 'x_enchanting:table' or fields.quit then
-        XEnchanting.form_context[p_name] = nil
-        return
-    end
-
-    local selected_slot
-
-    if fields.slot_1 and fields.slot_1 ~= '' then
-        selected_slot = 1
-    elseif fields.slot_2 and fields.slot_2 ~= '' then
-        selected_slot = 2
-    elseif fields.slot_3 and fields.slot_3 ~= '' then
-        selected_slot = 3
-    end
-
-    if not XEnchanting.form_context[p_name] or not selected_slot then
-        return
-    end
-
-    local pos = XEnchanting.form_context[p_name].pos
-    local inv = minetest.get_meta(pos):get_inventory()
-
-    if inv:is_empty('trade') or inv:is_empty('item') then
-        return
-    end
-
-    local trade_stack = inv:get_stack('trade', 1)
-    local data = XEnchanting.form_context[p_name].data
-
-    if trade_stack:get_count() < selected_slot or not data then
-        return
-    end
-
-    local item_stack = inv:get_stack('item', 1)
-    local is_enchanted = item_stack:get_meta():get_int('is_enchanted')
-
-    if is_enchanted == 1 then
-        return
-    end
-
-    -- Enchant item
-    XEnchanting:set_enchanted_tool(
-        item_stack,
-        selected_slot,
-        p_name
-    )
-end)
-
 ----
 --- Entity (Scroll)
 ----
@@ -530,9 +536,21 @@ minetest.register_entity('x_enchanting:table_scroll', {
             if self._player and self._scroll_closed then
                 self._scroll_closed = false
                 self.object:set_animation(unpack(XEnchanting.scroll_animations.scroll_open))
+
+                minetest.sound_play('x_enchanting_scroll', {
+                    gain = 0.3,
+                    pos = pos,
+                    max_hear_distance = 10
+                }, true)
             elseif not self._player and not self._scroll_closed then
                 self._scroll_closed = true
                 self.object:set_animation(unpack(XEnchanting.scroll_animations.scroll_close))
+
+                minetest.sound_play('x_enchanting_scroll', {
+                    gain = 0.3,
+                    pos = pos,
+                    max_hear_distance = 10
+                }, true)
             end
         end
 
diff --git a/types/xenchanting.type.lua b/types/xenchanting.type.lua
index 994b28f..0201bf6 100644
--- a/types/xenchanting.type.lua
+++ b/types/xenchanting.type.lua
@@ -8,7 +8,7 @@
 ---@field has_tool_group fun(self: XEnchanting, name: string): string | boolean Check if tool has one of the known tool groups, returns `false` otherwise.
 ---@field set_tool_enchantability fun(self: XEnchanting, tool_def: ItemDef): nil Sets `enchantibility` group and values from base table (`XEnchanting.tools_enchantability`) to all registered tools (atching known group names). If tool has already `enchantibility` group defined it will take the defined value insted.
 ---@field get_enchanted_tool_capabilities fun(self: XEnchanting, tool_def: ItemDef, enchantments: Enchantments[]): GetEnchantedToolCapabilitiesReturn Applies enchantments to item tool capabilities.
----@field set_enchanted_tool fun(self: XEnchanting, itemstack: ItemStack, level: number, player_name: string): nil Set choosen enchantment and its modified tool capabilities to itemstack and `item` inventory. This will also get new `randomseed`.
+---@field set_enchanted_tool fun(self: XEnchanting, pos: Vector, itemstack: ItemStack, level: number, player_name: string): nil Set choosen enchantment and its modified tool capabilities to itemstack and `item` inventory. This will also get new `randomseed`.
 ---@field get_enchantment_data fun(self: XEnchanting, nr_of_bookshelfs: number, tool_def: ItemDef): EnchantmentData Algoritm to get aplicable random enchantments.
 ---@field get_formspec fun(self: XEnchanting, pos: Vector, player_name: string, data?: EnchantmentData): string Builds and returns `formspec` string