diff --git a/quic/masque/masque_client_session.cc b/quic/masque/masque_client_session.cc
index 2d7c790..3db36f3 100644
--- a/quic/masque/masque_client_session.cc
+++ b/quic/masque/masque_client_session.cc
@@ -28,7 +28,7 @@
 
   QuicConnectionId client_connection_id, server_connection_id;
   QuicSocketAddress server_address;
-  std::string packet;
+  std::vector<char> packet;
   bool version_present;
   if (!compression_engine_.DecompressDatagram(
           message, &client_connection_id, &server_connection_id,
@@ -45,9 +45,10 @@
   }
   EncapsulatedClientSession* encapsulated_client_session =
       connection_id_registration->second;
-  encapsulated_client_session->ProcessPacket(packet, server_address);
+  encapsulated_client_session->ProcessPacket(
+      quiche::QuicheStringPiece(packet.data(), packet.size()), server_address);
 
-  QUIC_DVLOG(1) << "Sent " << packet.length() << " bytes to connection for "
+  QUIC_DVLOG(1) << "Sent " << packet.size() << " bytes to connection for "
                 << client_connection_id;
 }
 
diff --git a/quic/masque/masque_compression_engine.cc b/quic/masque/masque_compression_engine.cc
index 77f7296..804a8cf 100644
--- a/quic/masque/masque_compression_engine.cc
+++ b/quic/masque/masque_compression_engine.cc
@@ -398,7 +398,7 @@
 bool MasqueCompressionEngine::WriteDecompressedPacket(
     QuicDataReader* reader,
     const MasqueCompressionContext& context,
-    std::string* packet,
+    std::vector<char>* packet,
     bool* version_present) {
   QuicConnectionId destination_connection_id, source_connection_id;
   if (masque_session_->perspective() == Perspective::IS_SERVER) {
@@ -420,8 +420,8 @@
   if (*version_present) {
     packet_length += sizeof(uint8_t) * 2 + source_connection_id.length();
   }
-  *packet = std::string(packet_length, 0);
-  QuicDataWriter writer(packet->length(), packet->data());
+  *packet = std::vector<char>(packet_length);
+  QuicDataWriter writer(packet->size(), packet->data());
   if (!writer.WriteUInt8(first_byte)) {
     QUIC_BUG << "Failed to write first_byte";
     return false;
@@ -463,7 +463,7 @@
     QuicConnectionId* client_connection_id,
     QuicConnectionId* server_connection_id,
     QuicSocketAddress* server_address,
-    std::string* packet,
+    std::vector<char>* packet,
     bool* version_present) {
   QUIC_DVLOG(1) << "Decompressing DATAGRAM frame of length "
                 << datagram.length();
@@ -512,7 +512,8 @@
 
   QUIC_DVLOG(2) << "Decompressed client " << context.client_connection_id
                 << " server " << context.server_connection_id << "\n"
-                << quiche::QuicheTextUtils::HexDump(*packet);
+                << quiche::QuicheTextUtils::HexDump(quiche::QuicheStringPiece(
+                       packet->data(), packet->size()));
 
   return true;
 }
diff --git a/quic/masque/masque_compression_engine.h b/quic/masque/masque_compression_engine.h
index f170ddc..32ffc9d 100644
--- a/quic/masque/masque_compression_engine.h
+++ b/quic/masque/masque_compression_engine.h
@@ -62,7 +62,7 @@
                           QuicConnectionId* client_connection_id,
                           QuicConnectionId* server_connection_id,
                           QuicSocketAddress* server_address,
-                          std::string* packet,
+                          std::vector<char>* packet,
                           bool* version_present);
 
   // Clears all entries referencing |client_connection_id| from the
@@ -113,7 +113,7 @@
   // Writes decompressed packet to |packet| during decompression.
   bool WriteDecompressedPacket(QuicDataReader* reader,
                                const MasqueCompressionContext& context,
-                               std::string* packet,
+                               std::vector<char>* packet,
                                bool* version_present);
 
   QuicSession* masque_session_;  // Unowned.
diff --git a/quic/masque/masque_epoll_client.cc b/quic/masque/masque_epoll_client.cc
index a0954b6..24cbaa6 100644
--- a/quic/masque/masque_epoll_client.cc
+++ b/quic/masque/masque_epoll_client.cc
@@ -20,7 +20,6 @@
                  MasqueSupportedVersions(),
                  epoll_server,
                  std::move(proof_verifier)),
-      epoll_server_(epoll_server),
       authority_(authority) {}
 
 std::unique_ptr<QuicSession> MasqueEpollClient::CreateQuicClientSession(
diff --git a/quic/masque/masque_epoll_client.h b/quic/masque/masque_epoll_client.h
index a8485c2..403216b 100644
--- a/quic/masque/masque_epoll_client.h
+++ b/quic/masque/masque_epoll_client.h
@@ -49,7 +49,6 @@
   MasqueEpollClient(const MasqueEpollClient&) = delete;
   MasqueEpollClient& operator=(const MasqueEpollClient&) = delete;
 
-  QuicEpollServer* epoll_server_;  // Unowned.
   std::string authority_;
 };
 
diff --git a/quic/masque/masque_server_session.cc b/quic/masque/masque_server_session.cc
index a1c0e8e..720f52c 100644
--- a/quic/masque/masque_server_session.cc
+++ b/quic/masque/masque_server_session.cc
@@ -35,7 +35,7 @@
 
   QuicConnectionId client_connection_id, server_connection_id;
   QuicSocketAddress server_address;
-  std::string packet;
+  std::vector<char> packet;
   bool version_present;
   if (!compression_engine_.DecompressDatagram(
           message, &client_connection_id, &server_connection_id,
@@ -43,7 +43,7 @@
     return;
   }
 
-  QUIC_DVLOG(1) << "Received packet of length " << packet.length() << " for "
+  QUIC_DVLOG(1) << "Received packet of length " << packet.size() << " for "
                 << server_address << " client " << client_connection_id;
 
   if (version_present) {
@@ -57,9 +57,9 @@
   }
 
   WriteResult write_result = connection()->writer()->WritePacket(
-      packet.data(), packet.length(), connection()->self_address().host(),
+      packet.data(), packet.size(), connection()->self_address().host(),
       server_address, nullptr);
-  QUIC_DVLOG(1) << "Got " << write_result << " for " << packet.length()
+  QUIC_DVLOG(1) << "Got " << write_result << " for " << packet.size()
                 << " bytes to " << server_address;
 }
 
