diff --git a/include/opendht/dht_proxy_server.h b/include/opendht/dht_proxy_server.h
index 346a7c84da39c6285f0328084e03423609c213bc..a3720d1d0cb8de9d9e4080492fca912505d5d73c 100644
--- a/include/opendht/dht_proxy_server.h
+++ b/include/opendht/dht_proxy_server.h
@@ -316,6 +316,7 @@ private:
     std::shared_ptr<DhtRunner> dht_;
     Json::StreamWriterBuilder jsonBuilder_;
     Json::CharReaderBuilder jsonReaderBuilder_;
+    std::mt19937_64 rd {crypto::getSeededRandomEngine<std::mt19937_64>()};
 
     // http server
     std::thread serverThread_;
diff --git a/src/dht_proxy_server.cpp b/src/dht_proxy_server.cpp
index 4c7dbc48ef7e5920dbd548ac5e95bc063b46c12f..84957cffe4257d24afd6fd194b44182e817bd8b0 100644
--- a/src/dht_proxy_server.cpp
+++ b/src/dht_proxy_server.cpp
@@ -964,6 +964,8 @@ DhtProxyServer::put(restinio::request_handle_t request,
                             return response.done();
                         }
                     }
+                    if (value->id == Value::INVALID_ID)
+                        value->id = std::uniform_int_distribution<Value::Id>{1}(rd);
                 }
 
                 auto vid = value->id;