diff --git a/include/opendht/callbacks.h b/include/opendht/callbacks.h
index 21fad568b28d30da1cf8af53b903feb9657dffdb..5619b927bfddb72bab3250174c05d5f293268b07 100644
--- a/include/opendht/callbacks.h
+++ b/include/opendht/callbacks.h
@@ -78,6 +78,7 @@ struct OPENDHT_PUBLIC NodeInfo {
     InfoHash node_id;
     NodeStats ipv4;
     NodeStats ipv6;
+    size_t ongoing_ops;
 
 #ifdef OPENDHT_JSONCPP
     /**
diff --git a/include/opendht/dhtrunner.h b/include/opendht/dhtrunner.h
index 65ecdba808071ac9d77b145f0a967365ae349b9e..551601efc0f8cf956fad23c4c60d3af617c29c47 100644
--- a/include/opendht/dhtrunner.h
+++ b/include/opendht/dhtrunner.h
@@ -522,7 +522,7 @@ private:
     std::mutex storage_mtx {};
 
     std::atomic<State> running {State::Idle};
-    std::atomic_uint ongoing_ops {0};
+    std::atomic_size_t ongoing_ops {0};
     std::vector<ShutdownCallback> shutdownCallbacks_;
 
     NodeStatus status4 {NodeStatus::Disconnected},
diff --git a/src/callbacks.cpp b/src/callbacks.cpp
index 8d85155f55fe68d78e90b6a28e7de31bc319e3e0..70b623b81ace56fc4c5b0a7b09c00ce4258d4923 100644
--- a/src/callbacks.cpp
+++ b/src/callbacks.cpp
@@ -121,6 +121,7 @@ NodeInfo::toJson() const
     val["node_id"] = node_id.toString();
     val["ipv4"] = ipv4.toJson();
     val["ipv6"] = ipv6.toJson();
+    val["ops"] = Json::Value::LargestUInt(ongoing_ops);
     return val;
 }
 
@@ -131,6 +132,7 @@ NodeInfo::NodeInfo(const Json::Value& v)
     node_id = InfoHash(v["node_id"].asString());
     ipv4 = NodeStats(v["ipv4"]);
     ipv6 = NodeStats(v["ipv6"]);
+    ongoing_ops = v["ops"].asLargestUInt();
 }
 
 #endif
diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp
index 26732405d2111c60488aabc79ebcea308968d0ee..8701db9be8e78afcda36630f255a2213e9624124 100644
--- a/src/dhtrunner.cpp
+++ b/src/dhtrunner.cpp
@@ -467,6 +467,7 @@ DhtRunner::getNodeInfo() const {
     NodeInfo info;
     info.id = getId();
     info.node_id = getNodeId();
+    info.ongoing_ops = ongoing_ops;
     info.ipv4 = dht_->getNodesStats(AF_INET);
     info.ipv6 = dht_->getNodesStats(AF_INET6);
     return info;
diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp
index 4c5dbefb6995e2485d7c04c055095c3891d1f3d1..7b200b9bbbe83a6652403d7a5ffaa6e6511b441b 100644
--- a/tools/dhtnode.cpp
+++ b/tools/dhtnode.cpp
@@ -140,11 +140,13 @@ void cmd_loop(std::shared_ptr<DhtRunner>& node, dht_params& params
             print_help();
             continue;
         } else if (op == "ll") {
+            auto nodeInfo = node->getNodeInfo();
             print_node_info(*node, params);
+            std::cout << nodeInfo.ongoing_ops << " ongoing operations" << std::endl;
             std::cout << "IPv4 stats:" << std::endl;
-            std::cout << node->getNodesStats(AF_INET).toString() << std::endl;
+            std::cout << nodeInfo.ipv4.toString() << std::endl;
             std::cout << "IPv6 stats:" << std::endl;
-            std::cout << node->getNodesStats(AF_INET6).toString() << std::endl;
+            std::cout << nodeInfo.ipv6.toString() << std::endl;
 #ifdef OPENDHT_PROXY_SERVER
             for (const auto& proxy : proxies) {
                 std::cout << "Stats for proxy on port " << proxy.first << std::endl;