Index: doc/user-guide/misc.xml
===================================================================
--- doc/user-guide/misc.xml	(revision 5613af716212defcf5ee51f8dc13525f54323382)
+++ doc/user-guide/misc.xml	(revision 180ab31c09a9990a135b78fd6d52de5b093550f2)
@@ -234,3 +234,45 @@
 </sect1>
 
+<sect1 id="news1.3">
+<title>New stuff in BitlBee 1.3dev</title>
+
+<para>
+Most of the core of BitlBee was rewritten since the last release. This entry
+should sum up the majority of the changes.
+</para>
+
+<para>
+First of all, you can now have as many control channels as you want. Or you
+can have none, it's finally possible to leave &amp;bitlbee and still talk to
+all your contacts. Or you can have a &amp;work with all your work-related
+contacts, or a &amp;msn with all your MSN Messenger contacts. See <emphasis>help
+channels</emphasis> for more information about this.
+</para>
+
+<para>
+Also, you can change how nicknames are generated for your contacts. Like
+automatically adding a [fb] tag to the nicks of all your Facebook contacts.
+See <emphasis>help nick_format</emphasis>.
+</para>
+
+<para>
+When you're already connected to a BitlBee server and you connect from
+elsewhere, you can take over the old session.
+</para>
+
+<para>
+Instead of account numbers, accounts now also get tags. These are
+automatically generated but can be changed (<emphasis>help set
+tag</emphasis>). You can now use them instead of accounts numbers.
+(Example: <emphasis>acc gtalk on</emphasis>)
+</para>
+
+<para>
+Last of all: You can finally change your nickname and
+shorten root commands (try <emphasis>acc li</emphasis> instead
+of <emphasis>account list</emphasis>).
+</para>
+
+</sect1>
+
 </chapter>
Index: irc.c
===================================================================
--- irc.c	(revision 5613af716212defcf5ee51f8dc13525f54323382)
+++ irc.c	(revision 180ab31c09a9990a135b78fd6d52de5b093550f2)
@@ -109,4 +109,6 @@
 	s = set_add( &b->set, "display_timestamps", "true", set_eval_bool, irc );
 	s = set_add( &b->set, "handle_unknown", "add_channel", NULL, irc );
+	s = set_add( &b->set, "last_version", NULL, NULL, irc );
+	s->flags |= SET_HIDDEN;
 	s = set_add( &b->set, "lcnicks", "true", set_eval_bool, irc );
 	s = set_add( &b->set, "nick_format", "%-@nick", NULL, irc );
@@ -122,4 +124,5 @@
 	s = set_add( &b->set, "query_order", "lifo", NULL, irc );
 	s = set_add( &b->set, "root_nick", ROOT_NICK, set_eval_root_nick, irc );
+	s->flags |= SET_HIDDEN;
 	s = set_add( &b->set, "show_offline", "false", set_eval_bw_compat, irc );
 	s = set_add( &b->set, "simulate_netsplit", "true", set_eval_bool, irc );
Index: irc_channel.c
===================================================================
--- irc_channel.c	(revision 5613af716212defcf5ee51f8dc13525f54323382)
+++ irc_channel.c	(revision 180ab31c09a9990a135b78fd6d52de5b093550f2)
@@ -759,4 +759,5 @@
 	set_del( &ic->set, "group" );
 	set_del( &ic->set, "protocol" );
+	set_del( &ic->set, "show_users" );
 	
 	g_free( icc );
Index: root_commands.c
===================================================================
--- root_commands.c	(revision 5613af716212defcf5ee51f8dc13525f54323382)
+++ root_commands.c	(revision 180ab31c09a9990a135b78fd6d52de5b093550f2)
@@ -100,4 +100,5 @@
 
 static void cmd_account( irc_t *irc, char **cmd );
+static void bitlbee_whatsnew( irc_t *irc );
 
 static void cmd_identify( irc_t *irc, char **cmd )
@@ -155,4 +156,6 @@
 		irc->status |= USTATUS_IDENTIFIED;
 		irc_umode_set( irc, "+R", 1 );
+		
+		bitlbee_whatsnew( irc );
 		
 		/* The following code is a bit hairy now. With takeover
@@ -336,5 +339,6 @@
 		while( s )
 		{
-			cmd_showset( irc, &s, s->key );
+			if( !( s->flags & SET_HIDDEN ) )
+				cmd_showset( irc, &s, s->key );
 			s = s->next;
 		}
@@ -1280,4 +1284,43 @@
 }
 
+/* Maybe this should be a stand-alone command as well? */
+static void bitlbee_whatsnew( irc_t *irc )
+{
+	int last = set_getint( &irc->b->set, "last_version" );
+	GString *msg = g_string_new( "" );
+	char s[16];
+	
+	if( last >= BITLBEE_VERSION_CODE )
+		return;
+	
+	if( last < 0x010206 ) /* 1.2.6 */
+	{
+		g_string_append( msg,
+			"Twitter support. See \x02help account add twitter\x02.\n" );
+	}
+	if( last < 0x010300 ) /* 1.3dev */
+	{
+		g_string_append( msg,
+			"Support for multiple configurable control channels, "
+			"each with a subset of your contact list. See "
+			"\x02help channels\x02 for more information.\n"
+			"File transfer support for some protocols (more if "
+			"you use libpurple). Just /DCC SEND stuff. Incoming "
+			"files also become DCC transfers.\n"
+			"Many more things, briefly described in "
+			"\x02help news1.3\x02.\n" );
+	}
+	
+	if( msg->len > 0 )
+		irc_usermsg( irc, "%s: This seems to be your first time using this "
+		                  "this version of BitlBee. Here's a list of new "
+		                  "features you may like to know about:\n\n%s\n",
+		                  irc->user->nick, msg->str );
+	
+	g_string_free( msg, TRUE );
+	g_snprintf( s, sizeof( s ), "%d", BITLBEE_VERSION_CODE );
+	set_setstr( &irc->b->set, "last_version", s );
+}
+
 /* IMPORTANT: Keep this list sorted! The short command logic needs that. */
 const command_t commands[] = {
Index: set.h
===================================================================
--- set.h	(revision 5613af716212defcf5ee51f8dc13525f54323382)
+++ set.h	(revision 180ab31c09a9990a135b78fd6d52de5b093550f2)
@@ -43,5 +43,9 @@
 extern char *SET_INVALID;
 
-#define SET_NULL_OK        0x0100
+typedef enum
+{
+	SET_NULL_OK = 0x0100,
+	SET_HIDDEN = 0x0200,
+} set_flags_t;
 
 typedef struct set
@@ -60,6 +64,5 @@
 	                   set_getstr/int(). */
 	
-	int flags;      /* See account.h, for example. set.c doesn't use
-	                   this (yet?). */
+	set_flags_t flags; /* Mostly defined per user. */
 	
 	/* Eval: Returns SET_INVALID if the value is incorrect, exactly
