diff --git a/quiche/quic/tools/quic_client_interop_test_bin.cc b/quiche/quic/tools/quic_client_interop_test_bin.cc
index 7d204bb..6fe1a51 100644
--- a/quiche/quic/tools/quic_client_interop_test_bin.cc
+++ b/quiche/quic/tools/quic_client_interop_test_bin.cc
@@ -9,14 +9,16 @@
 
 #include "absl/strings/str_cat.h"
 #include "quiche/quic/core/crypto/quic_client_session_cache.h"
-#include "quiche/quic/core/quic_epoll_clock.h"
+#include "quiche/quic/core/io/quic_default_event_loop.h"
+#include "quiche/quic/core/io/quic_event_loop.h"
+#include "quiche/quic/core/quic_default_clock.h"
 #include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/core/quic_versions.h"
-#include "quiche/quic/platform/api/quic_epoll.h"
 #include "quiche/quic/test_tools/quic_connection_peer.h"
 #include "quiche/quic/test_tools/quic_session_peer.h"
 #include "quiche/quic/tools/fake_proof_verifier.h"
-#include "quiche/quic/tools/quic_client.h"
+#include "quiche/quic/tools/quic_default_client.h"
+#include "quiche/quic/tools/quic_name_lookup.h"
 #include "quiche/quic/tools/quic_url.h"
 #include "quiche/common/platform/api/quiche_command_line_flags.h"
 #include "quiche/common/platform/api/quiche_system_event_loop.h"
@@ -107,7 +109,8 @@
   // Attempts a resumption using |client| by disconnecting and reconnecting. If
   // resumption is successful, |features_| is modified to add
   // Feature::kResumption to it, otherwise it is left unmodified.
-  void AttemptResumption(QuicClient* client, const std::string& authority);
+  void AttemptResumption(QuicDefaultClient* client,
+                         const std::string& authority);
 
   void AttemptRequest(QuicSocketAddress addr, std::string authority,
                       QuicServerId server_id, ParsedQuicVersion version,
@@ -119,7 +122,7 @@
   spdy::Http2HeaderBlock ConstructHeaderBlock(const std::string& authority);
 
   // Sends an HTTP request represented by |header_block| using |client|.
-  void SendRequest(QuicClient* client,
+  void SendRequest(QuicDefaultClient* client,
                    const spdy::Http2HeaderBlock& header_block);
 
   void OnConnectionCloseFrame(const QuicConnectionCloseFrame& frame) override {
@@ -157,7 +160,7 @@
   std::set<Feature> features_;
 };
 
-void QuicClientInteropRunner::AttemptResumption(QuicClient* client,
+void QuicClientInteropRunner::AttemptResumption(QuicDefaultClient* client,
                                                 const std::string& authority) {
   client->Disconnect();
   if (!client->Initialize()) {
@@ -202,8 +205,6 @@
 
   auto proof_verifier = std::make_unique<FakeProofVerifier>();
   auto session_cache = std::make_unique<QuicClientSessionCache>();
-  QuicEpollServer epoll_server;
-  QuicEpollClock epoll_clock(&epoll_server);
   QuicConfig config;
   QuicTime::Delta timeout = QuicTime::Delta::FromSeconds(20);
   config.SetIdleNetworkTimeout(timeout);
@@ -216,8 +217,10 @@
     config.custom_transport_parameters_to_send()[kCustomParameter] =
         custom_value;
   }
-  auto client = std::make_unique<QuicClient>(
-      addr, server_id, versions, config, &epoll_server,
+  std::unique_ptr<QuicEventLoop> event_loop =
+      GetDefaultEventLoop()->Create(QuicDefaultClock::Get());
+  auto client = std::make_unique<QuicDefaultClient>(
+      addr, server_id, versions, config, event_loop.get(),
       std::move(proof_verifier), std::move(session_cache));
   client->set_connection_debug_visitor(this);
   if (!client->Initialize()) {
@@ -339,7 +342,7 @@
 }
 
 void QuicClientInteropRunner::SendRequest(
-    QuicClient* client, const spdy::Http2HeaderBlock& header_block) {
+    QuicDefaultClient* client, const spdy::Http2HeaderBlock& header_block) {
   client->set_store_response(true);
   client->SendRequestAndWaitForResponse(header_block, "", /*fin=*/true);
 
diff --git a/quiche/quic/tools/quic_epoll_client_factory.cc b/quiche/quic/tools/quic_epoll_client_factory.cc
index 590a408..1f66777 100644
--- a/quiche/quic/tools/quic_epoll_client_factory.cc
+++ b/quiche/quic/tools/quic_epoll_client_factory.cc
@@ -4,19 +4,21 @@
 
 #include "quiche/quic/tools/quic_epoll_client_factory.h"
 
-#include <netdb.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-
 #include <utility>
 
 #include "absl/strings/str_cat.h"
+#include "quiche/quic/core/io/quic_default_event_loop.h"
+#include "quiche/quic/core/quic_default_clock.h"
 #include "quiche/quic/core/quic_server_id.h"
 #include "quiche/quic/platform/api/quic_socket_address.h"
-#include "quiche/quic/tools/quic_client.h"
+#include "quiche/quic/tools/quic_default_client.h"
+#include "quiche/quic/tools/quic_name_lookup.h"
 
 namespace quic {
 
+QuicEpollClientFactory::QuicEpollClientFactory()
+    : event_loop_(GetDefaultEventLoop()->Create(QuicDefaultClock::Get())) {}
+
 std::unique_ptr<QuicSpdyClientBase> QuicEpollClientFactory::CreateClient(
     std::string host_for_handshake, std::string host_for_lookup,
     int address_family_for_lookup, uint16_t port,
@@ -30,9 +32,9 @@
     return nullptr;
   }
   QuicServerId server_id(host_for_handshake, port, false);
-  return std::make_unique<QuicClient>(addr, server_id, versions, config,
-                                      &epoll_server_, std::move(verifier),
-                                      std::move(session_cache));
+  return std::make_unique<QuicDefaultClient>(
+      addr, server_id, versions, config, event_loop_.get(), std::move(verifier),
+      std::move(session_cache));
 }
 
 }  // namespace quic
diff --git a/quiche/quic/tools/quic_epoll_client_factory.h b/quiche/quic/tools/quic_epoll_client_factory.h
index f2dd7c5..962a714 100644
--- a/quiche/quic/tools/quic_epoll_client_factory.h
+++ b/quiche/quic/tools/quic_epoll_client_factory.h
@@ -5,7 +5,9 @@
 #ifndef QUICHE_QUIC_TOOLS_QUIC_EPOLL_CLIENT_FACTORY_H_
 #define QUICHE_QUIC_TOOLS_QUIC_EPOLL_CLIENT_FACTORY_H_
 
-#include "quiche/quic/platform/api/quic_epoll.h"
+#include <memory>
+
+#include "quiche/quic/core/io/quic_event_loop.h"
 #include "quiche/quic/tools/quic_toy_client.h"
 
 namespace quic {
@@ -13,6 +15,8 @@
 // Factory creating QuicClient instances.
 class QuicEpollClientFactory : public QuicToyClient::ClientFactory {
  public:
+  QuicEpollClientFactory();
+
   std::unique_ptr<QuicSpdyClientBase> CreateClient(
       std::string host_for_handshake, std::string host_for_lookup,
       int address_family_for_lookup, uint16_t port,
@@ -21,7 +25,7 @@
       std::unique_ptr<SessionCache> session_cache) override;
 
  private:
-  QuicEpollServer epoll_server_;
+  std::unique_ptr<QuicEventLoop> event_loop_;
 };
 
 }  // namespace quic
