diff --git a/quic/test_tools/simulator/actor.cc b/quic/test_tools/simulator/actor.cc
index 546875d..578b894 100644
--- a/quic/test_tools/simulator/actor.cc
+++ b/quic/test_tools/simulator/actor.cc
@@ -8,7 +8,7 @@
 namespace quic {
 namespace simulator {
 
-Actor::Actor(Simulator* simulator, QuicString name)
+Actor::Actor(Simulator* simulator, std::string name)
     : simulator_(simulator),
       clock_(simulator->GetClock()),
       name_(std::move(name)) {
diff --git a/quic/test_tools/simulator/actor.h b/quic/test_tools/simulator/actor.h
index 0c24913..9e06a7e 100644
--- a/quic/test_tools/simulator/actor.h
+++ b/quic/test_tools/simulator/actor.h
@@ -29,7 +29,7 @@
 //    will not be called again unless Schedule() is called.
 class Actor {
  public:
-  Actor(Simulator* simulator, QuicString name);
+  Actor(Simulator* simulator, std::string name);
   virtual ~Actor();
 
   // Trigger all the events the actor can potentially handle at this point.
@@ -37,7 +37,7 @@
   // to schedule the next call manually.
   virtual void Act() = 0;
 
-  inline QuicString name() const { return name_; }
+  inline std::string name() const { return name_; }
   inline Simulator* simulator() const { return simulator_; }
 
  protected:
@@ -49,7 +49,7 @@
 
   Simulator* simulator_;
   const QuicClock* clock_;
-  QuicString name_;
+  std::string name_;
 
  private:
   // Since the Actor object registers itself with a simulator using a pointer to
diff --git a/quic/test_tools/simulator/alarm_factory.cc b/quic/test_tools/simulator/alarm_factory.cc
index 736f9ea..e748da5 100644
--- a/quic/test_tools/simulator/alarm_factory.cc
+++ b/quic/test_tools/simulator/alarm_factory.cc
@@ -15,7 +15,7 @@
 class Alarm : public QuicAlarm {
  public:
   Alarm(Simulator* simulator,
-        QuicString name,
+        std::string name,
         QuicArenaScopedPtr<QuicAlarm::Delegate> delegate)
       : QuicAlarm(std::move(delegate)), adapter_(simulator, name, this) {}
   ~Alarm() override {}
@@ -33,7 +33,7 @@
   // interfaces.
   class Adapter : public Actor {
    public:
-    Adapter(Simulator* simulator, QuicString name, Alarm* parent)
+    Adapter(Simulator* simulator, std::string name, Alarm* parent)
         : Actor(simulator, name), parent_(parent) {}
     ~Adapter() override {}
 
@@ -51,12 +51,12 @@
   Adapter adapter_;
 };
 
-AlarmFactory::AlarmFactory(Simulator* simulator, QuicString name)
+AlarmFactory::AlarmFactory(Simulator* simulator, std::string name)
     : simulator_(simulator), name_(std::move(name)), counter_(0) {}
 
 AlarmFactory::~AlarmFactory() {}
 
-QuicString AlarmFactory::GetNewAlarmName() {
+std::string AlarmFactory::GetNewAlarmName() {
   ++counter_;
   return QuicStringPrintf("%s (alarm %i)", name_.c_str(), counter_);
 }
diff --git a/quic/test_tools/simulator/alarm_factory.h b/quic/test_tools/simulator/alarm_factory.h
index 535095a..d765175 100644
--- a/quic/test_tools/simulator/alarm_factory.h
+++ b/quic/test_tools/simulator/alarm_factory.h
@@ -14,7 +14,7 @@
 // AlarmFactory allows to schedule QuicAlarms using the simulation event queue.
 class AlarmFactory : public QuicAlarmFactory {
  public:
-  AlarmFactory(Simulator* simulator, QuicString name);
+  AlarmFactory(Simulator* simulator, std::string name);
   AlarmFactory(const AlarmFactory&) = delete;
   AlarmFactory& operator=(const AlarmFactory&) = delete;
   ~AlarmFactory() override;
@@ -26,10 +26,10 @@
 
  private:
   // Automatically generate a name for a new alarm.
-  QuicString GetNewAlarmName();
+  std::string GetNewAlarmName();
 
   Simulator* simulator_;
-  QuicString name_;
+  std::string name_;
   int counter_;
 };
 
diff --git a/quic/test_tools/simulator/link.cc b/quic/test_tools/simulator/link.cc
index 879de26..a016b89 100644
--- a/quic/test_tools/simulator/link.cc
+++ b/quic/test_tools/simulator/link.cc
@@ -14,7 +14,7 @@
 const uint64_t kMaxRandomDelayUs = 10;
 
 OneWayLink::OneWayLink(Simulator* simulator,
-                       QuicString name,
+                       std::string name,
                        UnconstrainedPortInterface* sink,
                        QuicBandwidth bandwidth,
                        QuicTime::Delta propagation_delay)
@@ -85,7 +85,7 @@
 }
 
 SymmetricLink::SymmetricLink(Simulator* simulator,
-                             QuicString name,
+                             std::string name,
                              UnconstrainedPortInterface* sink_a,
                              UnconstrainedPortInterface* sink_b,
                              QuicBandwidth bandwidth,
diff --git a/quic/test_tools/simulator/link.h b/quic/test_tools/simulator/link.h
index 4553324..103afa0 100644
--- a/quic/test_tools/simulator/link.h
+++ b/quic/test_tools/simulator/link.h
@@ -20,7 +20,7 @@
 class OneWayLink : public Actor, public ConstrainedPortInterface {
  public:
   OneWayLink(Simulator* simulator,
-             QuicString name,
+             std::string name,
              UnconstrainedPortInterface* sink,
              QuicBandwidth bandwidth,
              QuicTime::Delta propagation_delay);
@@ -66,7 +66,7 @@
 class SymmetricLink {
  public:
   SymmetricLink(Simulator* simulator,
-                QuicString name,
+                std::string name,
                 UnconstrainedPortInterface* sink_a,
                 UnconstrainedPortInterface* sink_b,
                 QuicBandwidth bandwidth,
diff --git a/quic/test_tools/simulator/packet_filter.cc b/quic/test_tools/simulator/packet_filter.cc
index 8ee038a..ad03903 100644
--- a/quic/test_tools/simulator/packet_filter.cc
+++ b/quic/test_tools/simulator/packet_filter.cc
@@ -8,7 +8,7 @@
 namespace simulator {
 
 PacketFilter::PacketFilter(Simulator* simulator,
-                           QuicString name,
+                           std::string name,
                            Endpoint* input)
     : Endpoint(simulator, name), input_(input) {
   input_->SetTxPort(this);
diff --git a/quic/test_tools/simulator/packet_filter.h b/quic/test_tools/simulator/packet_filter.h
index e79b2cb..9873bec 100644
--- a/quic/test_tools/simulator/packet_filter.h
+++ b/quic/test_tools/simulator/packet_filter.h
@@ -39,7 +39,7 @@
  public:
   // Initialize the filter by wrapping around |input|.  Does not take the
   // ownership of |input|.
-  PacketFilter(Simulator* simulator, QuicString name, Endpoint* input);
+  PacketFilter(Simulator* simulator, std::string name, Endpoint* input);
   PacketFilter(const PacketFilter&) = delete;
   PacketFilter& operator=(const PacketFilter&) = delete;
   ~PacketFilter() override;
diff --git a/quic/test_tools/simulator/port.cc b/quic/test_tools/simulator/port.cc
index 3db8888..242ebd4 100644
--- a/quic/test_tools/simulator/port.cc
+++ b/quic/test_tools/simulator/port.cc
@@ -14,7 +14,7 @@
 
 Packet::Packet(const Packet& packet) = default;
 
-Endpoint::Endpoint(Simulator* simulator, QuicString name)
+Endpoint::Endpoint(Simulator* simulator, std::string name)
     : Actor(simulator, name) {}
 
 }  // namespace simulator
diff --git a/quic/test_tools/simulator/port.h b/quic/test_tools/simulator/port.h
index 5cd4a7f..15da638 100644
--- a/quic/test_tools/simulator/port.h
+++ b/quic/test_tools/simulator/port.h
@@ -19,11 +19,11 @@
   ~Packet();
   Packet(const Packet& packet);
 
-  QuicString source;
-  QuicString destination;
+  std::string source;
+  std::string destination;
   QuicTime tx_timestamp;
 
-  QuicString contents;
+  std::string contents;
   QuicByteCount size;
 };
 
@@ -57,7 +57,7 @@
   virtual void SetTxPort(ConstrainedPortInterface* port) = 0;
 
  protected:
-  Endpoint(Simulator* simulator, QuicString name);
+  Endpoint(Simulator* simulator, std::string name);
 };
 
 }  // namespace simulator
diff --git a/quic/test_tools/simulator/queue.cc b/quic/test_tools/simulator/queue.cc
index 4236481..3816fd4 100644
--- a/quic/test_tools/simulator/queue.cc
+++ b/quic/test_tools/simulator/queue.cc
@@ -12,7 +12,7 @@
 
 Queue::ListenerInterface::~ListenerInterface() {}
 
-Queue::Queue(Simulator* simulator, QuicString name, QuicByteCount capacity)
+Queue::Queue(Simulator* simulator, std::string name, QuicByteCount capacity)
     : Actor(simulator, name),
       capacity_(capacity),
       bytes_queued_(0),
diff --git a/quic/test_tools/simulator/queue.h b/quic/test_tools/simulator/queue.h
index f9fa483..6c3c6b0 100644
--- a/quic/test_tools/simulator/queue.h
+++ b/quic/test_tools/simulator/queue.h
@@ -23,7 +23,7 @@
     virtual void OnPacketDequeued() = 0;
   };
 
-  Queue(Simulator* simulator, QuicString name, QuicByteCount capacity);
+  Queue(Simulator* simulator, std::string name, QuicByteCount capacity);
   Queue(const Queue&) = delete;
   Queue& operator=(const Queue&) = delete;
   ~Queue() override;
diff --git a/quic/test_tools/simulator/quic_endpoint.cc b/quic/test_tools/simulator/quic_endpoint.cc
index 1bacdf2..b0ce5ca 100644
--- a/quic/test_tools/simulator/quic_endpoint.cc
+++ b/quic/test_tools/simulator/quic_endpoint.cc
@@ -23,8 +23,8 @@
 const char kStreamDataContents = 'Q';
 
 // Takes a SHA-1 hash of the name and converts it into five 32-bit integers.
-static std::vector<uint32_t> HashNameIntoFive32BitIntegers(QuicString name) {
-  const QuicString hash = test::Sha1Hash(name);
+static std::vector<uint32_t> HashNameIntoFive32BitIntegers(std::string name) {
+  const std::string hash = test::Sha1Hash(name);
 
   std::vector<uint32_t> output;
   uint32_t current_number = 0;
@@ -39,14 +39,14 @@
   return output;
 }
 
-QuicSocketAddress GetAddressFromName(QuicString name) {
+QuicSocketAddress GetAddressFromName(std::string name) {
   const std::vector<uint32_t> hash = HashNameIntoFive32BitIntegers(name);
 
   // Generate a random port between 1025 and 65535.
   const uint16_t port = 1025 + hash[0] % (65535 - 1025 + 1);
 
   // Generate a random 10.x.x.x address, where x is between 1 and 254.
-  QuicString ip_address{"\xa\0\0\0", 4};
+  std::string ip_address{"\xa\0\0\0", 4};
   for (size_t i = 1; i < 4; i++) {
     ip_address[i] = 1 + hash[i] % 254;
   }
@@ -56,8 +56,8 @@
 }
 
 QuicEndpoint::QuicEndpoint(Simulator* simulator,
-                           QuicString name,
-                           QuicString peer_name,
+                           std::string name,
+                           std::string peer_name,
                            Perspective perspective,
                            QuicConnectionId connection_id)
     : Endpoint(simulator, name),
@@ -103,7 +103,7 @@
   // primarily because
   //  - this enables pacing, and
   //  - this sets the non-handshake timeouts.
-  QuicString error;
+  std::string error;
   CryptoHandshakeMessage peer_hello;
   peer_hello.SetValue(kICSL,
                       static_cast<uint32_t>(kMaximumIdleTimeoutSecs - 1));
@@ -122,7 +122,7 @@
     const char* perspective_prefix =
         connection_.perspective() == Perspective::IS_CLIENT ? "C" : "S";
 
-    QuicString identifier =
+    std::string identifier =
         QuicStrCat(perspective_prefix, connection_.connection_id().ToString());
     QuicRecordTestOutput(identifier,
                          trace_visitor_->trace()->SerializeAsString());
@@ -305,7 +305,7 @@
   packet->destination = endpoint_->peer_name_;
   packet->tx_timestamp = endpoint_->clock_->Now();
 
-  packet->contents = QuicString(buffer, buf_len);
+  packet->contents = std::string(buffer, buf_len);
   packet->size = buf_len;
 
   endpoint_->nic_tx_queue_.AcceptPacket(std::move(packet));
@@ -384,7 +384,7 @@
 }
 
 QuicEndpointMultiplexer::QuicEndpointMultiplexer(
-    QuicString name,
+    std::string name,
     std::initializer_list<QuicEndpoint*> endpoints)
     : Endpoint((*endpoints.begin())->simulator(), name) {
   for (QuicEndpoint* endpoint : endpoints) {
diff --git a/quic/test_tools/simulator/quic_endpoint.h b/quic/test_tools/simulator/quic_endpoint.h
index ab4ee4b..955ac8f 100644
--- a/quic/test_tools/simulator/quic_endpoint.h
+++ b/quic/test_tools/simulator/quic_endpoint.h
@@ -26,7 +26,7 @@
 
 // Generate a random local network host-port tuple based on the name of the
 // endpoint.
-QuicSocketAddress GetAddressFromName(QuicString name);
+QuicSocketAddress GetAddressFromName(std::string name);
 
 // A QUIC connection endpoint.  Wraps around QuicConnection.  In order to
 // initiate a transfer, the caller has to call AddBytesToTransfer().  The data
@@ -40,8 +40,8 @@
                      public SessionNotifierInterface {
  public:
   QuicEndpoint(Simulator* simulator,
-               QuicString name,
-               QuicString peer_name,
+               std::string name,
+               std::string peer_name,
                Perspective perspective,
                QuicConnectionId connection_id);
   ~QuicEndpoint() override;
@@ -92,7 +92,7 @@
   void OnGoAway(const QuicGoAwayFrame& frame) override {}
   void OnMessageReceived(QuicStringPiece message) override {}
   void OnConnectionClosed(QuicErrorCode error,
-                          const QuicString& error_details,
+                          const std::string& error_details,
                           ConnectionCloseSource source) override {}
   void OnWriteBlocked() override {}
   void OnSuccessfulVersionNegotiation(
@@ -176,7 +176,7 @@
   // write-blocked.
   void WriteStreamData();
 
-  QuicString peer_name_;
+  std::string peer_name_;
 
   Writer writer_;
   DataProducer producer_;
@@ -210,7 +210,7 @@
 class QuicEndpointMultiplexer : public Endpoint,
                                 public UnconstrainedPortInterface {
  public:
-  QuicEndpointMultiplexer(QuicString name,
+  QuicEndpointMultiplexer(std::string name,
                           std::initializer_list<QuicEndpoint*> endpoints);
   ~QuicEndpointMultiplexer() override;
 
@@ -225,7 +225,7 @@
   void Act() override {}
 
  private:
-  QuicUnorderedMap<QuicString, QuicEndpoint*> mapping_;
+  QuicUnorderedMap<std::string, QuicEndpoint*> mapping_;
 };
 
 }  // namespace simulator
diff --git a/quic/test_tools/simulator/simulator.h b/quic/test_tools/simulator/simulator.h
index 0180dcb..e21dd50 100644
--- a/quic/test_tools/simulator/simulator.h
+++ b/quic/test_tools/simulator/simulator.h
@@ -130,7 +130,7 @@
   // For each actor, maintain the time it is scheduled at.  The value for
   // unscheduled actors is QuicTime::Infinite().
   QuicUnorderedMap<Actor*, QuicTime> scheduled_times_;
-  QuicUnorderedSet<QuicString> actor_names_;
+  QuicUnorderedSet<std::string> actor_names_;
 };
 
 template <class TerminationPredicate>
diff --git a/quic/test_tools/simulator/simulator_test.cc b/quic/test_tools/simulator/simulator_test.cc
index d9986ad..33ad564 100644
--- a/quic/test_tools/simulator/simulator_test.cc
+++ b/quic/test_tools/simulator/simulator_test.cc
@@ -26,7 +26,7 @@
 // A simple counter that increments its value by 1 every specified period.
 class Counter : public Actor {
  public:
-  Counter(Simulator* simulator, QuicString name, QuicTime::Delta period)
+  Counter(Simulator* simulator, std::string name, QuicTime::Delta period)
       : Actor(simulator, name), value_(-1), period_(period) {
     Schedule(clock_->Now());
   }
@@ -89,7 +89,7 @@
     per_destination_packet_counter_.clear();
   }
 
-  QuicPacketCount CountPacketsForDestination(QuicString destination) const {
+  QuicPacketCount CountPacketsForDestination(std::string destination) const {
     auto result_it = per_destination_packet_counter_.find(destination);
     if (result_it == per_destination_packet_counter_.cend()) {
       return 0;
@@ -101,7 +101,8 @@
   QuicByteCount bytes_;
   QuicPacketCount packets_;
 
-  QuicUnorderedMap<QuicString, QuicPacketCount> per_destination_packet_counter_;
+  QuicUnorderedMap<std::string, QuicPacketCount>
+      per_destination_packet_counter_;
 };
 
 // Sends the packet to the specified destination at the uplink rate.  Provides a
@@ -109,9 +110,9 @@
 class LinkSaturator : public Endpoint {
  public:
   LinkSaturator(Simulator* simulator,
-                QuicString name,
+                std::string name,
                 QuicByteCount packet_size,
-                QuicString destination)
+                std::string destination)
       : Endpoint(simulator, name),
         packet_size_(packet_size),
         destination_(std::move(destination)),
@@ -155,7 +156,7 @@
 
  private:
   QuicByteCount packet_size_;
-  QuicString destination_;
+  std::string destination_;
 
   ConstrainedPortInterface* tx_port_;
   CounterPort rx_port_;
@@ -427,7 +428,7 @@
 class AlarmToggler : public Actor {
  public:
   AlarmToggler(Simulator* simulator,
-               QuicString name,
+               std::string name,
                QuicAlarm* alarm,
                QuicTime::Delta interval)
       : Actor(simulator, name),
@@ -591,7 +592,7 @@
 
 class MockPacketFilter : public PacketFilter {
  public:
-  MockPacketFilter(Simulator* simulator, QuicString name, Endpoint* endpoint)
+  MockPacketFilter(Simulator* simulator, std::string name, Endpoint* endpoint)
       : PacketFilter(simulator, name, endpoint) {}
   MOCK_METHOD1(FilterPacket, bool(const Packet&));
 };
diff --git a/quic/test_tools/simulator/switch.cc b/quic/test_tools/simulator/switch.cc
index 638fa20..809c7f8 100644
--- a/quic/test_tools/simulator/switch.cc
+++ b/quic/test_tools/simulator/switch.cc
@@ -12,7 +12,7 @@
 namespace simulator {
 
 Switch::Switch(Simulator* simulator,
-               QuicString name,
+               std::string name,
                SwitchPortNumber port_count,
                QuicByteCount queue_capacity) {
   for (size_t port_number = 1; port_number <= port_count; port_number++) {
@@ -25,7 +25,7 @@
 Switch::~Switch() {}
 
 Switch::Port::Port(Simulator* simulator,
-                   QuicString name,
+                   std::string name,
                    Switch* parent,
                    SwitchPortNumber port_number,
                    QuicByteCount queue_capacity)
diff --git a/quic/test_tools/simulator/switch.h b/quic/test_tools/simulator/switch.h
index 4956c01..6d3efc3 100644
--- a/quic/test_tools/simulator/switch.h
+++ b/quic/test_tools/simulator/switch.h
@@ -20,7 +20,7 @@
 class Switch {
  public:
   Switch(Simulator* simulator,
-         QuicString name,
+         std::string name,
          SwitchPortNumber port_count,
          QuicByteCount queue_capacity);
   Switch(const Switch&) = delete;
@@ -42,7 +42,7 @@
   class Port : public Endpoint, public UnconstrainedPortInterface {
    public:
     Port(Simulator* simulator,
-         QuicString name,
+         std::string name,
          Switch* parent,
          SwitchPortNumber port_number,
          QuicByteCount queue_capacity);
@@ -80,7 +80,7 @@
   // This can not be a QuicDeque since pointers into this are
   // assumed to be stable.
   std::deque<Port> ports_;
-  QuicUnorderedMap<QuicString, Port*> switching_table_;
+  QuicUnorderedMap<std::string, Port*> switching_table_;
 };
 
 }  // namespace simulator
diff --git a/quic/test_tools/simulator/traffic_policer.cc b/quic/test_tools/simulator/traffic_policer.cc
index e416a7d..fa0bcfb 100644
--- a/quic/test_tools/simulator/traffic_policer.cc
+++ b/quic/test_tools/simulator/traffic_policer.cc
@@ -10,7 +10,7 @@
 namespace simulator {
 
 TrafficPolicer::TrafficPolicer(Simulator* simulator,
-                               QuicString name,
+                               std::string name,
                                QuicByteCount initial_bucket_size,
                                QuicByteCount max_bucket_size,
                                QuicBandwidth target_bandwidth,
diff --git a/quic/test_tools/simulator/traffic_policer.h b/quic/test_tools/simulator/traffic_policer.h
index ee77576..c2a3e99 100644
--- a/quic/test_tools/simulator/traffic_policer.h
+++ b/quic/test_tools/simulator/traffic_policer.h
@@ -20,7 +20,7 @@
 class TrafficPolicer : public PacketFilter {
  public:
   TrafficPolicer(Simulator* simulator,
-                 QuicString name,
+                 std::string name,
                  QuicByteCount initial_bucket_size,
                  QuicByteCount max_bucket_size,
                  QuicBandwidth target_bandwidth,
@@ -45,7 +45,7 @@
   QuicTime last_refill_time_;
 
   // Maps each destination to the number of tokens it has left.
-  QuicUnorderedMap<QuicString, QuicByteCount> token_buckets_;
+  QuicUnorderedMap<std::string, QuicByteCount> token_buckets_;
 };
 
 }  // namespace simulator
