diff --git a/src/Wt/Http/Client.C b/src/Wt/Http/Client.C
index 9d9827d64..8e2d39c29 100644
--- a/src/Wt/Http/Client.C
+++ b/src/Wt/Http/Client.C
@@ -886,8 +886,17 @@ Client::Client(asio::io_service& ioService)
 
 Client::~Client()
 {
-  abort();
-  auto impl = impl_.lock();
+  std::shared_ptr<Impl> impl;
+
+  {
+#ifdef WT_THREADED
+    std::lock_guard<std::recursive_mutex> lock(implementationMutex_);
+#endif // WT_THREADED
+
+    auto impl = impl_.lock();
+    abort();
+  }
+
   if (impl) {
     impl->removeClient();
   }
@@ -1078,6 +1087,9 @@ void Client::handleRedirect(Http::Method method,
                             AsioWrapper::error_code err,
                             const Message& response, const Message& request)
 {
+#ifdef WT_THREADED
+  std::unique_lock<std::recursive_mutex> lock(implementationMutex_);
+#endif
   impl_.reset();
   int status = response.status();
   if (!err && (((status == STATUS_MOVED_PERMANENTLY ||
