diff --git a/SConstruct b/SConstruct
index 7c0b2a8..96f4bfb 100644
--- a/SConstruct
+++ b/SConstruct
@@ -238,9 +238,9 @@
                    policy_manager/policy_manager.cc
                    policy_manager/real_random_provider.cc
                    policy_manager/real_shill_provider.cc
-                   policy_manager/real_state.cc
                    policy_manager/real_system_provider.cc
                    policy_manager/real_time_provider.cc
+                   policy_manager/state_factory.cc
                    postinstall_runner_action.cc
                    prefs.cc
                    proxy_resolver.cc
@@ -298,7 +298,6 @@
                             policy_manager/policy_manager_unittest.cc
                             policy_manager/real_random_provider_unittest.cc
                             policy_manager/real_shill_provider_unittest.cc
-                            policy_manager/real_state_unittest.cc
                             policy_manager/real_system_provider_unittest.cc
                             policy_manager/real_time_provider_unittest.cc
                             policy_manager/variable_unittest.cc
diff --git a/mock_system_state.cc b/mock_system_state.cc
index ddd294e..fa6622b 100644
--- a/mock_system_state.cc
+++ b/mock_system_state.cc
@@ -3,8 +3,11 @@
 // found in the LICENSE file.
 
 #include "update_engine/mock_system_state.h"
+#include "update_engine/policy_manager/fake_state.h"
 #include "update_engine/update_attempter_mock.h"
 
+using chromeos_policy_manager::FakeState;
+
 namespace chromeos_update_engine {
 
 // Mock the SystemStateInterface so that we could lie that
@@ -16,12 +19,14 @@
     prefs_(&mock_prefs_),
     powerwash_safe_prefs_(&mock_powerwash_safe_prefs_),
     p2p_manager_(&mock_p2p_manager_),
-    payload_state_(&mock_payload_state_) {
+    payload_state_(&mock_payload_state_),
+    policy_manager_(&fake_policy_manager_) {
   request_params_ = &default_request_params_;
   mock_payload_state_.Initialize(this);
   mock_gpio_handler_ = new testing::NiceMock<MockGpioHandler>();
   mock_update_attempter_ = new testing::NiceMock<UpdateAttempterMock>(
       this, &dbus_);
+  fake_policy_manager_.Init(FakeState::Construct());
 }
 
 MockSystemState::~MockSystemState() {
@@ -32,4 +37,4 @@
   return mock_update_attempter_;
 }
 
-} // namespeace chromeos_update_engine
+}  // namespace chromeos_update_engine
diff --git a/mock_system_state.h b/mock_system_state.h
index c24528e..16cf701 100644
--- a/mock_system_state.h
+++ b/mock_system_state.h
@@ -10,12 +10,13 @@
 #include <metrics/metrics_library_mock.h>
 #include <policy/mock_device_policy.h>
 
+#include "update_engine/clock.h"
+#include "update_engine/fake_hardware.h"
 #include "update_engine/mock_dbus_wrapper.h"
 #include "update_engine/mock_gpio_handler.h"
 #include "update_engine/mock_p2p_manager.h"
 #include "update_engine/mock_payload_state.h"
-#include "update_engine/clock.h"
-#include "update_engine/fake_hardware.h"
+#include "update_engine/policy_manager/fake_policy_manager.h"
 #include "update_engine/prefs_mock.h"
 #include "update_engine/system_state.h"
 
@@ -79,6 +80,10 @@
     return p2p_manager_;
   }
 
+  inline virtual chromeos_policy_manager::PolicyManager* policy_manager() {
+    return policy_manager_;
+  }
+
   // MockSystemState-specific public method.
   inline void set_connection_manager(ConnectionManager* connection_manager) {
     connection_manager_ = connection_manager;
@@ -128,6 +133,11 @@
     p2p_manager_ = p2p_manager;
   }
 
+  inline void set_policy_manager(
+      chromeos_policy_manager::PolicyManager *policy_manager) {
+    policy_manager_ = policy_manager;
+  }
+
   inline void set_payload_state(PayloadStateInterface *payload_state) {
     payload_state_ = payload_state;
   }
@@ -146,6 +156,7 @@
   // These are the other object we own.
   Clock default_clock_;
   FakeHardware default_hardware_;
+  chromeos_policy_manager::FakePolicyManager fake_policy_manager_;
   OmahaRequestParams default_request_params_;
 
   // These are pointers to objects which caller can override.
@@ -155,10 +166,11 @@
   PrefsInterface* powerwash_safe_prefs_;
   ConnectionManager* connection_manager_;
   OmahaRequestParams* request_params_;
-  P2PManager *p2p_manager_;
-  PayloadStateInterface *payload_state_;
+  P2PManager* p2p_manager_;
+  PayloadStateInterface* payload_state_;
+  chromeos_policy_manager::PolicyManager* policy_manager_;
 };
 
-} // namespeace chromeos_update_engine
+}  // namespace chromeos_update_engine
 
 #endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_MOCK_SYSTEM_STATE_H_
diff --git a/policy_manager/fake_policy_manager.h b/policy_manager/fake_policy_manager.h
new file mode 100644
index 0000000..6b126cb
--- /dev/null
+++ b/policy_manager/fake_policy_manager.h
@@ -0,0 +1,27 @@
+// Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_FAKE_POLICY_MANAGER_H_
+#define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_FAKE_POLICY_MANAGER_H_
+
+#include "update_engine/policy_manager/policy_manager.h"
+
+#include "update_engine/policy_manager/default_policy.h"
+
+namespace chromeos_policy_manager {
+
+class FakePolicyManager : public PolicyManager {
+ public:
+  FakePolicyManager() {
+    // The FakePolicyManager uses a DefaultPolicy.
+    set_policy(new DefaultPolicy());
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(FakePolicyManager);
+};
+
+}  // namespace chromeos_policy_manager
+
+#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_FAKE_POLICY_MANAGER_H_
diff --git a/policy_manager/fake_state.cc b/policy_manager/fake_state.cc
index 3dcec18..4f4c787 100644
--- a/policy_manager/fake_state.cc
+++ b/policy_manager/fake_state.cc
@@ -2,19 +2,27 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "update_engine/policy_manager/fake_random_provider.h"
-#include "update_engine/policy_manager/fake_shill_provider.h"
 #include "update_engine/policy_manager/fake_state.h"
-#include "update_engine/policy_manager/fake_system_provider.h"
-#include "update_engine/policy_manager/fake_time_provider.h"
+
+#include "base/memory/scoped_ptr.h"
 
 namespace chromeos_policy_manager {
 
-FakeState::FakeState() {
-  set_random_provider(new FakeRandomProvider());
-  set_shill_provider(new FakeShillProvider());
-  set_system_provider(new FakeSystemProvider());
-  set_time_provider(new FakeTimeProvider());
+FakeState::FakeState() : State(new FakeRandomProvider(),
+                               new FakeShillProvider(),
+                               new FakeSystemProvider(),
+                               new FakeTimeProvider()) {
+}
+
+FakeState* FakeState::Construct() {
+  scoped_ptr<FakeState> fake_state(new FakeState());
+  if (!(fake_state->random_provider()->Init() &&
+        fake_state->shill_provider()->Init() &&
+        fake_state->system_provider()->Init() &&
+        fake_state->time_provider()->Init())) {
+    return NULL;
+  }
+  return fake_state.release();
 }
 
 }  // namespace chromeos_policy_manager
diff --git a/policy_manager/fake_state.h b/policy_manager/fake_state.h
index 159b96b..2d5b9c9 100644
--- a/policy_manager/fake_state.h
+++ b/policy_manager/fake_state.h
@@ -5,18 +5,41 @@
 #ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_FAKE_STATE_H_
 #define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_FAKE_STATE_H_
 
+#include "update_engine/policy_manager/fake_random_provider.h"
+#include "update_engine/policy_manager/fake_shill_provider.h"
+#include "update_engine/policy_manager/fake_system_provider.h"
+#include "update_engine/policy_manager/fake_time_provider.h"
 #include "update_engine/policy_manager/state.h"
 
 namespace chromeos_policy_manager {
 
-// A fake State class that creates Fake providers for all the providers.
+// A fake State class that creates fake providers for all the providers.
 class FakeState : public State {
  public:
-  // Initializes the State with fake providers.
-  FakeState();
+  // Creates and initializes the FakeState using fake providers. Returns NULL
+  // if the initialization fails.
+  static FakeState* Construct();
+
   virtual ~FakeState() {}
 
+  // Downcasted getters, to allow access to the fake instances during testing.
+  virtual FakeRandomProvider* random_provider() override {
+    return reinterpret_cast<FakeRandomProvider*>(State::random_provider());
+  }
+  virtual FakeShillProvider* shill_provider() override {
+    return reinterpret_cast<FakeShillProvider*>(State::shill_provider());
+  }
+  virtual FakeTimeProvider* time_provider() override {
+    return reinterpret_cast<FakeTimeProvider*>(State::time_provider());
+  }
+  virtual FakeSystemProvider* system_provider() override {
+    return reinterpret_cast<FakeSystemProvider*>(State::system_provider());
+  }
+
  private:
+  // Creates a FakeState instance using FakeProviders.
+  FakeState();
+
   DISALLOW_COPY_AND_ASSIGN(FakeState);
 };
 
diff --git a/policy_manager/policy_manager.cc b/policy_manager/policy_manager.cc
index 4f19f99..c8e7d4e 100644
--- a/policy_manager/policy_manager.cc
+++ b/policy_manager/policy_manager.cc
@@ -5,7 +5,7 @@
 #include "update_engine/policy_manager/policy_manager.h"
 
 #include "update_engine/policy_manager/chromeos_policy.h"
-#include "update_engine/policy_manager/real_state.h"
+#include "update_engine/policy_manager/state.h"
 
 using base::Closure;
 
diff --git a/policy_manager/policy_manager.h b/policy_manager/policy_manager.h
index 4e4cc68..5b89bf2 100644
--- a/policy_manager/policy_manager.h
+++ b/policy_manager/policy_manager.h
@@ -57,6 +57,12 @@
       base::Callback<void(EvalStatus, const R& result)> callback,
       T policy_method, Args... args);
 
+ protected:
+  // The PolicyManager receives ownership of the passed Policy instance.
+  void set_policy(const Policy* policy) {
+    policy_.reset(policy);
+  }
+
  private:
   friend class PmPolicyManagerTest;
   FRIEND_TEST(PmPolicyManagerTest, PolicyRequestCallsPolicy);
diff --git a/policy_manager/policy_manager_unittest.cc b/policy_manager/policy_manager_unittest.cc
index 00a83b4..1562727 100644
--- a/policy_manager/policy_manager_unittest.cc
+++ b/policy_manager/policy_manager_unittest.cc
@@ -4,6 +4,7 @@
 
 #include <algorithm>
 #include <string>
+#include <utility>
 #include <vector>
 
 #include <base/bind.h>
@@ -32,11 +33,12 @@
 class PmPolicyManagerTest : public ::testing::Test {
  protected:
   virtual void SetUp() {
-    FakeState* fake_state = new FakeState();
-    ASSERT_TRUE(fake_state->Init());
-    EXPECT_TRUE(pmut_.Init(fake_state));
+    fake_state_ = FakeState::Construct();
+    PMTEST_ASSERT_NOT_NULL(fake_state_);
+    EXPECT_TRUE(pmut_.Init(fake_state_));
   }
 
+  FakeState* fake_state_;
   PolicyManager pmut_;
 };
 
diff --git a/policy_manager/real_state.cc b/policy_manager/real_state.cc
deleted file mode 100644
index 8b0086f..0000000
--- a/policy_manager/real_state.cc
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "update_engine/policy_manager/real_state.h"
-
-#include "update_engine/policy_manager/real_random_provider.h"
-#include "update_engine/policy_manager/real_shill_provider.h"
-#include "update_engine/policy_manager/real_time_provider.h"
-
-namespace chromeos_policy_manager {
-
-RealState::RealState(RandomProvider* random_provider,
-                     ShillProvider* shill_provider,
-                     SystemProvider* system_provider,
-                     TimeProvider* time_provider) {
-  set_random_provider(random_provider);
-  set_shill_provider(shill_provider);
-  set_system_provider(system_provider);
-  set_time_provider(time_provider);
-}
-
-}  // namespace chromeos_policy_manager
diff --git a/policy_manager/real_state.h b/policy_manager/real_state.h
deleted file mode 100644
index b080c2d..0000000
--- a/policy_manager/real_state.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_REAL_STATE_H_
-#define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_REAL_STATE_H_
-
-#include "update_engine/policy_manager/state.h"
-
-namespace chromeos_policy_manager {
-
-// State implementation class.
-class RealState : public State {
- public:
-  // Instantiate with given providers, assuming ownership of them.
-  RealState(RandomProvider* random_provider,
-            ShillProvider* shill_provider,
-            SystemProvider* system_provider,
-            TimeProvider* time_provider);
-
-  ~RealState() {}
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(RealState);
-};
-
-}  // namespace chromeos_policy_manager
-
-#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_REAL_STATE_H_
diff --git a/policy_manager/real_state_unittest.cc b/policy_manager/real_state_unittest.cc
deleted file mode 100644
index 792d4d8..0000000
--- a/policy_manager/real_state_unittest.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "update_engine/policy_manager/real_state.h"
-
-#include <gtest/gtest.h>
-
-#include "update_engine/policy_manager/fake_random_provider.h"
-#include "update_engine/policy_manager/fake_shill_provider.h"
-#include "update_engine/policy_manager/fake_system_provider.h"
-#include "update_engine/policy_manager/fake_time_provider.h"
-#include "update_engine/policy_manager/pmtest_utils.h"
-
-namespace chromeos_policy_manager {
-
-TEST(PmRealStateTest, InitTest) {
-  RealState state(new FakeRandomProvider(),
-                  new FakeShillProvider(),
-                  new FakeSystemProvider(),
-                  new FakeTimeProvider());
-  EXPECT_TRUE(state.Init());
-
-  // Check that the providers are being initialized. Beyond ensuring that we get
-  // non-null provider handles, verifying that we can get a single variable from
-  // each provider is enough of an indication that it has initialized.
-  PMTEST_ASSERT_NOT_NULL(state.random_provider());
-  PMTEST_EXPECT_NOT_NULL(state.random_provider()->var_seed());
-  PMTEST_ASSERT_NOT_NULL(state.shill_provider());
-  PMTEST_EXPECT_NOT_NULL(state.shill_provider()->var_is_connected());
-  PMTEST_ASSERT_NOT_NULL(state.system_provider());
-  PMTEST_ASSERT_NOT_NULL(state.system_provider()->var_is_normal_boot_mode());
-  PMTEST_ASSERT_NOT_NULL(state.time_provider());
-  PMTEST_ASSERT_NOT_NULL(state.time_provider()->var_curr_date());
-}
-
-}  // namespace chromeos_policy_manager
diff --git a/policy_manager/state.h b/policy_manager/state.h
index dd1e6af..8d93dea 100644
--- a/policy_manager/state.h
+++ b/policy_manager/state.h
@@ -17,39 +17,18 @@
 class State {
  public:
   virtual ~State() {}
+  State(RandomProvider* random_provider, ShillProvider* shill_provider,
+        SystemProvider* system_provider, TimeProvider* time_provider) :
+      random_provider_(random_provider),
+      shill_provider_(shill_provider),
+      system_provider_(system_provider),
+      time_provider_(time_provider) {}
 
-  // Initializes the State instance. Returns whether the initialization
-  // succeeded.
-  bool Init() {
-    return (random_provider_ && random_provider_->Init() &&
-            shill_provider_ && shill_provider_->Init() &&
-            system_provider_ && system_provider_->Init() &&
-            time_provider_ && time_provider_->Init());
-  }
-
-  // These functions return the given provider.
-  RandomProvider* random_provider() { return random_provider_.get(); }
-  ShillProvider* shill_provider() { return shill_provider_.get(); }
-  TimeProvider* time_provider() { return time_provider_.get(); }
-  SystemProvider* system_provider() { return system_provider_.get(); }
-
- protected:
-  // Initialize the private scoped_ptr for each provider.
-  void set_random_provider(RandomProvider* random_provider) {
-    return random_provider_.reset(random_provider);
-  }
-
-  void set_shill_provider(ShillProvider* shill_provider) {
-    return shill_provider_.reset(shill_provider);
-  }
-
-  void set_system_provider(SystemProvider* system_provider) {
-    return system_provider_.reset(system_provider);
-  }
-
-  void set_time_provider(TimeProvider* time_provider) {
-    return time_provider_.reset(time_provider);
-  }
+  // These methods return the given provider.
+  virtual RandomProvider* random_provider() { return random_provider_.get(); }
+  virtual ShillProvider* shill_provider() { return shill_provider_.get(); }
+  virtual TimeProvider* time_provider() { return time_provider_.get(); }
+  virtual SystemProvider* system_provider() { return system_provider_.get(); }
 
  private:
   // Instances of the providers.
diff --git a/policy_manager/state_factory.cc b/policy_manager/state_factory.cc
new file mode 100644
index 0000000..cab9d5e
--- /dev/null
+++ b/policy_manager/state_factory.cc
@@ -0,0 +1,39 @@
+// Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "update_engine/policy_manager/state_factory.h"
+
+#include <base/logging.h>
+
+#include "update_engine/policy_manager/real_random_provider.h"
+#include "update_engine/policy_manager/real_shill_provider.h"
+#include "update_engine/policy_manager/real_system_provider.h"
+#include "update_engine/policy_manager/real_time_provider.h"
+
+namespace chromeos_policy_manager {
+
+State* DefaultStateFactory(
+    chromeos_update_engine::DBusWrapperInterface* dbus,
+    chromeos_update_engine::ClockInterface* clock) {
+  scoped_ptr<RealRandomProvider> random_provider(new RealRandomProvider());
+  scoped_ptr<RealShillProvider> shill_provider(
+      new RealShillProvider(dbus, clock));
+  scoped_ptr<RealSystemProvider> system_provider(new RealSystemProvider());
+  scoped_ptr<RealTimeProvider> time_provider(new RealTimeProvider(clock));
+
+  if (!(random_provider->Init() &&
+        shill_provider->Init() &&
+        system_provider->Init() &&
+        time_provider->Init())) {
+    LOG(ERROR) << "Error initializing providers";
+    return NULL;
+  }
+
+  return new State(random_provider.release(),
+                   shill_provider.release(),
+                   system_provider.release(),
+                   time_provider.release());
+}
+
+}  // namespace chromeos_policy_manager
diff --git a/policy_manager/state_factory.h b/policy_manager/state_factory.h
new file mode 100644
index 0000000..d0b93a1
--- /dev/null
+++ b/policy_manager/state_factory.h
@@ -0,0 +1,26 @@
+// Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_STATE_FACTORY_H_
+#define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_STATE_FACTORY_H_
+
+#include "update_engine/clock_interface.h"
+#include "update_engine/dbus_wrapper_interface.h"
+#include "update_engine/policy_manager/state.h"
+
+namespace chromeos_policy_manager {
+
+// Creates and initializes a new State instance using the real providers
+// instantiated using the passed interfaces when needed. The State doesn't
+// take ownership of the passed interfaces, which need to remain available
+// during the life of this instance.
+// If one of the underlying providers fails to initialize, this function returns
+// NULL.
+State* DefaultStateFactory(
+    chromeos_update_engine::DBusWrapperInterface* dbus,
+    chromeos_update_engine::ClockInterface* clock);
+
+}  // namespace chromeos_policy_manager
+
+#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_STATE_FACTORY_H_
diff --git a/real_system_state.cc b/real_system_state.cc
index b554eb4..936e819 100644
--- a/real_system_state.cc
+++ b/real_system_state.cc
@@ -2,11 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "update_engine/real_system_state.h"
+
 #include <base/file_util.h>
 #include <base/time/time.h>
 
 #include "update_engine/constants.h"
-#include "update_engine/real_system_state.h"
+#include "update_engine/policy_manager/state_factory.h"
 #include "update_engine/utils.h"
 
 namespace chromeos_update_engine {
@@ -44,6 +46,10 @@
   p2p_manager_.reset(P2PManager::Construct(NULL, &prefs_, "cros_au",
                                            kMaxP2PFilesToKeep));
 
+  // Initialize the PolicyManager using the default State Factory.
+  policy_manager_.Init(
+      chromeos_policy_manager::DefaultStateFactory(&dbus_, &clock_));
+
   if (!payload_state_.Initialize(this))
     return false;
 
diff --git a/real_system_state.h b/real_system_state.h
index 7c411f8..baa9c60 100644
--- a/real_system_state.h
+++ b/real_system_state.h
@@ -11,18 +11,19 @@
 #include "update_engine/connection_manager.h"
 #include "update_engine/gpio_handler.h"
 #include "update_engine/hardware.h"
+#include "update_engine/p2p_manager.h"
 #include "update_engine/payload_state.h"
+#include "update_engine/policy_manager/policy_manager.h"
 #include "update_engine/prefs.h"
 #include "update_engine/real_dbus_wrapper.h"
 #include "update_engine/update_attempter.h"
-#include "update_engine/p2p_manager.h"
 
 namespace chromeos_update_engine {
 
 // A real implementation of the SystemStateInterface which is
 // used by the actual product code.
 class RealSystemState : public SystemState {
-public:
+ public:
   // Constructors and destructors.
   RealSystemState();
   virtual ~RealSystemState() {}
@@ -84,7 +85,11 @@
     return p2p_manager_.get();
   }
 
-  virtual inline bool system_rebooted(){
+  virtual inline chromeos_policy_manager::PolicyManager* policy_manager() {
+    return &policy_manager_;
+  }
+
+  virtual inline bool system_rebooted() {
     return system_rebooted_;
   }
 
@@ -92,7 +97,7 @@
   // if the object has been initialized successfully.
   bool Initialize(bool enable_gpio);
 
-private:
+ private:
   // Interface for the clock.
   Clock clock_;
 
@@ -137,6 +142,8 @@
 
   scoped_ptr<P2PManager> p2p_manager_;
 
+  chromeos_policy_manager::PolicyManager policy_manager_;
+
   // If true, this is the first instance of the update engine since the system
   // rebooted. Important for tracking whether you are running instance of the
   // update engine on first boot or due to a crash/restart.
diff --git a/system_state.h b/system_state.h
index 8668542..2148b51 100644
--- a/system_state.h
+++ b/system_state.h
@@ -13,6 +13,12 @@
 #include "update_engine/gpio_handler.h"
 #include "update_engine/omaha_request_params.h"
 
+namespace chromeos_policy_manager {
+
+class PolicyManager;
+
+}  // namespace chromeos_policy_manager
+
 namespace chromeos_update_engine {
 
 // SystemState is the root class within the update engine. So we should avoid
@@ -20,12 +26,12 @@
 // the required classes.
 class ClockInterface;
 class ConnectionManager;
-class HardwareInterface;
-class PrefsInterface;
-class PayloadStateInterface;
 class GpioHandler;
-class UpdateAttempter;
+class HardwareInterface;
 class P2PManager;
+class PayloadStateInterface;
+class PrefsInterface;
+class UpdateAttempter;
 
 // An interface to global system context, including platform resources,
 // the current state of the system, high-level objects whose lifetime is same
@@ -33,7 +39,7 @@
 // Carved out separately so it can be mocked for unit tests.
 // Currently it has only one method, but we should start migrating other
 // methods to use this as and when needed to unit test them.
-// TODO (jaysri): Consider renaming this to something like GlobalContext.
+// TODO(jaysri): Consider renaming this to something like GlobalContext.
 class SystemState {
  public:
   // Destructs this object.
@@ -85,6 +91,9 @@
   // Returns a pointer to the P2PManager singleton.
   virtual P2PManager* p2p_manager() = 0;
 
+  // Returns a pointer to the PolicyManager singleton.
+  virtual chromeos_policy_manager::PolicyManager* policy_manager() = 0;
+
   // If true, this is the first instance of the update engine since the system
   // restarted. Important for tracking whether you are running instance of the
   // update engine on first boot or due to a crash/restart.
