diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua
index ecaf6facc9ba6dae9e7674c9652ddfc3d790e98a..09fa5b32730c5accfce176fdc3bbb9b9093eb98a 100644
--- a/game/modules/tome/class/Player.lua
+++ b/game/modules/tome/class/Player.lua
@@ -633,7 +633,7 @@ function _M:showEquipInven(title, filter, action)
 	end)
 end
 
-function _M:doDrop(inven, item)
+function _M:doDrop(inven, item, on_done)
 	if game.zone.wilderness then
 		Dialog:yesnoLongPopup("Warning", "You cannot drop items on the world map.\nIf you drop it, it will be lost forever.", 300, function(ret)
 			-- The test is reversed because the buttons are reversed, to prevent mistakes
@@ -642,6 +642,7 @@ function _M:doDrop(inven, item)
 				game.logPlayer(self, "You destroy %s.", o:getName{do_colour=true, do_count=true})
 				self:sortInven()
 				self:useEnergy()
+				if on_done then on_done() end
 			end
 		end, "Cancel", "Destroy")
 		return
@@ -650,6 +651,7 @@ function _M:doDrop(inven, item)
 	self:sortInven(inven)
 	self:useEnergy()
 	self.changed = true
+	if on_done then on_done() end
 end
 
 function _M:doWear(inven, item, o)
diff --git a/game/modules/tome/dialogs/UseItemDialog.lua b/game/modules/tome/dialogs/UseItemDialog.lua
index c35a558587c9f1e08b186b9d63f8732f615cca99..70aeda86c1e472ce622212f1fcde61d2429b0e8c 100644
--- a/game/modules/tome/dialogs/UseItemDialog.lua
+++ b/game/modules/tome/dialogs/UseItemDialog.lua
@@ -60,13 +60,18 @@ function _M:use(item)
 	local act = item.action
 
 	local stop = false
-	if act == "use" then self.actor:playerUseItem(self.object, self.item, self.inven, self.onuse) stop = true
-	elseif act == "drop" then self.actor:doDrop(self.inven, self.item)
-	elseif act == "wear" then self.actor:doWear(self.inven, self.item, self.object)
-	elseif act == "takeoff" then self.actor:doTakeoff(self.inven, self.item, self.object)
+	if act == "use" then
+		self.actor:playerUseItem(self.object, self.item, self.inven, self.onuse) stop = true
+		self.onuse(self.inven, self.item, self.object, stop)
+	elseif act == "drop" then
+		self.actor:doDrop(self.inven, self.item, function() self.onuse(self.inven, self.item, self.object, stop) end)
+	elseif act == "wear" then
+		self.actor:doWear(self.inven, self.item, self.object)
+		self.onuse(self.inven, self.item, self.object, stop)
+	elseif act == "takeoff" then
+		self.actor:doTakeoff(self.inven, self.item, self.object)
+		self.onuse(self.inven, self.item, self.object, stop)
 	end
-
-	self.onuse(self.inven, self.item, self.object, stop)
 end
 
 function _M:generateList()