diff --git a/byte_buffer.h b/byte_buffer.h
index 2fdff62..1d79b6d 100644
--- a/byte_buffer.h
+++ b/byte_buffer.h
@@ -32,7 +32,7 @@
 // memory allocation.
 //
 // Usage could be as follows:
-//     const auto& buffer = ByteBuffer<1024>()
+//     const auto buffer = ByteBuffer<1024>()
 //         .AppendOrDie(header.data(), header.size())
 //         .AppendOrDie(body.data(), body.size());
 //     write(fd, buffer.data(), buffer.size());
diff --git a/command_processor.cpp b/command_processor.cpp
index b969bb4..ea223af 100644
--- a/command_processor.cpp
+++ b/command_processor.cpp
@@ -186,12 +186,12 @@
   }
   CHECK(current_log_buffer_.CanFitNow(total_size));
 
-  const auto& tstamp_header =
+  const auto tstamp_header =
       TimestampHeader()
           .set_since_boot_awake_only(os_->GetTimestamp(CLOCK_MONOTONIC))
           .set_since_boot_with_sleep(os_->GetTimestamp(CLOCK_BOOTTIME))
           .set_since_epoch(os_->GetTimestamp(CLOCK_REALTIME));
-  const auto& message_buf =
+  const auto message_buf =
       ByteBuffer<sizeof(TimestampHeader) + protocol::kMaxMessageSize>()
           .AppendOrDie(&tstamp_header, sizeof(tstamp_header))
           .AppendOrDie(command_buffer, command_len);
diff --git a/tests/command_processor_unittest.cpp b/tests/command_processor_unittest.cpp
index ede5cb0..50b6e78 100644
--- a/tests/command_processor_unittest.cpp
+++ b/tests/command_processor_unittest.cpp
@@ -88,7 +88,7 @@
         tag.length() + ascii_message_tag_len_adjustment;
     const size_t adjusted_data_len =
         message.length() + ascii_message_data_len_adjustment;
-    const auto& ascii_message_header =
+    const auto ascii_message_header =
         protocol::AsciiMessage()
             .set_tag_len(SAFELY_CLAMP(
                 adjusted_tag_len, uint8_t, 0,
@@ -103,7 +103,7 @@
     const size_t payload_len = sizeof(ascii_message_header) + tag.length() +
                                message.length() +
                                command_payload_len_adjustment;
-    const auto& command =
+    const auto command =
         protocol::Command()
             .set_opcode(protocol::Opcode::kWriteAsciiMessage)
             .set_payload_len(SAFELY_CLAMP(
@@ -143,10 +143,10 @@
   }
 
   bool SendDumpBuffers() {
-    const auto& command = protocol::Command()
-                              .set_opcode(protocol::Opcode::kDumpBuffers)
-                              .set_payload_len(0);
-    const auto& buf = CommandBuffer().AppendOrDie(&command, sizeof(command));
+    const auto command = protocol::Command()
+                             .set_opcode(protocol::Opcode::kDumpBuffers)
+                             .set_payload_len(0);
+    const auto buf = CommandBuffer().AppendOrDie(&command, sizeof(command));
     constexpr int kFakeFd = 100;
     return command_processor_->ProcessCommand(buf.data(), buf.size(), kFakeFd);
   }
@@ -220,12 +220,12 @@
   using opcode_integral_t = std::underlying_type<opcode_enum_t>::type;
   constexpr auto invalid_opcode = GetMaxVal<opcode_integral_t>();
 
-  const auto& command =
+  const auto command =
       protocol::Command()
           .set_opcode(local_utils::CopyFromBufferOrDie<opcode_enum_t>(
               &invalid_opcode, sizeof(invalid_opcode)))
           .set_payload_len(0);
-  const auto& buf = CommandBuffer().AppendOrDie(&command, sizeof(command));
+  const auto buf = CommandBuffer().AppendOrDie(&command, sizeof(command));
   constexpr int kFakeFd = 100;
   EXPECT_FALSE(
       command_processor_->ProcessCommand(buf.data(), buf.size(), kFakeFd));
diff --git a/tests/protocol_unittest.cpp b/tests/protocol_unittest.cpp
index 76de58b..abbd86b 100644
--- a/tests/protocol_unittest.cpp
+++ b/tests/protocol_unittest.cpp
@@ -33,6 +33,27 @@
 //     2. We need to maintain compatibility with older clients talking to
 //        newer versions of wifilogd.
 
+TEST(ProtocolTest, AsciiMessageChainingWorks) {
+  using protocol::AsciiMessage;
+  uint8_t tagLen = 3;
+  uint16_t dataLen = 7;
+  const auto ascii_message_header =
+      AsciiMessage().set_tag_len(tagLen).set_data_len(dataLen);
+  EXPECT_EQ(tagLen, ascii_message_header.tag_len);
+  EXPECT_EQ(dataLen, ascii_message_header.data_len);
+}
+
+TEST(ProtocolTest, AsciiMessageNonChainingWorks) {
+  using protocol::AsciiMessage;
+  uint8_t tagLen = 3;
+  uint16_t dataLen = 7;
+  AsciiMessage ascii_message_header = AsciiMessage();
+  ascii_message_header.set_tag_len(tagLen);
+  ascii_message_header.set_data_len(dataLen);
+  EXPECT_EQ(tagLen, ascii_message_header.tag_len);
+  EXPECT_EQ(dataLen, ascii_message_header.data_len);
+}
+
 TEST(ProtocolTest, AsciiMessageLayoutIsUnchanged) {
   using protocol::AsciiMessage;
   ASSERT_TRUE(std::is_standard_layout<AsciiMessage>::value);
