diff --git a/src/net/java/sip/communicator/service/protocol/media/MediaAwareCallPeer.java b/src/net/java/sip/communicator/service/protocol/media/MediaAwareCallPeer.java
index 95a7afae6..364855b7e 100644
--- a/src/net/java/sip/communicator/service/protocol/media/MediaAwareCallPeer.java
+++ b/src/net/java/sip/communicator/service/protocol/media/MediaAwareCallPeer.java
@@ -570,10 +570,18 @@ public void removeStreamSoundLevelListener(SoundLevelListener listener)
* members sound level.
*
* @param listener the ConferenceMembersSoundLevelListener to add
+ * @throws NullPointerException if listener is null
*/
public void addConferenceMembersSoundLevelListener(
- ConferenceMembersSoundLevelListener listener)
+ ConferenceMembersSoundLevelListener listener)
{
+ /*
+ * XXX The uses of the method at the time of this writing rely on being
+ * able to add a null listener so make it a no-op here.
+ */
+ if (listener == null)
+ return;
+
synchronized (conferenceMemberAudioLevelListeners)
{
if (conferenceMemberAudioLevelListeners.size() == 0)
@@ -597,13 +605,12 @@ public void addConferenceMembersSoundLevelListener(
* remove
*/
public void removeConferenceMembersSoundLevelListener(
- ConferenceMembersSoundLevelListener listener)
+ ConferenceMembersSoundLevelListener listener)
{
synchronized (conferenceMemberAudioLevelListeners)
{
- conferenceMemberAudioLevelListeners.remove(listener);
-
- if (conferenceMemberAudioLevelListeners.size() == 0)
+ if (conferenceMemberAudioLevelListeners.remove(listener)
+ && (conferenceMemberAudioLevelListeners.size() == 0))
{
// if this was the last listener then we also remove ourselves
// as a CSRC audio level listener from the handler so that we