diff --git a/policy_manager/policy_manager-inl.h b/policy_manager/policy_manager-inl.h
index f0d4937..f19df55 100644
--- a/policy_manager/policy_manager-inl.h
+++ b/policy_manager/policy_manager-inl.h
@@ -14,10 +14,15 @@
 
 namespace chromeos_policy_manager {
 
-template<typename T, typename R, typename... Args>
-EvalStatus PolicyManager::EvaluatePolicy(EvaluationContext* ec,
-                                         T policy_method, R* result,
-                                         Args... args) {
+template<typename R, typename... Args>
+EvalStatus PolicyManager::EvaluatePolicy(
+    EvaluationContext* ec,
+    EvalStatus (Policy::*policy_method)(EvaluationContext* ec,
+                                        State* state,
+                                        std::string* error,
+                                        R* result,
+                                        Args... args) const,
+    R* result, Args... args) {
   std::string error;
 
   // First try calling the actual policy.
@@ -38,11 +43,16 @@
   return status;
 }
 
-template<typename T, typename R, typename... Args>
+template<typename R, typename... Args>
 void PolicyManager::OnPolicyReadyToEvaluate(
     scoped_refptr<EvaluationContext> ec,
     base::Callback<void(EvalStatus status, const R& result)> callback,
-    T policy_method, Args... args) {
+    EvalStatus (Policy::*policy_method)(EvaluationContext* ec,
+                                        State* state,
+                                        std::string* error,
+                                        R* result,
+                                        Args... args) const,
+    Args... args) {
   R result;
   EvalStatus status = EvaluatePolicy(ec, policy_method, &result, args...);
 
@@ -53,7 +63,7 @@
   }
   // Re-schedule the policy request based on used variables.
   base::Closure closure = base::Bind(
-      &PolicyManager::OnPolicyReadyToEvaluate<T, R, Args...>,
+      &PolicyManager::OnPolicyReadyToEvaluate<R, Args...>,
       base::Unretained(this), ec, callback, policy_method, args...);
 
   if (!ec->RunOnValueChangeOrTimeout(closure)) {
@@ -67,23 +77,32 @@
   }
 }
 
-template<typename T, typename R, typename... Args>
-EvalStatus PolicyManager::PolicyRequest(T policy_method, R* result,
-                                        Args... args) {
+template<typename R, typename... Args>
+EvalStatus PolicyManager::PolicyRequest(
+    EvalStatus (Policy::*policy_method)(EvaluationContext* ec,
+                                        State* state,
+                                        std::string* error,
+                                        R* result,
+                                        Args... args) const,
+    R* result, Args... args) {
   scoped_refptr<EvaluationContext> ec(new EvaluationContext);
   // A PolicyRequest allways consists on a single evaluation on a new
   // EvaluationContext.
   return EvaluatePolicy(ec, policy_method, result, args...);
 }
 
-template<typename T, typename R, typename... Args>
+template<typename R, typename... Args>
 void PolicyManager::AsyncPolicyRequest(
     base::Callback<void(EvalStatus, const R& result)> callback,
-    T policy_method, Args... args) {
-
+    EvalStatus (Policy::*policy_method)(EvaluationContext* ec,
+                                        State* state,
+                                        std::string* error,
+                                        R* result,
+                                        Args... args) const,
+    Args... args) {
   scoped_refptr<EvaluationContext> ec = new EvaluationContext;
   base::Closure closure = base::Bind(
-      &PolicyManager::OnPolicyReadyToEvaluate<T, R, Args...>,
+      &PolicyManager::OnPolicyReadyToEvaluate<R, Args...>,
       base::Unretained(this), ec, callback, policy_method, args...);
   RunFromMainLoop(closure);
 }
diff --git a/policy_manager/policy_manager.h b/policy_manager/policy_manager.h
index 5b89bf2..d874e9c 100644
--- a/policy_manager/policy_manager.h
+++ b/policy_manager/policy_manager.h
@@ -41,8 +41,14 @@
   //
   // An example call to this method is:
   //   pm.PolicyRequest(&Policy::SomePolicyMethod, &bool_result, arg1, arg2);
-  template<typename T, typename R, typename... Args>
-  EvalStatus PolicyRequest(T policy_method, R* result, Args... args);
+  template<typename R, typename... Args>
+  EvalStatus PolicyRequest(
+      EvalStatus (Policy::*policy_method)(EvaluationContext* ec,
+                                          State* state,
+                                          std::string* error,
+                                          R* result,
+                                          Args... args) const,
+      R* result, Args... args);
 
   // Evaluates the given |policy_method| policy with the provided |args|
   // arguments and calls the |callback| callback with the result when done.
@@ -52,10 +58,15 @@
   // policy until another status is returned. If the policy implementation based
   // its return value solely on const variables, the callback will be called
   // with the EvalStatus::kAskMeAgainLater status.
-  template<typename T, typename R, typename... Args>
+  template<typename R, typename... Args>
   void AsyncPolicyRequest(
       base::Callback<void(EvalStatus, const R& result)> callback,
-      T policy_method, Args... args);
+      EvalStatus (Policy::*policy_method)(EvaluationContext* ec,
+                                          State* state,
+                                          std::string* error,
+                                          R* result,
+                                          Args... args) const,
+      Args... args);
 
  protected:
   // The PolicyManager receives ownership of the passed Policy instance.
@@ -73,10 +84,15 @@
   // EvaluatePolicy() evaluates the passed |policy_method| method on the current
   // policy with the given |args| arguments. If the method fails, the default
   // policy is used instead.
-  template<typename T, typename R, typename... Args>
-  EvalStatus EvaluatePolicy(EvaluationContext* ec,
-                            T policy_method, R* result,
-                            Args... args);
+  template<typename R, typename... Args>
+  EvalStatus EvaluatePolicy(
+      EvaluationContext* ec,
+      EvalStatus (Policy::*policy_method)(EvaluationContext* ec,
+                                          State* state,
+                                          std::string* error,
+                                          R* result,
+                                          Args... args) const,
+      R* result, Args... args);
 
   // OnPolicyReadyToEvaluate() is called by the main loop when the evaluation
   // of the given |policy_method| should be executed. If the evaluation finishes
@@ -84,11 +100,16 @@
   // returned by the policy. If the evaluation returns an
   // EvalStatus::kAskMeAgainLater state, the |callback| will NOT be called and
   // the evaluation will be re-scheduled to be called later.
-  template<typename T, typename R, typename... Args>
+  template<typename R, typename... Args>
   void OnPolicyReadyToEvaluate(
       scoped_refptr<EvaluationContext> ec,
       base::Callback<void(EvalStatus status, const R& result)> callback,
-      T policy_method, Args... args);
+      EvalStatus (Policy::*policy_method)(EvaluationContext* ec,
+                                          State* state,
+                                          std::string* error,
+                                          R* result,
+                                          Args... args) const,
+      Args... args);
 
   // The policy used by the PolicyManager. Note that since it is a const Policy,
   // policy implementations are not allowed to persist state on this class.
