diff --git a/bigbluebutton-html5/imports/ui/services/audio-manager/index.js b/bigbluebutton-html5/imports/ui/services/audio-manager/index.js
index cb50880e2f6838d8f753a537dbb0d85e18be3a27..1d882823322bf83f60dfe02d48ed241cf944718b 100755
--- a/bigbluebutton-html5/imports/ui/services/audio-manager/index.js
+++ b/bigbluebutton-html5/imports/ui/services/audio-manager/index.js
@@ -11,9 +11,8 @@ import { notify } from '/imports/ui/services/notification';
 const MEDIA = Meteor.settings.public.media;
 const MEDIA_TAG = MEDIA.mediaTag;
 const USE_SIP = MEDIA.useSIPAudio;
-const USE_KURENTO = Meteor.settings.public.kurento.enableListenOnly;
 const ECHO_TEST_NUMBER = MEDIA.echoTestNumber;
-const MAX_LISTEN_ONLY_RETRIES = 2;
+const MAX_LISTEN_ONLY_RETRIES = 1;
 
 const CALL_STATES = {
   STARTED: 'started',
@@ -41,11 +40,13 @@ class AudioManager {
       outputDeviceId: null,
       muteHandle: null,
     });
+
+    this.useKurento = Meteor.settings.public.kurento.enableListenOnly;
   }
 
   init(userData) {
     this.bridge = USE_SIP ? new SIPBridge(userData) : new VertoBridge(userData);
-    if (USE_KURENTO) {
+    if (this.useKurento) {
       this.listenOnlyBridge = new KurentoBridge(userData);
     }
     this.userData = userData;
@@ -133,7 +134,7 @@ class AudioManager {
     this.isListenOnly = true;
     this.isEchoTest = false;
     // The kurento bridge isn't a full audio bridge yet, so we have to differ it
-    const bridge  = USE_KURENTO? this.listenOnlyBridge : this.bridge;
+    const bridge  = this.useKurento? this.listenOnlyBridge : this.bridge;
 
     const callOptions = {
       isListenOnly: true,
@@ -147,19 +148,38 @@ class AudioManager {
       setTimeout(reject, 12000, iceGatheringErr);
     });
 
+    const handleIceGatheringError = (err) => {
+      if (iceGatheringTimeout) {
+        clearTimeout(iceGatheringTimeout);
+      }
+
+      logger.error('Listen only error:', err);
+      const error = {
+        type: 'MEDIA_ERROR',
+        message: this.messages.error.MEDIA_ERROR,
+      }
+      throw error;
+    }
+
     return this.onAudioJoining()
       .then(() => Promise.race([
         bridge.joinAudio(callOptions, this.callStateCallback.bind(this)),
         iceGatheringTimeout,
       ]))
-      .catch((err) => {
+      .catch(async (err) => {
         // If theres a iceGathering timeout we retry to join until MAX_LISTEN_ONLY_RETRIES
         if (err === iceGatheringErr && retries < MAX_LISTEN_ONLY_RETRIES) {
-          this.joinListenOnly(++retries);
+          // Fallback to SIP.js listen only in case of failure
+          if (this.useKurento) {
+            this.useKurento = false;
+          }
+          try {
+            await this.joinListenOnly(++retries);
+          } catch (err) {
+            return handleIceGatheringError(err);
+          }
         } else {
-          clearTimeout(iceGatheringTimeout);
-          logger.error('Listen only error:', err);
-          throw err;
+          handleIceGatheringError(err);
         }
       });
   }
@@ -175,7 +195,7 @@ class AudioManager {
   exitAudio() {
     if (!this.isConnected) return Promise.resolve();
 
-    const bridge  = (USE_KURENTO && this.isListenOnly) ? this.listenOnlyBridge : this.bridge;
+    const bridge  = (this.useKurento && this.isListenOnly) ? this.listenOnlyBridge : this.bridge;
 
     this.isHangingUp = true;
     this.isEchoTest = false;
@@ -219,6 +239,9 @@ class AudioManager {
     if (!this.isEchoTest) {
       this.notify(this.messages.info.JOINED_AUDIO);
     }
+
+    // Restore the default listen only bridge
+    this.useKurento = Meteor.settings.public.kurento.enableListenOnly;
   }
 
   onTransferStart() {
@@ -241,6 +264,9 @@ class AudioManager {
     if (!this.error && !this.isEchoTest) {
       this.notify(this.messages.info.LEFT_AUDIO);
     }
+
+    // Restore the default listen only bridge
+    this.useKurento = Meteor.settings.public.kurento.enableListenOnly;
   }
 
   callStateCallback(response) {