diff --git a/SConstruct b/SConstruct
index 0d121d5..4d4003a 100644
--- a/SConstruct
+++ b/SConstruct
@@ -282,8 +282,7 @@
                    p2p_manager.cc
                    payload_signer.cc
                    payload_state.cc
-                   policy_manager/random_provider.cc
-                   policy_manager/random_vars.cc
+                   policy_manager/real_random_provider.cc
                    postinstall_runner_action.cc
                    prefs.cc
                    proxy_resolver.cc
@@ -333,7 +332,7 @@
                             payload_signer_unittest.cc
                             payload_state_unittest.cc
                             policy_manager/generic_variables_unittest.cc
-                            policy_manager/random_provider_unittest.cc
+                            policy_manager/real_random_provider_unittest.cc
                             policy_manager/variable_unittest.cc
                             postinstall_runner_action_unittest.cc
                             prefs_unittest.cc
diff --git a/policy_manager/all_variables.h b/policy_manager/all_variables.h
deleted file mode 100644
index fb3401e..0000000
--- a/policy_manager/all_variables.h
+++ /dev/null
@@ -1,21 +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_ALL_VARIABLES_H
-#define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_ALL_VARIABLES_H
-
-// List of globally available variables exposed by the different providers.
-//
-// Each state provider must implement a header file with the suffix "_vars.h",
-// which declares all the variables owned by this provider declared as extern
-// global pointers.
-//
-//   extern Variable<SomeType>* var_providername_variablename;
-//
-// This file is just an aggregate of all variable declarations
-// from the different providers.
-
-#include "policy_manager/random_vars.h"
-
-#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_ALL_VARIABLES_H
diff --git a/policy_manager/provider_utils.h b/policy_manager/provider_utils.h
deleted file mode 100644
index 5284ab2..0000000
--- a/policy_manager/provider_utils.h
+++ /dev/null
@@ -1,45 +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_PROVIDER_UTILS_H
-#define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_PROVIDER_UTILS_H
-
-// Convenience macro for declaring policy variable closers.
-//
-// TODO(garnold) If/when we switch to C++11, this can already initialize the
-// closer with the variable's address and save us further work in the ctor.
-//
-// TODO(garnold) This is likely unnecessary once we introduce a non-template
-// variable base class.
-#define DECLARE_VAR_CLOSER(closer_name, var_name) \
-    ScopedPtrVarCloser<typeof(var_name)> closer_name
-
-namespace chromeos_policy_manager {
-
-// Scoped closer for a pointer variable. It is initialized with a reference to
-// a pointer variable. Upon destruction, it will destruct the object pointed to
-// by the variable and nullify the variable. This template can be easily
-// instantiated via 'typeof' of the variable that is being scoped:
-//
-//   ScopedPtrVarCloser<typeof(foo)> foo_closer(&foo);
-//
-// where 'foo' is pointer variable of some type.
-template<typename T>
-class ScopedPtrVarCloser {
- public:
-  ScopedPtrVarCloser(T* ptr_var_p) : ptr_var_p_(ptr_var_p) {}
-  ~ScopedPtrVarCloser() {
-    if (ptr_var_p_) {
-      delete *ptr_var_p_;
-      *ptr_var_p_ = NULL;
-    }
-  }
-
- private:
-  T* ptr_var_p_;
-};
-
-}  // namespace chromeos_policy_manager
-
-#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_PROVIDER_UTILS_H
diff --git a/policy_manager/random_provider.h b/policy_manager/random_provider.h
index 7eaa8f6..60d7b2c 100644
--- a/policy_manager/random_provider.h
+++ b/policy_manager/random_provider.h
@@ -5,23 +5,29 @@
 #ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_RANDOM_PROVIDER_H
 #define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_RANDOM_PROVIDER_H
 
+#include <base/memory/scoped_ptr.h>
+
 #include "policy_manager/provider.h"
-#include "policy_manager/provider_utils.h"
-#include "policy_manager/random_vars.h"
+#include "policy_manager/variable.h"
 
 namespace chromeos_policy_manager {
 
 // Provider of random values.
 class RandomProvider : public Provider {
  public:
-  RandomProvider() : seed_closer_(&var_random_seed) {}
+  // Return a random number every time it is requested. Note that values
+  // 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(); }
 
  protected:
-  virtual bool DoInit();
+  RandomProvider() {}
+
+  // The seed() scoped variable.
+  scoped_ptr<Variable<uint64_t> > seed_;
 
  private:
-  DECLARE_VAR_CLOSER(seed_closer_, var_random_seed);
-
   DISALLOW_COPY_AND_ASSIGN(RandomProvider);
 };
 
diff --git a/policy_manager/random_provider_unittest.cc b/policy_manager/random_provider_unittest.cc
deleted file mode 100644
index b0a6a0a..0000000
--- a/policy_manager/random_provider_unittest.cc
+++ /dev/null
@@ -1,67 +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 <string>
-
-#include <base/memory/scoped_ptr.h>
-#include <gtest/gtest.h>
-
-#include "policy_manager/random_provider.h"
-#include "policy_manager/random_vars.h"
-#include "policy_manager/pmtest_utils.h"
-
-using base::TimeDelta;
-using std::string;
-
-namespace chromeos_policy_manager {
-
-class PmRandomProviderTest : public ::testing::Test {
- protected:
-  virtual void SetUp() {
-    default_timeout_ = TimeDelta::FromSeconds(1);
-
-    // All variables are initially null.
-    PMTEST_ASSERT_NULL(var_random_seed);
-
-    // The provider initializes correctly.
-    provider_ = new RandomProvider();
-    PMTEST_ASSERT_NOT_NULL(provider_);
-    ASSERT_TRUE(provider_->Init());
-
-    // The provider initializes all variables with valid objects.
-    PMTEST_EXPECT_NOT_NULL(var_random_seed);
-  }
-
-  virtual void TearDown() {
-    delete provider_;
-    provider_ = NULL;
-    PMTEST_EXPECT_NULL(var_random_seed);
-  }
-
-  TimeDelta default_timeout_;
-
- private:
-  RandomProvider* provider_;
-};
-
-
-TEST_F(PmRandomProviderTest, GetRandomValues) {
-  // Should not return the same random seed repeatedly.
-  scoped_ptr<const uint64_t> value(
-      var_random_seed->GetValue(default_timeout_, NULL));
-  PMTEST_ASSERT_NOT_NULL(value.get());
-
-  // Test that at least the returned values are different. This test fails,
-  // by design, once every 2^320 runs.
-  bool is_same_value = true;
-  for (int i = 0; i < 5; i++) {
-    scoped_ptr<const uint64_t> other_value(
-        var_random_seed->GetValue(default_timeout_, NULL));
-    PMTEST_ASSERT_NOT_NULL(other_value.get());
-    is_same_value = is_same_value && *other_value == *value;
-  }
-  EXPECT_FALSE(is_same_value);
-}
-
-}  // namespace chromeos_policy_manager
diff --git a/policy_manager/random_vars.cc b/policy_manager/random_vars.cc
deleted file mode 100644
index 95e4eea..0000000
--- a/policy_manager/random_vars.cc
+++ /dev/null
@@ -1,11 +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 "policy_manager/random_vars.h"
-
-namespace chromeos_policy_manager {
-
-Variable<uint64_t>* var_random_seed = NULL;
-
-}  // namespace chromeos_policy_manager
diff --git a/policy_manager/random_vars.h b/policy_manager/random_vars.h
deleted file mode 100644
index 7c2d92d..0000000
--- a/policy_manager/random_vars.h
+++ /dev/null
@@ -1,20 +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_RANDOM_VARS_H
-#define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_RANDOM_VARS_H
-
-#include "policy_manager/variable.h"
-
-namespace chromeos_policy_manager {
-
-// Return a random number every time it is requested. Note that values 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.
-extern Variable<uint64_t>* var_random_seed;
-
-}  // namespace chromeos_policy_manager
-
-#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_RANDOM_VARS_H
diff --git a/policy_manager/random_provider.cc b/policy_manager/real_random_provider.cc
similarity index 90%
rename from policy_manager/random_provider.cc
rename to policy_manager/real_random_provider.cc
index 431e77b..28213fa 100644
--- a/policy_manager/random_provider.cc
+++ b/policy_manager/real_random_provider.cc
@@ -9,7 +9,7 @@
 #include <base/file_util.h>
 #include <base/stringprintf.h>
 
-#include "policy_manager/random_provider.h"
+#include "policy_manager/real_random_provider.h"
 #include "policy_manager/variable.h"
 
 using std::string;
@@ -60,14 +60,11 @@
   DISALLOW_COPY_AND_ASSIGN(RandomSeedVariable);
 };
 
-
-// RandomProvider implementation.
-
-bool RandomProvider::DoInit(void) {
+bool RealRandomProvider::DoInit(void) {
   FILE* fp = fopen(kRandomDevice, "r");
   if (!fp)
     return false;
-  var_random_seed = new RandomSeedVariable("random_seed", fp);
+  seed_.reset(new RandomSeedVariable("random_seed", fp));
   return true;
 }
 
diff --git a/policy_manager/real_random_provider.h b/policy_manager/real_random_provider.h
new file mode 100644
index 0000000..e909d38
--- /dev/null
+++ b/policy_manager/real_random_provider.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_REAL_RANDOM_PROVIDER_H
+#define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_REAL_RANDOM_PROVIDER_H
+
+#include "policy_manager/random_provider.h"
+
+namespace chromeos_policy_manager {
+
+// RandomProvider implementation class.
+class RealRandomProvider : public RandomProvider {
+ public:
+  RealRandomProvider() {}
+
+ protected:
+  // Initializes all the variables.
+  virtual bool DoInit(void);
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(RealRandomProvider);
+};
+
+}  // namespace chromeos_policy_manager
+
+#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_REAL_RANDOM_PROVIDER_H
diff --git a/policy_manager/real_random_provider_unittest.cc b/policy_manager/real_random_provider_unittest.cc
new file mode 100644
index 0000000..f04ca7c
--- /dev/null
+++ b/policy_manager/real_random_provider_unittest.cc
@@ -0,0 +1,61 @@
+// 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 <base/memory/scoped_ptr.h>
+#include <base/time.h>
+#include <gtest/gtest.h>
+
+#include "policy_manager/pmtest_utils.h"
+#include "policy_manager/real_random_provider.h"
+
+using base::TimeDelta;
+
+namespace chromeos_policy_manager {
+
+class PmRealRandomProviderTest : public ::testing::Test {
+ protected:
+  virtual void SetUp() {
+    default_timeout_ = TimeDelta::FromSeconds(1);
+
+    // The provider initializes correctly.
+    random_ = new RealRandomProvider();
+    ASSERT_TRUE(random_ != NULL);
+    ASSERT_TRUE(random_->Init());
+
+    (random_->seed());
+  }
+
+  virtual void TearDown() {
+    delete random_;
+    random_ = NULL;
+  }
+
+  TimeDelta default_timeout_;
+  RealRandomProvider* random_;
+};
+
+TEST_F(PmRealRandomProviderTest, InitFinalize) {
+  // The provider initializes all variables with valid objects.
+  PMTEST_EXPECT_NOT_NULL(random_->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));
+  PMTEST_ASSERT_NOT_NULL(value.get());
+
+  // Test that at least the returned values are different. This test fails,
+  // by design, once every 2^320 runs.
+  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));
+    PMTEST_ASSERT_NOT_NULL(other_value.get());
+    is_same_value = is_same_value && *other_value == *value;
+  }
+  EXPECT_FALSE(is_same_value);
+}
+
+}  // namespace chromeos_policy_manager
diff --git a/policy_manager/variable.h b/policy_manager/variable.h
index 9b933d7..7dcb5b9 100644
--- a/policy_manager/variable.h
+++ b/policy_manager/variable.h
@@ -39,8 +39,8 @@
   virtual ~Variable() {}
 
  protected:
-  friend class PmRandomProviderTest;
-  FRIEND_TEST(PmRandomProviderTest, GetRandomValues);
+  friend class PmRealRandomProviderTest;
+  FRIEND_TEST(PmRealRandomProviderTest, GetRandomValues);
 
   // Gets the current value of the variable. The current value is copied to a
   // new object and returned. The caller of this method owns the object and
