diff --git a/buffet/buffet_config.cc b/buffet/buffet_config.cc
index c89bb2d..72f8338 100644
--- a/buffet/buffet_config.cc
+++ b/buffet/buffet_config.cc
@@ -50,6 +50,14 @@
   return role == "none" || role == "viewer" || role == "user";
 }
 
+bool StringToTimeDelta(const std::string& value, base::TimeDelta* delta) {
+  uint64_t ms{0};
+  if (!base::StringToUint64(value, &ms))
+    return false;
+  *delta = base::TimeDelta::FromMilliseconds(ms);
+  return true;
+}
+
 }  // namespace
 
 namespace buffet {
@@ -130,10 +138,10 @@
 
   std::string polling_period_str;
   if (store.GetString(config_keys::kPollingPeriodMs, &polling_period_str))
-    CHECK(base::StringToUint64(polling_period_str, &polling_period_ms_));
+    CHECK(StringToTimeDelta(polling_period_str, &polling_period_));
 
   if (store.GetString(config_keys::kBackupPollingPeriodMs, &polling_period_str))
-    CHECK(base::StringToUint64(polling_period_str, &backup_polling_period_ms_));
+    CHECK(StringToTimeDelta(polling_period_str, &backup_polling_period_));
 
   store.GetBoolean(config_keys::kWifiAutoSetupEnabled,
                    &wifi_auto_setup_enabled_);
diff --git a/buffet/buffet_config.h b/buffet/buffet_config.h
index ac04d28..a2b25d9 100644
--- a/buffet/buffet_config.h
+++ b/buffet/buffet_config.h
@@ -102,9 +102,9 @@
   const std::string& model_name() const { return model_name_; }
   const std::string& model_id() const { return model_id_; }
   const std::string& device_kind() const { return device_kind_; }
-  uint64_t polling_period_ms() const { return polling_period_ms_; }
-  uint64_t backup_polling_period_ms() const {
-    return backup_polling_period_ms_;
+  base::TimeDelta polling_period() const { return polling_period_; }
+  base::TimeDelta backup_polling_period() const {
+    return backup_polling_period_;
   }
 
   bool wifi_auto_setup_enabled() const { return wifi_auto_setup_enabled_; }
@@ -149,8 +149,8 @@
   std::string model_name_{"Brillo"};
   std::string model_id_{"AAAAA"};
   std::string device_kind_{"vendor"};
-  uint64_t polling_period_ms_{7000};  // 7 seconds.
-  uint64_t backup_polling_period_ms_{30 * 60 * 1000};  // 30 minutes.
+  base::TimeDelta polling_period_{base::TimeDelta::FromSeconds(7)};
+  base::TimeDelta backup_polling_period_{base::TimeDelta::FromMinutes(30)};
 
   bool wifi_auto_setup_enabled_{true};
   std::set<privetd::PairingType> pairing_modes_{privetd::PairingType::kPinCode};
diff --git a/buffet/buffet_config_unittest.cc b/buffet/buffet_config_unittest.cc
index f2c7063..7fa1933 100644
--- a/buffet/buffet_config_unittest.cc
+++ b/buffet/buffet_config_unittest.cc
@@ -55,8 +55,8 @@
   EXPECT_EQ("Brillo", config_->model_name());
   EXPECT_EQ("AAAAA", config_->model_id());
   EXPECT_EQ("vendor", config_->device_kind());
-  EXPECT_EQ(7000, config_->polling_period_ms());
-  EXPECT_EQ(1800000, config_->backup_polling_period_ms());
+  EXPECT_EQ(base::TimeDelta::FromSeconds(7), config_->polling_period());
+  EXPECT_EQ(base::TimeDelta::FromMinutes(30), config_->backup_polling_period());
   EXPECT_TRUE(config_->wifi_auto_setup_enabled());
   EXPECT_EQ(std::set<privetd::PairingType>{privetd::PairingType::kPinCode},
             config_->pairing_modes());
@@ -115,8 +115,10 @@
   EXPECT_EQ("conf_model_name", config_->model_name());
   EXPECT_EQ("ABCDE", config_->model_id());
   EXPECT_EQ("developmentBoard", config_->device_kind());
-  EXPECT_EQ(12345, config_->polling_period_ms());
-  EXPECT_EQ(6589, config_->backup_polling_period_ms());
+  EXPECT_EQ(base::TimeDelta::FromMilliseconds(12345),
+            config_->polling_period());
+  EXPECT_EQ(base::TimeDelta::FromMilliseconds(6589),
+            config_->backup_polling_period());
   EXPECT_FALSE(config_->wifi_auto_setup_enabled());
   std::set<privetd::PairingType> pairing_types{
       privetd::PairingType::kPinCode, privetd::PairingType::kEmbeddedCode,
@@ -199,9 +201,8 @@
   EXPECT_EQ(default_.model_name(), config_->model_name());
   EXPECT_EQ(default_.model_id(), config_->model_id());
   EXPECT_EQ(default_.device_kind(), config_->device_kind());
-  EXPECT_EQ(default_.polling_period_ms(), config_->polling_period_ms());
-  EXPECT_EQ(default_.backup_polling_period_ms(),
-            config_->backup_polling_period_ms());
+  EXPECT_EQ(default_.polling_period(), config_->polling_period());
+  EXPECT_EQ(default_.backup_polling_period(), config_->backup_polling_period());
   EXPECT_EQ(default_.wifi_auto_setup_enabled(),
             config_->wifi_auto_setup_enabled());
   EXPECT_EQ(default_.pairing_modes(), config_->pairing_modes());
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc
index 2d9fb80..5b9e5ee 100644
--- a/buffet/device_registration_info.cc
+++ b/buffet/device_registration_info.cc
@@ -331,8 +331,7 @@
   // call back to OnConnected() and at that time we'll switch to use the
   // primary channel and switch periodic poll into much more infrequent backup
   // poll mode.
-  const base::TimeDelta pull_interval =
-      base::TimeDelta::FromMilliseconds(config_->polling_period_ms());
+  const base::TimeDelta pull_interval = config_->polling_period();
   if (!pull_channel_) {
     pull_channel_.reset(new PullChannel{pull_interval, task_runner});
     pull_channel_->Start(this);
@@ -976,8 +975,7 @@
             << channel_name;
   CHECK_EQ(primary_notification_channel_->GetName(), channel_name);
   notification_channel_starting_ = false;
-  pull_channel_->UpdatePullInterval(
-      base::TimeDelta::FromMilliseconds(config_->backup_polling_period_ms()));
+  pull_channel_->UpdatePullInterval(config_->backup_polling_period());
   current_notification_channel_ = primary_notification_channel_.get();
   UpdateDeviceResource(base::Bind(&base::DoNothing),
                        base::Bind(&IgnoreCloudError));
@@ -985,8 +983,7 @@
 
 void DeviceRegistrationInfo::OnDisconnected() {
   LOG(INFO) << "Notification channel disconnected";
-  pull_channel_->UpdatePullInterval(
-      base::TimeDelta::FromMilliseconds(config_->polling_period_ms()));
+  pull_channel_->UpdatePullInterval(config_->polling_period());
   current_notification_channel_ = pull_channel_.get();
   UpdateDeviceResource(base::Bind(&base::DoNothing),
                        base::Bind(&IgnoreCloudError));
