diff -u -r -w bitlbee-1.2.2.old/protocols/msn/ns.c bitlbee-1.2.2/protocols/msn/ns.c
--- bitlbee-1.2.2.old/protocols/msn/ns.c	2008-08-27 00:36:44.000000000 +0200
+++ bitlbee-1.2.2/protocols/msn/ns.c	2008-09-02 17:59:26.000000000 +0200
@@ -342,6 +342,7 @@
 		}
 		if( list & 8 ) /* RL */
 		{
+			ic->reversed = g_slist_append(ic->reversed, g_strdup(cmd[1]));
 			if( ( list & 6 ) == 0 )
 				msn_buddy_ask( ic, cmd[1], cmd[2] );
 		}
@@ -517,6 +518,8 @@
 				return 0;
 			}
 			
+			ic->reversed = g_slist_append(ic->reversed, g_strdup(cmd[4]));
+
 			/* We got added by someone. If we don't have this
 			   person in permit/deny yet, inform the user. */
 			for( l = ic->permit; l; l = l->next )
@@ -536,6 +539,12 @@
 			imcb_rename_buddy( ic, cmd[4], cmd[5] );
 		}
 	}
+	else if( strcmp( cmd[0], "REM" ) == 0 )
+	{
+		/* This never becomes, but nobody knows... */
+		if(num_parts > 4 && !strcmp(cmd[2], "RL"))
+			ic->reversed = g_slist_remove(ic->reversed, cmd[4]);
+	}
 	else if( strcmp( cmd[0], "OUT" ) == 0 )
 	{
 		int allow_reconnect = TRUE;
diff -u -r -w bitlbee-1.2.2.old/protocols/nogaim.h bitlbee-1.2.2/protocols/nogaim.h
--- bitlbee-1.2.2.old/protocols/nogaim.h	2008-08-27 00:36:44.000000000 +0200
+++ bitlbee-1.2.2/protocols/nogaim.h	2008-09-02 16:46:20.000000000 +0200
@@ -76,6 +76,7 @@
 	 * we need to maintain our own set of buddies, and our own permit/deny lists */
 	GSList *permit;
 	GSList *deny;
+	GSList *reversed;
 	int permdeny;
 	
 	char displayname[128];
diff -u -r -w bitlbee-1.2.2.old/root_commands.c bitlbee-1.2.2/root_commands.c
--- bitlbee-1.2.2.old/root_commands.c	2008-08-27 00:36:44.000000000 +0200
+++ bitlbee-1.2.2/root_commands.c	2008-09-02 17:52:38.000000000 +0200
@@ -892,11 +892,27 @@
 		irc_usermsg( irc, "Configuration could not be saved!" );
 }
 
+static void blist_show_user(irc_t* irc, user_t *u, char* format, const char* status)
+{
+	char s[256];
+	char reversed = ' ';
+
+	g_snprintf( s, sizeof( s ) - 1, "%s@%s %s(%s)", u->user, u->host, u->ic->acc->prpl->name, u->ic->acc->user );
+
+	/* If there is a reversed list (only MSN protocol for now), we show a beautiful '*' before buddies which
+	 * haven't me in their contact list.
+	 */
+	if(u->ic->reversed && g_slist_find_custom( u->ic->reversed, u->handle, (GCompareFunc) u->ic->acc->prpl->handle_cmp ) == NULL)
+		reversed = '*';
+
+	irc_usermsg(irc, format, reversed, u->nick, s, status);
+
+}
+
 static void cmd_blist( irc_t *irc, char **cmd )
 {
 	int online = 0, away = 0, offline = 0;
 	user_t *u;
-	char s[256];
 	char *format;
 	int n_online = 0, n_away = 0, n_offline = 0;
 	
@@ -912,19 +928,17 @@
 		online =  away = 1;
 	
 	if( strchr( irc->umode, 'b' ) != NULL )
-		format = "%s\t%s\t%s";
+		format = "%c%s\t%s\t%s";
 	else
-		format = "%-16.16s  %-40.40s  %s";
+		format = "%c%-16.16s  %-40.40s  %s";
 	
-	irc_usermsg( irc, format, "Nick", "User/Host/Network", "Status" );
+	/* First column is used to show buddies which haven't me in their contact list. */
+	irc_usermsg( irc, format, ' ', "Nick", "User/Host/Network", "Status" );
 	
 	for( u = irc->users; u; u = u->next ) if( u->ic && u->online && !u->away )
 	{
 		if( online == 1 )
-		{
-			g_snprintf( s, sizeof( s ) - 1, "%s@%s %s(%s)", u->user, u->host, u->ic->acc->prpl->name, u->ic->acc->user );
-			irc_usermsg( irc, format, u->nick, s, "Online" );
-		}
+			blist_show_user(irc, u, format, "Online");
 		
 		n_online ++;
 	}
@@ -932,20 +946,14 @@
 	for( u = irc->users; u; u = u->next ) if( u->ic && u->online && u->away )
 	{
 		if( away == 1 )
-		{
-			g_snprintf( s, sizeof( s ) - 1, "%s@%s %s(%s)", u->user, u->host, u->ic->acc->prpl->name, u->ic->acc->user );
-			irc_usermsg( irc, format, u->nick, s, u->away );
-		}
+			blist_show_user(irc, u, format, u->away);
 		n_away ++;
 	}
 	
 	for( u = irc->users; u; u = u->next ) if( u->ic && !u->online )
 	{
 		if( offline == 1 )
-		{
-			g_snprintf( s, sizeof( s ) - 1, "%s@%s %s(%s)", u->user, u->host, u->ic->acc->prpl->name, u->ic->acc->user );
-			irc_usermsg( irc, format, u->nick, s, "Offline" );
-		}
+			blist_show_user(irc, u, format, "Offline");
 		n_offline ++;
 	}
 	

