diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc
index 63ba2cc..635c037 100644
--- a/buffet/buffet_client.cc
+++ b/buffet/buffet_client.cc
@@ -16,6 +16,7 @@
 #include <chromeos/dbus/data_serialization.h>
 #include <chromeos/dbus/dbus_method_invoker.h>
 #include <chromeos/errors/error.h>
+#include <chromeos/variant_dictionary.h>
 #include <dbus/bus.h>
 #include <dbus/message.h>
 #include <dbus/object_proxy.h>
@@ -28,8 +29,8 @@
 
 using chromeos::dbus_utils::CallMethodAndBlock;
 using chromeos::dbus_utils::CallMethodAndBlockWithTimeout;
-using chromeos::dbus_utils::Dictionary;
 using chromeos::dbus_utils::ExtractMethodCallResults;
+using chromeos::VariantDictionary;
 using chromeos::ErrorPtr;
 
 namespace {
@@ -147,7 +148,7 @@
       return EX_USAGE;
     }
 
-    Dictionary params;
+    VariantDictionary params;
     if (!args.empty()) {
       auto key_values = chromeos::data_encoding::WebParamsDecode(args.front());
       for (const auto& pair : key_values) {
@@ -214,7 +215,7 @@
     }
 
     ErrorPtr error;
-    Dictionary property_set{{args.front(), args.back()}};
+    VariantDictionary property_set{{args.front(), args.back()}};
     auto response = CallMethodAndBlock(
         manager_proxy_,
         kManagerInterface, kManagerUpdateStateMethod, &error,
diff --git a/buffet/commands/dbus_command_proxy.cc b/buffet/commands/dbus_command_proxy.cc
index 4bbf1ab..0b97c06 100644
--- a/buffet/commands/dbus_command_proxy.cc
+++ b/buffet/commands/dbus_command_proxy.cc
@@ -61,7 +61,7 @@
   progress_.SetValue(command_instance_->GetProgress());
   // Convert a string-to-PropValue map into a string-to-Any map which can be
   // sent over D-Bus.
-  chromeos::dbus_utils::Dictionary params;
+  chromeos::VariantDictionary params;
   for (const auto& param_pair : command_instance_->GetParameters()) {
     params.insert(std::make_pair(param_pair.first,
                                  param_pair.second->GetValueAsAny()));
diff --git a/buffet/commands/dbus_command_proxy.h b/buffet/commands/dbus_command_proxy.h
index eb37d32..553470e 100644
--- a/buffet/commands/dbus_command_proxy.h
+++ b/buffet/commands/dbus_command_proxy.h
@@ -46,7 +46,7 @@
   chromeos::dbus_utils::ExportedProperty<std::string> id_;
   chromeos::dbus_utils::ExportedProperty<std::string> status_;
   chromeos::dbus_utils::ExportedProperty<int32_t> progress_;
-  chromeos::dbus_utils::ExportedProperty<chromeos::dbus_utils::Dictionary>
+  chromeos::dbus_utils::ExportedProperty<chromeos::VariantDictionary>
       parameters_;
 
   // Handles calls to org.chromium.Buffet.Command.SetProgress(progress).
diff --git a/buffet/commands/dbus_command_proxy_unittest.cc b/buffet/commands/dbus_command_proxy_unittest.cc
index d4550a5..34d9f1d 100644
--- a/buffet/commands/dbus_command_proxy_unittest.cc
+++ b/buffet/commands/dbus_command_proxy_unittest.cc
@@ -24,8 +24,8 @@
 
 using buffet::unittests::CreateDictionaryValue;
 using chromeos::dbus_utils::AsyncEventSequencer;
-using chromeos::dbus_utils::Dictionary;
 using chromeos::dbus_utils::ExportedObjectManager;
+using chromeos::VariantDictionary;
 
 namespace buffet {
 
@@ -118,7 +118,7 @@
     return command_proxy_->progress_.value();
   }
 
-  Dictionary GetParameters() const {
+  VariantDictionary GetParameters() const {
     return command_proxy_->parameters_.value();
   }
 
@@ -175,7 +175,7 @@
 };
 
 TEST_F(DBusCommandProxyTest, Init) {
-  Dictionary params = {
+  VariantDictionary params = {
     {"height", int32_t{53}},
     {"_jumpType", std::string{"_withKick"}},
   };
@@ -192,7 +192,8 @@
             GetPropertyValue<std::string>(dbus_constants::kCommandStatus));
   EXPECT_EQ(0, GetPropertyValue<int32_t>(dbus_constants::kCommandProgress));
   EXPECT_EQ(params,
-            GetPropertyValue<Dictionary>(dbus_constants::kCommandParameters));
+            GetPropertyValue<VariantDictionary>(
+                dbus_constants::kCommandParameters));
 }
 
 TEST_F(DBusCommandProxyTest, SetProgress) {
diff --git a/buffet/commands/schema_utils.cc b/buffet/commands/schema_utils.cc
index 4106511..8f64eec 100644
--- a/buffet/commands/schema_utils.cc
+++ b/buffet/commands/schema_utils.cc
@@ -9,6 +9,7 @@
 #include <string>
 
 #include <base/json/json_writer.h>
+#include <chromeos/variant_dictionary.h>
 
 #include "buffet/commands/object_schema.h"
 #include "buffet/commands/prop_types.h"
@@ -201,8 +202,8 @@
   if (value->GetType() != ValueType::Object)
     return value->GetValueAsAny();
   // Special case for object types.
-  // Convert native_types::Object to chromeos::dbus_utils::Dictionary
-  chromeos::dbus_utils::Dictionary dict;
+  // Convert native_types::Object to chromeos::VariantDictionary
+  chromeos::VariantDictionary dict;
   for (const auto& pair : value->GetObject()->GetValue()) {
     // Since we are inserting the elements from native_types::Object which is
     // a map, the keys are already sorted. So use the "end()" position as a hint
@@ -227,13 +228,13 @@
   }
 
   // Special case for object types.
-  // We expect the |value| to contain chromeos::dbus_utils::Dictionary, while
+  // We expect the |value| to contain chromeos::VariantDictionary, while
   // PropValue must use native_types::Object instead. Do the conversion.
-  if (!value.IsTypeCompatible<chromeos::dbus_utils::Dictionary>()) {
+  if (!value.IsTypeCompatible<chromeos::VariantDictionary>()) {
     type->GenerateErrorValueTypeMismatch(error);
     return result;
   }
-  const auto& dict = value.Get<chromeos::dbus_utils::Dictionary>();
+  const auto& dict = value.Get<chromeos::VariantDictionary>();
   native_types::Object obj;
   CHECK(nullptr != type->GetObjectSchemaPtr())
       << "An object type must have a schema defined for it";
diff --git a/buffet/commands/schema_utils.h b/buffet/commands/schema_utils.h
index a05d080..33261f0 100644
--- a/buffet/commands/schema_utils.h
+++ b/buffet/commands/schema_utils.h
@@ -120,10 +120,10 @@
 
 // Converts PropValue to Any in a format understood by D-Bus data serialization.
 // Has special handling for Object types where native_types::Object are
-// converted to chromeos::dbus_utils::Dictionary.
+// converted to chromeos::VariantDictionary.
 chromeos::Any PropValueToDBusVariant(const PropValue* value);
 // Converts D-Bus variant to PropValue.
-// Has special handling for Object types where chromeos::dbus_utils::Dictionary
+// Has special handling for Object types where chromeos::VariantDictionary
 // is converted to native_types::Object.
 std::shared_ptr<const PropValue> PropValueFromDBusVariant(
     const PropType* type,
diff --git a/buffet/commands/schema_utils_unittest.cc b/buffet/commands/schema_utils_unittest.cc
index c5acbc8..ffa05a6 100644
--- a/buffet/commands/schema_utils_unittest.cc
+++ b/buffet/commands/schema_utils_unittest.cc
@@ -7,6 +7,7 @@
 #include <vector>
 
 #include <base/values.h>
+#include <chromeos/variant_dictionary.h>
 #include <gtest/gtest.h>
 
 #include "buffet/commands/object_schema.h"
@@ -19,7 +20,7 @@
 using buffet::unittests::CreateDictionaryValue;
 using buffet::unittests::CreateValue;
 using buffet::unittests::ValueToString;
-using chromeos::dbus_utils::Dictionary;
+using chromeos::VariantDictionary;
 
 TEST(CommandSchemaUtils, TypedValueToJson_Scalar) {
   EXPECT_EQ("true",
@@ -210,7 +211,8 @@
     {"height", int_type.CreateValue(20, nullptr)},
   };
   prop_value = obj_type.CreateValue(obj, nullptr);
-  Dictionary dict = PropValueToDBusVariant(prop_value.get()).Get<Dictionary>();
+  VariantDictionary dict =
+      PropValueToDBusVariant(prop_value.get()).Get<VariantDictionary>();
   EXPECT_EQ(20, dict["height"].Get<int>());
   EXPECT_EQ(10, dict["width"].Get<int>());
 }
@@ -287,7 +289,7 @@
       "'enum':[{'width':10,'height':20},{'width':100,'height':200}]}").get(),
       nullptr, nullptr));
 
-  Dictionary obj{
+  VariantDictionary obj{
     {"width", 100},
     {"height", 200},
   };
diff --git a/buffet/libbuffet/command.cc b/buffet/libbuffet/command.cc
index 67db6a5..dfa5581 100644
--- a/buffet/libbuffet/command.cc
+++ b/buffet/libbuffet/command.cc
@@ -28,7 +28,7 @@
   return GetProperties()->category.value();
 }
 
-const chromeos::dbus_utils::Dictionary& Command::GetParameters() const {
+const chromeos::VariantDictionary& Command::GetParameters() const {
   return GetProperties()->parameters.value();
 }
 
diff --git a/buffet/libbuffet/command.h b/buffet/libbuffet/command.h
index 3404898..15fbb7b 100644
--- a/buffet/libbuffet/command.h
+++ b/buffet/libbuffet/command.h
@@ -9,8 +9,7 @@
 
 #include <base/macros.h>
 #include <base/memory/weak_ptr.h>
-#include <chromeos/any.h>
-#include <chromeos/dbus/data_serialization.h>
+#include <chromeos/variant_dictionary.h>
 
 #include "libbuffet/export.h"
 
@@ -37,7 +36,7 @@
   // Returns the command category.
   const std::string& GetCategory() const;
   // Returns the command parameters and their values.
-  const chromeos::dbus_utils::Dictionary& GetParameters() const;
+  const chromeos::VariantDictionary& GetParameters() const;
 
   // Updates the command execution progress. The |progress| must be between
   // 0 and 100. Returns false if the progress value is incorrect.
diff --git a/buffet/libbuffet/command_listener.h b/buffet/libbuffet/command_listener.h
index e36a1d3..452edc6 100644
--- a/buffet/libbuffet/command_listener.h
+++ b/buffet/libbuffet/command_listener.h
@@ -12,8 +12,6 @@
 #include <base/macros.h>
 #include <base/memory/scoped_ptr.h>
 #include <base/memory/weak_ptr.h>
-#include <chromeos/any.h>
-#include <chromeos/dbus/data_serialization.h>
 #include <dbus/object_manager.h>
 
 #include "libbuffet/export.h"
diff --git a/buffet/libbuffet/private/command_property_set.h b/buffet/libbuffet/private/command_property_set.h
index 217458c..4a6aa1a 100644
--- a/buffet/libbuffet/private/command_property_set.h
+++ b/buffet/libbuffet/private/command_property_set.h
@@ -8,24 +8,24 @@
 #include <string>
 
 #include <base/macros.h>
-#include <chromeos/any.h>
 #include <chromeos/dbus/data_serialization.h>
+#include <chromeos/variant_dictionary.h>
 #include <dbus/object_manager.h>
 
 #include "buffet/libbuffet/export.h"
 
 namespace dbus {
-// Specialize dbus::Property for chromeos::dbus_utils::Dictionary type.
-template class Property<chromeos::dbus_utils::Dictionary>;
+// Specialize dbus::Property for chromeos::VariantDictionary type.
+template class Property<chromeos::VariantDictionary>;
 
 template <>
-inline bool Property<chromeos::dbus_utils::Dictionary>::PopValueFromReader(
+inline bool Property<chromeos::VariantDictionary>::PopValueFromReader(
     MessageReader* reader) {
   return chromeos::dbus_utils::PopVariantValueFromReader(reader, &value_);
 }
 
 template <>
-inline void Property<chromeos::dbus_utils::Dictionary>::AppendSetValueToWriter(
+inline void Property<chromeos::VariantDictionary>::AppendSetValueToWriter(
     MessageWriter* writer) {
   chromeos::dbus_utils::AppendValueToWriterAsVariant(writer, set_value_);
 }
@@ -44,7 +44,7 @@
   dbus::Property<std::string> category;
   dbus::Property<std::string> status;
   dbus::Property<int32_t> progress;
-  dbus::Property<chromeos::dbus_utils::Dictionary> parameters;
+  dbus::Property<chromeos::VariantDictionary> parameters;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(CommandPropertySet);
diff --git a/buffet/manager.cc b/buffet/manager.cc
index 03a5443..c39ec52 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -118,7 +118,7 @@
 
 void Manager::HandleUpdateState(
     chromeos::ErrorPtr* error,
-    const chromeos::dbus_utils::Dictionary& property_set) {
+    const chromeos::VariantDictionary& property_set) {
   state_manager_->UpdateProperties(property_set, error);
 }
 
diff --git a/buffet/manager.h b/buffet/manager.h
index 66be522..a56b6c3 100644
--- a/buffet/manager.h
+++ b/buffet/manager.h
@@ -56,7 +56,7 @@
                                          const std::string& user_auth_code);
   // Handles calls to org.chromium.Buffet.Manager.UpdateState().
   void HandleUpdateState(chromeos::ErrorPtr* error,
-                         const chromeos::dbus_utils::Dictionary& property_set);
+                         const chromeos::VariantDictionary& property_set);
   // Handles calls to org.chromium.Buffet.Manager.AddCommand().
   void HandleAddCommand(chromeos::ErrorPtr* error,
                         const std::string& json_command);
diff --git a/buffet/states/state_manager.cc b/buffet/states/state_manager.cc
index afda934..1171ea0 100644
--- a/buffet/states/state_manager.cc
+++ b/buffet/states/state_manager.cc
@@ -104,7 +104,7 @@
 }
 
 bool StateManager::UpdateProperties(
-    const chromeos::dbus_utils::Dictionary& property_set,
+    const chromeos::VariantDictionary& property_set,
     chromeos::ErrorPtr* error) {
   for (const auto& pair : property_set) {
     if (!SetPropertyValue(pair.first, pair.second, error))
diff --git a/buffet/states/state_manager.h b/buffet/states/state_manager.h
index 19212f0..2555ab5 100644
--- a/buffet/states/state_manager.h
+++ b/buffet/states/state_manager.h
@@ -11,8 +11,8 @@
 #include <string>
 
 #include <base/macros.h>
-#include <chromeos/dbus/data_serialization.h>
 #include <chromeos/errors/error.h>
+#include <chromeos/variant_dictionary.h>
 
 #include "buffet/states/state_package.h"
 
@@ -47,7 +47,7 @@
 
   // Updates a number of state properties in one shot.
   // |property_set| is a (full_property_name)-to-(property_value) map.
-  bool UpdateProperties(const chromeos::dbus_utils::Dictionary& property_set,
+  bool UpdateProperties(const chromeos::VariantDictionary& property_set,
                         chromeos::ErrorPtr* error);
 
   // Returns all the categories the state properties are registered from.
diff --git a/buffet/states/state_package_unittest.cc b/buffet/states/state_package_unittest.cc
index a9caf09..d8dc907 100644
--- a/buffet/states/state_package_unittest.cc
+++ b/buffet/states/state_package_unittest.cc
@@ -6,7 +6,7 @@
 #include <string>
 
 #include <base/values.h>
-#include <chromeos/dbus/data_serialization.h>
+#include <chromeos/variant_dictionary.h>
 #include <gtest/gtest.h>
 
 #include "buffet/commands/schema_constants.h"
@@ -176,7 +176,7 @@
   EXPECT_EQ(200, value.TryGet<int>());
 
   value = package_->GetPropertyValue("direction", nullptr);
-  auto direction = value.TryGet<chromeos::dbus_utils::Dictionary>();
+  auto direction = value.TryGet<chromeos::VariantDictionary>();
   ASSERT_FALSE(direction.empty());
   EXPECT_DOUBLE_EQ(89.9, direction["altitude"].TryGet<double>());
   EXPECT_DOUBLE_EQ(57.2957795, direction["azimuth"].TryGet<double>());
@@ -208,7 +208,7 @@
 }
 
 TEST_F(StatePackageTest, SetPropertyValue_Object) {
-  chromeos::dbus_utils::Dictionary direction{
+  chromeos::VariantDictionary direction{
     {"altitude", double{45.0}},
     {"azimuth", double{15.0}},
   };
@@ -245,7 +245,7 @@
 
 TEST_F(StatePackageTest, SetPropertyValue_Error_Object_TypeMismatch) {
   chromeos::ErrorPtr error;
-  chromeos::dbus_utils::Dictionary direction{
+  chromeos::VariantDictionary direction{
     {"altitude", double{45.0}},
     {"azimuth", int{15}},
   };
@@ -261,7 +261,7 @@
 
 TEST_F(StatePackageTest, SetPropertyValue_Error_Object_OutOfRange) {
   chromeos::ErrorPtr error;
-  chromeos::dbus_utils::Dictionary direction{
+  chromeos::VariantDictionary direction{
     {"altitude", double{100.0}},
     {"azimuth", double{290.0}},
   };
@@ -278,7 +278,7 @@
 
 TEST_F(StatePackageTest, SetPropertyValue_Error_Object_UnknownProperty) {
   chromeos::ErrorPtr error;
-  chromeos::dbus_utils::Dictionary direction{
+  chromeos::VariantDictionary direction{
     {"altitude", double{10.0}},
     {"azimuth", double{20.0}},
     {"spin", double{30.0}},
@@ -291,7 +291,7 @@
 
 TEST_F(StatePackageTest, SetPropertyValue_Error_Object_MissingProperty) {
   chromeos::ErrorPtr error;
-  chromeos::dbus_utils::Dictionary direction{
+  chromeos::VariantDictionary direction{
     {"altitude", double{10.0}},
   };
   ASSERT_FALSE(package_->SetPropertyValue("direction", direction, &error));
