diff --git a/labs/bbb-webrtc-sfu/lib/mcs-core/lib/media/MediaController.js b/labs/bbb-webrtc-sfu/lib/mcs-core/lib/media/MediaController.js
index 0afaa40792c9e00ada54985e22fd72d1313e7152..9e0a86651ab23c88e3aa4b83ea9e4d9cc43cdef8 100644
--- a/labs/bbb-webrtc-sfu/lib/mcs-core/lib/media/MediaController.js
+++ b/labs/bbb-webrtc-sfu/lib/mcs-core/lib/media/MediaController.js
@@ -84,7 +84,7 @@ module.exports = class MediaController {
     }
   }
 
-  publishnsubscribe (userId, sourceId, sdp, params) {
+  publishnsubscribe (userId, sourceId, sdp, params = {}) {
     return new Promise(async (resolve, reject) => {
       Logger.info("[mcs-controller] PublishAndSubscribe from user", userId, "to source", sourceId);
       Logger.debug("[mcs-controler] PublishAndSubscribe descriptor is", params.descriptor);
@@ -121,7 +121,7 @@ module.exports = class MediaController {
     });
   }
 
-  publish (userId, roomId, type, params) {
+  publish (userId, roomId, type, params = {}) {
     return new Promise(async (resolve, reject) => {
       Logger.info("[mcs-controller] Publish from user", userId, "to room", roomId);
       Logger.debug("[mcs-controler] Publish descriptor is", params.descriptor);
@@ -136,11 +136,11 @@ module.exports = class MediaController {
         switch (type) {
           case "RtpEndpoint":
           case "WebRtcEndpoint":
-            session = user.addSdp(params.descriptor, type);
+            session = user.addSdp(params.descriptor, type, params.adapter, params.name);
             answer = await user.startSession(session.id);
             break;
           case "URI":
-            session = user.addUri(params.descriptor, type);
+            session = user.addUri(params.descriptor, type, params.adapter, params.name);
             answer = await user.startSession(session.id);
             break;
 
@@ -169,7 +169,7 @@ module.exports = class MediaController {
     });
   }
 
-  subscribe (userId, sourceId, type, params) {
+  subscribe (userId, sourceId, type, params = {}) {
     return new Promise(async (resolve, reject) => {
       Logger.info("[mcs-controller] Subscribe from user", userId, "to source", sourceId);
       Logger.debug("[mcs-controler] Subscribe descriptor is", params.descriptor);
@@ -190,7 +190,7 @@ module.exports = class MediaController {
         switch (type) {
           case "RtpEndpoint":
           case "WebRtcEndpoint":
-            session = user.addSdp(params.descriptor, type);
+            session = user.addSdp(params.descriptor, type, params.adapter, params.name);
 
             answer = await user.startSession(session.id);
             await sourceSession.connect(session._mediaElement);
@@ -198,10 +198,9 @@ module.exports = class MediaController {
             Logger.info("[mcs-controller] Updated", sourceSession.id,  "subscribers list to", sourceSession.subscribedSessions);
             break;
           case "URI":
-            session = user.addUri(params.descriptor, type);
+            session = user.addUri(params.descriptor, type, params.adapter, params.name);
             answer = await user.startSession(session.id);
             await sourceSession.connect(session._mediaElement);
-
             break;
 
           default: return reject(new Error("[mcs-controller] Invalid media type"));
diff --git a/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/MediaSession.js b/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/MediaSession.js
index 84e5c819f188546fe237248cefd97d4aa7f56edf..e448d1b30fceabd73dedb05bc2024d06341cb0a9 100644
--- a/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/MediaSession.js
+++ b/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/MediaSession.js
@@ -7,14 +7,15 @@
 
 const C = require('../constants/Constants');
 const rid = require('readable-id');
-const MediaServer = require('../media/media-server');
+const Kurento = require('../adapters/kurento');
+const Freeswitch = require('../adapters/freeswitch/freeswitch');
 const config = require('config');
 const kurentoUrl = config.get('kurentoUrl');
 const Logger = require('../../../utils/Logger');
 const isError = require('../utils/util').isError;
 
 module.exports = class MediaSession {
-  constructor(emitter, room, type, options = {}) {
+  constructor(emitter, room, type = 'WebRtcEndpoint', adapter = C.STRING.KURENTO, name = C.STRING.DEFAULT_NAME, options = {}) {
     this.id = rid();
     this.room = room;
     this.emitter = emitter;
@@ -23,7 +24,9 @@ module.exports = class MediaSession {
     this._MediaServer = new MediaServer(kurentoUrl);
     this._mediaElement;
     this.subscribedSessions = [];
-    this._options = options;
+    this._adapter = adapter;
+    this._MediaServer = MediaSession.getAdapter(adapter);
+    this._name = name;this._options = options;
     this.eventQueue = [];
   }
 
@@ -46,6 +49,7 @@ module.exports = class MediaSession {
           this.emitter.emit(C.EVENT.MEDIA_STATE.MEDIA_EVENT+this.id, event);
         }
       });
+
       this._MediaServer.trackMediaState(this._mediaElement, this._type);
 
       this._MediaServer.on(C.ERROR.MEDIA_SERVER_OFFLINE, () => {
@@ -126,6 +130,23 @@ module.exports = class MediaSession {
     }
   }
 
+  static getAdapter (adapter) {
+        let obj = null;
+
+        Logger.info("[SdpSession] Session is using the", adapter, "adapter");
+
+        switch (adapter) {
+                case C.STRING.KURENTO:
+                    obj = new Kurento(kurentoUrl);
+                    break;
+                  case C.STRING.FREESWITCH:
+                    obj = new Freeswitch();
+                    break;
+                  default: Logger.warn("[SdpSession] Invalid adapter", this.adapter); }
+
+        return obj;
+      }
+
   _handleError (error) {
     Logger.error("[mcs-media-session] SFU MediaSession received an error", error);
     // Checking if the error needs to be wrapped into a JS Error instance
diff --git a/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/SdpSession.js b/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/SdpSession.js
index b97e535aa026d42678cb2f364dc5a28a6d7e0b39..77fc06644457d831f5689be84355fda588c8fc6e 100644
--- a/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/SdpSession.js
+++ b/labs/bbb-webrtc-sfu/lib/mcs-core/lib/model/SdpSession.js
@@ -8,7 +8,6 @@
 const C = require('../constants/Constants');
 const SdpWrapper = require('../utils/SdpWrapper');
 const rid = require('readable-id');
-const MediaServer = require('../media/media-server');
 const MediaSession = require('./MediaSession');
 const config = require('config');
 const kurentoUrl = config.get('kurentoUrl');
@@ -31,8 +30,7 @@ module.exports = class SdpSession extends MediaSession {
 
   async process () {
     try {
-      const answer = await this._MediaServer.processOffer(this._mediaElement, this._sdp.getPlainSdp());
-
+      const answer = await this._MediaServer.processOffer(this._mediaElement, this._sdp.getPlainSdp(), {name: this._name});
       if (this._type === 'WebRtcEndpoint') {
         this._MediaServer.gatherCandidates(this._mediaElement);
       }