diff --git a/c/opendht_c.h b/c/opendht_c.h
index abc6b8cd4a352e191066d7ae2d807a990d5a6a88..a78f7d33e44264ff455394055a80600cf0e3f162 100644
--- a/c/opendht_c.h
+++ b/c/opendht_c.h
@@ -88,8 +88,8 @@ OPENDHT_C_PUBLIC void dht_identity_delete(dht_identity*);
 // callbacks
 typedef bool (*dht_get_cb)(const dht_value* value, void* user_data);
 typedef bool (*dht_value_cb)(const dht_value* value, bool expired, void* user_data);
-typedef bool (*dht_done_cb)(bool ok, void* user_data);
-typedef bool (*dht_shutdown_cb)(void* user_data);
+typedef void (*dht_done_cb)(bool ok, void* user_data);
+typedef void (*dht_shutdown_cb)(void* user_data);
 
 struct OPENDHT_C_PUBLIC dht_op_token;
 typedef struct dht_op_token dht_op_token;
diff --git a/tools/dhtcnode.c b/tools/dhtcnode.c
index 5446a2d8a3532c261f15a203ddbedde06e947c65..ad72a72ddb33367dea6dea639f67c83b3ad743e6 100644
--- a/tools/dhtcnode.c
+++ b/tools/dhtcnode.c
@@ -15,6 +15,7 @@ bool dht_value_callback(const dht_value* value, bool expired, void* user_data)
 {
     dht_data_view data = dht_value_get_data(value);
     printf("Value callback %s: %.*s.\n", expired ? "expired" : "new", (int)data.size, data.data);
+    return true;
 }
 
 bool dht_get_callback(const dht_value* value, void* user_data)
@@ -22,15 +23,16 @@ bool dht_get_callback(const dht_value* value, void* user_data)
     dht_runner* runner = (dht_runner*)user_data;
     dht_data_view data = dht_value_get_data(value);
     printf("Get callback: %.*s.\n", (int)data.size, data.data);
+    return true;
 }
 
-bool dht_done_callback(bool ok, void* user_data)
+void dht_done_callback(bool ok, void* user_data)
 {
     dht_runner* runner = (dht_runner*)user_data;
     printf("Done callback. %s\n", ok ? "Success !" : "Failure :-(");
 }
 
-bool op_context_free(void* user_data)
+void op_context_free(void* user_data)
 {
     struct op_context* ctx = (struct op_context*)user_data;
     printf("op_context_free %d.\n", ctx->d);