diff --git a/daemon/lua/kres.lua b/daemon/lua/kres.lua
index 412f62cd012983b531937f6f1fd69a3b3865aa3b..a39e3fe459c369cd0472a3cd78bc9d00021de9d1 100644
--- a/daemon/lua/kres.lua
+++ b/daemon/lua/kres.lua
@@ -727,6 +727,22 @@ ffi.metatype( kr_query_t, {
 local kr_request_t = ffi.typeof('struct kr_request')
 ffi.metatype( kr_request_t, {
 	__index = {
+		-- makes sense only when request is finished
+		all_from_cache = function(req)
+			assert(ffi.istype(kr_request_t, req))
+			local rplan = ffi.C.kr_resolve_plan(req)
+			if tonumber(rplan.pending.len) > 0 then
+				-- an unresolved query,
+				-- i.e. something is missing from the cache
+				return false
+			end
+			for idx=0, tonumber(rplan.resolved.len) - 1 do
+				if not rplan.resolved.at[idx].flags.CACHED then
+					return false
+				end
+			end
+			return true
+		end,
 		current = function(req)
 			assert(ffi.istype(kr_request_t, req))
 			if req.current_query == nil then return nil end
diff --git a/modules/policy/policy.lua b/modules/policy/policy.lua
index 90770514c6d99f7016d38d461cb8cb6b96334a47..19bbe6b637b67e131e0ae3fe970bdb72540ea59b 100644
--- a/modules/policy/policy.lua
+++ b/modules/policy/policy.lua
@@ -579,23 +579,9 @@ function policy.DEBUG_IF(test)
 	end
 end
 
-local function is_request_answered_from_cache(req)
-	local rplan = ffi.C.kr_resolve_plan(req)
-	if tonumber(rplan.pending.len) > 0 then
-		-- an unresolved query, i.e. something is missing from the cache
-		return false
-	end
-	for idx=0, tonumber(rplan.resolved.len) - 1 do
-		if not rplan.resolved.at[idx].flags.CACHED then
-			return false
-		end
-	end
-	return true
-end
-
 policy.DEBUG_CACHE_MISS = policy.DEBUG_IF(
 	function(req)
-		return not is_request_answered_from_cache(req)
+		return not req:all_from_cache()
 	end
 )