diff --git a/tools/dhtchat.cpp b/tools/dhtchat.cpp
index 9ef045a7a81618d7b13c788d61b5c104a7f3cec6..f343f6fe15366bdc9e18b6eb823c7035e8a7cbbb 100644
--- a/tools/dhtchat.cpp
+++ b/tools/dhtchat.cpp
@@ -43,10 +43,20 @@ void print_node_info(const DhtRunner& dht, const dht_params&) {
     std::cout << "Public key ID " << dht.getId() << std::endl;
 }
 
+void print_usage() {
+    std::cout << "Usage: dhtchat [-n network_id] [-p local_port] [-b bootstrap_host[:port]]" << std::endl << std::endl;
+    std::cout << "dhtchat, a simple OpenDHT command line chat client." << std::endl;
+    std::cout << "Report bugs to: http://opendht.net" << std::endl;
+}
+
 int
 main(int argc, char **argv)
 {
     auto params = parseArgs(argc, argv);
+    if (params.help) {
+        print_usage();
+        return 0;
+    }
 #ifdef WIN32_NATIVE
     gnutls_global_init();
 #endif
diff --git a/tools/dhtscanner.cpp b/tools/dhtscanner.cpp
index 1019cb40b5e2be44a61e453a429205c98e10b901..2377700f427c7e68926c32a76475ff260ac1a3f4 100644
--- a/tools/dhtscanner.cpp
+++ b/tools/dhtscanner.cpp
@@ -30,6 +30,12 @@ extern "C" {
 
 using namespace dht;
 
+void print_usage() {
+    std::cout << "Usage: dhtscanner [-n network_id] [-p local_port] [-b bootstrap_host[:port]]" << std::endl << std::endl;
+    std::cout << "dhtscanner, a simple OpenDHT command line utility generating scan result the network." << std::endl;
+    std::cout << "Report bugs to: http://opendht.net" << std::endl;
+}
+
 struct snode_compare {
     bool operator() (const std::shared_ptr<Node>& lhs, const std::shared_ptr<Node>& rhs) const{
         return (lhs->id < rhs->id) ||
@@ -73,6 +79,10 @@ main(int argc, char **argv)
     gnutls_global_init();
 #endif
     auto params = parseArgs(argc, argv);
+    if (params.help) {
+        print_usage();
+        return 0;
+    }
 
     DhtRunner dht;
     dht.run(params.port, {}, true, params.network);