diff --git a/src/org/jitsi/impl/neomedia/AudioMediaStreamImpl.java b/src/org/jitsi/impl/neomedia/AudioMediaStreamImpl.java
index 3d213881b1e151fc1d35023bad8e4ab9d3d51fab..b5bfc20c9d2ed27adbba1ca0de6d77eba4a02591 100644
--- a/src/org/jitsi/impl/neomedia/AudioMediaStreamImpl.java
+++ b/src/org/jitsi/impl/neomedia/AudioMediaStreamImpl.java
@@ -6,6 +6,7 @@
  */
 package org.jitsi.impl.neomedia;
 
+import java.beans.*;
 import java.util.*;
 
 import javax.media.*;
@@ -22,6 +23,7 @@
 import org.jitsi.service.neomedia.event.*;
 import org.jitsi.service.protocol.*;
 import org.jitsi.util.*;
+import org.jitsi.util.event.*;
 
 /**
  * Extends <tt>MediaStreamImpl</tt> in order to provide an implementation of
@@ -32,7 +34,8 @@
  */
 public class AudioMediaStreamImpl
     extends MediaStreamImpl
-    implements AudioMediaStream
+    implements AudioMediaStream,
+                PropertyChangeListener
 {
 
     /**
@@ -85,6 +88,14 @@ public class AudioMediaStreamImpl
      */
     private CsrcAudioLevelListener csrcAudioLevelListener = null;
 
+    /**
+     * A property change notifier which will inform this stream if a selected
+     * audio device (capture, playback or notification device) has changed. We
+     * want to listen to these events, especially for those generated after the
+     * audio system has changed.
+     */
+    private PropertyChangeNotifier audioSystemChangeNotifier;
+
     /**
      * Initializes a new <tt>AudioMediaStreamImpl</tt> instance which will use
      * the specified <tt>MediaDevice</tt> for both capture and playback of audio
@@ -97,12 +108,20 @@ public class AudioMediaStreamImpl
      * <tt>StreamConnector</tt>
      * @param srtpControl a control which is already created, used to control
      * the srtp operations.
+     * @param audioSystemChangeNotifier A property change notifier which will
+     * inform this stream if a selected audio device (capture, playback or
+     * notification device) has changed. We want to listen to these events,
+     * especially for those generated after the audio system has changed.
      */
     public AudioMediaStreamImpl(StreamConnector connector,
                                 MediaDevice     device,
-                                SrtpControl srtpControl)
+                                SrtpControl srtpControl,
+                                PropertyChangeNotifier audioSystemChangeNotifier
+                                )
     {
         super(connector, device, srtpControl);
+        this.audioSystemChangeNotifier = audioSystemChangeNotifier;
+        this.audioSystemChangeNotifier.addPropertyChangeListener(this);
     }
 
     /**
@@ -488,6 +507,8 @@ public void close()
         {
            dtmfTransfrmEngine = null;
         }
+
+        this.audioSystemChangeNotifier.removePropertyChangeListener(this);
     }
 
     /**
@@ -500,4 +521,21 @@ protected int getPriority()
     {
         return 3;
     }
+
+    /**
+     * Receives and reacts to property change events: if the selected device
+     * (for capture, playback or notifications) has changed, then create or
+     * recreate the streams in order to use it.
+     * We want to listen to these events, especially for those generated after
+     * the audio system has changed.
+     *
+     * @param evt The event which may contain a audio system change event.
+     */
+    public void propertyChange(PropertyChangeEvent evt)
+    {
+        if (sendStreamsAreCreated)
+            recreateSendStreams();
+        else
+            start();
+    }
 }
diff --git a/src/org/jitsi/impl/neomedia/MediaServiceImpl.java b/src/org/jitsi/impl/neomedia/MediaServiceImpl.java
index 3f89f3ff5633c9a07521a1f017404703ec1647a7..f0a094c9dd6c0e6f3bab134869e39176d582c234 100644
--- a/src/org/jitsi/impl/neomedia/MediaServiceImpl.java
+++ b/src/org/jitsi/impl/neomedia/MediaServiceImpl.java
@@ -359,7 +359,8 @@ else if ((device != null) && !mediaType.equals(device.getMediaType()))
         switch (mediaType)
         {
         case AUDIO:
-            return new AudioMediaStreamImpl(connector, device, srtpControl);
+            return
+                new AudioMediaStreamImpl(connector, device, srtpControl, this);
         case VIDEO:
             return new VideoMediaStreamImpl(connector, device, srtpControl);
         default:
diff --git a/src/org/jitsi/impl/neomedia/MediaStreamImpl.java b/src/org/jitsi/impl/neomedia/MediaStreamImpl.java
index a4d8fce89a82e58685aa30ce250374a4aa273304..fd64835cde3f5d4870cbc622f70186e048fda7d0 100644
--- a/src/org/jitsi/impl/neomedia/MediaStreamImpl.java
+++ b/src/org/jitsi/impl/neomedia/MediaStreamImpl.java
@@ -140,7 +140,7 @@ else if (MediaDeviceSession.SSRC_LIST.equals(propertyName))
      * respectively the <tt>MediaDeviceSession</tt>, of this instance is
      * changed.
      */
-    private boolean sendStreamsAreCreated = false;
+    protected boolean sendStreamsAreCreated = false;
 
     /**
      * The indicator which determines whether {@link #start()} has been called
@@ -1368,7 +1368,7 @@ public boolean isStarted()
      * If they were not started prior to the call, does not start them after
      * recreating them.
      */
-    private void recreateSendStreams()
+    protected void recreateSendStreams()
     {
         if (sendStreamsAreCreated)
         {