diff --git a/delta_performer_unittest.cc b/delta_performer_unittest.cc
index 9292cab..44ecb64 100644
--- a/delta_performer_unittest.cc
+++ b/delta_performer_unittest.cc
@@ -214,8 +214,8 @@
     signature_size_string = base::StringPrintf("%d", signature_size);
   ASSERT_EQ(0,
             System(base::StringPrintf(
-                "./delta_generator -in_file %s -signature_size %s "
-                "-out_hash_file %s",
+                "./delta_generator -in_file=%s -signature_size=%s "
+                "-out_hash_file=%s",
                 payload_path.c_str(),
                 signature_size_string.c_str(),
                 hash_file.c_str())));
@@ -254,14 +254,14 @@
 
   ASSERT_EQ(0,
             System(base::StringPrintf(
-                "./delta_generator -in_file %s -signature_file %s "
-                "-out_file %s",
+                "./delta_generator -in_file=%s -signature_file=%s "
+                "-out_file=%s",
                 payload_path.c_str(),
                 sig_file.c_str(),
                 payload_path.c_str())));
   int verify_result =
       System(base::StringPrintf(
-          "./delta_generator -in_file %s -public_key %s -public_key_version %d",
+          "./delta_generator -in_file=%s -public_key=%s -public_key_version=%d",
           payload_path.c_str(),
           signature_test == kSignatureGeneratedShellRotateCl2 ?
           kUnittestPublicKey2Path : kUnittestPublicKeyPath,
diff --git a/payload_generator/generate_delta_main.cc b/payload_generator/generate_delta_main.cc
index 15e379f..b08e47d 100644
--- a/payload_generator/generate_delta_main.cc
+++ b/payload_generator/generate_delta_main.cc
@@ -12,11 +12,10 @@
 #include <string>
 #include <vector>
 
-#include <base/command_line.h>
 #include <base/logging.h>
 #include <base/strings/string_number_conversions.h>
 #include <base/strings/string_split.h>
-#include <gflags/gflags.h>
+#include <chromeos/flag_helper.h>
 #include <glib.h>
 
 #include "update_engine/delta_performer.h"
@@ -29,79 +28,6 @@
 #include "update_engine/update_metadata.pb.h"
 #include "update_engine/utils.h"
 
-DEFINE_string(old_dir, "",
-              "Directory where the old rootfs is loop mounted read-only");
-DEFINE_string(new_dir, "",
-              "Directory where the new rootfs is loop mounted read-only");
-DEFINE_string(old_image, "", "Path to the old rootfs");
-DEFINE_string(new_image, "", "Path to the new rootfs");
-DEFINE_string(old_kernel, "", "Path to the old kernel partition image");
-DEFINE_string(new_kernel, "", "Path to the new kernel partition image");
-DEFINE_string(in_file, "",
-              "Path to input delta payload file used to hash/sign payloads "
-              "and apply delta over old_image (for debugging)");
-DEFINE_string(out_file, "", "Path to output delta payload file");
-DEFINE_string(out_hash_file, "", "Path to output hash file");
-DEFINE_string(out_metadata_hash_file, "", "Path to output metadata hash file");
-DEFINE_string(private_key, "", "Path to private key in .pem format");
-DEFINE_string(public_key, "", "Path to public key in .pem format");
-DEFINE_int32(public_key_version,
-             chromeos_update_engine::kSignatureMessageCurrentVersion,
-             "Key-check version # of client");
-DEFINE_string(prefs_dir, "/tmp/update_engine_prefs",
-              "Preferences directory, used with apply_delta");
-DEFINE_string(signature_size, "",
-              "Raw signature size used for hash calculation. "
-              "You may pass in multiple sizes by colon separating them. E.g. "
-              "2048:2048:4096 will assume 3 signatures, the first two with "
-              "2048 size and the last 4096.");
-DEFINE_string(signature_file, "",
-              "Raw signature file to sign payload with. To pass multiple "
-              "signatures, use a single argument with a colon between paths, "
-              "e.g. /path/to/sig:/path/to/next:/path/to/last_sig . Each "
-              "signature will be assigned a client version, starting from "
-              "kSignatureOriginalVersion.");
-DEFINE_int32(chunk_size, -1, "Payload chunk size (-1 -- no limit/default)");
-DEFINE_int64(rootfs_partition_size,
-             chromeos_update_engine::kRootFSPartitionSize,
-             "RootFS partition size for the image once installed");
-
-DEFINE_string(old_channel, "",
-              "The channel for the old image. 'dev-channel', 'npo-channel', "
-              "etc. Ignored, except during delta generation.");
-DEFINE_string(old_board, "",
-              "The board for the old image. 'x86-mario', 'lumpy', "
-              "etc. Ignored, except during delta generation.");
-DEFINE_string(old_version, "",
-              "The build version of the old image. 1.2.3, etc.");
-DEFINE_string(old_key, "",
-              "The key used to sign the old image. 'premp', 'mp', 'mp-v3',"
-              " etc");
-DEFINE_string(old_build_channel, "",
-              "The channel for the build of the old image. 'dev-channel', "
-              "etc, but will never contain special channels such as "
-              "'npo-channel'. Ignored, except during delta generation.");
-DEFINE_string(old_build_version, "",
-              "The version of the build containing the old image.");
-
-DEFINE_string(new_channel, "",
-              "The channel for the new image. 'dev-channel', 'npo-channel', "
-              "etc. Ignored, except during delta generation.");
-DEFINE_string(new_board, "",
-              "The board for the new image. 'x86-mario', 'lumpy', "
-              "etc. Ignored, except during delta generation.");
-DEFINE_string(new_version, "",
-              "The build version of the new image. 1.2.3, etc.");
-DEFINE_string(new_key, "",
-              "The key used to sign the new image. 'premp', 'mp', 'mp-v3',"
-              " etc");
-DEFINE_string(new_build_channel, "",
-              "The channel for the build of the new image. 'dev-channel', "
-              "etc, but will never contain special channels such as "
-              "'npo-channel'. Ignored, except during delta generation.");
-DEFINE_string(new_build_version, "",
-              "The version of the build containing the new image.");
-
 // This file contains a simple program that takes an old path, a new path,
 // and an output file as arguments and the path to an output file and
 // generates a delta that can be sent to Chrome OS clients.
@@ -169,15 +95,16 @@
 }
 
 void CalculatePayloadHashForSigning(const vector<int> &sizes,
-                                    const string& out_hash_file) {
+                                    const string& out_hash_file,
+                                    const string& in_file) {
   LOG(INFO) << "Calculating payload hash for signing.";
-  LOG_IF(FATAL, FLAGS_in_file.empty())
+  LOG_IF(FATAL, in_file.empty())
       << "Must pass --in_file to calculate hash for signing.";
   LOG_IF(FATAL, out_hash_file.empty())
       << "Must pass --out_hash_file to calculate hash for signing.";
 
   vector<char> hash;
-  bool result = PayloadSigner::HashPayloadForSigning(FLAGS_in_file, sizes,
+  bool result = PayloadSigner::HashPayloadForSigning(in_file, sizes,
                                                      &hash);
   CHECK(result);
 
@@ -188,15 +115,16 @@
 
 
 void CalculateMetadataHashForSigning(const vector<int> &sizes,
-                                     const string& out_metadata_hash_file) {
+                                     const string& out_metadata_hash_file,
+                                     const string& in_file) {
   LOG(INFO) << "Calculating metadata hash for signing.";
-  LOG_IF(FATAL, FLAGS_in_file.empty())
+  LOG_IF(FATAL, in_file.empty())
       << "Must pass --in_file to calculate metadata hash for signing.";
   LOG_IF(FATAL, out_metadata_hash_file.empty())
       << "Must pass --out_metadata_hash_file to calculate metadata hash.";
 
   vector<char> hash;
-  bool result = PayloadSigner::HashMetadataForSigning(FLAGS_in_file, sizes,
+  bool result = PayloadSigner::HashMetadataForSigning(in_file, sizes,
                                                       &hash);
   CHECK(result);
 
@@ -207,17 +135,19 @@
   LOG(INFO) << "Done calculating metadata hash for signing.";
 }
 
-void SignPayload() {
+void SignPayload(const string& in_file,
+                 const string& out_file,
+                 const string& signature_file) {
   LOG(INFO) << "Signing payload.";
-  LOG_IF(FATAL, FLAGS_in_file.empty())
+  LOG_IF(FATAL, in_file.empty())
       << "Must pass --in_file to sign payload.";
-  LOG_IF(FATAL, FLAGS_out_file.empty())
+  LOG_IF(FATAL, out_file.empty())
       << "Must pass --out_file to sign payload.";
-  LOG_IF(FATAL, FLAGS_signature_file.empty())
+  LOG_IF(FATAL, signature_file.empty())
       << "Must pass --signature_file to sign payload.";
   vector<vector<char>> signatures;
   vector<string> signature_files;
-  base::SplitString(FLAGS_signature_file, ':', &signature_files);
+  base::SplitString(signature_file, ':', &signature_files);
   for (vector<string>::iterator it = signature_files.begin(),
            e = signature_files.end(); it != e; ++it) {
     vector<char> signature;
@@ -226,49 +156,54 @@
   }
   uint64_t final_metadata_size;
   CHECK(PayloadSigner::AddSignatureToPayload(
-      FLAGS_in_file, signatures, FLAGS_out_file, &final_metadata_size));
+      in_file, signatures, out_file, &final_metadata_size));
   LOG(INFO) << "Done signing payload. Final metadata size = "
             << final_metadata_size;
 }
 
-void VerifySignedPayload() {
+void VerifySignedPayload(const string& in_file,
+                         const string& public_key,
+                         int public_key_version) {
   LOG(INFO) << "Verifying signed payload.";
-  LOG_IF(FATAL, FLAGS_in_file.empty())
+  LOG_IF(FATAL, in_file.empty())
       << "Must pass --in_file to verify signed payload.";
-  LOG_IF(FATAL, FLAGS_public_key.empty())
+  LOG_IF(FATAL, public_key.empty())
       << "Must pass --public_key to verify signed payload.";
-  CHECK(PayloadVerifier::VerifySignedPayload(FLAGS_in_file, FLAGS_public_key,
-                                             FLAGS_public_key_version));
+  CHECK(PayloadVerifier::VerifySignedPayload(in_file, public_key,
+                                             public_key_version));
   LOG(INFO) << "Done verifying signed payload.";
 }
 
-void ApplyDelta() {
+void ApplyDelta(const string& in_file,
+                const string& old_kernel,
+                const string& old_image,
+                const string& prefs_dir) {
   LOG(INFO) << "Applying delta.";
-  LOG_IF(FATAL, FLAGS_old_image.empty())
+  LOG_IF(FATAL, old_image.empty())
       << "Must pass --old_image to apply delta.";
   Prefs prefs;
   InstallPlan install_plan;
-  LOG(INFO) << "Setting up preferences under: " << FLAGS_prefs_dir;
-  LOG_IF(ERROR, !prefs.Init(base::FilePath(FLAGS_prefs_dir)))
+  LOG(INFO) << "Setting up preferences under: " << prefs_dir;
+  LOG_IF(ERROR, !prefs.Init(base::FilePath(prefs_dir)))
       << "Failed to initialize preferences.";
   // Get original checksums
   LOG(INFO) << "Calculating original checksums";
   PartitionInfo kern_info, root_info;
   CHECK(DeltaDiffGenerator::InitializePartitionInfo(true,  // is_kernel
-                                                    FLAGS_old_kernel,
+                                                    old_kernel,
                                                     &kern_info));
   CHECK(DeltaDiffGenerator::InitializePartitionInfo(false,  // is_kernel
-                                                    FLAGS_old_image,
+                                                    old_image,
                                                     &root_info));
   install_plan.kernel_hash.assign(kern_info.hash().begin(),
                                   kern_info.hash().end());
   install_plan.rootfs_hash.assign(root_info.hash().begin(),
                                   root_info.hash().end());
   DeltaPerformer performer(&prefs, nullptr, &install_plan);
-  CHECK_EQ(performer.Open(FLAGS_old_image.c_str(), 0, 0), 0);
-  CHECK(performer.OpenKernel(FLAGS_old_kernel.c_str()));
+  CHECK_EQ(performer.Open(old_image.c_str(), 0, 0), 0);
+  CHECK(performer.OpenKernel(old_kernel.c_str()));
   vector<char> buf(1024 * 1024);
-  int fd = open(FLAGS_in_file.c_str(), O_RDONLY, 0);
+  int fd = open(in_file.c_str(), O_RDONLY, 0);
   CHECK_GE(fd, 0);
   ScopedFdCloser fd_closer(&fd);
   for (off_t offset = 0;; offset += buf.size()) {
@@ -284,13 +219,85 @@
 }
 
 int Main(int argc, char** argv) {
-  google::SetUsageMessage(
+  DEFINE_string(old_dir, "",
+                "Directory where the old rootfs is loop mounted read-only");
+  DEFINE_string(new_dir, "",
+                "Directory where the new rootfs is loop mounted read-only");
+  DEFINE_string(old_image, "", "Path to the old rootfs");
+  DEFINE_string(new_image, "", "Path to the new rootfs");
+  DEFINE_string(old_kernel, "", "Path to the old kernel partition image");
+  DEFINE_string(new_kernel, "", "Path to the new kernel partition image");
+  DEFINE_string(in_file, "",
+                "Path to input delta payload file used to hash/sign payloads "
+                "and apply delta over old_image (for debugging)");
+  DEFINE_string(out_file, "", "Path to output delta payload file");
+  DEFINE_string(out_hash_file, "", "Path to output hash file");
+  DEFINE_string(out_metadata_hash_file, "",
+                "Path to output metadata hash file");
+  DEFINE_string(private_key, "", "Path to private key in .pem format");
+  DEFINE_string(public_key, "", "Path to public key in .pem format");
+  DEFINE_int32(public_key_version,
+               chromeos_update_engine::kSignatureMessageCurrentVersion,
+               "Key-check version # of client");
+  DEFINE_string(prefs_dir, "/tmp/update_engine_prefs",
+                "Preferences directory, used with apply_delta");
+  DEFINE_string(signature_size, "",
+                "Raw signature size used for hash calculation. "
+                "You may pass in multiple sizes by colon separating them. E.g. "
+                "2048:2048:4096 will assume 3 signatures, the first two with "
+                "2048 size and the last 4096.");
+  DEFINE_string(signature_file, "",
+                "Raw signature file to sign payload with. To pass multiple "
+                "signatures, use a single argument with a colon between paths, "
+                "e.g. /path/to/sig:/path/to/next:/path/to/last_sig . Each "
+                "signature will be assigned a client version, starting from "
+                "kSignatureOriginalVersion.");
+  DEFINE_int32(chunk_size, -1, "Payload chunk size (-1 -- no limit/default)");
+  DEFINE_int64(rootfs_partition_size,
+               chromeos_update_engine::kRootFSPartitionSize,
+               "RootFS partition size for the image once installed");
+
+  DEFINE_string(old_channel, "",
+                "The channel for the old image. 'dev-channel', 'npo-channel', "
+                "etc. Ignored, except during delta generation.");
+  DEFINE_string(old_board, "",
+                "The board for the old image. 'x86-mario', 'lumpy', "
+                "etc. Ignored, except during delta generation.");
+  DEFINE_string(old_version, "",
+                "The build version of the old image. 1.2.3, etc.");
+  DEFINE_string(old_key, "",
+                "The key used to sign the old image. 'premp', 'mp', 'mp-v3',"
+                " etc");
+  DEFINE_string(old_build_channel, "",
+                "The channel for the build of the old image. 'dev-channel', "
+                "etc, but will never contain special channels such as "
+                "'npo-channel'. Ignored, except during delta generation.");
+  DEFINE_string(old_build_version, "",
+                "The version of the build containing the old image.");
+
+  DEFINE_string(new_channel, "",
+                "The channel for the new image. 'dev-channel', 'npo-channel', "
+                "etc. Ignored, except during delta generation.");
+  DEFINE_string(new_board, "",
+                "The board for the new image. 'x86-mario', 'lumpy', "
+                "etc. Ignored, except during delta generation.");
+  DEFINE_string(new_version, "",
+                "The build version of the new image. 1.2.3, etc.");
+  DEFINE_string(new_key, "",
+                "The key used to sign the new image. 'premp', 'mp', 'mp-v3',"
+                " etc");
+  DEFINE_string(new_build_channel, "",
+                "The channel for the build of the new image. 'dev-channel', "
+                "etc, but will never contain special channels such as "
+                "'npo-channel'. Ignored, except during delta generation.");
+  DEFINE_string(new_build_version, "",
+                "The version of the build containing the new image.");
+
+  chromeos::FlagHelper::Init(argc, argv,
       "Generates a payload to provide to ChromeOS' update_engine.\n\n"
       "This tool can create full payloads and also delta payloads if the src\n"
       "image is provided. It also provides debugging options to apply, sign\n"
       "and verify payloads.");
-  google::ParseCommandLineFlags(&argc, &argv, true);
-  CommandLine::Init(argc, argv);
   Terminator::Init();
   Subprocess::Init();
 
@@ -307,24 +314,28 @@
 
   if (!FLAGS_out_hash_file.empty() || !FLAGS_out_metadata_hash_file.empty()) {
     if (!FLAGS_out_hash_file.empty()) {
-      CalculatePayloadHashForSigning(signature_sizes, FLAGS_out_hash_file);
+      CalculatePayloadHashForSigning(signature_sizes, FLAGS_out_hash_file,
+                                     FLAGS_in_file);
     }
     if (!FLAGS_out_metadata_hash_file.empty()) {
       CalculateMetadataHashForSigning(signature_sizes,
-                                      FLAGS_out_metadata_hash_file);
+                                      FLAGS_out_metadata_hash_file,
+                                      FLAGS_in_file);
     }
     return 0;
   }
   if (!FLAGS_signature_file.empty()) {
-    SignPayload();
+    SignPayload(FLAGS_in_file, FLAGS_out_file, FLAGS_signature_file);
     return 0;
   }
   if (!FLAGS_public_key.empty()) {
-    VerifySignedPayload();
+    VerifySignedPayload(FLAGS_in_file, FLAGS_public_key,
+                        FLAGS_public_key_version);
     return 0;
   }
   if (!FLAGS_in_file.empty()) {
-    ApplyDelta();
+    ApplyDelta(FLAGS_in_file, FLAGS_old_kernel, FLAGS_old_image,
+               FLAGS_prefs_dir);
     return 0;
   }
   CHECK(!FLAGS_new_image.empty());
diff --git a/update_engine.gyp b/update_engine.gyp
index 83269c9..aeb4bad 100644
--- a/update_engine.gyp
+++ b/update_engine.gyp
@@ -125,7 +125,6 @@
         },
         'libraries': [
           '-lbz2',
-          '-lgflags',
           '-lpolicy-<(libbase_ver)',
           '-lrootdev',
           '-lrt',
@@ -227,9 +226,6 @@
             '<@(exported_deps)',
           ],
         },
-        'libraries': [
-          '-lgflags',
-        ],
       },
       'sources': [
         'glib_utils.cc',
diff --git a/update_engine_client.cc b/update_engine_client.cc
index 37d52d6..0fe511c 100644
--- a/update_engine_client.cc
+++ b/update_engine_client.cc
@@ -6,9 +6,10 @@
 
 #include <base/logging.h>
 #include <chromeos/dbus/service_constants.h>
+#include <chromeos/flag_helper.h>
 #include <dbus/dbus.h>
-#include <gflags/gflags.h>
 #include <glib.h>
+#include <inttypes.h>
 
 #include "update_engine/dbus_constants.h"
 #include "update_engine/glib_utils.h"
@@ -25,48 +26,6 @@
 using chromeos_update_engine::utils::GetAndFreeGError;
 using std::string;
 
-DEFINE_string(app_version, "", "Force the current app version.");
-DEFINE_string(channel, "",
-              "Set the target channel. The device will be powerwashed if the "
-              "target channel is more stable than the current channel unless "
-              "--nopowerwash is specified.");
-DEFINE_bool(check_for_update, false, "Initiate check for updates.");
-DEFINE_bool(follow, false, "Wait for any update operations to complete."
-            "Exit status is 0 if the update succeeded, and 1 otherwise.");
-DEFINE_bool(interactive, true, "Mark the update request as interactive.");
-DEFINE_string(omaha_url, "", "The URL of the Omaha update server.");
-DEFINE_string(p2p_update, "",
-              "Enables (\"yes\") or disables (\"no\") the peer-to-peer update "
-              "sharing.");
-DEFINE_bool(powerwash, true, "When performing rollback or channel change, "
-            "do a powerwash or allow it respectively.");
-DEFINE_bool(reboot, false, "Initiate a reboot if needed.");
-DEFINE_bool(is_reboot_needed, false, "Exit status 0 if reboot is needed, "
-            "2 if reboot is not needed or 1 if an error occurred.");
-DEFINE_bool(block_until_reboot_is_needed, false, "Blocks until reboot is "
-            "needed. Returns non-zero exit status if an error occurred.");
-DEFINE_bool(reset_status, false, "Sets the status in update_engine to idle.");
-DEFINE_bool(rollback, false, "Perform a rollback to the previous partition.");
-DEFINE_bool(can_rollback, false, "Shows whether rollback partition "
-            "is available.");
-DEFINE_bool(show_channel, false, "Show the current and target channels.");
-DEFINE_bool(show_p2p_update, false,
-            "Show the current setting for peer-to-peer update sharing.");
-DEFINE_bool(show_update_over_cellular, false,
-            "Show the current setting for updates over cellular networks.");
-DEFINE_bool(status, false, "Print the status to stdout.");
-DEFINE_bool(update, false, "Forces an update and waits for it to complete. "
-            "Implies --follow.");
-DEFINE_string(update_over_cellular, "",
-              "Enables (\"yes\") or disables (\"no\") the updates over "
-              "cellular networks.");
-DEFINE_bool(watch_for_updates, false,
-            "Listen for status updates and print them to the screen.");
-DEFINE_bool(prev_version, false,
-            "Show the previous OS version used before the update reboot.");
-DEFINE_bool(show_kernels, false, "Show the list of kernel patritions and "
-            "whether each of them is bootable or not");
-
 namespace {
 
 bool GetProxy(DBusGProxy** out_proxy) {
@@ -252,14 +211,16 @@
   return devices;
 }
 
-bool CheckForUpdates(const string& app_version, const string& omaha_url) {
+bool CheckForUpdates(const string& app_version,
+                     const string& omaha_url,
+                     bool interactive) {
   DBusGProxy* proxy;
   GError* error = nullptr;
 
   CHECK(GetProxy(&proxy));
 
   AttemptUpdateFlags flags = static_cast<AttemptUpdateFlags>(
-      FLAGS_interactive ? 0 : kAttemptUpdateFlagNonInteractive);
+      interactive ? 0 : kAttemptUpdateFlagNonInteractive);
   gboolean rc =
       update_engine_client_attempt_update_with_flags(proxy,
                                                      app_version.c_str(),
@@ -532,10 +493,52 @@
 }  // namespace
 
 int main(int argc, char** argv) {
+  DEFINE_string(app_version, "", "Force the current app version.");
+  DEFINE_string(channel, "",
+                "Set the target channel. The device will be powerwashed if the "
+                "target channel is more stable than the current channel unless "
+                "--nopowerwash is specified.");
+  DEFINE_bool(check_for_update, false, "Initiate check for updates.");
+  DEFINE_bool(follow, false, "Wait for any update operations to complete."
+              "Exit status is 0 if the update succeeded, and 1 otherwise.");
+  DEFINE_bool(interactive, true, "Mark the update request as interactive.");
+  DEFINE_string(omaha_url, "", "The URL of the Omaha update server.");
+  DEFINE_string(p2p_update, "",
+                "Enables (\"yes\") or disables (\"no\") the peer-to-peer update"
+                " sharing.");
+  DEFINE_bool(powerwash, true, "When performing rollback or channel change, "
+              "do a powerwash or allow it respectively.");
+  DEFINE_bool(reboot, false, "Initiate a reboot if needed.");
+  DEFINE_bool(is_reboot_needed, false, "Exit status 0 if reboot is needed, "
+              "2 if reboot is not needed or 1 if an error occurred.");
+  DEFINE_bool(block_until_reboot_is_needed, false, "Blocks until reboot is "
+              "needed. Returns non-zero exit status if an error occurred.");
+  DEFINE_bool(reset_status, false, "Sets the status in update_engine to idle.");
+  DEFINE_bool(rollback, false, "Perform a rollback to the previous partition.");
+  DEFINE_bool(can_rollback, false, "Shows whether rollback partition "
+              "is available.");
+  DEFINE_bool(show_channel, false, "Show the current and target channels.");
+  DEFINE_bool(show_p2p_update, false,
+              "Show the current setting for peer-to-peer update sharing.");
+  DEFINE_bool(show_update_over_cellular, false,
+              "Show the current setting for updates over cellular networks.");
+  DEFINE_bool(status, false, "Print the status to stdout.");
+  DEFINE_bool(update, false, "Forces an update and waits for it to complete. "
+              "Implies --follow.");
+  DEFINE_string(update_over_cellular, "",
+                "Enables (\"yes\") or disables (\"no\") the updates over "
+                "cellular networks.");
+  DEFINE_bool(watch_for_updates, false,
+              "Listen for status updates and print them to the screen.");
+  DEFINE_bool(prev_version, false,
+              "Show the previous OS version used before the update reboot.");
+  DEFINE_bool(show_kernels, false, "Show the list of kernel patritions and "
+              "whether each of them is bootable or not");
+
   // Boilerplate init commands.
   g_type_init();
   dbus_threads_init_default();
-  google::ParseCommandLineFlags(&argc, &argv, true);
+  chromeos::FlagHelper::Init(argc, argv, "Chromium OS Update Engine Client");
 
   // Update the status if requested.
   if (FLAGS_reset_status) {
@@ -646,7 +649,7 @@
       LOG(INFO) << "Forcing an update by setting app_version to ForcedUpdate.";
     }
     LOG(INFO) << "Initiating update check and install.";
-    CHECK(CheckForUpdates(app_version, FLAGS_omaha_url))
+    CHECK(CheckForUpdates(app_version, FLAGS_omaha_url, FLAGS_interactive))
         << "Update check/initiate update failed.";
   }
 
