diff -u -r bitlbee-3.0.1/protocols/jabber/conference.c bitlbee-3.0.1-hack/protocols/jabber/conference.c --- bitlbee-3.0.1/protocols/jabber/conference.c 2010-11-24 14:44:00.000000000 -0800 +++ bitlbee-3.0.1-hack/protocols/jabber/conference.c 2011-02-22 11:14:55.000000000 -0800 @@ -241,7 +241,7 @@ if( ( s = xt_find_attr( item, "jid" ) ) ) { /* Yay, found what we need. :-) */ - bud->ext_jid = jabber_normalize( s ); + bud->ext_jid = jabber_normalize_lcnicks( ic, s ); break; } } @@ -251,7 +251,7 @@ { if( bud == jc->me ) { - bud->ext_jid = jabber_normalize( ic->acc->user ); + bud->ext_jid = jabber_normalize_lcnicks( ic, ic->acc->user ); } else { diff -u -r bitlbee-3.0.1/protocols/jabber/jabber.h bitlbee-3.0.1-hack/protocols/jabber/jabber.h --- bitlbee-3.0.1/protocols/jabber/jabber.h 2010-11-24 14:44:00.000000000 -0800 +++ bitlbee-3.0.1-hack/protocols/jabber/jabber.h 2011-02-22 11:15:16.000000000 -0800 @@ -273,6 +273,7 @@ const struct jabber_away_state *jabber_away_state_by_name( char *name ); void jabber_buddy_ask( struct im_connection *ic, char *handle ); char *jabber_normalize( const char *orig ); +char *jabber_normalize_lcnicks( struct im_connection *ic, const char *orig ); typedef enum { diff -u -r bitlbee-3.0.1/protocols/jabber/jabber_util.c bitlbee-3.0.1-hack/protocols/jabber/jabber_util.c --- bitlbee-3.0.1/protocols/jabber/jabber_util.c 2010-11-24 14:44:00.000000000 -0800 +++ bitlbee-3.0.1-hack/protocols/jabber/jabber_util.c 2011-02-22 11:21:59.000000000 -0800 @@ -307,6 +307,26 @@ g_free( buf ); } +/* Same as jabber_normalize, but respects lcnicks */ +char *jabber_normalize_lcnicks( struct im_connection *ic, const char *orig ) +{ + int len, i; + char *new; + + len = strlen( orig ); + new = g_new( char, len + 1 ); + + for( i = 0; orig[i] ; i ++ ) + new[i] = orig[i]; + + new[i] = 0; + + if( set_getbool( &ic->bee->set, "lcnicks" ) ) + nick_lc( new ); + + return new; +} + /* Returns a new string. Don't leak it! */ char *jabber_normalize( const char *orig ) {