diff --git a/include/opendht/utils.h b/include/opendht/utils.h
index d7c1783c0d9f2efe8b3794b5bec921f9d6311fbb..4df44f6bca6bdc856f746c465ebd111ae020b342 100644
--- a/include/opendht/utils.h
+++ b/include/opendht/utils.h
@@ -154,5 +154,6 @@ unpackMsg(Blob b) {
 msgpack::unpacked unpackMsg(Blob b);
 
 msgpack::object* findMapValue(const msgpack::object& map, const char* key);
+msgpack::object* findMapValue(const msgpack::object& map, const std::string& key);
 
 } // namespace dht
diff --git a/src/utils.cpp b/src/utils.cpp
index e27f2ced02ebe2647e63a3a4d579e2becc505814..3d6576e912673a6f2f7bb64fd03f3e9a8896f64e 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -274,7 +274,21 @@ findMapValue(const msgpack::object& map, const char* key) {
     if (map.type != msgpack::type::MAP) throw msgpack::type_error();
     for (unsigned i = 0; i < map.via.map.size; i++) {
         auto& o = map.via.map.ptr[i];
-        if (o.key.type == msgpack::type::STR && std::strncmp(o.key.via.str.ptr, key, o.key.via.str.size) == 0)
+        if (o.key.type == msgpack::type::STR 
+            && std::strncmp(o.key.via.str.ptr, key, o.key.via.str.size) == 0)
+            return &o.val;
+    }
+    return nullptr;
+}
+
+msgpack::object*
+findMapValue(const msgpack::object& map, const std::string& key) {
+    if (map.type != msgpack::type::MAP) throw msgpack::type_error();
+    for (unsigned i = 0; i < map.via.map.size; i++) {
+        auto& o = map.via.map.ptr[i];
+        if (o.key.type == msgpack::type::STR 
+            && key.size() == o.key.via.str.size
+            && std::strncmp(o.key.via.str.ptr, key.data(), o.key.via.str.size) == 0)
             return &o.val;
     }
     return nullptr;