diff --git a/policy_manager/chromeos_policy.cc b/policy_manager/chromeos_policy.cc
index 95578aa..cd10918 100644
--- a/policy_manager/chromeos_policy.cc
+++ b/policy_manager/chromeos_policy.cc
@@ -15,7 +15,7 @@
                                               bool* result) const {
   // TODO(deymo): Write this policy implementation with the actual policy.
   *result = true;
-  return EvalStatusSucceeded;
+  return EvalStatus::kSucceeded;
 }
 
 }  // namespace chromeos_policy_manager
diff --git a/policy_manager/default_policy.h b/policy_manager/default_policy.h
index 20f6668..f5fe89d 100644
--- a/policy_manager/default_policy.h
+++ b/policy_manager/default_policy.h
@@ -22,7 +22,7 @@
                                         std::string* error,
                                         bool* result) const {
     *result = true;
-    return EvalStatusSucceeded;
+    return EvalStatus::kSucceeded;
   }
 
  private:
diff --git a/policy_manager/policy.h b/policy_manager/policy.h
index 7554824..762b9a5 100644
--- a/policy_manager/policy.h
+++ b/policy_manager/policy.h
@@ -11,10 +11,10 @@
 namespace chromeos_policy_manager {
 
 // The three different results of a policy request.
-enum EvalStatus {
-  EvalStatusFailed,
-  EvalStatusSucceeded,
-  EvalStatusAskMeAgainLater,
+enum class EvalStatus {
+  kFailed,
+  kSucceeded,
+  kAskMeAgainLater,
 };
 
 // The Policy class is an interface to the ensemble of policy requests that the
@@ -31,8 +31,8 @@
   // first argument, a State instance, a returned error message, a returned
   // value and optionally followed by one or more arbitrary constant arguments.
   //
-  // When the implementation fails, the method returns EvalStatusFailed and sets
-  // the |error| string.
+  // When the implementation fails, the method returns EvalStatus::kFailed and
+  // sets the |error| string.
 
   // UpdateCheckAllowed returns whether it is allowed to request an update check
   // to Omaha.
diff --git a/policy_manager/policy_manager-inl.h b/policy_manager/policy_manager-inl.h
index e4b9666..798860f 100644
--- a/policy_manager/policy_manager-inl.h
+++ b/policy_manager/policy_manager-inl.h
@@ -20,13 +20,13 @@
   EvalStatus status = (policy_.get()->*policy_method)(&ec, state_.get(), &error,
                                                       result, args...);
 
-  if (status == EvalStatusFailed) {
+  if (status == EvalStatus::kFailed) {
     LOG(WARNING) << "PolicyRequest() failed with error: " << error;
     error.clear();
     status = (default_policy_.*policy_method)(&ec, state_.get(), &error,
                                               result, args...);
 
-    if (status == EvalStatusFailed) {
+    if (status == EvalStatus::kFailed) {
       LOG(WARNING) << "Request to DefaultPolicy also failed, passing error.";
     }
   }
diff --git a/policy_manager/policy_manager.h b/policy_manager/policy_manager.h
index d0be4e2..b84f493 100644
--- a/policy_manager/policy_manager.h
+++ b/policy_manager/policy_manager.h
@@ -30,10 +30,11 @@
   // |policy_method|.
   //
   // When the policy request succeeds, the |result| is set and the method
-  // returns EvalStatusSucceeded, otherwise, the |result| may not be set. Also,
-  // if the policy implementation should block, this method returns immediately
-  // with EvalStatusAskMeAgainLater. In case of failure EvalStatusFailed is
-  // returned and the |error| message is set, which must not be NULL.
+  // returns EvalStatus::kSucceeded, otherwise, the |result| may not be set.
+  // Also, if the policy implementation should block, this method returns
+  // immediately with EvalStatus::kAskMeAgainLater. In case of failure
+  // EvalStatus::kFailed is returned and the |error| message is set, which must
+  // not be NULL.
   //
   // An example call to this method is:
   //   pm.PolicyRequest(&Policy::SomePolicyMethod, &bool_result, arg1, arg2);
@@ -51,7 +52,7 @@
   scoped_ptr<const Policy> policy_;
 
   // A safe default value to the current policy. This policy is used whenever
-  // a policy implementation fails with EvalStatusFailed.
+  // a policy implementation fails with EvalStatus::kFailed.
   const DefaultPolicy default_policy_;
 
   // State Providers.
diff --git a/policy_manager/policy_manager_unittest.cc b/policy_manager/policy_manager_unittest.cc
index ba001c9..b9253d3 100644
--- a/policy_manager/policy_manager_unittest.cc
+++ b/policy_manager/policy_manager_unittest.cc
@@ -39,7 +39,7 @@
                                         string* error,
                                         bool* result) const {
     *error = "FailingPolicy failed.";
-    return EvalStatusFailed;
+    return EvalStatus::kFailed;
   }
 };
 
@@ -48,14 +48,14 @@
   virtual EvalStatus UpdateCheckAllowed(EvaluationContext* ec, State* state,
                                         string* error,
                                         bool* result) const {
-    return EvalStatusAskMeAgainLater;
+    return EvalStatus::kAskMeAgainLater;
   }
 };
 
 TEST_F(PmPolicyManagerTest, PolicyRequestCall) {
   bool result;
   EvalStatus status = pmut_.PolicyRequest(&Policy::UpdateCheckAllowed, &result);
-  EXPECT_EQ(status, EvalStatusSucceeded);
+  EXPECT_EQ(status, EvalStatus::kSucceeded);
 }
 
 TEST_F(PmPolicyManagerTest, PolicyRequestCallsPolicy) {
@@ -65,9 +65,9 @@
 
   // Tests that the method is called on the policy_ instance.
   EXPECT_CALL(*policy, UpdateCheckAllowed(_, _, _, _))
-      .WillOnce(Return(EvalStatusSucceeded));
+      .WillOnce(Return(EvalStatus::kSucceeded));
   EvalStatus status = pmut_.PolicyRequest(&Policy::UpdateCheckAllowed, &result);
-  EXPECT_EQ(status, EvalStatusSucceeded);
+  EXPECT_EQ(status, EvalStatus::kSucceeded);
 }
 
 TEST_F(PmPolicyManagerTest, PolicyRequestCallsDefaultOnError) {
@@ -77,7 +77,7 @@
   // which will set this as true.
   bool result = false;
   EvalStatus status = pmut_.PolicyRequest(&Policy::UpdateCheckAllowed, &result);
-  EXPECT_EQ(status, EvalStatusSucceeded);
+  EXPECT_EQ(status, EvalStatus::kSucceeded);
   EXPECT_TRUE(result);
 }
 
@@ -86,7 +86,7 @@
   bool result;
 
   EvalStatus status = pmut_.PolicyRequest(&Policy::UpdateCheckAllowed, &result);
-  EXPECT_EQ(status, EvalStatusAskMeAgainLater);
+  EXPECT_EQ(status, EvalStatus::kAskMeAgainLater);
 }
 
 }  // namespace chromeos_policy_manager
