diff --git a/policy_manager/fake_random_provider.h b/policy_manager/fake_random_provider.h
index 81d3ebe..10bd4d6 100644
--- a/policy_manager/fake_random_provider.h
+++ b/policy_manager/fake_random_provider.h
@@ -17,7 +17,7 @@
 
  protected:
   virtual bool DoInit() {
-    seed_.reset(new FakeVariable<uint64_t>("random_seed", kVariableModeConst));
+    set_var_seed(new FakeVariable<uint64_t>("seed", kVariableModeConst));
     return true;
   }
 
diff --git a/policy_manager/fake_shill_provider.h b/policy_manager/fake_shill_provider.h
index 65ddf38..f75ef2c 100644
--- a/policy_manager/fake_shill_provider.h
+++ b/policy_manager/fake_shill_provider.h
@@ -17,11 +17,11 @@
 
  protected:
   virtual bool DoInit() {
-    var_is_connected_.reset(
+    set_var_is_connected(
         new FakeVariable<bool>("is_connected", kVariableModeAsync));
-    var_conn_type_.reset(
+    set_var_conn_type(
         new FakeVariable<ShillConnType>("conn_type", kVariableModeAsync));
-    var_conn_last_changed_.reset(
+    set_var_conn_last_changed(
         new FakeVariable<Time>("conn_last_changed", kVariableModeAsync));
     return true;
   }
diff --git a/policy_manager/random_provider.h b/policy_manager/random_provider.h
index fcc4889..f921073 100644
--- a/policy_manager/random_provider.h
+++ b/policy_manager/random_provider.h
@@ -19,15 +19,19 @@
   // returned by the variables are cached by the EvaluationContext, so the
   // returned value will be the same during the same policy request. If more
   // random values are needed use a PRNG seeded with this value.
-  Variable<uint64_t>* seed() const { return seed_.get(); }
+  Variable<uint64_t>* var_seed() const { return var_seed_.get(); }
 
  protected:
   RandomProvider() {}
 
-  // The seed() scoped variable.
-  scoped_ptr<Variable<uint64_t> > seed_;
+  void set_var_seed(Variable<uint64_t>* var_seed) {
+    var_seed_.reset(var_seed);
+  }
 
  private:
+  // The seed() scoped variable.
+  scoped_ptr<Variable<uint64_t>> var_seed_;
+
   DISALLOW_COPY_AND_ASSIGN(RandomProvider);
 };
 
diff --git a/policy_manager/real_random_provider.cc b/policy_manager/real_random_provider.cc
index 81674e4..17ab024 100644
--- a/policy_manager/real_random_provider.cc
+++ b/policy_manager/real_random_provider.cc
@@ -67,7 +67,7 @@
   FILE* fp = fopen(kRandomDevice, "r");
   if (!fp)
     return false;
-  seed_.reset(new RandomSeedVariable("random_seed", fp));
+  set_var_seed(new RandomSeedVariable("seed", fp));
   return true;
 }
 
diff --git a/policy_manager/real_random_provider_unittest.cc b/policy_manager/real_random_provider_unittest.cc
index 6e3499f..ba74791 100644
--- a/policy_manager/real_random_provider_unittest.cc
+++ b/policy_manager/real_random_provider_unittest.cc
@@ -23,7 +23,7 @@
     PMTEST_ASSERT_NOT_NULL(random_.get());
     ASSERT_TRUE(random_->Init());
 
-    random_->seed();
+    random_->var_seed();
   }
 
   TimeDelta default_timeout_;
@@ -32,13 +32,13 @@
 
 TEST_F(PmRealRandomProviderTest, InitFinalize) {
   // The provider initializes all variables with valid objects.
-  PMTEST_EXPECT_NOT_NULL(random_->seed());
+  PMTEST_EXPECT_NOT_NULL(random_->var_seed());
 }
 
 TEST_F(PmRealRandomProviderTest, GetRandomValues) {
   // Should not return the same random seed repeatedly.
   scoped_ptr<const uint64_t> value(
-      random_->seed()->GetValue(default_timeout_, NULL));
+      random_->var_seed()->GetValue(default_timeout_, NULL));
   PMTEST_ASSERT_NOT_NULL(value.get());
 
   // Test that at least the returned values are different. This test fails,
@@ -46,7 +46,7 @@
   bool is_same_value = true;
   for (int i = 0; i < 5; i++) {
     scoped_ptr<const uint64_t> other_value(
-        random_->seed()->GetValue(default_timeout_, NULL));
+        random_->var_seed()->GetValue(default_timeout_, NULL));
     PMTEST_ASSERT_NOT_NULL(other_value.get());
     is_same_value = is_same_value && *other_value == *value;
   }
diff --git a/policy_manager/real_shill_provider.cc b/policy_manager/real_shill_provider.cc
index 05a63d5..279266d 100644
--- a/policy_manager/real_shill_provider.cc
+++ b/policy_manager/real_shill_provider.cc
@@ -12,13 +12,13 @@
 bool RealShillProvider::DoInit(void) {
   // TODO(garnold) Initialize with actual (or fake) DBus connection.
 
-  var_is_connected_.reset(
+  set_var_is_connected(
       new CopyVariable<bool>("is_connected", kVariableModeAsync,
                              is_connected_));
-  var_conn_type_.reset(
+  set_var_conn_type(
       new CopyVariable<ShillConnType>("conn_type", kVariableModeAsync,
                                       conn_type_));
-  var_conn_last_changed_.reset(
+  set_var_conn_last_changed(
       new CopyVariable<Time>("conn_last_changed", kVariableModeAsync,
                              conn_last_changed_));
   return true;
diff --git a/policy_manager/real_state_unittest.cc b/policy_manager/real_state_unittest.cc
index a90fba1..c0249d9 100644
--- a/policy_manager/real_state_unittest.cc
+++ b/policy_manager/real_state_unittest.cc
@@ -14,7 +14,7 @@
   EXPECT_TRUE(state.Init());
   // Check that the providers are being initialized.
   PMTEST_ASSERT_NOT_NULL(state.random_provider());
-  PMTEST_EXPECT_NOT_NULL(state.random_provider()->seed());
+  PMTEST_EXPECT_NOT_NULL(state.random_provider()->var_seed());
 }
 
 }  // namespace chromeos_policy_manager
diff --git a/policy_manager/shill_provider.h b/policy_manager/shill_provider.h
index 4b56583..12f15a2 100644
--- a/policy_manager/shill_provider.h
+++ b/policy_manager/shill_provider.h
@@ -47,11 +47,23 @@
  protected:
   ShillProvider() {}
 
-  scoped_ptr<Variable<bool> > var_is_connected_;
-  scoped_ptr<Variable<ShillConnType> > var_conn_type_;
-  scoped_ptr<Variable<base::Time> > var_conn_last_changed_;
+  void set_var_is_connected(Variable<bool>* var_is_connected) {
+    var_is_connected_.reset(var_is_connected);
+  }
+
+  void set_var_conn_type(Variable<ShillConnType>* var_conn_type) {
+    var_conn_type_.reset(var_conn_type);
+  }
+
+  void set_var_conn_last_changed(Variable<base::Time>* var_conn_last_changed) {
+    var_conn_last_changed_.reset(var_conn_last_changed);
+  }
 
  private:
+  scoped_ptr<Variable<bool>> var_is_connected_;
+  scoped_ptr<Variable<ShillConnType>> var_conn_type_;
+  scoped_ptr<Variable<base::Time>> var_conn_last_changed_;
+
   DISALLOW_COPY_AND_ASSIGN(ShillProvider);
 };
 
