diff -ur bitlbee-1.0/account.c bitlbee-1.0.new/account.c
--- bitlbee-1.0/account.c	2005-11-18 01:17:04.000000000 +0100
+++ bitlbee-1.0.new/account.c	2005-12-11 23:56:11.208266680 +0100
@@ -154,3 +154,25 @@
 		cancel_auto_reconnect( a );
 	}
 }
+
+void reconnect_all_accounts( void )
+{
+	irc_t *irc;
+	account_t *account;
+	GSList *ircconn;
+	
+	for ( ircconn = irc_connection_list; ircconn;
+			ircconn = ircconn->next ) {
+		irc = ircconn->data;
+		if ( !set_getint( irc, "auto_reconnect" ) )
+			continue;
+		
+		irc_usermsg( irc, "Reconnecting active accounts..." );
+		
+		for ( account = irc->accounts; account;
+				account = account->next ) {
+			if ( account->gc )
+				signoff( account-> gc );
+		}
+	}
+}
diff -ur bitlbee-1.0/account.h bitlbee-1.0.new/account.h
--- bitlbee-1.0/account.h	2005-11-18 01:17:04.000000000 +0100
+++ bitlbee-1.0.new/account.h	2005-12-11 19:50:00.258792320 +0100
@@ -45,5 +45,6 @@
 void account_del( irc_t *irc, account_t *acc );
 void account_on( irc_t *irc, account_t *a );
 void account_off( irc_t *irc, account_t *a );
+void reconnect_all_accounts( void );
 
 #endif
diff -ur bitlbee-1.0/doc/bitlbee.8 bitlbee-1.0.new/doc/bitlbee.8
--- bitlbee-1.0/doc/bitlbee.8	2005-11-21 12:41:29.000000000 +0100
+++ bitlbee-1.0.new/doc/bitlbee.8	2005-12-11 23:37:11.929463384 +0100
@@ -86,6 +86,12 @@
 .SH COMMANDS
 To get a complete list of commands, please use the \fBhelp commands\fP
 command in the &bitlbee channel.
+.SH SIGNALS
+.IP SIGTERM
+Sending \fBSIGTERM\fP twice causes bitlbee to exit.
+.IP SIGUSR1
+Upon receiving \fBSIGUSR1\fP, bitlbee reconnects all active accounts on
+all connected clients.
 .SH "SEE ALSO"
 .BR ircd (8), 
 .BR inetd (8), 
diff -ur bitlbee-1.0/unix.c bitlbee-1.0.new/unix.c
--- bitlbee-1.0/unix.c	2005-11-18 01:17:04.000000000 +0100
+++ bitlbee-1.0.new/unix.c	2005-12-11 19:50:00.258792320 +0100
@@ -74,6 +74,7 @@
 	memset( &sig, 0, sizeof( sig ) );
 	sig.sa_handler = sighandler;
 	sigaction( SIGPIPE, &sig, &old );
+	sigaction( SIGUSR1, &sig, &old );
 	sig.sa_flags = SA_RESETHAND;
 	sigaction( SIGINT,  &sig, &old );
 	sigaction( SIGILL,  &sig, &old );
@@ -126,6 +127,10 @@
 			raise( signal );
 		}
 	}
+	else if( signal == SIGUSR1)
+	{
+		reconnect_all_accounts();
+	}
 	else if( signal != SIGPIPE )
 	{
 		log_message( LOGLVL_ERROR, "Fatal signal received: %d. That's probably a bug.", signal );
