diff --git a/src/org/jitsi/impl/neomedia/device/AudioSystem.java b/src/org/jitsi/impl/neomedia/device/AudioSystem.java
index 320c6f70e4a28d556476004ba374eec517993e37..5a8f372839c8270f967b80c8d0bde08091ba1ea5 100644
--- a/src/org/jitsi/impl/neomedia/device/AudioSystem.java
+++ b/src/org/jitsi/impl/neomedia/device/AudioSystem.java
@@ -606,10 +606,7 @@ protected void preInitialize()
      * @param newValue the value of the property with the specified name after
      * the change
      */
-    public void propertyChange(
-            String property,
-            Object oldValue,
-            Object newValue)
+    void propertyChange(String property, Object oldValue, Object newValue)
     {
         firePropertyChange(property, oldValue, newValue);
     }
diff --git a/src/org/jitsi/impl/neomedia/jmfext/media/renderer/audio/AbstractAudioRenderer.java b/src/org/jitsi/impl/neomedia/jmfext/media/renderer/audio/AbstractAudioRenderer.java
index 1048a60dd02a8a085b7a2d0bd256a17cfb19e289..355b3e9c0cf7e0100bd8c52bae6418874739501d 100644
--- a/src/org/jitsi/impl/neomedia/jmfext/media/renderer/audio/AbstractAudioRenderer.java
+++ b/src/org/jitsi/impl/neomedia/jmfext/media/renderer/audio/AbstractAudioRenderer.java
@@ -272,10 +272,14 @@ public void open()
          */
         if ((this.locator == null) && (audioSystem != null))
         {
-            MediaLocator locator = getLocator();
-
-            if (locator != null)
-                audioSystem.addPropertyChangeListener(propertyChangeListener);
+            /*
+             * We actually want to allow the user to switch the playback and/or
+             * notify device to none mid-stream in order to disable the
+             * playback. If an extender does not want to support that behavior,
+             * they will throw an exception and/or not call this implementation
+             * anyway.
+             */
+            audioSystem.addPropertyChangeListener(propertyChangeListener);
         }
     }
 
diff --git a/src/org/jitsi/impl/neomedia/jmfext/media/renderer/audio/WASAPIRenderer.java b/src/org/jitsi/impl/neomedia/jmfext/media/renderer/audio/WASAPIRenderer.java
index 04c1967fbaa614bbf7ea08063486e1eff5686c5a..47c883d7280cb1e36b1dda585046c47359b3dd00 100644
--- a/src/org/jitsi/impl/neomedia/jmfext/media/renderer/audio/WASAPIRenderer.java
+++ b/src/org/jitsi/impl/neomedia/jmfext/media/renderer/audio/WASAPIRenderer.java
@@ -123,6 +123,15 @@ public class WASAPIRenderer
      */
     private long iAudioRenderClient;
 
+    /**
+     * The indicator which determines whether the value of the <tt>locator</tt>
+     * property of this instance was equal to null when this <tt>Renderer</tt>
+     * was opened. Indicates that this <tt>Renderer</tt> should successfully
+     * process media data without actually rendering to any render endpoint
+     * device.
+     */
+    private boolean locatorIsNull;
+
     /**
      * The maximum capacity in frames of the endpoint buffer.
      */
@@ -303,6 +312,7 @@ public synchronized void close()
             maybeCloseResampler();
 
             dstFormat = null;
+            locatorIsNull = false;
             remainder = null;
             remainderLength = 0;
             srcFormat = null;
@@ -567,8 +577,16 @@ public synchronized void open()
         try
         {
             locator = getLocator();
-            if (locator == null)
-                throw new NullPointerException("No locator/MediaLocator set.");
+            if (locatorIsNull = (locator == null))
+            {
+                /*
+                 * We actually want to allow the user to switch the playback
+                 * and/or notify device to none mid-stream in order to disable
+                 * the playback.
+                 */
+            }
+            else
+            {
 
             /*
              * The method getFormatsToInitializeIAudioClient will assert that
@@ -707,6 +725,8 @@ public synchronized void open()
                 if (eventHandle != 0)
                     CloseHandle(eventHandle);
             }
+
+            } // The locator of this Renderer is not null.
         }
         catch (Throwable t)
         {
@@ -750,7 +770,9 @@ protected synchronized void playbackDevicePropertyChange(
 
         waitWhileBusy();
 
-        boolean open = ((iAudioClient != 0) && (iAudioRenderClient != 0));
+        boolean open
+            = ((iAudioClient != 0) && (iAudioRenderClient != 0))
+                || locatorIsNull;
 
         if (open)
         {
@@ -817,7 +839,19 @@ public int process(Buffer buffer)
 
         synchronized (this)
         {
-            if ((iAudioClient == 0) || (iAudioRenderClient == 0) || !started)
+            if ((iAudioClient == 0) || (iAudioRenderClient == 0))
+            {
+                /*
+                 * We actually want to allow the user to switch the playback
+                 * and/or notify device to none mid-stream in order to disable
+                 * the playback.
+                 */
+                return
+                    locatorIsNull
+                        ? BUFFER_PROCESSED_OK
+                        : BUFFER_PROCESSED_FAILED;
+            }
+            else if (!started)
                 return BUFFER_PROCESSED_FAILED;
             else
             {
@@ -1426,7 +1460,17 @@ private void setWriteIsMalfunctioning(boolean writeIsMalfunctioning)
      */
     public synchronized void start()
     {
-        if (iAudioClient != 0)
+        if (iAudioClient == 0)
+        {
+            /*
+             * We actually want to allow the user to switch the playback and/or
+             * notify device to none mid-stream in order to disable the
+             * playback.
+             */
+            if (locatorIsNull)
+                started = true;
+        }
+        else
         {
             waitWhileBusy();
             waitWhileEventHandleCmd();
@@ -1519,7 +1563,17 @@ public void run()
      */
     public synchronized void stop()
     {
-        if (iAudioClient != 0)
+        if (iAudioClient == 0)
+        {
+            /*
+             * We actually want to allow the user to switch the playback and/or
+             * notify device to none mid-stream in order to disable the
+             * playback.
+             */
+            if (locatorIsNull)
+                started = false;
+        }
+        else
         {
             waitWhileBusy();
 
diff --git a/src/org/jitsi/impl/neomedia/notify/AudioNotifierServiceImpl.java b/src/org/jitsi/impl/neomedia/notify/AudioNotifierServiceImpl.java
index b55e69b6fc87f0e664a876ccb64adadc2a7eb83c..2587bdb2b6db084b8d493401d53c6da0ab1bb7ea 100644
--- a/src/org/jitsi/impl/neomedia/notify/AudioNotifierServiceImpl.java
+++ b/src/org/jitsi/impl/neomedia/notify/AudioNotifierServiceImpl.java
@@ -65,8 +65,9 @@ public AudioNotifierServiceImpl()
     }
 
     /**
-     * Checks whether the playback and notification configuration
-     * share the same device.
+     * Checks whether the playback and notification configuration share the same
+     * device.
+     *
      * @return are audio out and notifications using the same device.
      */
     public boolean audioOutAndNotificationsShareSameDevice()
@@ -77,10 +78,15 @@ public boolean audioOutAndNotificationsShareSameDevice()
         CaptureDeviceInfo playback
             = audioSystem.getSelectedDevice(AudioSystem.DataFlow.PLAYBACK);
 
-        return
-            (notify == null)
-                ? (playback == null)
-                : notify.getLocator().equals(playback.getLocator());
+        if (notify == null)
+            return (playback == null);
+        else
+        {
+            if (playback == null)
+                return false;
+            else
+                return notify.getLocator().equals(playback.getLocator());
+        }
     }
 
     /**
@@ -212,6 +218,13 @@ private Boolean evaluateLoopCondition(
                                     : loopCondition.call();
                         }
 
+                        /**
+                         * {@inheritDoc}
+                         *
+                         * Returns the wrapped <tt>SCAudioClip</tt> into the
+                         * cache from it has earlier been retrieved in order to
+                         * allow its reuse. 
+                         */
                         @Override
                         protected void finalize()
                             throws Throwable
@@ -307,8 +320,11 @@ public DeviceConfiguration getDeviceConfiguration()
     }
 
     /**
-     * Returns TRUE if the sound is currently disabled, FALSE otherwise.
-     * @return TRUE if the sound is currently disabled, FALSE otherwise
+     * Returns <tt>true</tt> if the sound is currently disabled; <tt>false</tt>,
+     * otherwise.
+     *
+     * @return <tt>true</tt> if the sound is currently disabled; <tt>false</tt>,
+     * otherwise
      */
     public boolean isMute()
     {
@@ -316,7 +332,8 @@ public boolean isMute()
     }
 
     /**
-     * Listens for changes in notify device
+     * Listens for changes in notify device.
+     *
      * @param ev the event that notify device has changed.
      */
     public void propertyChange(PropertyChangeEvent ev)
@@ -339,21 +356,21 @@ public void propertyChange(PropertyChangeEvent ev)
     }
 
     /**
-     * Enables or disables the sound in the application. If FALSE, we try to
-     * restore all looping sounds if any.
+     * Enables or disables the sound in the application. If <tt>false</tt>, we
+     * try to restore all looping sounds if any.
      *
-     * @param mute when TRUE disables the sound, otherwise enables the sound.
+     * @param mute when <tt>true</tt> disables the sound; otherwise, enables the
+     * sound.
      */
     public void setMute(boolean mute)
     {
-        this.mute = mute;
-
         // TODO Auto-generated method stub
+        this.mute = mute;
     }
 
     /**
-     * Implements the key of {@link AudioNotifierServiceImpl#audios}. Combines the
-     * <tt>uri</tt> of the <tt>SCAudioClip</tt> with the indicator which
+     * Implements the key of {@link AudioNotifierServiceImpl#audios}. Combines
+     * the <tt>uri</tt> of the <tt>SCAudioClip</tt> with the indicator which
      * determines whether the <tt>SCAudioClip</tt> in question uses the playback
      * or the notify audio device.
      */
@@ -381,6 +398,9 @@ private AudioKey(String uri, boolean playback)
             this.playback = playback;
         }
 
+        /**
+         * {@inheritDoc}
+         */
         @Override
         public boolean equals(Object o)
         {
@@ -398,6 +418,9 @@ public boolean equals(Object o)
                             : uri.equals(that.uri));
         }
 
+        /**
+         * {@inheritDoc}
+         */
         @Override
         public int hashCode()
         {