diff --git a/main/asterisk.c b/main/asterisk.c
index a751c3b10fdbe391e5685705613a884411a97090..7eb49df317a01d0317c5ca0437beca090cd23239 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -1676,9 +1676,15 @@ static struct sigaction urg_handler = {
 static void _hup_handler(int num)
 {
 	int save_errno = errno;
-	printf("Received HUP signal -- Reloading configs\n");
-	if (restartnow)
+
+	if (restartnow) {
+		if (el) {
+			el_end(el);
+		}
 		execvp(_argv[0], _argv);
+	}
+
+	printf("Received HUP signal -- Reloading configs\n");
 	sig_flags.need_reload = 1;
 	if (ast_alertpipe_write(sig_alert_pipe)) {
 		fprintf(stderr, "hup_handler: write() failed: %s\n", strerror(errno));
@@ -2019,7 +2025,7 @@ static void really_quit(int num, shutdown_nice_t niceness, int restart)
 			if (el_hist != NULL) {
 				history_end(el_hist);
 			}
-		} else {
+		} else if (!restart) {
 			sig_flags.need_el_end = 1;
 			pthread_kill(consolethread, SIGURG);
 		}