diff --git a/Android.mk b/Android.mk
index 2727a44..c9a2297 100644
--- a/Android.mk
+++ b/Android.mk
@@ -387,7 +387,8 @@
     $(ue_common_shared_libraries) \
     libdbus \
     libbrillo-dbus \
-    libchrome-dbus
+    libchrome-dbus \
+    libupdate_engine_client
 LOCAL_SRC_FILES := \
     update_engine_client.cc
 include $(BUILD_EXECUTABLE)
diff --git a/client_library/client_impl.cc b/client_library/client_impl.cc
index 84ca184..3dba873 100644
--- a/client_library/client_impl.cc
+++ b/client_library/client_impl.cc
@@ -66,6 +66,10 @@
   return StringToUpdateStatus(status_as_string, out_update_status);
 }
 
+bool UpdateEngineClientImpl::ResetStatus() {
+  return proxy_->ResetStatus(nullptr);
+}
+
 bool UpdateEngineClientImpl::SetTargetChannel(const string& in_target_channel) {
   return proxy_->SetChannel(
       in_target_channel,
diff --git a/client_library/client_impl.h b/client_library/client_impl.h
index e6194d2..912449f 100644
--- a/client_library/client_impl.h
+++ b/client_library/client_impl.h
@@ -44,6 +44,8 @@
                  std::string* out_new_version,
                  int64_t* out_new_size) override;
 
+  bool ResetStatus() override;
+
   bool SetTargetChannel(const std::string& target_channel) override;
 
   bool GetTargetChannel(std::string* out_channel) override;
diff --git a/client_library/include/update_engine/client.h b/client_library/include/update_engine/client.h
index b3cef66..3406ca6 100644
--- a/client_library/include/update_engine/client.h
+++ b/client_library/include/update_engine/client.h
@@ -66,6 +66,9 @@
                          std::string* out_new_version,
                          int64_t* out_new_size) = 0;
 
+  // Resets the status of the Update Engine
+  virtual bool ResetStatus() = 0;
+
   // Changes the current channel of the device to the target channel.
   virtual bool SetTargetChannel(const std::string& target_channel) = 0;
 
diff --git a/update_engine.gyp b/update_engine.gyp
index 97ed4c2..01d691d 100644
--- a/update_engine.gyp
+++ b/update_engine.gyp
@@ -285,10 +285,32 @@
         'main.cc',
       ],
     },
+    # update_engine client library.
+    {
+      'target_name': 'libupdate_engine_client',
+      'type': 'static_library',
+      'variables': {
+        'deps': [
+          'dbus-1',
+          'libupdate_engine-client',
+        ],
+      },
+      'sources': [
+        'client_library/client.cc',
+        'client_library/client_impl.cc',
+        'update_status_utils.cc',
+      ],
+      'include_dirs': [
+        'client_library/include',
+      ],
+    },
     # update_engine console client.
     {
       'target_name': 'update_engine_client',
       'type': 'executable',
+      'dependencies': [
+        'libupdate_engine_client',
+      ],
       'variables': {
         'exported_deps': [
           'libupdate_engine-client',
diff --git a/update_engine_client.cc b/update_engine_client.cc
index b59f22f..1413806 100644
--- a/update_engine_client.cc
+++ b/update_engine_client.cc
@@ -18,6 +18,7 @@
 #include <sysexits.h>
 #include <unistd.h>
 
+#include <memory>
 #include <string>
 
 #include <base/bind.h>
@@ -27,10 +28,12 @@
 #include <brillo/daemons/dbus_daemon.h>
 #include <brillo/flag_helper.h>
 #include <dbus/bus.h>
+#include <update_engine/client.h>
 #include <update_engine/dbus-constants.h>
 #include <update_engine/dbus-proxies.h>
 
 using std::string;
+using std::unique_ptr;
 using update_engine::kAttemptUpdateFlagNonInteractive;
 using update_engine::kUpdateEngineServiceName;
 
@@ -42,7 +45,10 @@
 
 class UpdateEngineClient : public brillo::DBusDaemon {
  public:
-  UpdateEngineClient(int argc, char** argv) : argc_(argc), argv_(argv) {}
+  UpdateEngineClient(int argc, char** argv) : argc_(argc), argv_(argv) {
+    client_ = update_engine::UpdateEngineClient::CreateInstance();
+  }
+
   ~UpdateEngineClient() override = default;
 
  protected:
@@ -91,8 +97,6 @@
   // The daemon should continue running for this to work.
   void WatchForUpdates();
 
-  void ResetStatus();
-
   // Show the status of the update engine in stdout.
   // Blocking call. Exits the program with error 1 in case of an error.
   void ShowStatus();
@@ -171,6 +175,9 @@
   int argc_;
   char** argv_;
 
+  // Library-based client
+  unique_ptr<update_engine::UpdateEngineClient> client_;
+
   // Tell whether the UpdateEngine service is available after startup.
   bool service_is_available_{false};
 
@@ -240,11 +247,6 @@
                  base::Unretained(this)));
 }
 
-void UpdateEngineClient::ResetStatus() {
-  bool ret = proxy_->ResetStatus(nullptr);
-  CHECK(ret) << "ResetStatus() failed.";
-}
-
 void UpdateEngineClient::ShowStatus() {
   int64_t last_checked_time = 0;
   double progress = 0.0;
@@ -483,10 +485,16 @@
   // Update the status if requested.
   if (FLAGS_reset_status) {
     LOG(INFO) << "Setting Update Engine status to idle ...";
-    ResetStatus();
-    LOG(INFO) << "ResetStatus succeeded; to undo partition table changes run:\n"
-                 "(D=$(rootdev -d) P=$(rootdev -s); cgpt p -i$(($(echo ${P#$D} "
-                 "| sed 's/^[^0-9]*//')-1)) $D;)";
+
+    if (client_->ResetStatus()) {
+      LOG(INFO) << "ResetStatus succeeded; to undo partition table changes "
+                   "run:\n"
+                   "(D=$(rootdev -d) P=$(rootdev -s); cgpt p -i$(($(echo "
+                   "${P#$D} | sed 's/^[^0-9]*//')-1)) $D;)";
+    } else {
+      LOG(ERROR) << "ResetStatus failed";
+      return 1;
+    }
   }
 
   // Changes the current update over cellular network setting.
