diff --git a/policy_manager/fake_state.cc b/policy_manager/fake_state.cc
index 19df440..3dcec18 100644
--- a/policy_manager/fake_state.cc
+++ b/policy_manager/fake_state.cc
@@ -5,6 +5,7 @@
 #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"
 
 namespace chromeos_policy_manager {
@@ -12,6 +13,7 @@
 FakeState::FakeState() {
   set_random_provider(new FakeRandomProvider());
   set_shill_provider(new FakeShillProvider());
+  set_system_provider(new FakeSystemProvider());
   set_time_provider(new FakeTimeProvider());
 }
 
diff --git a/policy_manager/fake_system_provider.h b/policy_manager/fake_system_provider.h
new file mode 100644
index 0000000..8e6b92a
--- /dev/null
+++ b/policy_manager/fake_system_provider.h
@@ -0,0 +1,33 @@
+// 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_SYSTEM_PROVIDER_H_
+#define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_FAKE_SYSTEM_PROVIDER_H_
+
+#include "update_engine/policy_manager/fake_variable.h"
+#include "update_engine/policy_manager/system_provider.h"
+
+namespace chromeos_policy_manager {
+
+// Fake implementation of the SystemProvider base class.
+class FakeSystemProvider : public SystemProvider {
+ public:
+  FakeSystemProvider() {}
+
+ protected:
+  virtual bool DoInit() {
+    set_var_is_normal_boot_mode(
+        new FakeVariable<bool>("is_normal_boot_mode", kVariableModeConst));
+    set_var_is_official_build(
+        new FakeVariable<bool>("is_official_build", kVariableModeConst));
+    return true;
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(FakeSystemProvider);
+};
+
+}  // namespace chromeos_policy_manager
+
+#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_FAKE_SYSTEM_PROVIDER_H_
diff --git a/policy_manager/generic_variables.h b/policy_manager/generic_variables.h
index f874b3b..2f9b996 100644
--- a/policy_manager/generic_variables.h
+++ b/policy_manager/generic_variables.h
@@ -59,6 +59,32 @@
   const T& ref_;
 };
 
+// Variable class returning a constant value that is cached on the variable when
+// it is created.
+template<typename T>
+class ConstCopyVariable : public Variable<T> {
+ public:
+  // Creates the variable returning copies of the passed |obj|. The value passed
+  // is copied in this variable, and new copies of it will be returned by
+  // GetValue().
+  ConstCopyVariable(const std::string& name, const T& obj)
+      : Variable<T>(name, kVariableModeConst), obj_(obj) {}
+
+ protected:
+  friend class PmConstCopyVariableTest;
+  FRIEND_TEST(PmConstCopyVariableTest, SimpleTest);
+
+  // Variable override.
+  virtual const T* GetValue(base::TimeDelta /* timeout */,
+                            std::string* /* errmsg */) {
+    return new T(obj_);
+  }
+
+ private:
+  // Value to be copied by GetValue().
+  const T obj_;
+};
+
 }  // namespace chromeos_policy_manager
 
 #endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_GENERIC_VARIABLES_H_
diff --git a/policy_manager/generic_variables_unittest.cc b/policy_manager/generic_variables_unittest.cc
index 0e909f5..96de97e 100644
--- a/policy_manager/generic_variables_unittest.cc
+++ b/policy_manager/generic_variables_unittest.cc
@@ -2,10 +2,11 @@
 // 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/generic_variables.h"
+
 #include <base/memory/scoped_ptr.h>
 #include <gtest/gtest.h>
 
-#include "update_engine/policy_manager/generic_variables.h"
 #include "update_engine/policy_manager/pmtest_utils.h"
 
 using base::TimeDelta;
@@ -14,11 +15,7 @@
 
 class PmCopyVariableTest : public ::testing::Test {
  protected:
-  virtual void SetUp() {
-    default_timeout_ = TimeDelta::FromSeconds(1);
-  }
-
-  TimeDelta default_timeout_;
+  TimeDelta default_timeout_ = TimeDelta::FromSeconds(1);
 };
 
 
@@ -68,4 +65,24 @@
   EXPECT_TRUE(copy->copied_);
 }
 
+
+class PmConstCopyVariableTest : public ::testing::Test {
+ protected:
+  TimeDelta default_timeout_ = TimeDelta::FromSeconds(1);
+};
+
+TEST_F(PmConstCopyVariableTest, SimpleTest) {
+  int source = 5;
+  ConstCopyVariable<int> var("var", source);
+  scoped_ptr<const int> copy(var.GetValue(default_timeout_, NULL));
+  PMTEST_ASSERT_NOT_NULL(copy.get());
+  EXPECT_EQ(5, *copy);
+
+  // Ensure the value is cached.
+  source = 42;
+  copy.reset(var.GetValue(default_timeout_, NULL));
+  PMTEST_ASSERT_NOT_NULL(copy.get());
+  EXPECT_EQ(5, *copy);
+}
+
 }  // namespace chromeos_policy_manager
diff --git a/policy_manager/real_state.cc b/policy_manager/real_state.cc
index 2f9f3cc..8b0086f 100644
--- a/policy_manager/real_state.cc
+++ b/policy_manager/real_state.cc
@@ -12,9 +12,11 @@
 
 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);
 }
 
diff --git a/policy_manager/real_state.h b/policy_manager/real_state.h
index c0f1ac6..b080c2d 100644
--- a/policy_manager/real_state.h
+++ b/policy_manager/real_state.h
@@ -5,9 +5,7 @@
 #ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_REAL_STATE_H_
 #define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_REAL_STATE_H_
 
-#include "update_engine/clock.h"
 #include "update_engine/policy_manager/state.h"
-#include "update_engine/real_dbus_wrapper.h"
 
 namespace chromeos_policy_manager {
 
@@ -15,7 +13,9 @@
 class RealState : public State {
  public:
   // Instantiate with given providers, assuming ownership of them.
-  RealState(RandomProvider* random_provider, ShillProvider* shill_provider,
+  RealState(RandomProvider* random_provider,
+            ShillProvider* shill_provider,
+            SystemProvider* system_provider,
             TimeProvider* time_provider);
 
   ~RealState() {}
diff --git a/policy_manager/real_state_unittest.cc b/policy_manager/real_state_unittest.cc
index 0362688..792d4d8 100644
--- a/policy_manager/real_state_unittest.cc
+++ b/policy_manager/real_state_unittest.cc
@@ -2,18 +2,22 @@
 // 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/real_state.h"
 #include "update_engine/policy_manager/pmtest_utils.h"
 
 namespace chromeos_policy_manager {
 
 TEST(PmRealStateTest, InitTest) {
-  RealState state(new FakeRandomProvider(), new FakeShillProvider(),
+  RealState state(new FakeRandomProvider(),
+                  new FakeShillProvider(),
+                  new FakeSystemProvider(),
                   new FakeTimeProvider());
   EXPECT_TRUE(state.Init());
 
@@ -24,6 +28,8 @@
   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());
 }
diff --git a/policy_manager/real_system_provider.cc b/policy_manager/real_system_provider.cc
new file mode 100644
index 0000000..72669ff
--- /dev/null
+++ b/policy_manager/real_system_provider.cc
@@ -0,0 +1,33 @@
+// 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_system_provider.h"
+
+#include <string>
+#include <vector>
+
+#include <base/logging.h>
+#include <vboot/crossystem.h>
+
+#include "update_engine/policy_manager/generic_variables.h"
+#include "update_engine/utils.h"
+
+using std::string;
+using std::vector;
+
+namespace chromeos_policy_manager {
+
+bool RealSystemProvider::DoInit() {
+  set_var_is_normal_boot_mode(
+      new ConstCopyVariable<bool>("is_normal_boot_mode",
+                                  VbGetSystemPropertyInt("devsw_boot") != 0));
+
+  set_var_is_official_build(
+      new ConstCopyVariable<bool>("var_is_official_build",
+                                  VbGetSystemPropertyInt("debug_build") == 0));
+
+  return true;
+}
+
+}  // namespace chromeos_policy_manager
diff --git a/policy_manager/real_system_provider.h b/policy_manager/real_system_provider.h
new file mode 100644
index 0000000..d5534cb
--- /dev/null
+++ b/policy_manager/real_system_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_SYSTEM_PROVIDER_H_
+#define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_REAL_SYSTEM_PROVIDER_H_
+
+#include <string>
+
+#include "update_engine/policy_manager/system_provider.h"
+
+namespace chromeos_policy_manager {
+
+// SystemProvider concrete implementation.
+class RealSystemProvider : public SystemProvider {
+ public:
+  RealSystemProvider() {}
+
+ private:
+  virtual bool DoInit() override;
+
+  DISALLOW_COPY_AND_ASSIGN(RealSystemProvider);
+};
+
+}  // namespace chromeos_policy_manager
+
+#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_REAL_SYSTEM_PROVIDER_H_
diff --git a/policy_manager/real_system_provider_unittest.cc b/policy_manager/real_system_provider_unittest.cc
new file mode 100644
index 0000000..51406c3
--- /dev/null
+++ b/policy_manager/real_system_provider_unittest.cc
@@ -0,0 +1,28 @@
+// 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_system_provider.h"
+
+#include <gtest/gtest.h>
+
+#include "update_engine/policy_manager/pmtest_utils.h"
+
+namespace chromeos_policy_manager {
+
+class PmRealSystemProviderTest : public ::testing::Test {
+ protected:
+  virtual void SetUp() {
+    provider_.reset(new RealSystemProvider());
+    EXPECT_TRUE(provider_->Init());
+  }
+
+  scoped_ptr<RealSystemProvider> provider_;
+};
+
+TEST_F(PmRealSystemProviderTest, InitTest) {
+  PMTEST_EXPECT_NOT_NULL(provider_->var_is_normal_boot_mode());
+  PMTEST_EXPECT_NOT_NULL(provider_->var_is_official_build());
+}
+
+}  // namespace chromeos_policy_manager
diff --git a/policy_manager/state.h b/policy_manager/state.h
index fb847a7..dd1e6af 100644
--- a/policy_manager/state.h
+++ b/policy_manager/state.h
@@ -7,6 +7,7 @@
 
 #include "update_engine/policy_manager/random_provider.h"
 #include "update_engine/policy_manager/shill_provider.h"
+#include "update_engine/policy_manager/system_provider.h"
 #include "update_engine/policy_manager/time_provider.h"
 
 namespace chromeos_policy_manager {
@@ -22,6 +23,7 @@
   bool Init() {
     return (random_provider_ && random_provider_->Init() &&
             shill_provider_ && shill_provider_->Init() &&
+            system_provider_ && system_provider_->Init() &&
             time_provider_ && time_provider_->Init());
   }
 
@@ -29,6 +31,7 @@
   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.
@@ -40,6 +43,10 @@
     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);
   }
@@ -48,6 +55,7 @@
   // Instances of the providers.
   scoped_ptr<RandomProvider> random_provider_;
   scoped_ptr<ShillProvider> shill_provider_;
+  scoped_ptr<SystemProvider> system_provider_;
   scoped_ptr<TimeProvider> time_provider_;
 };
 
diff --git a/policy_manager/system_provider.h b/policy_manager/system_provider.h
new file mode 100644
index 0000000..b7f93c0
--- /dev/null
+++ b/policy_manager/system_provider.h
@@ -0,0 +1,51 @@
+// 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_SYSTEM_PROVIDER_H_
+#define CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_SYSTEM_PROVIDER_H_
+
+#include <base/memory/scoped_ptr.h>
+
+#include "update_engine/policy_manager/provider.h"
+#include "update_engine/policy_manager/variable.h"
+
+namespace chromeos_policy_manager {
+
+// Provider for system information, mostly constant, such as the information
+// reported by crossystem, the kernel boot command line and the partition table.
+class SystemProvider : public Provider {
+ public:
+  // Returns true if the boot mode is normal or if it's unable to
+  // determine the boot mode. Returns false if the boot mode is
+  // developer.
+  Variable<bool>* var_is_normal_boot_mode() const {
+    return var_is_normal_boot_mode_.get();
+  }
+
+  // Returns whether this is an official Chrome OS build.
+  Variable<bool>* var_is_official_build() const {
+    return var_is_official_build_.get();
+  }
+
+ protected:
+  SystemProvider() {}
+
+  void set_var_is_normal_boot_mode(Variable<bool>* var_is_normal_boot_mode) {
+    var_is_normal_boot_mode_.reset(var_is_normal_boot_mode);
+  }
+
+  void set_var_is_official_build(Variable<bool>* var_is_official_build) {
+    var_is_official_build_.reset(var_is_official_build);
+  }
+
+ private:
+  scoped_ptr<Variable<bool>> var_is_normal_boot_mode_;
+  scoped_ptr<Variable<bool>> var_is_official_build_;
+
+  DISALLOW_COPY_AND_ASSIGN(SystemProvider);
+};
+
+}  // namespace chromeos_policy_manager
+
+#endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_POLICY_MANAGER_SYSTEM_PROVIDER_H_
