diff --git a/boot_control.h b/boot_control.h
new file mode 100644
index 0000000..d6c403b
--- /dev/null
+++ b/boot_control.h
@@ -0,0 +1,34 @@
+//
+// Copyright (C) 2015 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef UPDATE_ENGINE_BOOT_CONTROL_H_
+#define UPDATE_ENGINE_BOOT_CONTROL_H_
+
+#include <memory>
+
+#include "update_engine/boot_control_interface.h"
+
+namespace chromeos_update_engine {
+namespace boot_control {
+
+// The real BootControlInterface is platform-specific. This factory function
+// creates a new BootControlInterface instance for the current platform.
+std::unique_ptr<BootControlInterface> CreateBootControl();
+
+}  // namespace boot_control
+}  // namespace chromeos_update_engine
+
+#endif  // UPDATE_ENGINE_BOOT_CONTROL_H_
diff --git a/boot_control_android.cc b/boot_control_android.cc
new file mode 100644
index 0000000..fa9defd
--- /dev/null
+++ b/boot_control_android.cc
@@ -0,0 +1,60 @@
+//
+// Copyright (C) 2015 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#include "update_engine/boot_control_android.h"
+
+#include <chromeos/make_unique_ptr.h>
+
+#include "update_engine/boot_control.h"
+
+using std::string;
+
+namespace chromeos_update_engine {
+
+namespace boot_control {
+
+// Factory defined in boot_control.h.
+std::unique_ptr<BootControlInterface> CreateBootControl() {
+  return chromeos::make_unique_ptr(new BootControlAndroid());
+}
+
+}  // namespace boot_control
+
+// TODO(deymo): Read the values from the libhardware HAL.
+
+unsigned int BootControlAndroid::GetNumSlots() const {
+  return 2;
+}
+
+BootControlInterface::Slot BootControlAndroid::GetCurrentSlot() const {
+  return 0;
+}
+
+bool BootControlAndroid::GetPartitionDevice(const string& partition_name,
+                                            unsigned int slot,
+                                            string* device) const {
+  return false;
+}
+
+bool BootControlAndroid::IsSlotBootable(Slot slot) const {
+  return false;
+}
+
+bool BootControlAndroid::MarkSlotUnbootable(Slot slot) {
+  return true;
+}
+
+}  // namespace chromeos_update_engine
diff --git a/boot_control_android.h b/boot_control_android.h
new file mode 100644
index 0000000..21c5878
--- /dev/null
+++ b/boot_control_android.h
@@ -0,0 +1,50 @@
+//
+// Copyright (C) 2015 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef UPDATE_ENGINE_BOOT_CONTROL_ANDROID_H_
+#define UPDATE_ENGINE_BOOT_CONTROL_ANDROID_H_
+
+#include <string>
+
+#include <gtest/gtest_prod.h>  // for FRIEND_TEST
+
+#include "update_engine/boot_control_interface.h"
+
+namespace chromeos_update_engine {
+
+// The Android implementation of the BootControlInterface. This implementation
+// uses the libhardware's boot_control HAL to access the bootloader.
+class BootControlAndroid : public BootControlInterface {
+ public:
+  BootControlAndroid() = default;
+  ~BootControlAndroid() = default;
+
+  // BootControlInterface overrides.
+  unsigned int GetNumSlots() const override;
+  BootControlInterface::Slot GetCurrentSlot() const override;
+  bool GetPartitionDevice(const std::string& partition_name,
+                          BootControlInterface::Slot slot,
+                          std::string* device) const override;
+  bool IsSlotBootable(BootControlInterface::Slot slot) const override;
+  bool MarkSlotUnbootable(BootControlInterface::Slot slot) override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(BootControlAndroid);
+};
+
+}  // namespace chromeos_update_engine
+
+#endif  // UPDATE_ENGINE_BOOT_CONTROL_ANDROID_H_
diff --git a/boot_control_chromeos.cc b/boot_control_chromeos.cc
index ad82401..03e1c26 100644
--- a/boot_control_chromeos.cc
+++ b/boot_control_chromeos.cc
@@ -21,12 +21,14 @@
 #include <base/files/file_path.h>
 #include <base/files/file_util.h>
 #include <base/strings/string_util.h>
+#include <chromeos/make_unique_ptr.h>
 #include <rootdev/rootdev.h>
 
 extern "C" {
 #include <vboot/vboot_host.h>
 }
 
+#include "update_engine/boot_control.h"
 #include "update_engine/utils.h"
 
 using std::string;
@@ -59,6 +61,20 @@
 
 namespace chromeos_update_engine {
 
+namespace boot_control {
+
+// Factory defined in boot_control.h.
+std::unique_ptr<BootControlInterface> CreateBootControl() {
+  std::unique_ptr<BootControlChromeOS> boot_control_chromeos(
+      new BootControlChromeOS());
+  if (!boot_control_chromeos->Init()) {
+    LOG(ERROR) << "Ignoring BootControlChromeOS failure. We won't run updates.";
+  }
+  return chromeos::make_unique_ptr(boot_control_chromeos.release());
+}
+
+}  // namespace boot_control
+
 bool BootControlChromeOS::Init() {
   string boot_device = GetBootDevice();
   if (boot_device.empty())
diff --git a/real_system_state.cc b/real_system_state.cc
index 7dfa012..03cbe2e 100644
--- a/real_system_state.cc
+++ b/real_system_state.cc
@@ -19,7 +19,7 @@
 #include <base/files/file_util.h>
 #include <base/time/time.h>
 
-#include "update_engine/boot_control_chromeos.h"
+#include "update_engine/boot_control.h"
 #include "update_engine/constants.h"
 #include "update_engine/hardware.h"
 #include "update_engine/update_manager/state_factory.h"
@@ -38,12 +38,9 @@
 bool RealSystemState::Initialize() {
   metrics_lib_.Init();
 
-  // TODO(deymo): Initialize BootControl based on the build environment.
-  BootControlChromeOS* boot_control_cros = new BootControlChromeOS();
-  boot_control_.reset(boot_control_cros);
-  if (!boot_control_cros->Init()) {
-    LOG(ERROR) << "Ignoring BootControlChromeOS failure. We won't run updates.";
-  }
+  boot_control_ = boot_control::CreateBootControl();
+  if (!boot_control_)
+    return false;
 
   hardware_ = hardware::CreateHardware();
   if (!hardware_) {
