Buggy code:
final ID joinedContainer = cce . getTargetID ( ) ; Display . getDefault ( ) . syncExec ( new Runnable ( ) { public void run ( ) { ILocalInputHandler handler = new ILocalInputHandler ( ) { public void inputText ( ID userID , String text ) { try { chatMessageSender . sendChatMessage ( userID , text ) ; } catch ( ECFException e ) { ClientPlugin . getDefault ( ) . getLog ( ) . log ( new Status ( IStatus . ERROR , ClientPlugin . getDefault ( ) . getBundle ( ) . getSymbolicName ( ) , PresenceContainerUI . SEND_ERRORCODE , "Error<seq2seq4repair_space>in<seq2seq4repair_space>sendMessage" , e ) ) ; } } public void startTyping ( ID userID ) { try { typingMessageSender . sendTypingMessage ( userID , true , "" ) ; } catch ( ECFException e ) { ClientPlugin . getDefault ( ) . getLog ( ) . log ( new Status ( IStatus . ERROR , ClientPlugin . getDefault ( ) . getBundle ( ) . getSymbolicName ( ) , PresenceContainerUI . SEND_ERRORCODE , "Error<seq2seq4repair_space>in<seq2seq4repair_space>startTyping" , e ) ) ; } } public void disconnect ( ) { container . disconnect ( ) ; } public void updatePresence ( ID userID , IPresence presence ) { try { presenceSender . sendPresenceUpdate ( userID , presence ) ; } catch ( ECFException e ) { ClientPlugin . getDefault ( ) . getLog ( ) . log ( new Status ( IStatus . ERROR , ClientPlugin . getDefault ( ) . getBundle ( ) . getSymbolicName ( ) , PresenceContainerUI . SEND_ERRORCODE , "Error<seq2seq4repair_space>in<seq2seq4repair_space>sendPresenceUpdate" , e ) ) ; } } public void sendRosterAdd ( String user , String name , String [ ] groups ) { try { rosterSubscriptionSender . sendRosterAdd ( user , name , groups ) ; } catch ( ECFException e ) { ClientPlugin . getDefault ( ) . getLog ( ) . log ( new Status ( IStatus . ERROR , ClientPlugin . getDefault ( ) . getBundle ( ) . getSymbolicName ( ) , PresenceContainerUI . SEND_ERRORCODE , "Error<seq2seq4repair_space>in<seq2seq4repair_space>sendRosterAdd" , e ) ) ; } } public void sendRosterRemove ( ID userID ) { try { rosterSubscriptionSender . sendRosterRemove ( userID ) ; } catch ( ECFException e ) { ClientPlugin . getDefault ( ) . getLog ( ) . log ( new Status ( IStatus . ERROR , ClientPlugin . getDefault ( ) . getBundle ( ) . getSymbolicName ( ) , PresenceContainerUI . SEND_ERRORCODE , "Error<seq2seq4repair_space>in<seq2seq4repair_space>sendRosterRemove" , e ) ) ; } } } ; PresenceContainerUI . this . groupID = joinedContainer ; rosterView . addAccount ( joinedContainer , PresenceContainerUI . this . localUser , handler , pc , soContainer ) ; } } ) ; } else if ( event instanceof IContainerDisconnectedEvent ) { final IContainerDisconnectedEvent de = ( ( IContainerDisconnectedEvent ) ( event ) ) ; Display . getDefault ( ) . syncExec ( new Runnable ( ) { public void run ( ) { rosterView . accountDisconnected ( de . getTargetID ( ) ) ; } } ) ; } } } ) ; pc . getRosterManager ( ) . addPresenceListener ( new IPresenceListener ( ) { public void handleRosterEntryAdd ( final IRosterEntry entry ) { Display . getDefault ( ) . syncExec ( new Runnable ( ) { public void run ( ) { rosterView . handleRosterEntryAdd ( PresenceContainerUI . this . groupID , entry ) ; } } ) ; } public void handlePresence ( final ID fromID , final IPresence presence ) { Display . getDefault ( ) . syncExec ( new Runnable ( ) { public void run ( ) { rosterView . handlePresence ( PresenceContainerUI . this . groupID , fromID , presence ) ; } } ) ; } public void handleRosterEntryUpdate ( final IRosterEntry entry ) { Display . getDefault ( ) . syncExec ( new Runnable ( ) { public void run ( ) { <START_BUG> rosterView . handleRosterEntryAdd ( PresenceContainerUI . this . groupID , entry ) ; <END_BUG> } } ) ; } public void handleRosterEntryRemove ( final IRosterEntry entry ) { Display . getDefault ( ) . syncExec ( new Runnable ( ) { public void run ( ) { rosterView . handleRosterEntryRemove ( PresenceContainerUI . this . groupID , entry ) ; } } ) ; } } ) ; pc . getRosterManager ( ) . addRosterSubscriptionListener ( new IRosterSubscriptionListener ( ) { public void handleSubscribeRequest ( final ID fromID ) { Display . getDefault ( ) . syncExec ( new Runnable ( ) { public void run ( ) { try { IWorkbenchWindow ww = PlatformUI . getWorkbench ( ) . getActiveWorkbenchWindow ( ) ; ReceiveAuthorizeRequestDialog authRequest = new ReceiveAuthorizeRequestDialog ( ww . getShell ( ) , fromID . getName ( ) , localUser . getName ( ) ) ; authRequest . setBlockOnOpen ( true ) ; authRequest . open ( ) ; int res = authRequest . getButtonPressed ( ) ; if ( res == ( ReceiveAuthorizeRequestDialog . AUTHORIZE_AND_ADD ) ) { if ( ( presenceSender ) != null ) { presenceSender . sendPresenceUpdate ( fromID , new org . eclipse . ecf . presence . Presence ( Type . SUBSCRIBED ) ) ; if ( ( rosterView ) != null ) rosterView . sendRosterAdd ( localUser , fromID . getName ( ) , null ) ; } } else if ( res == ( ReceiveAuthorizeRequestDialog . AUTHORIZE_ID ) ) { if ( ( presenceSender ) != null ) { presenceSender . sendPresenceUpdate ( fromID , new org . eclipse . ecf . presence . Presence ( Type . SUBSCRIBED ) ) ; } } else if ( res == ( ReceiveAuthorizeRequestDialog . REFUSE_ID ) ) { } else { } } catch ( Exception e ) { ClientPlugin . getDefault ( ) . getLog ( ) . log ( new Status ( IStatus . ERROR , ClientPlugin . PLUGIN_ID , PresenceContainerUI . SEND_ERRORCODE , "Exception<seq2seq4repair_space>showing<seq2seq4repair_space>authorization<seq2seq4repair_space>dialog" , e ) ) ; }

Fix:
rosterView . handleRosterEntryUpdate ( PresenceContainerUI . this . groupID , entry ) ;