diff --git a/policy_manager/fake_config_provider.h b/policy_manager/fake_config_provider.h
index 3a31eb3..7c30190 100644
--- a/policy_manager/fake_config_provider.h
+++ b/policy_manager/fake_config_provider.h
@@ -16,8 +16,6 @@
   FakeConfigProvider() {}
 
  protected:
-  virtual bool DoInit() override { return true; }
-
   virtual FakeVariable<bool>* var_is_oobe_enabled() override {
     return &var_is_oobe_enabled_;
   }
diff --git a/policy_manager/fake_device_policy_provider.h b/policy_manager/fake_device_policy_provider.h
index 252a5e5..4fa592f 100644
--- a/policy_manager/fake_device_policy_provider.h
+++ b/policy_manager/fake_device_policy_provider.h
@@ -60,8 +60,6 @@
   }
 
  private:
-  virtual bool DoInit() override { return true; }
-
   FakeVariable<bool> var_device_policy_is_loaded_{
       "policy_is_loaded", kVariableModePoll};
   FakeVariable<std::string> var_release_channel_{
diff --git a/policy_manager/fake_random_provider.h b/policy_manager/fake_random_provider.h
index 64f08a4..bfec2eb 100644
--- a/policy_manager/fake_random_provider.h
+++ b/policy_manager/fake_random_provider.h
@@ -18,8 +18,6 @@
   virtual FakeVariable<uint64_t>* var_seed() override { return &var_seed_; }
 
  private:
-  virtual bool DoInit() override { return true; }
-
   FakeVariable<uint64_t> var_seed_{"seed", kVariableModePoll};
 
   DISALLOW_COPY_AND_ASSIGN(FakeRandomProvider);
diff --git a/policy_manager/fake_shill_provider.h b/policy_manager/fake_shill_provider.h
index c18b0d2..ffe8751 100644
--- a/policy_manager/fake_shill_provider.h
+++ b/policy_manager/fake_shill_provider.h
@@ -33,8 +33,6 @@
   }
 
  private:
-  virtual bool DoInit() override { return true; }
-
   FakeVariable<bool> var_is_connected_{"is_connected", kVariableModePoll};
   FakeVariable<ConnectionType> var_conn_type_{"conn_type", kVariableModePoll};
   FakeVariable<ConnectionTethering> var_conn_tethering_{
diff --git a/policy_manager/fake_state.cc b/policy_manager/fake_state.cc
deleted file mode 100644
index 6fa663b..0000000
--- a/policy_manager/fake_state.cc
+++ /dev/null
@@ -1,25 +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/fake_state.h"
-
-#include "base/memory/scoped_ptr.h"
-
-namespace chromeos_policy_manager {
-
-FakeState* FakeState::Construct() {
-  scoped_ptr<FakeState> fake_state(new FakeState());
-  if (!(fake_state->config_provider_.Init() &&
-        fake_state->device_policy_provider_.Init() &&
-        fake_state->random_provider_.Init() &&
-        fake_state->shill_provider_.Init() &&
-        fake_state->system_provider_.Init() &&
-        fake_state->time_provider_.Init() &&
-        fake_state->updater_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 9489050..b6495e5 100644
--- a/policy_manager/fake_state.h
+++ b/policy_manager/fake_state.h
@@ -17,15 +17,23 @@
 namespace chromeos_policy_manager {
 
 // A fake State class that creates fake providers for all the providers.
+// This fake can be used in unit testing of Policy subclasses. To fake out the
+// value a variable is exposing, just call FakeVariable<T>::SetValue() on the
+// variable you fake out. For example:
+//
+//   FakeState fake_state_;
+//   fake_state_.random_provider_->var_seed()->SetValue(new uint64_t(12345));
+//
+// You can call SetValue more than once and the FakeVariable will take care of
+// the memory, but only the last value will remain.
 class FakeState : public State {
  public:
-  // Creates and initializes the FakeState using fake providers. Returns NULL
-  // if the initialization fails.
-  static FakeState* Construct();
+  // Creates and initializes the FakeState using fake providers.
+  FakeState() {}
 
   virtual ~FakeState() {}
 
-  // Downcasted getters, to allow access to the fake instances during testing.
+  // Downcasted detters to access the fake instances during testing.
   virtual FakeConfigProvider* config_provider() override {
     return &config_provider_;
   }
@@ -55,8 +63,6 @@
   }
 
  private:
-  FakeState() {}
-
   FakeConfigProvider config_provider_;
   FakeDevicePolicyProvider device_policy_provider_;
   FakeRandomProvider random_provider_;
diff --git a/policy_manager/fake_system_provider.h b/policy_manager/fake_system_provider.h
index fbdff49..5886828 100644
--- a/policy_manager/fake_system_provider.h
+++ b/policy_manager/fake_system_provider.h
@@ -24,8 +24,6 @@
   }
 
  private:
-  virtual bool DoInit() override { return true; }
-
   FakeVariable<bool> var_is_normal_boot_mode_{
       "is_normal_boot_mode", kVariableModeConst};
   FakeVariable<bool> var_is_official_build_{
diff --git a/policy_manager/fake_time_provider.h b/policy_manager/fake_time_provider.h
index a73346a..d160289 100644
--- a/policy_manager/fake_time_provider.h
+++ b/policy_manager/fake_time_provider.h
@@ -24,8 +24,6 @@
   }
 
  private:
-  virtual bool DoInit() override { return true; }
-
   FakeVariable<base::Time> var_curr_date_{"curr_date", kVariableModePoll};
   FakeVariable<int> var_curr_hour_{"curr_hour", kVariableModePoll};
 
diff --git a/policy_manager/fake_updater_provider.h b/policy_manager/fake_updater_provider.h
index aa12ce7..17060ce 100644
--- a/policy_manager/fake_updater_provider.h
+++ b/policy_manager/fake_updater_provider.h
@@ -56,8 +56,6 @@
   }
 
  private:
-  virtual bool DoInit() { return true; }
-
   FakeVariable<base::Time> var_last_checked_time_{
     "last_checked_time", kVariableModePoll};
   FakeVariable<base::Time> var_update_completed_time_{
diff --git a/policy_manager/policy_manager_unittest.cc b/policy_manager/policy_manager_unittest.cc
index 9632609..d3a847e 100644
--- a/policy_manager/policy_manager_unittest.cc
+++ b/policy_manager/policy_manager_unittest.cc
@@ -38,8 +38,7 @@
 
  protected:
   virtual void SetUp() {
-    fake_state_ = FakeState::Construct();
-    PMTEST_ASSERT_NOT_NULL(fake_state_);
+    fake_state_ = new FakeState();
     EXPECT_TRUE(pmut_.Init(fake_state_));
   }
 
diff --git a/policy_manager/provider.h b/policy_manager/provider.h
index 9ee5e8a..a4e9c54 100644
--- a/policy_manager/provider.h
+++ b/policy_manager/provider.h
@@ -10,23 +10,12 @@
 // Abstract base class for a policy provider.
 class Provider {
  public:
-  Provider() : is_initialized_(false) {}
   virtual ~Provider() {}
 
-  // Initializes the provider at most once.  Returns true on success.
-  bool Init() {
-    return is_initialized_ || (is_initialized_ = DoInit());
-  }
-
  protected:
-  // Performs the actual initialization. To be implemented by concrete
-  // subclasses.
-  virtual bool DoInit() = 0;
+  Provider() {}
 
  private:
-  // Whether the provider was already initialized.
-  bool is_initialized_;
-
   DISALLOW_COPY_AND_ASSIGN(Provider);
 };
 
diff --git a/policy_manager/real_config_provider.cc b/policy_manager/real_config_provider.cc
index d30db12..df15ab3 100644
--- a/policy_manager/real_config_provider.cc
+++ b/policy_manager/real_config_provider.cc
@@ -25,7 +25,7 @@
 
 namespace chromeos_policy_manager {
 
-bool RealConfigProvider::DoInit() {
+bool RealConfigProvider::Init() {
   KeyValueStore store;
 
   if (hardware_->IsNormalBootMode()) {
diff --git a/policy_manager/real_config_provider.h b/policy_manager/real_config_provider.h
index d79227f..b3a30e7 100644
--- a/policy_manager/real_config_provider.h
+++ b/policy_manager/real_config_provider.h
@@ -22,6 +22,9 @@
       chromeos_update_engine::HardwareInterface* hardware)
       : hardware_(hardware) {}
 
+  // Initializes the provider and returns whether it succeeded.
+  bool Init();
+
   Variable<bool>* var_is_oobe_enabled() override {
     return var_is_oobe_enabled_.get();
   }
@@ -29,8 +32,6 @@
  private:
   friend class PmRealConfigProviderTest;
 
-  virtual bool DoInit() override;
-
   // Used for testing. Sets the root prefix, which is by default "". Call this
   // method before calling Init() in order to mock out the place where the files
   // are being read from.
diff --git a/policy_manager/real_device_policy_provider.cc b/policy_manager/real_device_policy_provider.cc
index 46e4416..d0356da 100644
--- a/policy_manager/real_device_policy_provider.cc
+++ b/policy_manager/real_device_policy_provider.cc
@@ -29,7 +29,7 @@
   CancelMainLoopEvent(scheduled_refresh_);
 }
 
-bool RealDevicePolicyProvider::DoInit() {
+bool RealDevicePolicyProvider::Init() {
   CHECK(policy_provider_ != nullptr);
 
   // On Init() we try to get the device policy and keep updating it.
diff --git a/policy_manager/real_device_policy_provider.h b/policy_manager/real_device_policy_provider.h
index dbd0879..bfbb299 100644
--- a/policy_manager/real_device_policy_provider.h
+++ b/policy_manager/real_device_policy_provider.h
@@ -24,6 +24,9 @@
       : policy_provider_(policy_provider) {}
   ~RealDevicePolicyProvider();
 
+  // Initializes the provider and returns whether it succeeded.
+  bool Init();
+
   virtual Variable<bool>* var_device_policy_is_loaded() override {
     return &var_device_policy_is_loaded_;
   }
@@ -70,9 +73,6 @@
   FRIEND_TEST(PmRealDevicePolicyProviderTest, NonExistentDevicePolicyReloaded);
   FRIEND_TEST(PmRealDevicePolicyProviderTest, ValuesUpdated);
 
-  // Provider override.
-  bool DoInit() override;
-
   // Schedules a call to periodically refresh the device policy.
   void RefreshDevicePolicyAndReschedule();
 
diff --git a/policy_manager/real_random_provider.cc b/policy_manager/real_random_provider.cc
index 3ab4ff4..d29590b 100644
--- a/policy_manager/real_random_provider.cc
+++ b/policy_manager/real_random_provider.cc
@@ -63,7 +63,7 @@
   DISALLOW_COPY_AND_ASSIGN(RandomSeedVariable);
 };
 
-bool RealRandomProvider::DoInit(void) {
+bool RealRandomProvider::Init(void) {
   FILE* fp = fopen(kRandomDevice, "r");
   if (!fp)
     return false;
diff --git a/policy_manager/real_random_provider.h b/policy_manager/real_random_provider.h
index 7dd8fab..cc27c07 100644
--- a/policy_manager/real_random_provider.h
+++ b/policy_manager/real_random_provider.h
@@ -16,9 +16,10 @@
 
   virtual Variable<uint64_t>* var_seed() override { return var_seed_.get(); }
 
- private:
-  virtual bool DoInit(void) override;
+  // Initializes the provider and returns whether it succeeded.
+  bool Init();
 
+ private:
   // The seed() scoped variable.
   scoped_ptr<Variable<uint64_t>> var_seed_;
 
diff --git a/policy_manager/real_shill_provider.cc b/policy_manager/real_shill_provider.cc
index ffd851c..4fbb6b2 100644
--- a/policy_manager/real_shill_provider.cc
+++ b/policy_manager/real_shill_provider.cc
@@ -63,7 +63,7 @@
   return ConnectionTethering::kUnknown;
 }
 
-bool RealShillProvider::DoInit() {
+bool RealShillProvider::Init() {
   // Obtain a DBus connection.
   GError* error = NULL;
   connection_ = dbus_->BusGet(DBUS_BUS_SYSTEM, &error);
diff --git a/policy_manager/real_shill_provider.h b/policy_manager/real_shill_provider.h
index 9c15700..5af3232 100644
--- a/policy_manager/real_shill_provider.h
+++ b/policy_manager/real_shill_provider.h
@@ -31,6 +31,9 @@
 
   virtual ~RealShillProvider();
 
+  // Initializes the provider and returns whether it succeeded.
+  bool Init();
+
   virtual Variable<bool>* var_is_connected() override {
     return &var_is_connected_;
   }
@@ -53,8 +56,6 @@
       const char* tethering_str);
 
  private:
-  virtual bool DoInit() override;
-
   // Return a DBus proxy for a given |path| and |interface| within shill.
   DBusGProxy* GetProxy(const char* path, const char* interface);
 
diff --git a/policy_manager/real_system_provider.cc b/policy_manager/real_system_provider.cc
index ade9b6b..6b19268 100644
--- a/policy_manager/real_system_provider.cc
+++ b/policy_manager/real_system_provider.cc
@@ -18,7 +18,7 @@
 
 namespace chromeos_policy_manager {
 
-bool RealSystemProvider::DoInit() {
+bool RealSystemProvider::Init() {
   var_is_normal_boot_mode_.reset(
       new ConstCopyVariable<bool>("is_normal_boot_mode",
                                   VbGetSystemPropertyInt("devsw_boot") != 0));
diff --git a/policy_manager/real_system_provider.h b/policy_manager/real_system_provider.h
index 2de07a1..324a360 100644
--- a/policy_manager/real_system_provider.h
+++ b/policy_manager/real_system_provider.h
@@ -16,6 +16,9 @@
  public:
   RealSystemProvider() {}
 
+  // Initializes the provider and returns whether it succeeded.
+  bool Init();
+
   virtual Variable<bool>* var_is_normal_boot_mode() override {
     return var_is_normal_boot_mode_.get();
   }
@@ -25,8 +28,6 @@
   }
 
  private:
-  virtual bool DoInit() override;
-
   scoped_ptr<Variable<bool>> var_is_normal_boot_mode_;
   scoped_ptr<Variable<bool>> var_is_official_build_;
 
diff --git a/policy_manager/real_time_provider.cc b/policy_manager/real_time_provider.cc
index b2ddd2f..1693c73 100644
--- a/policy_manager/real_time_provider.cc
+++ b/policy_manager/real_time_provider.cc
@@ -60,7 +60,7 @@
   DISALLOW_COPY_AND_ASSIGN(CurrHourVariable);
 };
 
-bool RealTimeProvider::DoInit() {
+bool RealTimeProvider::Init() {
   var_curr_date_.reset(new CurrDateVariable("curr_date", clock_));
   var_curr_hour_.reset(new CurrHourVariable("curr_hour", clock_));
   return true;
diff --git a/policy_manager/real_time_provider.h b/policy_manager/real_time_provider.h
index 69b0fe9..84cbf1d 100644
--- a/policy_manager/real_time_provider.h
+++ b/policy_manager/real_time_provider.h
@@ -18,6 +18,9 @@
   RealTimeProvider(chromeos_update_engine::ClockInterface* clock)
       : clock_(clock) {}
 
+  // Initializes the provider and returns whether it succeeded.
+  bool Init();
+
   virtual Variable<base::Time>* var_curr_date() override {
     return var_curr_date_.get();
   }
@@ -27,8 +30,6 @@
   }
 
  private:
-  virtual bool DoInit() override;
-
   // A clock abstraction (fakeable).
   chromeos_update_engine::ClockInterface* const clock_;
 
diff --git a/policy_manager/real_updater_provider.h b/policy_manager/real_updater_provider.h
index 7ff8e69..adba799 100644
--- a/policy_manager/real_updater_provider.h
+++ b/policy_manager/real_updater_provider.h
@@ -22,6 +22,9 @@
   explicit RealUpdaterProvider(
       chromeos_update_engine::SystemState* system_state);
 
+  // Initializes the provider and returns whether it succeeded.
+  bool Init() { return true; }
+
   virtual Variable<base::Time>* var_last_checked_time() override {
     return var_last_checked_time_.get();
   }
@@ -63,8 +66,6 @@
   }
 
  private:
-  virtual bool DoInit() { return true; }
-
   // A pointer to the update engine's system state aggregator.
   chromeos_update_engine::SystemState* system_state_;
 
