diff --git a/src/org/jitsi/impl/neomedia/MediaStreamImpl.java b/src/org/jitsi/impl/neomedia/MediaStreamImpl.java
index f2d924998cd687b8717368b62c1fc32ec6efc39c..ced31e1f2d229c5128c103e1aa4c56be7e70b123 100644
--- a/src/org/jitsi/impl/neomedia/MediaStreamImpl.java
+++ b/src/org/jitsi/impl/neomedia/MediaStreamImpl.java
@@ -2400,6 +2400,43 @@ else if (event instanceof TimeoutEvent)
                 }
             }
         }
+        else if (event instanceof RemotePayloadChangeEvent)
+        {
+            ReceiveStream receiveStream = event.getReceiveStream();
+
+            if(receiveStream != null)
+            {
+                MediaDeviceSession deviceSession = getDeviceSession();
+
+                if (deviceSession != null)
+                {
+                    TranscodingDataSource transcodingDataSource
+                        = deviceSession.getTranscodingDataSource(receiveStream);
+
+                    // we receive packets, streams are active
+                    // if processor in transcoding DataSource is running
+                    // we need to recreate it by disconnect, connect
+                    // and starting again the DataSource
+                    try
+                    {
+                        transcodingDataSource.disconnect();
+                        transcodingDataSource.connect();
+                        transcodingDataSource.start();
+
+                        // as output streams of the DataSource
+                        // are recreated we need to update
+                        // mixers and everything that are using them
+                        deviceSession.playbackDataSourceChanged(
+                            receiveStream.getDataSource());
+                    }
+                    catch(IOException e)
+                    {
+                        logger.error("Error re-creating processor in " +
+                            "transcoding DataSource", e);
+                    }
+                }
+            }
+        }
     }
 
     /**
diff --git a/src/org/jitsi/impl/neomedia/conference/AudioMixingPushBufferDataSource.java b/src/org/jitsi/impl/neomedia/conference/AudioMixingPushBufferDataSource.java
index 23e030f56c982159141dad6bab73a446ab65a5e9..a3bd62f73b5bf0f87ab4be5aee94af449e90e93d 100644
--- a/src/org/jitsi/impl/neomedia/conference/AudioMixingPushBufferDataSource.java
+++ b/src/org/jitsi/impl/neomedia/conference/AudioMixingPushBufferDataSource.java
@@ -107,6 +107,16 @@ public void addInputDataSource(DataSource inputDataSource)
         audioMixer.addInputDataSource(inputDataSource, this);
     }
 
+    /**
+     * The input <tt>DataSource</tt> has been updated.
+     * @param inputDataSource the <tt>DataSource</tt> that was updated.
+     */
+    public void updateInputDataSource(DataSource inputDataSource)
+    {
+        // just update the input streams
+        audioMixer.getOutputStream();
+    }
+
     /**
      * Implements {@link DataSource#connect()}. Lets the <tt>AudioMixer</tt>
      * know that one of its output <tt>PushBufferDataSources</tt> has been
diff --git a/src/org/jitsi/impl/neomedia/device/AudioMixerMediaDevice.java b/src/org/jitsi/impl/neomedia/device/AudioMixerMediaDevice.java
index 06d6cd3fd5ce08bcefad2e3ae2969a8f745901f8..820c96b1a9f199ae4853083aa32d879d66c52465 100644
--- a/src/org/jitsi/impl/neomedia/device/AudioMixerMediaDevice.java
+++ b/src/org/jitsi/impl/neomedia/device/AudioMixerMediaDevice.java
@@ -1017,6 +1017,36 @@ protected void playbackDataSourceRemoved(DataSource playbackDataSource)
                     playbackDataSource);
         }
 
+        /**
+         * Notifies this <tt>MediaDeviceSession</tt> that a <tt>DataSource</tt>
+         * has been updated.
+         *
+         * @param playbackDataSource the <tt>DataSource</tt> which has been
+         * updated.
+         * @see MediaDeviceSession#playbackDataSourceUpdated(DataSource)
+         */
+        @Override
+        protected void playbackDataSourceUpdated(DataSource playbackDataSource)
+        {
+            super.playbackDataSourceUpdated(playbackDataSource);
+
+            DataSource captureDevice = getCaptureDevice();
+
+            /*
+             * Unwrap wrappers of the captureDevice until
+             * AudioMixingPushBufferDataSource is found.
+             */
+            if (captureDevice instanceof PushBufferDataSourceDelegate<?>)
+                captureDevice
+                    = ((PushBufferDataSourceDelegate<?>) captureDevice)
+                        .getDataSource();
+            if (captureDevice instanceof AudioMixingPushBufferDataSource)
+            {
+                ((AudioMixingPushBufferDataSource) captureDevice)
+                    .updateInputDataSource(playbackDataSource);
+            }
+        }
+
         /**
          * The method relays <tt>PropertyChangeEvent</tt>s indicating a change
          * in the SSRC_LIST in the encapsulated mixer device so that the
diff --git a/src/org/jitsi/impl/neomedia/device/MediaDeviceSession.java b/src/org/jitsi/impl/neomedia/device/MediaDeviceSession.java
index 0a684afa8dc17d77ee4d48c96d8d51ae78cf9df3..c9dccff8dd9e0c1c3d03bc75cf4062efdb98b65b 100644
--- a/src/org/jitsi/impl/neomedia/device/MediaDeviceSession.java
+++ b/src/org/jitsi/impl/neomedia/device/MediaDeviceSession.java
@@ -1172,6 +1172,29 @@ protected void playbackDataSourceRemoved(DataSource playbackDataSource)
     {
     }
 
+    /**
+     * Notifies this <tt>MediaDeviceSession</tt> that a <tt>DataSource</tt> has
+     * been changed on the represented <tt>MediaDevice</tt>.
+     *
+     * @param playbackDataSource the <tt>DataSource</tt> which has been added
+     * for playback on the represented <tt>MediaDevice</tt>
+     */
+    protected void playbackDataSourceUpdated(DataSource playbackDataSource)
+    {
+    }
+
+    /**
+     * Notifies this <tt>MediaDeviceSession</tt> that a <tt>DataSource</tt> has
+     * been changed on the represented <tt>MediaDevice</tt>.
+     *
+     * @param playbackDataSource the <tt>DataSource</tt> which has been added
+     * for playback on the represented <tt>MediaDevice</tt>
+     */
+    public void playbackDataSourceChanged(DataSource playbackDataSource)
+    {
+        playbackDataSourceUpdated(playbackDataSource);
+    }
+
     /**
      * Notifies this instance that a specific <tt>Player</tt> of remote content
      * has generated a <tt>ConfigureCompleteEvent</tt>. Allows extenders to