Program: 103795
Project: 103795
Buggy source:
/** 
 * Invoked when <tt>ChatRoomMemberPresenceChangeEvent</tt> are received. When a new <tt>ChatRoomMember</tt> has joined the chat adds it to the list of chat participants on the right of the chat window. When a <tt>ChatRoomMember</tt> has left or quit, or has being kicked it's removed from the chat window.
 * @param evt the <tt>ChatRoomMemberPresenceChangeEvent</tt> that notifiedus
 */
public void memberPresenceChanged(ChatRoomMemberPresenceChangeEvent evt){
  ChatRoom sourceChatRoom=(ChatRoom)evt.getSource();
  if (!sourceChatRoom.equals(chatRoomWrapper.getChatRoom()))   return;
  String eventType=evt.getEventType();
  ChatRoomMember chatRoomMember=evt.getChatRoomMember();
  String statusMessage=null;
  if (eventType.equals(ChatRoomMemberPresenceChangeEvent.MEMBER_JOINED)) {
    for (int i=0; i < chatParticipants.size(); i++) {
      ChatContact cc=chatParticipants.get(i);
      if (((ChatRoomMember)cc.getDescriptor()).getContactAddress().equals(evt.getChatRoomMember().getContactAddress())) {
        chatParticipants.remove(i);
        sessionRenderer.removeChatContact(cc);
      }
    }
    ConferenceChatContact chatContact=new ConferenceChatContact(chatRoomMember);
    chatParticipants.add(chatContact);
    sessionRenderer.addChatContact(chatContact);
    if (!evt.isReasonUserList()) {
      statusMessage=GuiActivator.getResources().getI18NString("String_Node_Str",new String[]{sourceChatRoom.getName()});
      sessionRenderer.updateChatContactStatus(chatContact,statusMessage);
    }
  }
 else   if (eventType.equals(ChatRoomMemberPresenceChangeEvent.MEMBER_LEFT) || eventType.equals(ChatRoomMemberPresenceChangeEvent.MEMBER_KICKED) || eventType.equals(ChatRoomMemberPresenceChangeEvent.MEMBER_QUIT)) {
    if (eventType.equals(ChatRoomMemberPresenceChangeEvent.MEMBER_LEFT)) {
      statusMessage=GuiActivator.getResources().getI18NString("String_Node_Str",new String[]{sourceChatRoom.getName()});
    }
 else     if (eventType.equals(ChatRoomMemberPresenceChangeEvent.MEMBER_KICKED)) {
      statusMessage=GuiActivator.getResources().getI18NString("String_Node_Str",new String[]{sourceChatRoom.getName()});
    }
 else     if (eventType.equals(ChatRoomMemberPresenceChangeEvent.MEMBER_QUIT)) {
      statusMessage=GuiActivator.getResources().getI18NString("String_Node_Str",new String[]{sourceChatRoom.getName()});
    }
    for (    ChatContact chatContact : chatParticipants) {
      if (chatContact.getDescriptor().equals(chatRoomMember)) {
        sessionRenderer.updateChatContactStatus(chatContact,statusMessage);
        sessionRenderer.removeChatContact(chatContact);
        break;
      }
    }
  }
}

Fixed version (ground truth):
/** 
 * Invoked when <tt>ChatRoomMemberPresenceChangeEvent</tt> are received. When a new <tt>ChatRoomMember</tt> has joined the chat adds it to the list of chat participants on the right of the chat window. When a <tt>ChatRoomMember</tt> has left or quit, or has being kicked it's removed from the chat window.
 * @param evt the <tt>ChatRoomMemberPresenceChangeEvent</tt> that notifiedus
 */
public void memberPresenceChanged(ChatRoomMemberPresenceChangeEvent evt){
  ChatRoom sourceChatRoom=(ChatRoom)evt.getSource();
  if (!sourceChatRoom.equals(chatRoomWrapper.getChatRoom()))   return;
  String eventType=evt.getEventType();
  ChatRoomMember chatRoomMember=evt.getChatRoomMember();
  String statusMessage=null;
  if (eventType.equals(ChatRoomMemberPresenceChangeEvent.MEMBER_JOINED)) {
    ConferenceChatContact chatContact=new ConferenceChatContact(chatRoomMember);
    chatParticipants.add(chatContact);
    sessionRenderer.addChatContact(chatContact);
    if (!evt.isReasonUserList()) {
      statusMessage=GuiActivator.getResources().getI18NString("String_Node_Str",new String[]{sourceChatRoom.getName()});
      sessionRenderer.updateChatContactStatus(chatContact,statusMessage);
    }
  }
 else   if (eventType.equals(ChatRoomMemberPresenceChangeEvent.MEMBER_LEFT) || eventType.equals(ChatRoomMemberPresenceChangeEvent.MEMBER_KICKED) || eventType.equals(ChatRoomMemberPresenceChangeEvent.MEMBER_QUIT)) {
    if (eventType.equals(ChatRoomMemberPresenceChangeEvent.MEMBER_LEFT)) {
      statusMessage=GuiActivator.getResources().getI18NString("String_Node_Str",new String[]{sourceChatRoom.getName()});
    }
 else     if (eventType.equals(ChatRoomMemberPresenceChangeEvent.MEMBER_KICKED)) {
      statusMessage=GuiActivator.getResources().getI18NString("String_Node_Str",new String[]{sourceChatRoom.getName()});
    }
 else     if (eventType.equals(ChatRoomMemberPresenceChangeEvent.MEMBER_QUIT)) {
      statusMessage=GuiActivator.getResources().getI18NString("String_Node_Str",new String[]{sourceChatRoom.getName()});
    }
    for (    ChatContact chatContact : chatParticipants) {
      if (chatContact.getDescriptor().equals(chatRoomMember)) {
        sessionRenderer.updateChatContactStatus(chatContact,statusMessage);
        sessionRenderer.removeChatContact(chatContact);
        break;
      }
    }
  }
}