diff --git a/game/engine/Store.lua b/game/engine/Store.lua
index 1f9eab62a2d9ad263fa652b7cdf355d3c21e2cc9..b4fa75a1f562eada1688a06341e1da3bdea50e17 100644
--- a/game/engine/Store.lua
+++ b/game/engine/Store.lua
@@ -19,6 +19,7 @@
 
 require "engine.class"
 local Entity = require "engine.Entity"
+local Dialog = require "engine.Dialog"
 local Inventory = require "engine.interface.ActorInventory"
 local ShowStore = require "engine.dialogs.ShowStore"
 local GetQuantity = require "engine.dialogs.GetQuantity"
@@ -75,7 +76,7 @@ function _M:interact(who)
 	local d; d = ShowStore.new("Store: "..self.name, store, inven, nil, nil, function(what, o, item)
 		if what == "buy" then
 			if o:getNumber() > 1 then
-				local q = GetQuantity.new(nil, nil, function(qty) self:doBuy(who, o, item, qty) print(d) d:updateStore() end)
+				local q = GetQuantity.new(nil, nil, function(qty) self:doBuy(who, o, item, qty, d) end)
 				q.qty = o:getNumber()
 				game:registerDialog(q)
 			else
@@ -84,7 +85,7 @@ function _M:interact(who)
 		else
 			if o:getNumber() > 1 then
 				local q
-				q = GetQuantity.new(nil, nil, function(qty) self:doSell(who, o, item, qty) d:updateStore() end)
+				q = GetQuantity.new(nil, nil, function(qty) self:doSell(who, o, item, qty, d) end)
 				q.qty = o:getNumber()
 				game:registerDialog(q)
 			else
@@ -97,37 +98,43 @@ function _M:interact(who)
 	game:registerDialog(d)
 end
 
-function _M:doBuy(who, o, item, nb)
+function _M:doBuy(who, o, item, nb, store_dialog)
 	local max_nb = o:getNumber()
 	nb = math.min(nb, max_nb)
 	nb = self:onBuy(who, o, item, nb)
 	if nb then
-		local store, inven = self:getInven("INVEN"), who:getInven("INVEN")
-		for i = 1, nb do
-			local o = self:removeObject(store, item)
-			who:addObject(inven, o)
-		end
-		self:sortInven(store)
-		who:sortInven(inven)
-		self.changed = true
-		who.changed = true
+		Dialog:yesnoPopup("Buy", ("Buy %d %s"):format(nb, o:getName{do_color=true, no_count=true}), function(ok) if ok then
+			local store, inven = self:getInven("INVEN"), who:getInven("INVEN")
+			for i = 1, nb do
+				local o = self:removeObject(store, item)
+				who:addObject(inven, o)
+			end
+			self:sortInven(store)
+			who:sortInven(inven)
+			self.changed = true
+			who.changed = true
+			if store_dialog then store_dialog:updateStore() end
+		end end)
 	end
 end
 
-function _M:doSell(who, o, item, nb)
+function _M:doSell(who, o, item, nb, store_dialog)
 	local max_nb = o:getNumber()
 	nb = math.min(nb, max_nb)
 	nb = self:onSell(who, o, item, nb)
 	if nb then
-		local store, inven = self:getInven("INVEN"), who:getInven("INVEN")
-		for i = 1, nb do
-			local o = who:removeObject(inven, item)
-			self:addObject(store, o)
-		end
-		self:sortInven(store)
-		who:sortInven(inven)
-		self.changed = true
-		who.changed = true
+		Dialog:yesnoPopup("Sell", ("Sell %d %s"):format(nb, o:getName{do_color=true, no_count=true}), function(ok) if ok then
+			local store, inven = self:getInven("INVEN"), who:getInven("INVEN")
+			for i = 1, nb do
+				local o = who:removeObject(inven, item)
+				self:addObject(store, o)
+			end
+			self:sortInven(store)
+			who:sortInven(inven)
+			self.changed = true
+			who.changed = true
+			if store_dialog then store_dialog:updateStore() end
+		end end)
 	end
 end