diff --git a/aclk/aclk.c b/aclk/aclk.c
index 29a49a438d..279c5f1e03 100644
--- a/aclk/aclk.c
+++ b/aclk/aclk.c
@@ -1221,9 +1221,9 @@ void add_aclk_host_labels(void) {
 #endif
 }
 
-void aclk_queue_node_info(RRDHOST *host) {
+void aclk_queue_node_info(RRDHOST *host, bool immediate)
+{
     struct aclk_sync_host_config *wc = (struct aclk_sync_host_config *) host->aclk_sync_host_config;
-    if (likely(wc)) {
-        wc->node_info_send = 1;
-    }
+    if (likely(wc))
+        wc->node_info_send_time = (host == localhost || immediate) ? 1 : now_realtime_sec();
 }
diff --git a/aclk/aclk.h b/aclk/aclk.h
index 56b24add92..a56aa7b263 100644
--- a/aclk/aclk.h
+++ b/aclk/aclk.h
@@ -54,6 +54,6 @@ void aclk_send_bin_msg(char *msg, size_t msg_len, enum aclk_topics subtopic, con
 char *aclk_state(void);
 char *aclk_state_json(void);
 void add_aclk_host_labels(void);
-void aclk_queue_node_info(RRDHOST *host);
+void aclk_queue_node_info(RRDHOST *host, bool immediate);
 
 #endif /* ACLK_H */
diff --git a/database/rrdhost.c b/database/rrdhost.c
index 2917b0977b..ebf9a6887f 100644
--- a/database/rrdhost.c
+++ b/database/rrdhost.c
@@ -1348,7 +1348,7 @@ void rrdhost_set_is_parent_label(int count) {
         //queue a node info
 #ifdef ENABLE_ACLK
         if (netdata_cloud_setting) {
-            aclk_queue_node_info(localhost);
+            aclk_queue_node_info(localhost, false);
         }
 #endif
     }
diff --git a/database/sqlite/sqlite_aclk.c b/database/sqlite/sqlite_aclk.c
index ae6f24e31d..060f29be88 100644
--- a/database/sqlite/sqlite_aclk.c
+++ b/database/sqlite/sqlite_aclk.c
@@ -90,7 +90,7 @@ enum {
 
 static int create_host_callback(void *data, int argc, char **argv, char **column)
 {
-    UNUSED(data);
+    int *number_of_chidren = data;
     UNUSED(argc);
     UNUSED(column);
 
@@ -132,6 +132,8 @@ static int create_host_callback(void *data, int argc, char **argv, char **column
     if (likely(host))
         host->rrdlabels = sql_load_host_labels((uuid_t *)argv[IDX_HOST_ID]);
 
+    (*number_of_chidren)++;
+
 #ifdef NETDATA_INTERNAL_CHECKS
     char node_str[UUID_STR_LEN] = "<none>";
     if (likely(host->node_id))
@@ -520,7 +522,8 @@ void sql_create_aclk_table(RRDHOST *host __maybe_unused, uuid_t *host_uuid __may
     wc->host = host;
     strcpy(wc->uuid_str, uuid_str);
     wc->alert_updates = 0;
-    wc->node_info_send = 1;
+    time_t now = now_realtime_sec();
+    wc->node_info_send_time = (host == localhost || NULL == localhost) ? now - 25 : now;
 #endif
 }
 
@@ -544,16 +547,22 @@ void sql_aclk_sync_init(void)
     }
 
     info("Creating archived hosts");
-    rc = sqlite3_exec_monitored(db_meta, SQL_FETCH_ALL_HOSTS, create_host_callback, NULL, &err_msg);
+    int number_of_children = 0;
+    rc = sqlite3_exec_monitored(db_meta, SQL_FETCH_ALL_HOSTS, create_host_callback, &number_of_children, &err_msg);
 
     if (rc != SQLITE_OK) {
         error_report("SQLite error when loading archived hosts, rc = %d (%s)", rc, err_msg);
         sqlite3_free(err_msg);
     }
+
+    info("Created %d archived hosts", number_of_children);
     // Trigger host context load for hosts that have been created
     metadata_queue_load_host_context(NULL);
 
 #ifdef ENABLE_ACLK
+    if (!number_of_children)
+        aclk_queue_node_info(localhost, true);
+
     rc = sqlite3_exec_monitored(db_meta, SQL_FETCH_ALL_INSTANCES,aclk_config_parameters, NULL,&err_msg);
 
     if (rc != SQLITE_OK) {
diff --git a/database/sqlite/sqlite_aclk.h b/database/sqlite/sqlite_aclk.h
index 9f0eb30470..156a8bf500 100644
--- a/database/sqlite/sqlite_aclk.h
+++ b/database/sqlite/sqlite_aclk.h
@@ -72,7 +72,7 @@ struct aclk_database_cmdqueue {
 struct aclk_sync_host_config {
     RRDHOST *host;
     int alert_updates;
-    int node_info_send;
+    time_t node_info_send_time;
     time_t node_collectors_send;
     char uuid_str[UUID_STR_LEN];
     char node_id[UUID_STR_LEN];
diff --git a/database/sqlite/sqlite_aclk_node.c b/database/sqlite/sqlite_aclk_node.c
index bc7eadf99f..0f636b063a 100644
--- a/database/sqlite/sqlite_aclk_node.c
+++ b/database/sqlite/sqlite_aclk_node.c
@@ -73,8 +73,6 @@ static void build_node_info(char *node_id __maybe_unused)
         return;
     }
 
-    wc->node_info_send = 1;
-
     rrd_rdlock();
     node_info.node_id = wc->node_id;
     node_info.claim_id = get_agent_claimid();
@@ -148,20 +146,19 @@ void aclk_check_node_info_and_collectors(void)
 
     dfe_start_reentrant(rrdhost_root_index, host) {
 
+        struct aclk_sync_host_config *wc = host->aclk_sync_host_config;
+        if (unlikely(!wc))
+            continue;
+
         if (unlikely(rrdhost_flag_check(host, RRDHOST_FLAG_PENDING_CONTEXT_LOAD))) {
             info("ACLK: 'host:%s' not sending node info, context load is pending", rrdhost_hostname(host));
             continue;
         }
 
-        struct aclk_sync_host_config *wc = host->aclk_sync_host_config;
-
-        if (unlikely(!wc))
-            continue;
-
-        if (wc->node_info_send) {
+        if (wc->node_info_send_time && wc->node_info_send_time + 30 < now_realtime_sec()) {
+            wc->node_info_send_time = 0;
             build_node_info(strdupz(wc->node_id));
             internal_error(true, "ACLK SYNC: Sending node info for %s", rrdhost_hostname(host));
-            wc->node_info_send = 0;
         }
 
         if (wc->node_collectors_send && wc->node_collectors_send + 30 < now_realtime_sec()) {
diff --git a/database/sqlite/sqlite_metadata.c b/database/sqlite/sqlite_metadata.c
index 5f8aa496cd..3e83bba32c 100644
--- a/database/sqlite/sqlite_metadata.c
+++ b/database/sqlite/sqlite_metadata.c
@@ -892,6 +892,10 @@ static void restore_host_context(void *arg)
 
     rrdhost_flag_clear(host, RRDHOST_FLAG_PENDING_CONTEXT_LOAD | RRDHOST_FLAG_CONTEXT_LOAD_IN_PROGRESS);
 
+#ifdef ENABLE_ACLK
+    aclk_queue_node_info(host, false);
+#endif
+
     internal_error(true, "METADATA: 'host:%s' context load in %0.2f ms", rrdhost_hostname(host),
         (double)(ended_ut - started_ut) / USEC_PER_MS);
 
diff --git a/streaming/receiver.c b/streaming/receiver.c
index de205de92e..ff7a956290 100644
--- a/streaming/receiver.c
+++ b/streaming/receiver.c
@@ -437,7 +437,7 @@ static void rrdpush_receiver_replication_reset(RRDHOST *host) {
     rrdhost_receiver_replicating_charts_zero(host);
 }
 
-bool rrdhost_set_receiver(RRDHOST *host, struct receiver_state *rpt) {
+static bool rrdhost_set_receiver(RRDHOST *host, struct receiver_state *rpt) {
     bool signal_rrdcontext = false;
     bool set_this = false;
 
@@ -472,6 +472,7 @@ bool rrdhost_set_receiver(RRDHOST *host, struct receiver_state *rpt) {
         rrdpush_receiver_replication_reset(host);
 
         rrdhost_flag_clear(rpt->host, RRDHOST_FLAG_RRDPUSH_RECEIVER_DISCONNECTED);
+        aclk_queue_node_info(rpt->host, true);
 
         set_this = true;
     }