diff --git a/metrics/metrics.gyp b/metrics/metrics.gyp
index c6c7ffe..cd07682 100644
--- a/metrics/metrics.gyp
+++ b/metrics/metrics.gyp
@@ -27,7 +27,6 @@
       'link_settings': {
         'libraries': [
           '-lrootdev',
-          '-lgflags',
         ],
       },
       'sources': [
@@ -56,7 +55,6 @@
       ],
       'link_settings': {
         'libraries': [
-          '-lgflags',
           '-lvboot_host',
         ],
       },
diff --git a/metrics/metrics_daemon.cc b/metrics/metrics_daemon.cc
index 5f9d851..bdd181c 100644
--- a/metrics/metrics_daemon.cc
+++ b/metrics/metrics_daemon.cc
@@ -187,8 +187,8 @@
 }
 
 void MetricsDaemon::RunUploaderTest() {
-  upload_service_.reset(new UploadService(testing_));
-  upload_service_->Init();
+  upload_service_.reset(new UploadService(testing_, server_));
+  upload_service_->Init(upload_interval_secs_, metrics_file_);
   upload_service_->UploadEvent();
 }
 
@@ -215,11 +215,18 @@
                          const string& diskstats_path,
                          const string& vmstats_path,
                          const string& scaling_max_freq_path,
-                         const string& cpuinfo_max_freq_path) {
+                         const string& cpuinfo_max_freq_path,
+                         int upload_interval_secs,
+                         const string& server,
+                         const string& metrics_file) {
   testing_ = testing;
   DCHECK(metrics_lib != nullptr);
   metrics_lib_ = metrics_lib;
 
+  upload_interval_secs_ = upload_interval_secs;
+  server_ = server;
+  metrics_file_ = metrics_file;
+
   // Get ticks per second (HZ) on this system.
   // Sysconf cannot fail, so no sanity checks are needed.
   ticks_per_second_ = sysconf(_SC_CLK_TCK);
@@ -314,8 +321,8 @@
 
   if (uploader_active) {
     LOG(INFO) << "uploader enabled";
-    upload_service_.reset(new UploadService(testing_));
-    upload_service_->Init();
+    upload_service_.reset(new UploadService(testing_, server_));
+    upload_service_->Init(upload_interval_secs_, metrics_file_);
   }
 }
 
diff --git a/metrics/metrics_daemon.h b/metrics/metrics_daemon.h
index 205ea69..07072f9 100644
--- a/metrics/metrics_daemon.h
+++ b/metrics/metrics_daemon.h
@@ -36,7 +36,10 @@
             const std::string& diskstats_path,
             const std::string& vmstats_path,
             const std::string& cpuinfo_max_freq_path,
-            const std::string& scaling_max_freq_path);
+            const std::string& scaling_max_freq_path,
+            int upload_interval_secs,
+            const std::string& server,
+            const std::string& metrics_file);
 
   // Does all the work. If |run_as_daemon| is true, daemonizes by
   // forking.
@@ -372,6 +375,10 @@
   std::string scaling_max_freq_path_;
   std::string cpuinfo_max_freq_path_;
 
+  int upload_interval_secs_;
+  std::string server_;
+  std::string metrics_file_;
+
   scoped_ptr<UploadService> upload_service_;
 };
 
diff --git a/metrics/metrics_daemon_main.cc b/metrics/metrics_daemon_main.cc
index e529afd..e92ce31 100644
--- a/metrics/metrics_daemon_main.cc
+++ b/metrics/metrics_daemon_main.cc
@@ -6,8 +6,8 @@
 #include <base/command_line.h>
 #include <base/logging.h>
 #include <base/strings/string_util.h>
+#include <chromeos/flag_helper.h>
 #include <chromeos/syslog_logging.h>
-#include <gflags/gflags.h>
 #include <rootdev/rootdev.h>
 
 #include "metrics/metrics_daemon.h"
@@ -17,19 +17,6 @@
 const char kCpuinfoMaxFreqPath[] =
     "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq";
 
-// TODO(bsimonnet): Change this to use base::CommandLine (crbug.com/375017)
-DEFINE_bool(daemon, true, "run as daemon (use -nodaemon for debugging)");
-
-// The uploader is disabled by default on ChromeOS as Chrome is responsible for
-// sending the metrics.
-DEFINE_bool(uploader, false, "activate the uploader");
-
-// Upload the metrics once and exit. (used for testing)
-DEFINE_bool(
-    uploader_test,
-    false,
-    "run the uploader once and exit");
-
 // Returns the path to the disk stats in the sysfs.  Returns the null string if
 // it cannot find the disk stats file.
 static
@@ -56,8 +43,30 @@
 }
 
 int main(int argc, char** argv) {
-  CommandLine::Init(argc, argv);
-  google::ParseCommandLineFlags(&argc, &argv, true);
+  DEFINE_bool(daemon, true, "run as daemon (use -nodaemon for debugging)");
+
+  // The uploader is disabled by default on ChromeOS as Chrome is responsible
+  // for sending the metrics.
+  DEFINE_bool(uploader, false, "activate the uploader");
+
+  // Upload the metrics once and exit. (used for testing)
+  DEFINE_bool(uploader_test,
+              false,
+              "run the uploader once and exit");
+
+  // Upload Service flags.
+  DEFINE_int32(upload_interval_secs,
+               1800,
+               "Interval at which metrics_daemon sends the metrics. (needs "
+               "-uploader)");
+  DEFINE_string(server,
+                "https://clients4.google.com/uma/v2",
+                "Server to upload the metrics to. (needs -uploader)");
+  DEFINE_string(metrics_file,
+                "/var/run/metrics/uma-events",
+                "File to use as a proxy for uploading the metrics");
+
+  chromeos::FlagHelper::Init(argc, argv, "Chromium OS Metrics Daemon");
 
   // Also log to stderr when not running as daemon.
   chromeos::InitLog(chromeos::kLogToSyslog | chromeos::kLogHeader |
@@ -71,7 +80,10 @@
               MetricsMainDiskStatsPath(),
               "/proc/vmstat",
               kScalingMaxFreqPath,
-              kCpuinfoMaxFreqPath);
+              kCpuinfoMaxFreqPath,
+              FLAGS_upload_interval_secs,
+              FLAGS_server,
+              FLAGS_metrics_file);
 
 
   base::AtExitManager at_exit_manager;
diff --git a/metrics/metrics_daemon_test.cc b/metrics/metrics_daemon_test.cc
index 9b60ca4..78559df 100644
--- a/metrics/metrics_daemon_test.cc
+++ b/metrics/metrics_daemon_test.cc
@@ -45,6 +45,8 @@
 static const char kFakeVmStatsName[] = "fake-vm-stats";
 static const char kFakeScalingMaxFreqPath[] = "fake-scaling-max-freq";
 static const char kFakeCpuinfoMaxFreqPath[] = "fake-cpuinfo-max-freq";
+static const char kMetricsServer[] = "https://clients4.google.com/uma/v2";
+static const char kMetricsFilePath[] = "/var/run/metrics/uma-events";
 
 class MetricsDaemonTest : public testing::Test {
  protected:
@@ -69,7 +71,10 @@
                  kFakeDiskStatsName,
                  kFakeVmStatsName,
                  kFakeScalingMaxFreqPath,
-                 kFakeCpuinfoMaxFreqPath);
+                 kFakeCpuinfoMaxFreqPath,
+                 1800,
+                 kMetricsServer,
+                 kMetricsFilePath);
 
     // Replace original persistent values with mock ones.
     daily_active_use_mock_ =
diff --git a/metrics/uploader/upload_service.cc b/metrics/uploader/upload_service.cc
index 3266a8e..0ebfc78 100644
--- a/metrics/uploader/upload_service.cc
+++ b/metrics/uploader/upload_service.cc
@@ -17,36 +17,24 @@
 #include <base/sha1.h>
 #include <components/metrics/chromeos/metric_sample.h>
 #include <components/metrics/chromeos/serialization_utils.h>
-#include <gflags/gflags.h>
 
 #include "metrics/uploader/metrics_log.h"
 #include "metrics/uploader/sender_http.h"
 #include "metrics/uploader/system_profile_cache.h"
 
-DEFINE_int32(
-    upload_interval_secs,
-    1800,
-    "Interval at which metrics_daemon sends the metrics. (needs -uploader)");
-
-DEFINE_string(server,
-              "https://clients4.google.com/uma/v2",
-              "Server to upload the metrics to. (needs -uploader)");
-
-DEFINE_string(metrics_file,
-              "/var/run/metrics/uma-events",
-              "File to use as a proxy for uploading the metrics");
-
 const int UploadService::kMaxFailedUpload = 10;
 
-UploadService::UploadService(bool testing)
+UploadService::UploadService(bool testing, const std::string& server)
     : system_profile_setter_(new SystemProfileCache(testing)),
       histogram_snapshot_manager_(this),
-      sender_(new HttpSender(FLAGS_server)) {
+      sender_(new HttpSender(server)) {
 }
 
-void UploadService::Init() {
+void UploadService::Init(int upload_interval_secs,
+                         const std::string& metrics_file) {
   base::StatisticsRecorder::Initialize();
-  g_timeout_add_seconds(FLAGS_upload_interval_secs, &UploadEventStatic, this);
+  metrics_file_ = metrics_file;
+  g_timeout_add_seconds(upload_interval_secs, &UploadEventStatic, this);
 }
 
 void UploadService::StartNewLog() {
@@ -116,7 +104,7 @@
 
   ScopedVector<metrics::MetricSample> vector;
   metrics::SerializationUtils::ReadAndTruncateMetricsFromFile(
-      FLAGS_metrics_file, &vector);
+      metrics_file_, &vector);
 
   int i = 0;
   for (ScopedVector<metrics::MetricSample>::iterator it = vector.begin();
diff --git a/metrics/uploader/upload_service.h b/metrics/uploader/upload_service.h
index 114c5e4..c0a1430 100644
--- a/metrics/uploader/upload_service.h
+++ b/metrics/uploader/upload_service.h
@@ -54,9 +54,10 @@
 //
 class UploadService : public base::HistogramFlattener {
  public:
-  explicit UploadService(bool testing);
+  explicit UploadService(bool testing, const std::string& server);
 
-  void Init();
+  void Init(int upload_interval_secs,
+            const std::string& metrics_file);
 
   // Starts a new log. The log needs to be regenerated after each successful
   // launch as it is destroyed when staging the log.
@@ -133,6 +134,8 @@
   int failed_upload_count_;
   scoped_ptr<MetricsLog> current_log_;
   scoped_ptr<MetricsLog> staged_log_;
+
+  std::string metrics_file_;
 };
 
 #endif  // METRICS_UPLOADER_UPLOAD_SERVICE_H_
diff --git a/metrics/uploader/upload_service_test.cc b/metrics/uploader/upload_service_test.cc
index 94453b2..9badf64 100644
--- a/metrics/uploader/upload_service_test.cc
+++ b/metrics/uploader/upload_service_test.cc
@@ -19,16 +19,19 @@
 #include "uploader/system_profile_cache.h"
 #include "uploader/upload_service.h"
 
+static const char kMetricsServer[] = "https://clients4.google.com/uma/v2";
+static const char kMetricsFilePath[] = "/var/run/metrics/uma-events";
+
 class UploadServiceTest : public testing::Test {
  protected:
   UploadServiceTest()
       : cache_(true),
-        upload_service_(true),
+        upload_service_(true, kMetricsServer),
         exit_manager_(new base::AtExitManager()) {
     sender_ = new SenderMock;
     upload_service_.sender_.reset(sender_);
     upload_service_.system_profile_setter_.reset(new MockSystemProfileSetter());
-    upload_service_.Init();
+    upload_service_.Init(1800, kMetricsFilePath);
   }
 
   virtual void SetUp() {
@@ -124,7 +127,7 @@
 }
 
 TEST_F(UploadServiceTest, LogEmptyByDefault) {
-  UploadService upload_service(true);
+  UploadService upload_service(true, kMetricsServer);
 
   // current_log_ should be initialized later as it needs AtExitManager to exit
   // in order to gather system information from SysInfo.
