public void entriesUpdated(Collection<String> updatedIds) {
   try {
     synchronized (XMPPFriendConnectionImpl.this) {
       checkLoggedIn();
       synchronized (friends) {
         Roster roster = connection.getRoster();
         if (roster != null) {
           List<Friend> updatedFriends = new ArrayList<Friend>();
           for (String id : updatedIds) {
             RosterEntry rosterEntry = roster.getEntry(id);
             XMPPFriendImpl friend = friends.get(id);
             if (friend == null) {
               // should never happen ?
               friend =
                   new XMPPFriendImpl(
                       id, rosterEntry, configuration, connection, featureRegistry);
               friends.put(id, friend);
             } else {
               friend.setRosterEntry(rosterEntry);
             }
             updatedFriends.add(friend);
             LOG.debugf("user {0} updated", friend);
           }
           rosterListeners.broadcast(
               new RosterEvent(updatedFriends, RosterEvent.Type.FRIENDS_UPDATED));
         }
       }
     }
   } catch (org.jivesoftware.smack.XMPPException e) {
     LOG.debugf(e, "error getting roster");
   } catch (FriendException e) {
     LOG.debugf(e, "error getting roster");
   }
 }