diff --git a/include/opendht/dht.h b/include/opendht/dht.h
index 7a1567bb33480ff8cba9a775c65d70a0ff511f83..e2ef548b13756e13d7dae379b1350dacc654f75f 100644
--- a/include/opendht/dht.h
+++ b/include/opendht/dht.h
@@ -340,7 +340,8 @@ public:
 
     void dumpTables() const;
     std::vector<unsigned> getNodeMessageStats(bool in = false) const {
-        return {out.ping, out.find, out.get, out.listen, out.put};
+        return in ? std::vector<unsigned>{in_stats.ping,  in_stats.find,  in_stats.get,  in_stats.listen,  in_stats.put}
+                  : std::vector<unsigned>{out_stats.ping, out_stats.find, out_stats.get, out_stats.listen, out_stats.put};
     }
 
     /* This must be provided by the user. */
@@ -907,7 +908,7 @@ private:
         unsigned listen {0};
     };
 
-    MessageStats in {}, out {};
+    MessageStats in_stats {}, out_stats {};
 
 };
 
diff --git a/src/dht.cpp b/src/dht.cpp
index 5486f9d6d4cb16a040b49fbbce001e70cefd4f8a..d6b057e36933778a10730ab047bc8e4a49ec0636 100644
--- a/src/dht.cpp
+++ b/src/dht.cpp
@@ -2403,16 +2403,19 @@ Dht::processMessage(const uint8_t *buf, size_t buflen, const sockaddr *from, soc
         }
         break;
     case MessageType::Ping:
+        in_stats.ping++;
         newNode(msg.id, from, fromlen, 1);
         //DHT_DEBUG("Sending pong.");
         sendPong(from, fromlen, msg.tid);
         break;
     case MessageType::FindNode:
+        in_stats.find++;
         newNode(msg.id, from, fromlen, 1);
         DHT_DEBUG("[node %s %s] got 'find' request (%d).", msg.id.toString().c_str(), print_addr(from, fromlen).c_str(), msg.want);
         sendClosestNodes(from, fromlen, msg.tid, msg.target, msg.want);
         break;
     case MessageType::GetValues:
+        in_stats.get++;
         DHT_DEBUG("[node %s %s] got 'get' request for %s.", msg.id.toString().c_str(), print_addr(from, fromlen).c_str(), msg.info_hash.toString().c_str());
         newNode(msg.id, from, fromlen, 1);
         if (msg.info_hash == zeroes) {
@@ -2432,6 +2435,7 @@ Dht::processMessage(const uint8_t *buf, size_t buflen, const sockaddr *from, soc
         }
         break;
     case MessageType::AnnounceValue:
+        in_stats.put++;
         DHT_DEBUG("[node %s %s] got 'put' request for %s.",
             msg.id.toString().c_str(), print_addr(from, fromlen).c_str(),
             msg.info_hash.toString().c_str());
@@ -2486,6 +2490,7 @@ Dht::processMessage(const uint8_t *buf, size_t buflen, const sockaddr *from, soc
         }
         break;
     case MessageType::Listen:
+        in_stats.listen++;
         DHT_DEBUG("[node %s %s] got 'listen' request for %s.", msg.id.toString().c_str(), print_addr(from, fromlen).c_str(), msg.info_hash.toString().c_str());
         if (msg.info_hash == zeroes) {
             DHT_WARN("Listen with no info_hash.");
@@ -2737,7 +2742,7 @@ Dht::sendPing(const sockaddr *sa, socklen_t salen, TransId tid)
     pk.pack(std::string("y")); pk.pack(std::string("q"));
     pk.pack(std::string("v")); pk.pack(my_v);
 
-    out.ping++;
+    out_stats.ping++;
 
     return send(buffer.data(), buffer.size(), 0, sa, salen);
 }
@@ -2785,7 +2790,7 @@ Dht::sendFindNode(const sockaddr *sa, socklen_t salen, TransId tid,
     pk.pack(std::string("y")); pk.pack(std::string("q"));
     pk.pack(std::string("v")); pk.pack(my_v);
 
-    out.find++;
+    out_stats.find++;
 
     return send(buffer.data(), buffer.size(), confirm ? 0 : MSG_CONFIRM, sa, salen);
 }
@@ -2968,7 +2973,7 @@ Dht::sendGetValues(const sockaddr *sa, socklen_t salen,
     pk.pack(std::string("y")); pk.pack(std::string("q"));
     pk.pack(std::string("v")); pk.pack(my_v);
 
-    out.get++;
+    out_stats.get++;
 
     return send(buffer.data(), buffer.size(), confirm ? 0 : MSG_CONFIRM, sa, salen);
 }
@@ -2992,7 +2997,7 @@ Dht::sendListen(const sockaddr* sa, socklen_t salen, TransId tid,
     pk.pack(std::string("y")); pk.pack(std::string("q"));
     pk.pack(std::string("v")); pk.pack(my_v);
 
-    out.listen++;
+    out_stats.listen++;
 
     return send(buffer.data(), buffer.size(), confirm ? 0 : MSG_CONFIRM, sa, salen);
 }
@@ -3037,7 +3042,7 @@ Dht::sendAnnounceValue(const sockaddr *sa, socklen_t salen, TransId tid,
     pk.pack(std::string("y")); pk.pack(std::string("q"));
     pk.pack(std::string("v")); pk.pack(my_v);
 
-    out.put++;
+    out_stats.put++;
 
     return send(buffer.data(), buffer.size(), confirm ? 0 : MSG_CONFIRM, sa, salen);
 }