diff --git a/c/opendht.cpp b/c/opendht.cpp
index 282bc5d97c52454d6514d01b497c5ddf354ac75a..ad885153298f64b998d527d309d827594a2126da 100644
--- a/c/opendht.cpp
+++ b/c/opendht.cpp
@@ -173,7 +173,7 @@ int dht_privatekey_export(const dht_privatekey* k, char* out, size_t* out_size,
 
 dht_publickey* dht_privatekey_get_publickey(const dht_privatekey* k) {
     const auto& key = *reinterpret_cast<const PrivkeySp*>(k);
-    return reinterpret_cast<dht_publickey*>(new PubkeySp(std::make_shared<dht::crypto::PublicKey>(key->getPublicKey())));
+    return reinterpret_cast<dht_publickey*>(new PubkeySp(key->getSharedPublicKey()));
 }
 
 void dht_privatekey_delete(dht_privatekey* pk) {