diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc
index ab8f189..8c9e075 100644
--- a/buffet/buffet_client.cc
+++ b/buffet/buffet_client.cc
@@ -337,8 +337,10 @@
                        ManagerProxy* manager_proxy) {
     ErrorPtr error;
     std::string error_message;
-    std::unique_ptr<base::Value> json(base::JSONReader::ReadAndReturnError(
-        value, base::JSON_PARSE_RFC, nullptr, &error_message));
+    std::unique_ptr<base::Value> json(
+        base::JSONReader::ReadAndReturnError(value, base::JSON_PARSE_RFC,
+                                             nullptr, &error_message)
+            .release());
     if (!json) {
       Error::AddTo(&error, FROM_HERE, chromeos::errors::json::kDomain,
                    chromeos::errors::json::kParseError, error_message);
diff --git a/buffet/commands/command_manager_unittest.cc b/buffet/commands/command_manager_unittest.cc
index f270655..81c2a5b 100644
--- a/buffet/commands/command_manager_unittest.cc
+++ b/buffet/commands/command_manager_unittest.cc
@@ -56,7 +56,7 @@
 static void SaveJsonToFile(const base::DictionaryValue& dict,
                            const base::FilePath& file_path) {
   std::string json;
-  base::JSONWriter::Write(&dict, &json);
+  base::JSONWriter::Write(dict, &json);
   const int bytes_to_write = static_cast<int>(json.size());
   CHECK_EQ(bytes_to_write, WriteFile(file_path, json.data(), bytes_to_write));
 }
diff --git a/buffet/commands/prop_constraints.cc b/buffet/commands/prop_constraints.cc
index f773290..1fd43e6 100644
--- a/buffet/commands/prop_constraints.cc
+++ b/buffet/commands/prop_constraints.cc
@@ -19,7 +19,7 @@
   std::string result;
   auto json = value.ToJson(nullptr);
   if (json)
-    base::JSONWriter::Write(json.get(), &result);
+    base::JSONWriter::Write(*json, &result);
   return result;
 }
 
diff --git a/buffet/commands/schema_utils.cc b/buffet/commands/schema_utils.cc
index 47b757f..efb758e 100644
--- a/buffet/commands/schema_utils.cc
+++ b/buffet/commands/schema_utils.cc
@@ -21,7 +21,7 @@
                             const std::string& expected_type,
                             chromeos::ErrorPtr* error) {
   std::string value_as_string;
-  base::JSONWriter::Write(value_in, &value_as_string);
+  base::JSONWriter::Write(*value_in, &value_as_string);
   chromeos::Error::AddToPrintf(error, FROM_HERE, errors::commands::kDomain,
                                errors::commands::kTypeMismatch,
                                "Unable to convert value %s into %s",
@@ -255,14 +255,14 @@
 std::string ToString(const native_types::Object& obj) {
   auto val = TypedValueToJson(obj, nullptr);
   std::string str;
-  base::JSONWriter::Write(val.get(), &str);
+  base::JSONWriter::Write(*val, &str);
   return str;
 }
 
 std::string ToString(const native_types::Array& arr) {
   auto val = TypedValueToJson(arr, nullptr);
   std::string str;
-  base::JSONWriter::Write(val.get(), &str);
+  base::JSONWriter::Write(*val, &str);
   return str;
 }
 
diff --git a/buffet/commands/unittest_utils.cc b/buffet/commands/unittest_utils.cc
index be4d4e7..df07289 100644
--- a/buffet/commands/unittest_utils.cc
+++ b/buffet/commands/unittest_utils.cc
@@ -16,8 +16,10 @@
   std::replace(json2.begin(), json2.end(), '\'', '"');
   int error = 0;
   std::string message;
-  std::unique_ptr<base::Value> value{base::JSONReader::ReadAndReturnError(
-      json2, base::JSON_PARSE_RFC, &error, &message)};
+  std::unique_ptr<base::Value> value{
+      base::JSONReader::ReadAndReturnError(json2, base::JSON_PARSE_RFC, &error,
+                                           &message)
+          .release()};
   CHECK(value) << "Failed to load JSON: " << message << ", " << json;
   return value;
 }
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc
index cb0cb3e..279e2b9 100644
--- a/buffet/device_registration_info.cc
+++ b/buffet/device_registration_info.cc
@@ -579,7 +579,7 @@
 
   std::string data;
   if (body)
-    base::JSONWriter::Write(body, &data);
+    base::JSONWriter::Write(*body, &data);
 
   const std::string mime_type{chromeos::mime::AppendParameter(
       chromeos::mime::application::kJson,
diff --git a/buffet/manager.cc b/buffet/manager.cc
index 86f6988..6921f47 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -153,8 +153,8 @@
   }
 
   std::string device_info_str;
-  base::JSONWriter::WriteWithOptions(device_info.get(),
-      base::JSONWriter::OPTIONS_PRETTY_PRINT, &device_info_str);
+  base::JSONWriter::WriteWithOptions(
+      *device_info, base::JSONWriter::OPTIONS_PRETTY_PRINT, &device_info_str);
   response->Return(device_info_str);
 }
 
@@ -191,7 +191,7 @@
   if (!json)
     return false;
   base::JSONWriter::WriteWithOptions(
-      json.get(), base::JSONWriter::OPTIONS_PRETTY_PRINT, state);
+      *json, base::JSONWriter::OPTIONS_PRETTY_PRINT, state);
   return true;
 }
 
@@ -199,8 +199,10 @@
                          const std::string& json_command,
                          const std::string& in_user_role) {
   std::string error_message;
-  std::unique_ptr<base::Value> value(base::JSONReader::ReadAndReturnError(
-      json_command, base::JSON_PARSE_RFC, nullptr, &error_message));
+  std::unique_ptr<base::Value> value(
+      base::JSONReader::ReadAndReturnError(json_command, base::JSON_PARSE_RFC,
+                                           nullptr, &error_message)
+          .release());
   const base::DictionaryValue* command{nullptr};
   if (!value || !value->GetAsDictionary(&command)) {
     return response->ReplyWithError(FROM_HERE, chromeos::errors::json::kDomain,
@@ -229,8 +231,8 @@
     return;
   }
   std::string command_str;
-  base::JSONWriter::WriteWithOptions(command->ToJson().get(),
-      base::JSONWriter::OPTIONS_PRETTY_PRINT, &command_str);
+  base::JSONWriter::WriteWithOptions(
+      *command->ToJson(), base::JSONWriter::OPTIONS_PRETTY_PRINT, &command_str);
   response->Return(command_str);
 }
 
@@ -316,8 +318,8 @@
       }, true, nullptr);
   CHECK(commands);
   std::string json;
-  base::JSONWriter::WriteWithOptions(commands.get(),
-      base::JSONWriter::OPTIONS_PRETTY_PRINT, &json);
+  base::JSONWriter::WriteWithOptions(
+      *commands, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json);
   dbus_adaptor_.SetCommandDefs(json);
 }
 
@@ -326,7 +328,7 @@
   CHECK(state);
   std::string json;
   base::JSONWriter::WriteWithOptions(
-      state.get(), base::JSONWriter::OPTIONS_PRETTY_PRINT, &json);
+      *state, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json);
   dbus_adaptor_.SetState(json);
 }
 
diff --git a/buffet/privet/cloud_delegate.cc b/buffet/privet/cloud_delegate.cc
index 95b0aff..83c7bbb 100644
--- a/buffet/privet/cloud_delegate.cc
+++ b/buffet/privet/cloud_delegate.cc
@@ -144,7 +144,7 @@
     if (!is_gcd_setup_enabled_) {
       chromeos::Error::AddTo(error, FROM_HERE, errors::kDomain,
                              errors::kSetupUnavailable,
-                             "GCD setup unavailible");
+                             "GCD setup unavailable");
       return false;
     }
     if (setup_state_.IsStatusEqual(SetupState::kInProgress)) {
diff --git a/buffet/privet/cloud_delegate.h b/buffet/privet/cloud_delegate.h
index 39f3722..95bcca8 100644
--- a/buffet/privet/cloud_delegate.h
+++ b/buffet/privet/cloud_delegate.h
@@ -139,7 +139,7 @@
       buffet::StateManager* state_manager);
 
  private:
-  ObserverList<Observer> observer_list_;
+  base::ObserverList<Observer> observer_list_;
 };
 
 }  // namespace privetd
diff --git a/buffet/privet/privet_handler_unittest.cc b/buffet/privet/privet_handler_unittest.cc
index bf883bf..2ae76d9 100644
--- a/buffet/privet/privet_handler_unittest.cc
+++ b/buffet/privet/privet_handler_unittest.cc
@@ -37,8 +37,10 @@
   base::ReplaceChars(json, "'", "\"", &json);
   int error = 0;
   std::string message;
-  std::unique_ptr<base::Value> value(base::JSONReader::ReadAndReturnError(
-      json, base::JSON_PARSE_RFC, &error, &message));
+  std::unique_ptr<base::Value> value(
+      base::JSONReader::ReadAndReturnError(json, base::JSON_PARSE_RFC, &error,
+                                           &message)
+          .release());
   EXPECT_TRUE(value.get()) << "\nError: " << message << "\n" << json;
   base::DictionaryValue* dictionary_ptr = nullptr;
   if (value->GetAsDictionary(&dictionary_ptr))
diff --git a/buffet/privet/privet_manager.cc b/buffet/privet/privet_manager.cc
index 28971ae..7b23326 100644
--- a/buffet/privet/privet_manager.cc
+++ b/buffet/privet/privet_manager.cc
@@ -187,7 +187,7 @@
     std::string content_type = chromeos::mime::RemoveParameters(
         GetFirstHeader(*request, chromeos::http::request_header::kContentType));
     if (content_type == chromeos::mime::application::kJson) {
-      value.reset(base::JSONReader::Read(data));
+      value.reset(base::JSONReader::Read(data).release());
       if (value)
         value->GetAsDictionary(&dictionary);
     }
diff --git a/buffet/storage_impls.cc b/buffet/storage_impls.cc
index d030ecb..d3242b7 100644
--- a/buffet/storage_impls.cc
+++ b/buffet/storage_impls.cc
@@ -27,7 +27,7 @@
 bool FileStorage::Save(const base::DictionaryValue& config) {
   std::string json;
   base::JSONWriter::WriteWithOptions(
-      &config, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json);
+      config, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json);
   return base::ImportantFileWriter::WriteFileAtomically(file_path_, json);
 }
 
diff --git a/buffet/test_daemon/main.cc b/buffet/test_daemon/main.cc
index 64c0c00..eeb0caf 100644
--- a/buffet/test_daemon/main.cc
+++ b/buffet/test_daemon/main.cc
@@ -66,7 +66,7 @@
 std::string DictionaryToString(const chromeos::VariantDictionary& dictionary) {
   std::unique_ptr<base::DictionaryValue> json{DictionaryToJson(dictionary)};
   std::string str;
-  base::JSONWriter::Write(json.get(), &str);
+  base::JSONWriter::Write(*json, &str);
   return str;
 }
 
diff --git a/buffet/utils.cc b/buffet/utils.cc
index 707b19d..33fc292 100644
--- a/buffet/utils.cc
+++ b/buffet/utils.cc
@@ -11,6 +11,7 @@
 #include <sys/types.h>
 #include <unistd.h>
 
+#include <base/bind_helpers.h>
 #include <base/files/file_util.h>
 #include <base/json/json_reader.h>
 #include <chromeos/errors/error_codes.h>
@@ -56,7 +57,7 @@
     chromeos::ErrorPtr* error) {
   std::unique_ptr<base::DictionaryValue> result;
   std::string error_message;
-  base::Value* value = base::JSONReader::ReadAndReturnError(
+  auto value = base::JSONReader::ReadAndReturnError(
       json_string, base::JSON_PARSE_RFC, nullptr, &error_message);
   if (!value) {
     chromeos::Error::AddToPrintf(error, FROM_HERE,
@@ -69,13 +70,15 @@
   }
   base::DictionaryValue* dict_value = nullptr;
   if (!value->GetAsDictionary(&dict_value)) {
-    delete value;
     chromeos::Error::AddToPrintf(error, FROM_HERE,
                                  chromeos::errors::json::kDomain,
                                  chromeos::errors::json::kObjectExpected,
                                  "JSON string '%s' is not a JSON object",
                                  LimitString(json_string, kMaxStrLen).c_str());
     return result;
+  } else {
+    // |value| is now owned by |dict_value|.
+    base::IgnoreResult(value.release());
   }
   result.reset(dict_value);
   return result;
