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_
