diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp
index 491501e1af28987c00f1585b2197a9fd5f39c0fa..ff1b97b996f4bc7d47f35b9b3c1a39f4c9c3c4be 100644
--- a/src/managerimpl.cpp
+++ b/src/managerimpl.cpp
@@ -2825,15 +2825,18 @@ std::shared_ptr<Call>
 ManagerImpl::newOutgoingCall(const std::string& toUrl,
                              const std::string& preferredAccountId)
 {
-    std::shared_ptr<Account> account = Manager::instance().getIP2IPAccount();
+    auto account = Manager::instance().getIP2IPAccount();
+    auto preferred = getAccount(preferredAccountId);
     std::string finalToUrl = toUrl;
 
 #if HAVE_DHT
     if (toUrl.find("ring:") != std::string::npos) {
-        RING_WARN("Ring DHT call detected");
+        if (preferred && preferred->getAccountType() == RingAccount::ACCOUNT_TYPE)
+            return preferred->newOutgoingCall(finalToUrl);
         auto dhtAcc = getAllAccounts<RingAccount>();
-        if (not dhtAcc.empty())
-            return dhtAcc.front()->newOutgoingCall(finalToUrl);
+        for (const auto& acc : dhtAcc)
+            if (acc->isEnabled())
+                return acc->newOutgoingCall(finalToUrl);
     }
 #endif
 
@@ -2841,7 +2844,7 @@ ManagerImpl::newOutgoingCall(const std::string& toUrl,
     sip_utils::stripSipUriPrefix(finalToUrl);
 
     if (!IpAddr::isValid(finalToUrl)) {
-        account = getAccount(preferredAccountId);
+        account = preferred;
         if (account)
             finalToUrl = toUrl;
         else