diff --git a/quiche/common/structured_headers.cc b/quiche/common/structured_headers.cc
index 1bfdbd6..b0ca288 100644
--- a/quiche/common/structured_headers.cc
+++ b/quiche/common/structured_headers.cc
@@ -894,8 +894,9 @@
     default;
 ParameterizedItem::ParameterizedItem(ParameterizedItem&&) = default;
 ParameterizedItem& ParameterizedItem::operator=(ParameterizedItem&&) = default;
-ParameterizedItem::ParameterizedItem(Item id, Parameters ps)
-    : item(std::move(id)), params(std::move(ps)) {}
+ParameterizedItem::ParameterizedItem(Item item, Parameters params)
+    : item(std::move(item)), params(std::move(params)) {}
+ParameterizedItem::ParameterizedItem(Item item) : item(std::move(item)) {}
 ParameterizedItem::~ParameterizedItem() = default;
 
 ParameterizedMember::ParameterizedMember() = default;
@@ -905,21 +906,25 @@
 ParameterizedMember::ParameterizedMember(ParameterizedMember&&) = default;
 ParameterizedMember& ParameterizedMember::operator=(ParameterizedMember&&) =
     default;
-ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> id,
+ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> items,
                                          bool member_is_inner_list,
-                                         Parameters ps)
-    : member(std::move(id)),
+                                         Parameters params)
+    : member(std::move(items)),
       member_is_inner_list(member_is_inner_list),
-      params(std::move(ps)) {}
-ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> id,
-                                         Parameters ps)
-    : member(std::move(id)),
+      params(std::move(params)) {}
+ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> items,
+                                         Parameters params)
+    : member(std::move(items)),
       member_is_inner_list(true),
-      params(std::move(ps)) {}
-ParameterizedMember::ParameterizedMember(Item id, Parameters ps)
-    : member({{std::move(id), {}}}),
+      params(std::move(params)) {}
+ParameterizedMember::ParameterizedMember(std::vector<ParameterizedItem> items)
+    : member(std::move(items)), member_is_inner_list(true) {}
+ParameterizedMember::ParameterizedMember(Item item, Parameters params)
+    : member({{std::move(item), {}}}),
       member_is_inner_list(false),
-      params(std::move(ps)) {}
+      params(std::move(params)) {}
+ParameterizedMember::ParameterizedMember(Item item)
+    : member({{std::move(item), {}}}), member_is_inner_list(false) {}
 ParameterizedMember::~ParameterizedMember() = default;
 
 std::optional<std::pair<const Item&, const Parameters&>>
diff --git a/quiche/common/structured_headers.h b/quiche/common/structured_headers.h
index 4c8b6b2..0ee810a 100644
--- a/quiche/common/structured_headers.h
+++ b/quiche/common/structured_headers.h
@@ -203,11 +203,18 @@
   Parameters params;
 
   ParameterizedItem();
+
+  // Convenience constructor for empty parameters.
+  explicit ParameterizedItem(Item);
+
+  ParameterizedItem(Item, Parameters);
+
   ParameterizedItem(const ParameterizedItem&);
   ParameterizedItem& operator=(const ParameterizedItem&);
+
   ParameterizedItem(ParameterizedItem&&);
   ParameterizedItem& operator=(ParameterizedItem&&);
-  ParameterizedItem(Item, Parameters);
+
   ~ParameterizedItem();
 
   friend bool operator==(const ParameterizedItem&,
@@ -224,9 +231,17 @@
   // Constructor for a member that is an inner list.
   ParameterizedMember(std::vector<ParameterizedItem>, Parameters);
 
+  // Convenience constructor for a member that is an inner list with empty
+  // parameters.
+  explicit ParameterizedMember(std::vector<ParameterizedItem>);
+
   // Constructor for a member that is a single Item.
   ParameterizedMember(Item, Parameters);
 
+  // Convenience constructor for a member that is a single Item with empty
+  // parameters.
+  explicit ParameterizedMember(Item);
+
   ParameterizedMember(const ParameterizedMember&);
   ParameterizedMember& operator=(const ParameterizedMember&);
 
diff --git a/quiche/common/structured_headers_test.cc b/quiche/common/structured_headers_test.cc
index e99e1a5..a139ac6 100644
--- a/quiche/common/structured_headers_test.cc
+++ b/quiche/common/structured_headers_test.cc
@@ -687,8 +687,8 @@
 TEST(StructuredHeaderTest, DictionaryConstructors) {
   const std::string key0 = "key0";
   const std::string key1 = "key1";
-  const ParameterizedMember member0{Item("Applepie"), {}};
-  const ParameterizedMember member1{Item("hello", Item::kByteSequenceType), {}};
+  const ParameterizedMember member0(Item("Applepie"));
+  const ParameterizedMember member1(Item("hello", Item::kByteSequenceType));
 
   Dictionary dict;
   EXPECT_TRUE(dict.empty());
@@ -711,7 +711,7 @@
 
 TEST(StructuredHeaderTest, DictionaryClear) {
   const std::string key0 = "key0";
-  const ParameterizedMember member0{Item("Applepie"), {}};
+  const ParameterizedMember member0(Item("Applepie"));
 
   Dictionary dict({{key0, member0}});
   EXPECT_EQ(1U, dict.size());
@@ -728,9 +728,9 @@
   const std::string key0 = "key0";
   const std::string key1 = "key1";
 
-  const ParameterizedMember nonempty_member0{Item("Applepie"), {}};
-  const ParameterizedMember nonempty_member1{
-      Item("hello", Item::kByteSequenceType), {}};
+  const ParameterizedMember nonempty_member0(Item("Applepie"));
+  const ParameterizedMember nonempty_member1(
+      Item("hello", Item::kByteSequenceType));
   const ParameterizedMember empty_member;
 
   Dictionary dict{{{key0, nonempty_member0}}};
diff --git a/quiche/web_transport/web_transport_headers.cc b/quiche/web_transport/web_transport_headers.cc
index cb98de5..93c00d7 100644
--- a/quiche/web_transport/web_transport_headers.cc
+++ b/quiche/web_transport/web_transport_headers.cc
@@ -100,7 +100,7 @@
   quiche::structured_headers::List list;
   list.reserve(subprotocols.size());
   for (const std::string& subprotocol : subprotocols) {
-    list.push_back(ParameterizedMember(Item(subprotocol), {}));
+    list.emplace_back(Item(subprotocol));
   }
 
   std::optional<std::string> serialized =
@@ -189,9 +189,8 @@
   std::vector<DictionaryMember> members;
   members.reserve(kInitHeaderFields.size());
   for (const auto& [field_name, field_accessor] : kInitHeaderFields) {
-    Item item(static_cast<int64_t>(header.*field_accessor));
-    members.push_back(std::make_pair(
-        field_name, ParameterizedMember(item, /*parameters=*/{})));
+    members.emplace_back(field_name,
+                         Item(static_cast<int64_t>(header.*field_accessor)));
   }
   std::optional<std::string> result =
       quiche::structured_headers::SerializeDictionary(
