diff --git a/source/org/jivesoftware/smack/Roster.java b/source/org/jivesoftware/smack/Roster.java index ec8adc885..d233eb2dd 100644 --- a/source/org/jivesoftware/smack/Roster.java +++ b/source/org/jivesoftware/smack/Roster.java @@ -447,7 +447,17 @@ public class Roster implements ConnectionListener { } // If equal priority, choose "most available" by the mode value. else if (p.getPriority() == presence.getPriority()) { - if (p.getMode().compareTo(presence.getMode()) < 0) { + Presence.Mode pMode = p.getMode(); + // Default to presence mode of available. + if (pMode == null) { + pMode = Presence.Mode.available; + } + Presence.Mode presenceMode = presence.getMode(); + // Default to presence mode of available. + if (presenceMode == null) { + presenceMode = Presence.Mode.available; + } + if (pMode.compareTo(presenceMode) < 0) { presence = p; } } diff --git a/source/org/jivesoftware/smack/packet/Presence.java b/source/org/jivesoftware/smack/packet/Presence.java index 09f3d9aed..d7448601c 100644 --- a/source/org/jivesoftware/smack/packet/Presence.java +++ b/source/org/jivesoftware/smack/packet/Presence.java @@ -61,7 +61,7 @@ public class Presence extends Packet { private Type type = Type.available; private String status = null; private int priority = -1; - private Mode mode = Mode.available; + private Mode mode = null; /** * Creates a new presence update. Status, priority, and mode are left un-set.