diff --git a/client.c b/client.c
index 8aa4e845..14248761 100644
--- a/client.c
+++ b/client.c
@@ -1,4 +1,4 @@
-/* $Id: client.c,v 1.91 2010-05-14 14:30:00 tcunha Exp $ */
+/* $Id: client.c,v 1.92 2010-05-14 14:35:26 tcunha Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -210,6 +210,11 @@ client_signal(int sig, unused short events, unused void *data)
 	struct sigaction	sigact;
 
 	switch (sig) {
+	case SIGHUP:
+		client_exitmsg = "lost tty";
+		client_exitval = 1;
+		client_write_server(MSG_EXITING, NULL, 0);
+		break;
 	case SIGTERM:
 		client_exitmsg = "terminated";
 		client_exitval = 1;
diff --git a/signal.c b/signal.c
index beb30cbc..602c7bb2 100644
--- a/signal.c
+++ b/signal.c
@@ -1,4 +1,4 @@
-/* $Id: signal.c,v 1.1 2010-05-14 14:30:01 tcunha Exp $ */
+/* $Id: signal.c,v 1.2 2010-05-14 14:35:26 tcunha Exp $ */
 
 /*
  * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -22,6 +22,7 @@
 
 #include "tmux.h"
 
+struct event	ev_sighup;
 struct event	ev_sigchld;
 struct event	ev_sigcont;
 struct event	ev_sigterm;
@@ -45,9 +46,9 @@ set_signals(void(*handler)(int, short, unused void *))
 		fatal("sigaction failed");
 	if (sigaction(SIGTSTP, &sigact, NULL) != 0)
 		fatal("sigaction failed");
-	if (sigaction(SIGHUP, &sigact, NULL) != 0)
-		fatal("sigaction failed");
 
+	signal_set(&ev_sighup, SIGHUP, handler, NULL);
+	signal_add(&ev_sighup, NULL);
 	signal_set(&ev_sigchld, SIGCHLD, handler, NULL);
 	signal_add(&ev_sigchld, NULL);
 	signal_set(&ev_sigcont, SIGCONT, handler, NULL);
@@ -77,9 +78,8 @@ clear_signals(void)
 		fatal("sigaction failed");
 	if (sigaction(SIGTSTP, &sigact, NULL) != 0)
 		fatal("sigaction failed");
-	if (sigaction(SIGHUP, &sigact, NULL) != 0)
-		fatal("sigaction failed");
 
+	event_del(&ev_sighup);
 	event_del(&ev_sigchld);
 	event_del(&ev_sigcont);
 	event_del(&ev_sigterm);