diff --git a/README.md b/README.md
index 4cf6a69fe635d7d6433869a57c4b4caca2ff19fe..fc8b3c76efa921f8437db6ad3b40e79fa05af8b5 100644
--- a/README.md
+++ b/README.md
@@ -19,14 +19,20 @@ Example
 Example program launching a DHT node, connecting to the network and performing some basic operations:
 ```c++
 #include <opendht.h>
+#include <vector>
 
-int main() {
+int main()
+{
     dht::DhtRunner node;
 
     // Launch a dht node on a new thread, using a
     // generated RSA key pair, and listen on port 4222.
     node.run(4222, dht::crypto::generateIdentity(), true);
 
+    // Join the network through any running node,
+    // here using a known bootstrap node.
+    node.bootstrap("bootstrap.ring.cx", "4222");
+
     // put some data on the dht
     std::vector<uint8_t> some_data(5, 10);
     node.put("unique_key", some_data);
@@ -38,15 +44,16 @@ int main() {
     node.get("other_unique_key", [](const std::vector<std::shared_ptr<dht::Value>>& values) {
         // Callback called when values are found
         for (const auto& value : values)
-            std::cout << "Found value: " << value << std::endl;
+            std::cout << "Found value: " << *value << std::endl;
         return true; // return false to stop the search
     });
-    
+
     // here we could wait for some operations to complete
     // instead of ending now.
 
     // wait for dht threads to end
     node.join();
+    return 0;
 }
 ```