diff --git a/game/modules/example/class/Game.lua b/game/modules/example/class/Game.lua
index bc3a05b2a121b5754c3f40158a4e7e1d0877f108..3b307a90460a95ded31886ed6ef764bfea6551b7 100644
--- a/game/modules/example/class/Game.lua
+++ b/game/modules/example/class/Game.lua
@@ -116,6 +116,8 @@ function _M:onResolutionChange()
 	self:setupDisplayMode()
 	self.flash:resize(0, 0, self.w, 20)
 	self.logdisplay:resize(0, self.h * 0.8, self.w * 0.5, self.h * 0.2)
+	-- Reset mouse bindings to account for new size
+	self:setupMouse(reset)
 end
 
 function _M:setupDisplayMode()
@@ -450,21 +452,42 @@ function _M:setupCommands()
 	self.key:setCurrent()
 end
 
-function _M:setupMouse()
+function _M:setupMouse(reset)
 	-- Those 2 locals will be "absorbed" into the mosue event handler function, this is a closure
 	local derivx, derivy = 0, 0
+	local moving_around = false
 
+	if reset then self.mouse:reset() end
 	self.mouse:registerZone(Map.display_x, Map.display_y, Map.viewport.width, Map.viewport.height, function(button, mx, my, xrel, yrel)
 		-- Move tooltip
 		self.tooltip_x, self.tooltip_y = mx, my
 		local tmx, tmy = self.level.map:getMouseTile(mx, my)
 
-		-- Target stuff
-		if button == "right" then
-			self.player:mouseMove(tmx, tmy)
+		if self.key == self.targetmode_key then
+			-- Target with mouse
+			if button == "none" and xrel and yrel then
+				self.target:setSpot(tmx, tmy)
+			-- Cancel target
+			elseif button ~= "left" and not xrel and not yrel then
+				self:targetMode(false, false)
+				self.tooltip_x, self.tooltip_y = nil, nil
+			-- Accept target
+			elseif not xrel and not yrel then
+				self.target.target.entity = nil
+				self.target.target.x = nil
+				self.target.target.y = nil
+				self:targetMode(false, false)
+				self.tooltip_x, self.tooltip_y = nil, nil
+			end
+			return
+		end
+
+		-- Move
+		if button == "left" and not core.key.modState("shift") and not moving_around and not xrel and not yrel then
+			if self.key == self.normal_key then self.player:mouseMove(tmx, tmy) end
 
 		-- Move map around
-		elseif button == "left" and xrel and yrel then
+		elseif button == "left" and xrel and yrel and core.key.modState("shift") then
 			derivx = derivx + xrel
 			derivy = derivy + yrel
 			game.level.map.changed = true
@@ -483,7 +506,19 @@ function _M:setupMouse()
 				derivy = derivy + game.level.map.tile_h
 			end
 			game.level.map._map:setScroll(game.level.map.mx, game.level.map.my)
+			moving_around = true
+		elseif button ~= "none" and not xrel and not yrel then
+			self.key:receiveKey(
+				button,
+				core.key.modState("ctrl") and true or false,
+				core.key.modState("shift") and true or false,
+				core.key.modState("alt") and true or false,
+				core.key.modState("meta") and true or false,
+				nil, false, true
+			)
 		end
+
+		if not xrel and not yrel then moving_around = false end
 	end)
 	-- Scroll message log
 	self.mouse:registerZone(self.logdisplay.display_x, self.logdisplay.display_y, self.w, self.h, function(button)
diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 6adb0b10acc56d25f5ae2678099e0be5c14534ba..81ca67b48395c4857f8c6a4000d50f09eccf5fc2 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -432,15 +432,6 @@ function _M:display()
 			self.level.map.display_y + self.level.map.viewport.height - znsy
 		)
 
-		-- Display a tooltip if available
-		if self.tooltip_x then self.tooltip:displayAtMap(self.level.map:getMouseTile(self.tooltip_x , self.tooltip_y)) end
-
-		-- Move target around
-		if self.old_tmx ~= tmx or self.old_tmy ~= tmy then
-			self.target.target.x, self.target.target.y = tmx, tmy
-		end
-		self.old_tmx, self.old_tmy = tmx, tmy
-
 		-- Minimap display
 		self.level.map:minimapDisplay(0, 20, util.bound(self.player.x - 25, 0, self.level.map.w - 50), util.bound(self.player.y - 25, 0, self.level.map.h - 50), 50, 50, 1)
 	end
@@ -456,6 +447,18 @@ function _M:display()
 	end
 	if self.player then self.player.changed = false end
 
+	-- Tooltip is displayed over all else
+	if self.level and self.level.map and self.level.map.finished then
+		-- Display a tooltip if available
+		if self.tooltip_x then self.tooltip:displayAtMap(self.level.map:getMouseTile(self.tooltip_x , self.tooltip_y)) end
+
+		-- Move target around
+		if self.old_tmx ~= tmx or self.old_tmy ~= tmy then
+			self.target.target.x, self.target.target.y = tmx, tmy
+		end
+		self.old_tmx, self.old_tmy = tmx, tmy
+	end
+
 	engine.GameTurnBased.display(self)
 end