Smack RosterListener load buddies too slow

Hello,

I’ve developed an application that connects to jabber server and fetches buddies for a given user. Number of buddies might reach thousands. I’m adding the rosterListener below to the connection.getRoster() object, the application takes more than 15 minutes to begin catching buddies and sometimes it just never catch any users. Did anyone face this problem before? Appreciate any help!

                                roster = connection.getRoster();

                                roster.addRosterListener(rosterListener);

        private static RosterListener rosterListener = new RosterListener() {

                    public void presenceChanged(Presence presence) {

                                String user = presence.getFrom();

                                Presence bestPresence = roster.getPresence(user);

        logger.info("Presence Changed: "+user+" :\n Type: '"+bestPresence.getType()+"'; Mode: '"+bestPresence.getMode()+"'");

                                if(bestPresence.getType() == Type.available) {

                                            if(bestPresence.getMode() == null || bestPresence.getMode() == Mode.available || bestPresence.getMode() == Mode.chat) {

                                                        changeUserStatus(user, ONLINE_STATUS);

                                            }

                                            else {

                                                        removeUser(user);

                                            }

                                }

                    }

                    public void entriesUpdated(Collection<String> addresses) {

                                for (String user : addresses) {

                                            logger.info("User " + user + " was updated in roster");

                                }

                    }

                    public void entriesDeleted(Collection<String> addresses) {

                                for (String user : addresses) {

                                            logger.info("User " + user + " was deleted from roster");

                                }

                    }

                    public void entriesAdded(Collection<String> addresses) {

                                for (String user : addresses) {

                                            logger.info("User " + user + " was added to roster");

                                }

                    }

        };

Thanks,

Philip