diff --git a/labs/bbb-webrtc-sfu/lib/audio/audio.js b/labs/bbb-webrtc-sfu/lib/audio/audio.js
index 3f877245b6b1f468fcf84ff046c283da97d8fd64..f1b8e059fae84e31971c857bac44ff61e5abe3bc 100644
--- a/labs/bbb-webrtc-sfu/lib/audio/audio.js
+++ b/labs/bbb-webrtc-sfu/lib/audio/audio.js
@@ -313,17 +313,4 @@ module.exports = class Audio extends BaseProvider {
     }), C.FROM_AUDIO);
     this.removeUser(connectionId);
   };
-
-  serverState (event) {
-    const { eventTag: { code }  } = { ...event };
-    switch (code) {
-      case C.MEDIA_SERVER_OFFLINE:
-        Logger.error(LOG_PREFIX, "Provider received MEDIA_SERVER_OFFLINE event");
-        this.emit(C.MEDIA_SERVER_OFFLINE, event);
-        break;
-
-      default:
-        Logger.warn(LOG_PREFIX, "Unknown server state", event);
-    }
-  }
 };
diff --git a/labs/bbb-webrtc-sfu/lib/base/BaseProvider.js b/labs/bbb-webrtc-sfu/lib/base/BaseProvider.js
index 0d7bf23b3a102587fafab99a11fab4c2278e8fba..eb1897fefed436fc79e154c217fcdf5f44c78448 100644
--- a/labs/bbb-webrtc-sfu/lib/base/BaseProvider.js
+++ b/labs/bbb-webrtc-sfu/lib/base/BaseProvider.js
@@ -5,6 +5,7 @@ const Logger = require('../utils/Logger');
 const EventEmitter = require('events').EventEmitter;
 const errors = require('../base/errors');
 const config = require('config');
+const LOG_PREFIX = '[base-provider]';
 
 module.exports = class BaseProvider extends EventEmitter {
   constructor () {
@@ -12,6 +13,25 @@ module.exports = class BaseProvider extends EventEmitter {
     this.sfuApp = "base";
   }
 
+  serverState (event) {
+    let code = null;
+    const { eventTag } = { ...event };
+    if (eventTag && eventTag.code) {
+      code = eventTag.code;
+    }
+
+    switch (code) {
+      case C.MEDIA_SERVER_OFFLINE:
+        Logger.error(LOG_PREFIX, "Provider received MEDIA_SERVER_OFFLINE event");
+        this.emit(C.MEDIA_SERVER_OFFLINE, event);
+        break;
+
+      default:
+        Logger.warn(LOG_PREFIX, "Unknown server state", event);
+    }
+  }
+
+
   _handleError (logPrefix, error, role, streamId) {
     if (this._validateErrorMessage(error)) {
       return error;
diff --git a/labs/bbb-webrtc-sfu/lib/screenshare/screenshare.js b/labs/bbb-webrtc-sfu/lib/screenshare/screenshare.js
index bfb22a0208b2a70f2527fc128ea13ee4e59d1b7f..1c970224ee2b16c6450329d57966b2440cf38a3c 100644
--- a/labs/bbb-webrtc-sfu/lib/screenshare/screenshare.js
+++ b/labs/bbb-webrtc-sfu/lib/screenshare/screenshare.js
@@ -174,18 +174,6 @@ module.exports = class Screenshare extends BaseProvider {
     }
   }
 
-  serverState (event) {
-    switch (event && event.eventTag) {
-      case C.MEDIA_SERVER_OFFLINE:
-        this._handleError(LOG_PREFIX, err);
-        Logger.error(LOG_PREFIX, "Screenshare provider received MEDIA_SERVER_OFFLINE event");
-        this.emit(C.MEDIA_SERVER_OFFLINE, event);
-        break;
-      default:
-        Logger.warn(LOG_PREFIX, "Unknown server state", event);
-    }
-  }
-
   recordingState(event) {
     const msEvent = event.event;
     Logger.info('[Recording]', msEvent.type, '[', msEvent.state, ']', 'for recording session', event.id, 'for screenshare', this.streamName);
diff --git a/labs/bbb-webrtc-sfu/lib/video/video.js b/labs/bbb-webrtc-sfu/lib/video/video.js
index 41e2f7ccbb34eecdaba18e1a2f2208345e24dd61..81be7b83e160d0ba82c73d009e21cd4c58ba29d1 100644
--- a/labs/bbb-webrtc-sfu/lib/video/video.js
+++ b/labs/bbb-webrtc-sfu/lib/video/video.js
@@ -86,20 +86,6 @@ module.exports = class Video extends BaseProvider {
     });
   }
 
-  serverState (event) {
-    const { eventTag: { code }  } = { ...event };
-    switch (code) {
-      case C.MEDIA_SERVER_OFFLINE:
-        Logger.error(LOG_PREFIX, "Video provider received MEDIA_SERVER_OFFLINE event");
-        this.emit(C.MEDIA_SERVER_OFFLINE, event);
-        break;
-
-      default:
-        Logger.warn(LOG_PREFIX, "Unknown server state", event);
-    }
-  }
-
-
   mediaState (event) {
     let msEvent = event.event;