diff --git a/src/decollector.c b/src/decollector.c
index 874dccbf199109ba997cd9ae42f77f73305ac8d3..db8bd7f270a9f071dca61ec6623301429929cd42 100644
--- a/src/decollector.c
+++ b/src/decollector.c
@@ -30,7 +30,14 @@
 #include "wifi_dataelements.h"
 #include "decollector.h"
 #include "debug.h"
+#include "config.h"
 
+static int signal_pending;
+
+static void decollector_sighandler(int sig)
+{
+	signal_pending = sig;
+}
 
 static int check_ageout_wifi_assoc_events(void *priv, void *ent, uint32_t age)
 {
@@ -73,6 +80,18 @@ void hb_timer_cb(atimer_t *t)
 
 	p->ticks++;
 
+	if (signal_pending) {
+		int ret;
+
+		if (signal_pending == SIGHUP) {
+			ret = collector_get_network_params(p, &dm->network);
+			if (ret)
+				err("%s: Error get network ssids!\n", __func__);
+		}
+
+		signal_pending = 0;
+	}
+
 	/* limit per-device events by number and/or duration */
 	list_for_each_entry(dev, &dm->network.devicelist, list) {
 		if (dev->ev.num_assoc > p->event_maxnum) {
@@ -106,7 +125,7 @@ void hb_timer_cb(atimer_t *t)
 		}
 	}
 
-	timer_set(t, 2 * 1000);
+	timer_set(t, 1 * 1000);
 }
 
 void collection_timer_cb(atimer_t *t)
@@ -168,6 +187,9 @@ int decollector_init(void **priv, const struct decollector_useropts *opts)
 	struct decollector_private *p;
 	int ret;
 
+	set_sighandler(SIGHUP, decollector_sighandler);
+	set_sighandler(SIGPIPE, SIG_IGN);
+
 	*priv = NULL;
 	p = calloc(1, sizeof(struct decollector_private));
 	if (!p)