diff --git a/contrib/src/msgpack/rules.mak b/contrib/src/msgpack/rules.mak
index d8d255f7fc1cc0e611ee1a245679a64c5c83c082..18ec422bbe36e1be9990b125fd4414393ea84aca 100644
--- a/contrib/src/msgpack/rules.mak
+++ b/contrib/src/msgpack/rules.mak
@@ -1,5 +1,5 @@
 # MSGPACK
-MSGPACK_VERSION := cpp-1.2.0
+MSGPACK_VERSION := 068041f05eb1b8ab2930a7679dfe89ba7d14cb79
 MSGPACK_URL := https://github.com/msgpack/msgpack-c/archive/$(MSGPACK_VERSION).tar.gz
 
 PKGS += msgpack
diff --git a/contrib/src/opendht/rules.mak b/contrib/src/opendht/rules.mak
index 66d9b8d72262e8c1d4d4c0d94b7f1e6953279a8f..c616fb8b3fcffb8b979eeb63a9b957760a59cc9f 100644
--- a/contrib/src/opendht/rules.mak
+++ b/contrib/src/opendht/rules.mak
@@ -1,5 +1,5 @@
 # OPENDHT
-OPENDHT_VERSION := 13f8c13ac4ebb3b43474d91ca48b42a1019083f4
+OPENDHT_VERSION := 0.6.1
 OPENDHT_URL := https://github.com/savoirfairelinux/opendht/archive/$(OPENDHT_VERSION).tar.gz
 
 PKGS += opendht
@@ -8,7 +8,7 @@ PKGS_FOUND += opendht
 endif
 
 # Avoid building distro-provided dependencies in case opendht was built manually
-ifneq ($(call need_pkg,"msgpack >= 1.1"),)
+ifneq ($(call need_pkg,"msgpack >= 1.2"),)
 DEPS_opendht += msgpack
 endif
 ifneq ($(call need_pkg,"gnutls >= 3.3.0"),)
diff --git a/src/ringdht/ringaccount.cpp b/src/ringdht/ringaccount.cpp
index 8d16386da663ad0b679d6c576f9f7e9ce19e9c64..2f86693f5550636d8a5172e09dfa37a3e2e6d716 100644
--- a/src/ringdht/ringaccount.cpp
+++ b/src/ringdht/ringaccount.cpp
@@ -57,8 +57,6 @@
 
 #include "security/certstore.h"
 
-#include <opendht/securedht.h>
-
 #include <yaml-cpp/yaml.h>
 
 #include <algorithm>
@@ -773,9 +771,9 @@ RingAccount::doRegister()
 }
 
 static constexpr const char*
-dhtStatusStr(dht::Dht::Status status) {
-    return status == dht::Dht::Status::Connected  ? "connected"  : (
-           status == dht::Dht::Status::Connecting ? "connecting" :
+dhtStatusStr(dht::NodeStatus status) {
+    return status == dht::NodeStatus::Connected  ? "connected"  : (
+           status == dht::NodeStatus::Connecting ? "connecting" :
                                                     "disconnected");
 }
 
@@ -791,17 +789,17 @@ RingAccount::doRegister_()
         }
         auto identity = loadIdentity();
 
-        dht_.setOnStatusChanged([this](dht::Dht::Status s4, dht::Dht::Status s6) {
+        dht_.setOnStatusChanged([this](dht::NodeStatus s4, dht::NodeStatus s6) {
                 RING_WARN("Dht status : IPv4 %s; IPv6 %s", dhtStatusStr(s4), dhtStatusStr(s6));
                 RegistrationState state;
                 switch (std::max(s4, s6)) {
-                    case dht::Dht::Status::Connecting:
+                    case dht::NodeStatus::Connecting:
                         state = RegistrationState::TRYING;
                         break;
-                    case dht::Dht::Status::Connected:
+                    case dht::NodeStatus::Connected:
                         state = RegistrationState::REGISTERED;
                         break;
-                    case dht::Dht::Status::Disconnected:
+                    case dht::NodeStatus::Disconnected:
                         state = RegistrationState::UNREGISTERED;
                         break;
                     default:
@@ -1156,7 +1154,7 @@ RingAccount::saveTreatedMessages() const
 }
 
 void
-RingAccount::saveNodes(const std::vector<dht::Dht::NodeExport>& nodes) const
+RingAccount::saveNodes(const std::vector<dht::NodeExport>& nodes) const
 {
     if (nodes.empty())
         return;
@@ -1174,7 +1172,7 @@ RingAccount::saveNodes(const std::vector<dht::Dht::NodeExport>& nodes) const
 }
 
 void
-RingAccount::saveValues(const std::vector<dht::Dht::ValuesExport>& values) const
+RingAccount::saveValues(const std::vector<dht::ValuesExport>& values) const
 {
     fileutils::check_dir(dataPath_.c_str());
     for (const auto& v : values) {
@@ -1184,10 +1182,10 @@ RingAccount::saveValues(const std::vector<dht::Dht::ValuesExport>& values) const
     }
 }
 
-std::vector<dht::Dht::NodeExport>
+std::vector<dht::NodeExport>
 RingAccount::loadNodes() const
 {
-    std::vector<dht::Dht::NodeExport> nodes;
+    std::vector<dht::NodeExport> nodes;
     std::string nodesPath = cachePath_+DIR_SEPARATOR_STR "nodes";
     {
         std::ifstream file(nodesPath);
@@ -1202,24 +1200,24 @@ RingAccount::loadNodes() const
             std::string id, ipstr;
             if (!(iss >> id >> ipstr)) { break; }
             IpAddr ip {ipstr};
-            dht::Dht::NodeExport e {dht::InfoHash(id), ip, ip.getLength()};
+            dht::NodeExport e {dht::InfoHash(id), ip, ip.getLength()};
             nodes.push_back(e);
         }
     }
     return nodes;
 }
 
-std::vector<dht::Dht::ValuesExport>
+std::vector<dht::ValuesExport>
 RingAccount::loadValues() const
 {
-    std::vector<dht::Dht::ValuesExport> values;
+    std::vector<dht::ValuesExport> values;
     const auto dircontent(fileutils::readDirectory(dataPath_));
     for (const auto& fname : dircontent) {
         const auto file = dataPath_+DIR_SEPARATOR_STR+fname;
         try {
             std::ifstream ifs(file, std::ifstream::in | std::ifstream::binary);
             std::istreambuf_iterator<char> begin(ifs), end;
-            values.emplace_back(dht::Dht::ValuesExport{dht::InfoHash(fname), std::vector<uint8_t>{begin, end}});
+            values.emplace_back(dht::ValuesExport{dht::InfoHash(fname), std::vector<uint8_t>{begin, end}});
         } catch (const std::exception& e) {
             RING_ERR("Error reading value: %s", e.what());
         }
diff --git a/src/ringdht/ringaccount.h b/src/ringdht/ringaccount.h
index 6fda37811ed7c721f833b3179d775995947af7bd..dd16a51e6198886c5c6d38d2b8617e8d21b03789 100644
--- a/src/ringdht/ringaccount.h
+++ b/src/ringdht/ringaccount.h
@@ -344,8 +344,8 @@ class RingAccount : public SIPAccountBase {
         void checkIdentityPath();
 
         void saveIdentity(const dht::crypto::Identity id, const std::string& path) const;
-        void saveNodes(const std::vector<dht::Dht::NodeExport>&) const;
-        void saveValues(const std::vector<dht::Dht::ValuesExport>&) const;
+        void saveNodes(const std::vector<dht::NodeExport>&) const;
+        void saveValues(const std::vector<dht::ValuesExport>&) const;
 
         void loadTreatedCalls();
         void saveTreatedCalls() const;
@@ -361,8 +361,8 @@ class RingAccount : public SIPAccountBase {
          * Otherwise, generate a new identity and returns it.
          */
         dht::crypto::Identity loadIdentity();
-        std::vector<dht::Dht::NodeExport> loadNodes() const;
-        std::vector<dht::Dht::ValuesExport> loadValues() const;
+        std::vector<dht::NodeExport> loadNodes() const;
+        std::vector<dht::ValuesExport> loadValues() const;
 
         bool dhtPublicInCalls_ {true};