diff --git a/game/engines/default/engine/interface/PlayerRest.lua b/game/engines/default/engine/interface/PlayerRest.lua
index 5740a5d69601dfc66880f0a22231bad6c9c57c4f..92c0e5e582373e6e47fd7dd4aa7446d67c1b4d7c 100644
--- a/game/engines/default/engine/interface/PlayerRest.lua
+++ b/game/engines/default/engine/interface/PlayerRest.lua
@@ -31,14 +31,23 @@ function _M:restInit(turns, what, past, on_end)
 		rest_turns = turns,
 		past = past,
 		on_end = on_end,
-		cnt = 1,
+		cnt = 0,
 		dialog = Dialog:simplePopup(what:capitalize().."...", "You are "..what..", press Enter to stop.", function()
 			self:restStop()
 		end),
 	}
 	self.resting.dialog.__showup = nil
-	self:useEnergy()
+
 	game.log(what:capitalize().." starts...")
+
+	local ret, msg = self:restCheck()
+	if ret and self.resting and self.resting.rest_turns and self.resting.cnt > self.resting.rest_turns then ret = false msg = nil end
+	if not ret then
+		self:restStop(msg)
+	else
+		self:useEnergy()
+		self.resting.cnt = self.resting.cnt + 1
+	end
 end
 
 --- Rest a turn
diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua
index 1221f22def0e093f3b9d4687c347c9eed3050bce..5774885ca720d36180739a5bad14e1376ac1e0a7 100644
--- a/game/modules/tome/class/Player.lua
+++ b/game/modules/tome/class/Player.lua
@@ -554,6 +554,8 @@ end
 
 local function spotHostiles(self)
 	local seen = {}
+	if not self.x then return seen end
+
 	-- Check for visible monsters, only see LOS actors, so telepathy wont prevent resting
 	core.fov.calc_circle(self.x, self.y, game.level.map.w, game.level.map.h, self.sight or 10, function(_, x, y) return game.level.map:opaque(x, y) end, function(_, x, y)
 		local actor = game.level.map(x, y, game.level.map.ACTOR)