From 5c8435471524c51d843f293cc7766ae24706a87a Mon Sep 17 00:00:00 2001
From: Richard Alam <ritzalam@gmail.com>
Date: Thu, 15 Jun 2017 19:09:32 -0700
Subject: [PATCH]  - try to consolidate meeting state in one place

---
 .../core/running/MeetingActor.scala           |  27 +-
 .../users/ValidateAuthTokenReqMsgHdlr.scala   |  38 +
 bbb-apps-common/publish.sh                    |   3 +
 bbb-common-web/deploy.sh                      |   3 +
 bigbluebutton-apps/deploy.sh                  |  11 +
 bigbluebutton-client/.actionScriptProperties  |  26 +-
 bigbluebutton-client/.project                 |   2 +-
 .../src/org/bigbluebutton/common/Role.as      |   8 -
 .../src/org/bigbluebutton/core/BBB.as         |  13 +-
 .../src/org/bigbluebutton/core/UsersUtil.as   |  82 +-
 .../core/controllers/BbbCoreEventDelegate.as  |   4 +-
 .../core/events/GetVoiceUsersEvent.as         |  12 +
 .../core/events/TokenValidEvent.as            |  16 +
 .../core/managers/UserConfigManager.as        |  53 --
 .../bigbluebutton/core/model/BreakoutRooms.as |   9 +
 .../org/bigbluebutton/core/model/Layouts.as   |   9 +
 .../bigbluebutton/core/model/LiveMeeting.as   |  21 +-
 .../src/org/bigbluebutton/core/model/Me.as    |  49 +-
 .../org/bigbluebutton/core/model/MeBuilder.as |   2 +-
 .../bigbluebutton/core/model/MediaStream.as   |  10 +-
 .../org/bigbluebutton/core/model/Meeting.as   | 101 +-
 .../org/bigbluebutton/core/model/Meeting2x.as |  89 ++
 .../core/model/MeetingBuilder.as              |   6 +
 .../core/model/MeetingBuilder2x.as            |  90 ++
 .../bigbluebutton/core/model/MeetingModel.as  |  68 --
 .../bigbluebutton/core/model/MeetingStatus.as |  31 +-
 .../org/bigbluebutton/core/model/MyStatus.as  |  47 +
 .../bigbluebutton/core/model/Permission.as    |  14 +-
 .../org/bigbluebutton/core/model/Webcams.as   |   6 +-
 .../core/model/int/MeetingInt.as              |  24 +
 .../bigbluebutton/core/model/int/README.md    |   1 +
 .../bigbluebutton/core/model/users/Guest.as   |  10 +-
 .../core/model/users/GuestPolicy.as           | 149 ++-
 .../bigbluebutton/core/model/users/User2x.as  |  22 +-
 .../bigbluebutton/core/model/users/Users2x.as |   7 +-
 .../core/model/users/UsersModel.as            |  13 +-
 .../core/model/users/VoiceUser2x.as           |  16 +-
 .../core/model/users/VoiceUsers2x.as          |   8 +-
 .../main/api/ExternalApiCallbacks.as          |  11 +-
 .../main/api/ExternalApiCalls.as              |   2 +-
 .../main/events/ResponseModeratorEvent.as     |   4 -
 .../main/events/SuccessfulLoginEvent.as       |   5 +-
 .../main/maps/ApplicationEventMap.mxml        |   2 +-
 .../main/model/ConferenceParameters.as        | 110 ---
 .../main/model/modules/ModuleDescriptor.as    |  36 +-
 .../main/model/modules/ModuleManager.as       |   9 +-
 .../main/model/modules/ModulesProxy.as        |   5 +-
 .../bigbluebutton/main/model/users/BBBUser.as | 868 +++++++++---------
 .../main/model/users/Conference.as            | 199 +---
 .../main/model/users/EnterApiResponse.as      |  31 +
 .../main/model/users/JoinService.as           | 368 ++++----
 .../main/model/users/NetConnectionDelegate.as |  65 +-
 .../main/model/users/UserService.as           | 136 +--
 .../main/views/AudioSelectionWindow.mxml      |  35 +-
 .../main/views/LoggedOutWindow.mxml           |   2 +-
 .../main/views/MainApplicationShell.mxml      |   4 +-
 .../bigbluebutton/main/views/MainToolbar.mxml |  85 +-
 .../main/views/MuteMeButton.mxml              |   6 +-
 .../main/views/RecordButton.mxml              |  65 +-
 .../broadcast/managers/BroadcastManager.as    |  10 +-
 .../broadcast/services/MessageSender.as       |   3 +-
 .../modules/caption/views/CaptionWindow.mxml  |  43 +-
 .../modules/caption/views/TextTab.as          |   7 +-
 .../chat/services/ChatMessageService.as       |   8 +-
 .../modules/chat/views/ChatBox.mxml           |   2 +-
 .../modules/layout/model/LayoutDefinition.as  |   4 +-
 .../modules/layout/views/AddButton.mxml       |   6 +-
 .../modules/layout/views/BroadcastButton.mxml |  12 +-
 .../modules/layout/views/LoadButton.mxml      |   5 +-
 .../modules/layout/views/SaveButton.mxml      |   5 +-
 .../layout/views/ToolbarComponent.mxml        |  14 +-
 .../modules/present/ui/views/SlideView.mxml   |   2 +-
 .../managers/WebRTCDeskshareManager.as        |   6 +-
 .../managers/SharedNotesManager.as            |   5 +-
 .../modules/users/services/MessageReceiver.as |  31 +-
 .../users/views/BreakoutRoomSettings.mxml     |  25 +-
 .../users/views/MediaItemRenderer.mxml        |   4 +-
 .../modules/users/views/MoodMenu.as           |   7 +-
 .../users/views/RoomActionsRenderer.mxml      |  23 +-
 .../users/views/StatusItemRenderer.mxml       |  27 +-
 .../modules/users/views/UsersWindow.mxml      |  27 +-
 .../videoconf/maps/VideoEventMapDelegate.as   |   4 +-
 .../WhiteboardCanvasDisplayModel.as           |   2 +-
 .../whiteboard/WhiteboardCanvasModel.as       |   3 +-
 .../whiteboard/business/shapes/TextObject.as  |   3 +-
 .../whiteboard/views/AnnotationIDGenerator.as |   4 +-
 86 files changed, 1675 insertions(+), 1765 deletions(-)
 create mode 100755 akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/users/ValidateAuthTokenReqMsgHdlr.scala
 create mode 100755 bbb-apps-common/publish.sh
 create mode 100755 bbb-common-web/deploy.sh
 create mode 100755 bigbluebutton-apps/deploy.sh
 create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/events/GetVoiceUsersEvent.as
 create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/events/TokenValidEvent.as
 delete mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/managers/UserConfigManager.as
 create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/BreakoutRooms.as
 create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/Layouts.as
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/Me.as
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting.as
 create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting2x.as
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder.as
 create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder2x.as
 delete mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingModel.as
 create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/MyStatus.as
 create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/int/MeetingInt.as
 create mode 100755 bigbluebutton-client/src/org/bigbluebutton/core/model/int/README.md
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/main/maps/ApplicationEventMap.mxml
 delete mode 100755 bigbluebutton-client/src/org/bigbluebutton/main/model/ConferenceParameters.as
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleDescriptor.as
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesProxy.as
 create mode 100755 bigbluebutton-client/src/org/bigbluebutton/main/model/users/EnterApiResponse.as
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/main/views/LoggedOutWindow.mxml
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/main/views/RecordButton.mxml
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/managers/BroadcastManager.as
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/services/MessageSender.as
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/BroadcastButton.mxml
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/ToolbarComponent.mxml
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MoodMenu.as
 mode change 100644 => 100755 bigbluebutton-client/src/org/bigbluebutton/modules/users/views/RoomActionsRenderer.mxml

diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala
index 6ed709b8ec..701b5a38e6 100755
--- a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core/running/MeetingActor.scala
@@ -65,7 +65,8 @@ class MeetingActor(val props: DefaultProps,
     with UserJoiningHdlr
     with UserLeavingHdlr
     with ChangeUserRoleHdlr
-    with UserJoinedVoiceConfMessageHdlr {
+    with UserJoinedVoiceConfMessageHdlr
+    with ValidateAuthTokenReqMsgHdlr {
 
   override val supervisorStrategy = OneForOneStrategy(maxNrOfRetries = 10, withinTimeRange = 1 minute) {
     case e: Exception => {
@@ -244,30 +245,6 @@ class MeetingActor(val props: DefaultProps,
     }
   }
 
-  def handleValidateAuthTokenReqMsg(msg: ValidateAuthTokenReqMsg): Unit = {
-    log.debug("****** RECEIVED ValidateAuthTokenReqMsg msg {}", msg)
-
-    val routing = Routing.addMsgToClientRouting(MessageTypes.DIRECT, props.meetingProp.intId, msg.body.userId)
-    val envelope = BbbCoreEnvelope(ValidateAuthTokenRespMsg.NAME, routing)
-    val header = BbbClientMsgHeader(ValidateAuthTokenRespMsg.NAME, props.meetingProp.intId, msg.body.userId)
-
-    RegisteredUsers.getRegisteredUserWithToken(msg.body.authToken, msg.body.userId, liveMeeting.registeredUsers) match {
-      case Some(u) =>
-        log.info("ValidateToken success. meetingId=" + props.meetingProp.intId + " userId=" + msg.body.userId)
-
-        val body = ValidateAuthTokenRespMsgBody(msg.body.userId, msg.body.authToken, true)
-        val event = ValidateAuthTokenRespMsg(header, body)
-        val msgEvent = BbbCommonEnvCoreMsg(envelope, event)
-        outGW.send(msgEvent)
-      case None =>
-        log.info("ValidateToken failed. meetingId=" + props.meetingProp.intId + " userId=" + msg.body.userId)
-        val body = ValidateAuthTokenRespMsgBody(msg.body.userId, msg.body.authToken, false)
-        val event = ValidateAuthTokenRespMsg(header, body)
-        val msgEvent = BbbCommonEnvCoreMsg(envelope, event)
-        outGW.send(msgEvent)
-    }
-  }
-
   def handleDeskShareRTMPBroadcastStoppedRequest(msg: DeskShareRTMPBroadcastStoppedRequest): Unit = {
     log.info("handleDeskShareRTMPBroadcastStoppedRequest: isBroadcastingRTMP=" +
       MeetingStatus2x.isBroadcastingRTMP(liveMeeting.status) + " URL:" +
diff --git a/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/users/ValidateAuthTokenReqMsgHdlr.scala b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/users/ValidateAuthTokenReqMsgHdlr.scala
new file mode 100755
index 0000000000..84f4018220
--- /dev/null
+++ b/akka-bbb-apps/src/main/scala/org/bigbluebutton/core2/message/handlers/users/ValidateAuthTokenReqMsgHdlr.scala
@@ -0,0 +1,38 @@
+package org.bigbluebutton.core2.message.handlers.users
+
+import org.bigbluebutton.common2.messages.MessageBody.ValidateAuthTokenRespMsgBody
+import org.bigbluebutton.common2.messages._
+import org.bigbluebutton.core.OutMessageGateway
+import org.bigbluebutton.core.models.RegisteredUsers
+import org.bigbluebutton.core.running.MeetingActor
+
+trait ValidateAuthTokenReqMsgHdlr {
+  this: MeetingActor =>
+
+  val outGW: OutMessageGateway
+
+  def handleValidateAuthTokenReqMsg(msg: ValidateAuthTokenReqMsg): Unit = {
+    log.debug("****** RECEIVED ValidateAuthTokenReqMsg msg {}", msg)
+
+    val routing = Routing.addMsgToClientRouting(MessageTypes.DIRECT, props.meetingProp.intId, msg.body.userId)
+    val envelope = BbbCoreEnvelope(ValidateAuthTokenRespMsg.NAME, routing)
+    val header = BbbClientMsgHeader(ValidateAuthTokenRespMsg.NAME, props.meetingProp.intId, msg.body.userId)
+
+    RegisteredUsers.getRegisteredUserWithToken(msg.body.authToken, msg.body.userId, liveMeeting.registeredUsers) match {
+      case Some(u) =>
+        log.info("ValidateToken success. meetingId=" + props.meetingProp.intId + " userId=" + msg.body.userId)
+
+        val body = ValidateAuthTokenRespMsgBody(msg.body.userId, msg.body.authToken, true)
+        val event = ValidateAuthTokenRespMsg(header, body)
+        val msgEvent = BbbCommonEnvCoreMsg(envelope, event)
+        outGW.send(msgEvent)
+      case None =>
+        log.info("ValidateToken failed. meetingId=" + props.meetingProp.intId + " userId=" + msg.body.userId)
+        val body = ValidateAuthTokenRespMsgBody(msg.body.userId, msg.body.authToken, false)
+        val event = ValidateAuthTokenRespMsg(header, body)
+        val msgEvent = BbbCommonEnvCoreMsg(envelope, event)
+        outGW.send(msgEvent)
+    }
+  }
+
+}
diff --git a/bbb-apps-common/publish.sh b/bbb-apps-common/publish.sh
new file mode 100755
index 0000000000..948f563417
--- /dev/null
+++ b/bbb-apps-common/publish.sh
@@ -0,0 +1,3 @@
+sbt clean
+sbt publish publishLocal
+
diff --git a/bbb-common-web/deploy.sh b/bbb-common-web/deploy.sh
new file mode 100755
index 0000000000..948f563417
--- /dev/null
+++ b/bbb-common-web/deploy.sh
@@ -0,0 +1,3 @@
+sbt clean
+sbt publish publishLocal
+
diff --git a/bigbluebutton-apps/deploy.sh b/bigbluebutton-apps/deploy.sh
new file mode 100755
index 0000000000..fa907cbcce
--- /dev/null
+++ b/bigbluebutton-apps/deploy.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+# deploying 'bigbluebutton-apps' to /usr/share/red5/webapps
+
+gradle clean
+gradle resolveDeps
+gradle war deploy
+
+# Remove slf4j jar as it conflicts with logging with red5
+sudo rm /usr/share/red5/webapps/bigbluebutton/WEB-INF/lib/slf4j-api-1.7.23.jar
+
+
diff --git a/bigbluebutton-client/.actionScriptProperties b/bigbluebutton-client/.actionScriptProperties
index 2d7056442a..8e940bc6ad 100755
--- a/bigbluebutton-client/.actionScriptProperties
+++ b/bigbluebutton-client/.actionScriptProperties
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<actionScriptProperties analytics="false" mainApplicationPath="BigBlueButton.mxml" projectUUID="f330b47a-ef44-431d-8c83-1768892be326" version="11">
-  <compiler additionalCompilerArguments="-locale en_US&#13;&#10;-show-unused-type-selector-warnings=false" autoRSLOrdering="true" copyDependentFiles="true" fteInMXComponents="false" generateAccessible="true" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin-debug" removeUnusedRSL="true" sourceFolderPath="src" strict="true" targetPlayerVersion="11.2.0" useApolloConfig="false" useDebugRSLSwfs="true" useFlashSDK="false" verifyDigests="true" warn="true">
+<actionScriptProperties analytics="false" mainApplicationPath="Main.mxml" projectUUID="55ddf1c6-532f-4977-9cb3-2a7ab95ad328" version="11">
+  <compiler additionalCompilerArguments="-locale en_US" autoRSLOrdering="true" copyDependentFiles="true" fteInMXComponents="false" generateAccessible="true" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin-debug" removeUnusedRSL="true" sourceFolderPath="src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" useFlashSDK="false" verifyDigests="true" warn="true">
     <compilerSourcePath/>
     <libraryPath defaultLinkType="0">
       <libraryPathEntry kind="4" path="">
@@ -13,26 +13,8 @@
     </libraryPath>
     <sourceAttachmentPath/>
   </compiler>
-  <theme themeIsDefault="false" themeIsSDK="true" themeLocation="${SDK_THEMES_DIR}/frameworks/themes/Halo"/>
-  <applications>
-    <application path="BigBlueButton.mxml"/>
-    <application path="DeskshareStandalone.mxml"/>
-    <application path="ScreenshareStandalone.mxml"/>
-  </applications>
-  <modules>
-    <module application="src/BigBlueButton.mxml" destPath="ChatModule.swf" optimize="true" sourcePath="src/ChatModule.mxml"/>
-    <module application="src/BigBlueButton.mxml" destPath="UsersModule.swf" optimize="true" sourcePath="src/UsersModule.mxml"/>
-    <module application="src/BigBlueButton.mxml" destPath="DeskShareModule.swf" optimize="true" sourcePath="src/DeskShareModule.mxml"/>
-    <module application="src/BigBlueButton.mxml" destPath="PhoneModule.swf" optimize="true" sourcePath="src/PhoneModule.mxml"/>
-    <module application="src/BigBlueButton.mxml" destPath="VideoconfModule.swf" optimize="true" sourcePath="src/VideoconfModule.mxml"/>
-    <module application="src/BigBlueButton.mxml" destPath="WhiteboardModule.swf" optimize="true" sourcePath="src/WhiteboardModule.mxml"/>
-    <module application="src/BigBlueButton.mxml" destPath="PollingModule.swf" optimize="true" sourcePath="src/PollingModule.mxml"/>
-    <module application="src/BigBlueButton.mxml" destPath="PresentModule.swf" optimize="true" sourcePath="src/PresentModule.mxml"/>
-    <module application="src/BigBlueButton.mxml" destPath="LayoutModule.swf" optimize="true" sourcePath="src/LayoutModule.mxml"/>
-    <module application="src/BigBlueButton.mxml" destPath="BroadcastModule.swf" optimize="true" sourcePath="src/BroadcastModule.mxml"/>
-    <module application="src/BigBlueButton.mxml" destPath="NotesModule.swf" optimize="true" sourcePath="src/NotesModule.mxml"/>
-    <module application="src/BigBlueButton.mxml" destPath="BreakoutModule.swf" optimize="true" sourcePath="src/BreakoutModule.mxml"/>
-  </modules>
+  <applications/>
+  <modules/>
   <workers/>
   <buildCSSFiles/>
   <flashCatalyst validateFlashCatalystCompatibility="false"/>
diff --git a/bigbluebutton-client/.project b/bigbluebutton-client/.project
index 671c3111ec..c0ad8b2869 100755
--- a/bigbluebutton-client/.project
+++ b/bigbluebutton-client/.project
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>z-bbb-client</name>
+	<name>x-bbb-client</name>
 	<comment></comment>
 	<projects>
 	</projects>
diff --git a/bigbluebutton-client/src/org/bigbluebutton/common/Role.as b/bigbluebutton-client/src/org/bigbluebutton/common/Role.as
index fa3dde7c1c..5f2685d792 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/common/Role.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/common/Role.as
@@ -50,13 +50,5 @@ package org.bigbluebutton.common
 			}
 		}
 		
-		/**
-		 * Return the role of the user, with the role being one of the constants defined in this class. 
-		 * @return The role of the user
-		 * 
-		 */		
-		public static function getRole():String{
-			return Role.userrole;
-		}
 	}
 }
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/BBB.as b/bigbluebutton-client/src/org/bigbluebutton/core/BBB.as
index 2bf4026db5..8b35594cc0 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/BBB.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/BBB.as
@@ -25,8 +25,8 @@ package org.bigbluebutton.core {
 	
 	import org.bigbluebutton.core.managers.ConfigManager2;
 	import org.bigbluebutton.core.managers.ConnectionManager;
-	import org.bigbluebutton.core.managers.UserConfigManager;
 	import org.bigbluebutton.core.managers.VideoProfileManager;
+	import org.bigbluebutton.core.model.LiveMeeting;
 	import org.bigbluebutton.core.model.VideoProfile;
 	import org.bigbluebutton.util.SessionTokenUtil;
 
@@ -35,8 +35,6 @@ package org.bigbluebutton.core {
 
 		private static var connectionManager:ConnectionManager = null;
 
-		private static var userConfigManager:UserConfigManager = null;
-
 		private static var videoProfileManager:VideoProfileManager = null;
 
 		private static var sessionTokenUtil:SessionTokenUtil = null;
@@ -48,13 +46,6 @@ package org.bigbluebutton.core {
 			return sessionTokenUtil;
 		}
 
-		public static function initUserConfigManager():UserConfigManager {
-			if (userConfigManager == null) {
-				userConfigManager = new UserConfigManager();
-			}
-			return userConfigManager;
-		}
-
 		public static function getConfigManager():ConfigManager2 {
 			if (configManager == null) {
 				configManager = new ConfigManager2();
@@ -120,7 +111,7 @@ package org.bigbluebutton.core {
 		}
 
 		public static function getLogoutURL():String {
-			var logoutUrl:String = BBB.initUserConfigManager().getLogoutUrl();
+			var logoutUrl:String = LiveMeeting.inst().me.logoutURL;
 			if (logoutUrl == null) {
 				logoutUrl = getBaseURL();
 			}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as b/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as
index 774748d14d..90ee7b6049 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as
@@ -22,7 +22,9 @@ package org.bigbluebutton.core
   
   import org.as3commons.logging.api.ILogger;
   import org.as3commons.logging.api.getClassLogger;
+  import org.bigbluebutton.common.Role;
   import org.bigbluebutton.core.managers.UserManager;
+  import org.bigbluebutton.core.model.LiveMeeting;
   import org.bigbluebutton.core.vo.CameraSettingsVO;
   import org.bigbluebutton.main.model.users.BBBUser;
   import org.bigbluebutton.util.SessionTokenUtil;
@@ -60,15 +62,15 @@ package org.bigbluebutton.core
     }
     
 	public static function setUserEjected():void {
-		UserManager.getInstance().getConference().setUserEjectedFromMeeting();	
+    LiveMeeting.inst().myStatus.userEjectedFromMeeting = true;
 	}
 	
 	public static function isUserEjected():Boolean {
-		return UserManager.getInstance().getConference().getUserEjectedFromMeeting();
+    return LiveMeeting.inst().myStatus.userEjectedFromMeeting;
 	}
 	
   public static function isRecorded():Boolean {
-    return UserManager.getInstance().getConference().record;
+    return LiveMeeting.inst().meeting.recorded;
   }
   
     public static function amIPublishing():ArrayCollection {
@@ -106,11 +108,11 @@ package org.bigbluebutton.core
     }
     
     public static function getInternalMeetingID():String {
-      return UserManager.getInstance().getConference().internalMeetingID;
+      return LiveMeeting.inst().meeting.internalId;
     }
     
     public static function getAvatarURL():String {
-      return UserManager.getInstance().getConference().avatarURL;
+      return LiveMeeting.inst().me.avatarURL; 
     }
 
     public static function getUserAvatarURL(userID:String):String {
@@ -118,31 +120,57 @@ package org.bigbluebutton.core
     }	
 	
 	public static function getVoiceBridge():String {
-		return UserManager.getInstance().getConference().voiceBridge;
+		return LiveMeeting.inst().meeting.voiceConf;
 	}
 	
 	public static function getDialNumber():String {
-		return UserManager.getInstance().getConference().dialNumber;
+		return LiveMeeting.inst().meeting.dialNumber;
 	}
 	
 	public static function getCustomData():Object {
-		return UserManager.getInstance().getConference().getMyCustomData();
+		return LiveMeeting.inst().me.customData;
 	}
-    
+  
+  public static function getMeetingName():String {
+    return LiveMeeting.inst().meeting.name;
+  }  
+  
     public static function getExternalMeetingID():String {
-      return UserManager.getInstance().getConference().externalMeetingID;
+      return LiveMeeting.inst().meeting.externalId;
     }
     
     public static function amIModerator():Boolean {
-      return UserManager.getInstance().getConference().amIModerator();
+      return LiveMeeting.inst().me.role == Role.MODERATOR;
     }
     
     public static function amIPresenter():Boolean {
-      return UserManager.getInstance().getConference().amIPresenter;
+      return LiveMeeting.inst().myStatus.isPresenter;
+    }
+    
+    public static function isBreakout():Boolean {
+      return LiveMeeting.inst().meeting.isBreakout;
+    }
+    
+    public static function isMyVoiceMuted():Boolean {
+      return LiveMeeting.inst().myStatus.voiceMuted;
+    }
+    
+    public static function iAskedToLogout():Boolean {
+      return LiveMeeting.inst().myStatus.iAskedToLogout;
+    }
+    
+    public static function setIAskedToLogout(value:Boolean): void {
+      LiveMeeting.inst().myStatus.iAskedToLogout = value;
+    }
+    
+    
+    public static function setMeAsPresenter(value: Boolean): void {
+      LiveMeeting.inst().myStatus.isPresenter = value;
+      applyLockSettings();
     }
 
     public static function amIWaitingForAcceptance():Boolean {
-      return UserManager.getInstance().getConference().amIWaitingForAcceptance();
+      return LiveMeeting.inst().myStatus.waitingForAcceptance;
     }
         
     public static function hasUser(userID:String):Boolean {
@@ -154,27 +182,35 @@ package org.bigbluebutton.core
     }
 
     public static function getMyself():BBBUser {
-      return UserManager.getInstance().getConference().getMyself();
+      return UserManager.getInstance().getConference().getMyUser();
     }
     
     public static function isMe(userID:String):Boolean {
-      return UserManager.getInstance().getConference().amIThisUser(userID);
+      return LiveMeeting.inst().me.id == userID;
     }
     
     public static function getMyExternalUserID():String {
-      return UserManager.getInstance().getConference().getMyExternalUserID();
+      return LiveMeeting.inst().me.externalId;
     }
     
     public static function getMyUserID():String {
-      return UserManager.getInstance().getConference().getMyUserId();
+      return LiveMeeting.inst().me.id;
     }
     
     public static function getMyRole():String {
-      return UserManager.getInstance().getConference().getMyRole();
+      return LiveMeeting.inst().me.role;
     }
     
     public static function getMyUsername():String {
-      return UserManager.getInstance().getConference().getMyName();
+      return LiveMeeting.inst().me.name;
+    }
+    
+    public static function myEmoji():String {
+      return LiveMeeting.inst().myStatus.myEmojiStatus;
+    }
+    
+    public static function setMyEmoji(value: String):void {
+      LiveMeeting.inst().myStatus.myEmojiStatus = value;
     }
     
     public static function internalUserIDToExternalUserID(userID:String):String {
@@ -213,7 +249,7 @@ package org.bigbluebutton.core
       var userData:Object = new Object();
       userData.meetingId = getInternalMeetingID();
       userData.externalMeetingId = getExternalMeetingID();
-      userData.meetingName = UserManager.getInstance().getConference().meetingName;
+      userData.meetingName = LiveMeeting.inst().meeting.name;
       userData.userId = getMyUserID();
       userData.username = getMyUsername();
       
@@ -245,5 +281,11 @@ package org.bigbluebutton.core
         return sessionUtil.getSessionToken();
     }
     
+    public static function applyLockSettings():void {
+      var myUser:BBBUser = getMyself();
+      if (myUser != null)
+        myUser.applyLockSettings();
+    }
+    
   }
 }
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/controllers/BbbCoreEventDelegate.as b/bigbluebutton-client/src/org/bigbluebutton/core/controllers/BbbCoreEventDelegate.as
index 164afde20d..4805aba400 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/controllers/BbbCoreEventDelegate.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/controllers/BbbCoreEventDelegate.as
@@ -21,8 +21,8 @@ package org.bigbluebutton.core.controllers
   import flash.events.IEventDispatcher;
   
   import org.bigbluebutton.core.EventConstants;
+  import org.bigbluebutton.core.UsersUtil;
   import org.bigbluebutton.core.events.CoreEvent;
-  import org.bigbluebutton.core.managers.UserManager;
 
   public class BbbCoreEventDelegate
   {
@@ -30,7 +30,7 @@ package org.bigbluebutton.core.controllers
     
     public function handleGetMyRoleReq():void {
       var event:CoreEvent = new CoreEvent(EventConstants.GET_MY_ROLE_RESP);
-      event.message.role = UserManager.getInstance().getConference().whatsMyRole();
+      event.message.role = UsersUtil.getMyRole();
       
       dispatcher.dispatchEvent(event);
     }
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/events/GetVoiceUsersEvent.as b/bigbluebutton-client/src/org/bigbluebutton/core/events/GetVoiceUsersEvent.as
new file mode 100755
index 0000000000..f79f923f87
--- /dev/null
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/events/GetVoiceUsersEvent.as
@@ -0,0 +1,12 @@
+package org.bigbluebutton.core.events
+{
+	import flash.events.Event;
+	
+	public class GetVoiceUsersEvent extends Event
+	{
+		public function GetVoiceUsersEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
+		{
+			super(type, bubbles, cancelable);
+		}
+	}
+}
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/events/TokenValidEvent.as b/bigbluebutton-client/src/org/bigbluebutton/core/events/TokenValidEvent.as
new file mode 100755
index 0000000000..e783229e8c
--- /dev/null
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/events/TokenValidEvent.as
@@ -0,0 +1,16 @@
+package org.bigbluebutton.core.events
+{
+	import flash.events.Event;
+	
+	public class TokenValidEvent extends Event
+	{
+		public static const TOKEN_VALID_EVENT:String = "auth token valid event";
+		
+		public function TokenValidEvent() 
+		{
+			super(TOKEN_VALID_EVENT, true, false);
+		}
+		
+	}
+
+}
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/managers/UserConfigManager.as b/bigbluebutton-client/src/org/bigbluebutton/core/managers/UserConfigManager.as
deleted file mode 100755
index d4099cf7c7..0000000000
--- a/bigbluebutton-client/src/org/bigbluebutton/core/managers/UserConfigManager.as
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
- *
- * Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
- *
- * This program is free software; you can redistribute it and/or modify it under the
- * terms of the GNU Lesser General Public License as published by the Free Software
- * Foundation; either version 3.0 of the License, or (at your option) any later
- * version.
- *
- * BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License along
- * with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
- *
- */
-package org.bigbluebutton.core.managers {
-
-	import org.bigbluebutton.main.model.ConferenceParameters;
-
-	public class UserConfigManager {
-		private var conferenceParameters:ConferenceParameters = null;
-
-		public function setConferenceParameters(c:ConferenceParameters):void {
-			conferenceParameters = c;
-		}
-
-    public function getConfParams():ConferenceParameters {
-      return conferenceParameters;
-    }
-    
-		public function getLogoutUrl():String {
-			if (conferenceParameters == null)
-				return null;
-			return conferenceParameters.logoutUrl;
-		}
-
-		public function getWelcomeMessage():String {
-			if (conferenceParameters == null)
-				return null;
-			return conferenceParameters.welcome;
-		}
-
-		public function getMeetingTitle():String {
-			if (conferenceParameters)
-				return conferenceParameters.meetingName;
-			else
-				return null;
-		}
-	}
-}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/BreakoutRooms.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/BreakoutRooms.as
new file mode 100755
index 0000000000..2a5c4b49cd
--- /dev/null
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/BreakoutRooms.as
@@ -0,0 +1,9 @@
+package org.bigbluebutton.core.model
+{
+	public class BreakoutRooms
+	{
+		public function BreakoutRooms()
+		{
+		}
+	}
+}
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/Layouts.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/Layouts.as
new file mode 100755
index 0000000000..a463e0107f
--- /dev/null
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/Layouts.as
@@ -0,0 +1,9 @@
+package org.bigbluebutton.core.model
+{
+	public class Layouts
+	{
+		public function Layouts()
+		{
+		}
+	}
+}
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/LiveMeeting.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/LiveMeeting.as
index 8689bc49db..d2b7a693f1 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/LiveMeeting.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/LiveMeeting.as
@@ -1,15 +1,22 @@
 package org.bigbluebutton.core.model
 {
-
+	import org.bigbluebutton.core.model.users.GuestPolicy;
+	import org.bigbluebutton.core.model.users.Users2x;
+	import org.bigbluebutton.core.model.users.VoiceUsers2x;
+		
 	public class LiveMeeting
 	{
 		private static var instance: LiveMeeting = null;
 		
-		var webcams: Webcams = new Webcams();
-		var voiceUsers: VoiceUsers2x = new VoiceUsers2x();
-		var users: Users2x = new Users2x();
-		var guestsWaitingForApproval: GuestsWatingForApproval = new GuestsWatingForApproval();
-		var meetingStatus: MeetingStatus = new MeetingStatus();
+		public var me: Me = new Me();
+    public var myStatus: MyStatus = new MyStatus();
+		public var webcams: Webcams = new Webcams();
+		public var voiceUsers: VoiceUsers2x = new VoiceUsers2x();
+		public var users: Users2x = new Users2x();
+		public var guestsWaitingForApproval: GuestPolicy = new GuestPolicy();
+		public var meetingStatus: MeetingStatus = new MeetingStatus();
+		public var meeting: Meeting = new Meeting();
+		public var config: Config;
 		
 		public function LiveMeeting(enforcer: LiveMeetingSingletonEnforcer)
 		{
@@ -18,7 +25,7 @@ package org.bigbluebutton.core.model
 			}
 		}
 		
-		public static function getInstance():LiveMeeting{
+		public static function inst():LiveMeeting{
 			if (instance == null){
 				instance = new LiveMeeting(new LiveMeetingSingletonEnforcer());
 			}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/Me.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/Me.as
old mode 100644
new mode 100755
index 0d40c46815..1c3b8e325e
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/Me.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/Me.as
@@ -2,45 +2,30 @@ package org.bigbluebutton.core.model
 {
   public class Me
   {
-    private var _id: String;
-    private var _name: String;
-    private var _externalId: String;
-    private var _token: String;
-    private var _layout: String;
-    private var _avatarURL: String;
-    private var _logoutURL: String;
+    public var id:String = "";
+    public var name:String = "";
+    public var externalId:String = "";
+    public var authToken:String = "";
+    public var layout:String = "";
+    public var logoutURL:String = "";
     
-    public function Me(builder: MeBuilder) {
-      _id = builder.id;
-      _name = builder.name;
-      _externalId = builder.externalId;
-      _token = builder.token;
-      _layout = builder.layout;
-      _logoutURL = builder.logoutURL;
-    }
-    
-    public function get id():String {
-      return _id;
-    }
+    public var welcome:String = "";
+    public var avatarURL:String = "";
+    public var dialNumber:String = "";
     
-    public function get name():String {
-      return _name;
-    }
+    public var guest:Boolean = true;
+    public var authed:Boolean = false;
+    public var customData:Object = new Object();
     
-    public function get externalId():String {
-      return _externalId;
-    }
+    private var _role:String =  "viewer";
     
-    public function get layout():String {
-      return _layout;
-    }
     
-    public function get avatarURL():String {
-      return _avatarURL;
+    public function get role():String {
+      return _role.toUpperCase();
     }
     
-    public function get logoutURL():String {
-      return _logoutURL;
+    public function set role(value: String):void {
+      _role = role;
     }
   }
 }
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeBuilder.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeBuilder.as
index 620d53644a..a70532b632 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeBuilder.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeBuilder.as
@@ -13,7 +13,7 @@ package org.bigbluebutton.core.model
     internal var dialNumber:String;
     internal var role:String;
     internal var guest:Boolean;
-	internal var authed:Boolean;
+    internal var authed:Boolean;
     internal var customData:Object;
     
     public function MeBuilder(id: String, name: String) {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/MediaStream.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/MediaStream.as
index 02359647ae..ba3bc7ac75 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/MediaStream.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/MediaStream.as
@@ -1,11 +1,13 @@
 package org.bigbluebutton.core.model
 {
+	import mx.collections.ArrayCollection;
+
 	public class MediaStream
 	{
-		var streamId: String;
-		var intId: String;
-		var attributes: ArrayCollection = new ArrayCollection();
-		var viewers:ArrayCollection = new ArrayCollection();
+		public var streamId: String;
+		public var intId: String;
+		public var attributes: ArrayCollection = new ArrayCollection();
+		public var viewers:ArrayCollection = new ArrayCollection();
 		
 		public function MediaStream()
 		{
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting.as
old mode 100644
new mode 100755
index 14aaabcea3..bcb722efa2
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting.as
@@ -2,90 +2,21 @@ package org.bigbluebutton.core.model
 {
   public class Meeting
   {
-    private var _name:String;
-    private var _internalId:String;
-    private var _externalId:String;
-    private var _isBreakout:Boolean;
-    private var _defaultAvatarUrl:String;
-    private var _voiceConference:String;
-    private var _dialNumber:String;
-    private var _recorded:Boolean;
-    private var _defaultLayout:String;
-    private var _welcomeMessage:String;
-    private var _modOnlyMessage:String;
-    private var _allowStartStopRecording:Boolean;
-	private var _webcamsOnlyForModerator:Boolean;
-    private var _metadata:Object = null;
-    
-    public var isRecording: Boolean = false;
-    
-    public function Meeting(build: MeetingBuilder)
-    {
-      _name = build.name;
-      _internalId = build.id;
-      _externalId = build.externId;
-	  _isBreakout = build.isBreakout;
-      _defaultAvatarUrl = build.defaultAvatarUrl;
-      _voiceConference = build.voiceConf;
-      _dialNumber = build.dialNumber;
-      _recorded = build.recorded;
-      _defaultLayout = build.defaultLayout;
-      _welcomeMessage = build.welcomeMessage;
-      _modOnlyMessage = build.modOnlyMessage;
-      _allowStartStopRecording = build.allowStartStopRecording;
-	  _webcamsOnlyForModerator = build.webcamsOnlyForModerator;
-      _metadata = build.metadata;
-    }
-    
-    public function get name():String {
-      return _name;
-    }
-    
-    public function get internalId():String {
-      return _internalId;
-    }
-    
-    public function get externalId():String {
-      return _externalId;
-    }
-    
-    public function get defaultAvatarUrl():String {
-      return _defaultAvatarUrl;
-    }
-    
-    public function get defaultLayout():String {
-      return _defaultLayout;
-    }
-      
-    public function get voiceConference():String {
-      return _voiceConference;
-    }
-    
-    public function get dialNumber():String {
-      return _dialNumber;
-    }
-    
-    public function get recorded():Boolean {
-      return _recorded;
-    }
-    
-    public function get allowStartStopRecording():Boolean {
-      return _allowStartStopRecording;
-    }
-	
-    public function get webcamsOnlyForModerator() : Boolean {
-        return _webcamsOnlyForModerator;
-    }
-
-    public function get metadata():Object {
-      return _metadata;
-    }
-
-    public function isMetadata(key: String):Boolean {
-      if (_metadata != null) {
-        return _metadata.hasOwnProperty(key);
-      }
-      return false;
-    }
+    public var name:String = "";
+    public var internalId:String = "";
+    public var externalId:String = "" ;
+    public var isBreakout:Boolean = false;
+    public var defaultAvatarUrl:String = "";
+    public var voiceConf:String = "";
+    public var dialNumber:String = "";
+    public var recorded:Boolean = false;
+    public var defaultLayout:String = "";
+    public var welcomeMessage:String = "";
+    public var modOnlyMessage:String = "";
+    public var allowStartStopRecording:Boolean = true;
+    public var webcamsOnlyForModerator:Boolean = false;
+    public var metadata:Object = null;
+    public var muteOnStart:Boolean = false;
+   
   }
 }
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting2x.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting2x.as
new file mode 100755
index 0000000000..0a2563a4f2
--- /dev/null
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/Meeting2x.as
@@ -0,0 +1,89 @@
+package org.bigbluebutton.core.model
+{
+	public class Meeting2x
+	{
+		private var _name:String;
+		private var _internalId:String;
+		private var _externalId:String;
+		private var _isBreakout:Boolean;
+		private var _defaultAvatarUrl:String;
+		private var _voiceConference:String;
+		private var _dialNumber:String;
+		private var _recorded:Boolean;
+		private var _defaultLayout:String;
+		private var _welcomeMessage:String;
+		private var _modOnlyMessage:String;
+		private var _allowStartStopRecording:Boolean;
+		private var _webcamsOnlyForModerator:Boolean;
+		private var _metadata:Object = null;
+		
+		public function Meeting2x(build: MeetingBuilder2x)
+		{
+			_name = build.name;
+			_internalId = build.id;
+			_externalId = build.externId;
+			_isBreakout = build.isBreakout;
+			_defaultAvatarUrl = build.defaultAvatarUrl;
+			_voiceConference = build.voiceConf;
+			_dialNumber = build.dialNumber;
+			_recorded = build.recorded;
+			_defaultLayout = build.defaultLayout;
+			_welcomeMessage = build.welcomeMessage;
+			_modOnlyMessage = build.modOnlyMessage;
+			_allowStartStopRecording = build.allowStartStopRecording;
+			_webcamsOnlyForModerator = build.webcamsOnlyForModerator;
+			_metadata = build.metadata;
+		}
+		
+		public function get name():String {
+			return _name;
+		}
+		
+		public function get internalId():String {
+			return _internalId;
+		}
+		
+		public function get externalId():String {
+			return _externalId;
+		}
+		
+		public function get defaultAvatarUrl():String {
+			return _defaultAvatarUrl;
+		}
+		
+		public function get defaultLayout():String {
+			return _defaultLayout;
+		}
+		
+		public function get voiceConference():String {
+			return _voiceConference;
+		}
+		
+		public function get dialNumber():String {
+			return _dialNumber;
+		}
+		
+		public function get recorded():Boolean {
+			return _recorded;
+		}
+		
+		public function get allowStartStopRecording():Boolean {
+			return _allowStartStopRecording;
+		}
+		
+		public function get webcamsOnlyForModerator() : Boolean {
+			return _webcamsOnlyForModerator;
+		}
+		
+		public function get metadata():Object {
+			return _metadata;
+		}
+		
+		public function isMetadata(key: String):Boolean {
+			if (_metadata != null) {
+				return _metadata.hasOwnProperty(key);
+			}
+			return false;
+		}
+	}
+}
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder.as
old mode 100644
new mode 100755
index 56773f7eb3..77badd9bfa
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder.as
@@ -16,6 +16,7 @@ package org.bigbluebutton.core.model
     internal var allowStartStopRecording: Boolean;
 	internal var webcamsOnlyForModerator: Boolean;
     internal var metadata: Object;
+	internal var muteOnStart:Boolean;
     
     public function MeetingBuilder(id: String, name: String) {
       this.id = id;
@@ -81,6 +82,11 @@ package org.bigbluebutton.core.model
       metadata = value;
       return this;
     }
+	
+	public function withMuteOnStart(value: Boolean):MeetingBuilder {
+		muteOnStart = value;
+		return this;
+	}
 
     public function build():Meeting {
       return new Meeting(this);
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder2x.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder2x.as
new file mode 100755
index 0000000000..e2a1b44b97
--- /dev/null
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingBuilder2x.as
@@ -0,0 +1,90 @@
+package org.bigbluebutton.core.model
+{
+	public class MeetingBuilder2x
+	{
+		internal var id:String;
+		internal var name:String;
+		internal var voiceConf:String;
+		internal var externId:String;
+		internal var isBreakout:Boolean;
+		internal var defaultAvatarUrl:String;
+		internal var dialNumber:String;
+		internal var recorded:Boolean;
+		internal var defaultLayout:String;    
+		internal var welcomeMessage:String;
+		internal var modOnlyMessage:String;
+		internal var allowStartStopRecording: Boolean;
+		internal var webcamsOnlyForModerator: Boolean;
+		internal var metadata: Object;
+		
+		public function MeetingBuilder2x(id: String, name: String)
+		{
+			this.id = id;
+			this.name = name;
+		}
+		
+		public function withVoiceConf(value: String):MeetingBuilder2x {
+			voiceConf = value;
+			return this;
+		}
+		
+		public function withExternalId(value: String):MeetingBuilder2x {
+			externId = value;
+			return this;
+		}
+		
+		public function withBreakout(value : Boolean):MeetingBuilder2x {
+			isBreakout = value;
+			return this;
+		}
+		
+		public function withDefaultAvatarUrl(value: String):MeetingBuilder2x {
+			defaultAvatarUrl = value;
+			return this;
+		}
+		
+		public function withDialNumber(value: String):MeetingBuilder2x {
+			dialNumber = value;
+			return this;
+		}
+		
+		public function withRecorded(value: Boolean):MeetingBuilder2x {
+			recorded = value;
+			return this;
+		}
+		
+		public function withAllowStartStopRecording(value: Boolean):MeetingBuilder2x {
+			allowStartStopRecording = value;
+			return this;
+		}
+		
+		public function withWebcamsOnlyForModerator(value: Boolean):MeetingBuilder2x {
+			webcamsOnlyForModerator = value;
+			return this;
+		}
+		
+		public function withDefaultLayout(value: String):MeetingBuilder2x {
+			defaultLayout = value;
+			return this;
+		}
+		
+		public function withWelcomeMessage(value: String):MeetingBuilder2x {
+			welcomeMessage = value;
+			return this;
+		}
+		
+		public function withModOnlyMessage(value: String):MeetingBuilder2x {
+			modOnlyMessage = value;
+			return this;
+		}    
+		
+		public function withMetadata(value: Object):MeetingBuilder2x {
+			metadata = value;
+			return this;
+		}
+		
+		public function build():Meeting2x {
+			return new Meeting2x(this);
+		}
+	}
+}
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingModel.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingModel.as
deleted file mode 100755
index 39b2425245..0000000000
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingModel.as
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.bigbluebutton.core.model
-{
-  import org.bigbluebutton.core.vo.LockSettingsVO;
-
-  public class MeetingModel
-  {
-    private static var instance:MeetingModel = null;
-    
-    private var _meeting: Meeting;
-    
-    private var _meetingMuted:Boolean = false;
-    private var _lockSettings:LockSettingsVO;
-    private var _modOnlyMessage:String = null;
-    private var _stunAndTurnServers: Object = new Object();
-    
-    public function MeetingModel(enforcer: MeetingModelSingletonEnforcer)
-    {
-      if (enforcer == null){
-        throw new Error("There can only be 1 MeetingModel instance");
-      }
-    }
-    
-    public static function getInstance():MeetingModel{
-      if (instance == null){
-        instance = new MeetingModel(new MeetingModelSingletonEnforcer());
-      }
-      return instance;
-    }  
-    
-    public function set meeting(value: Meeting):void {
-      _meeting = value;
-    }
-    
-    public function set stunAndTurnServers(value: Object):void {
-      _stunAndTurnServers = value;
-    }
-    
-    public function get stunAndTurnServers():Object {
-      return _stunAndTurnServers;
-    }
-    
-    public function get meeting():Meeting {
-      return _meeting;
-    }
-    
-    public function set recording(record: Boolean):void {
-      _meeting.isRecording = record;
-    }
-    
-    public function set meetingMuted(muted:Boolean):void {
-      _meetingMuted = muted;
-    }
-    
-    public function get meetingMuted():Boolean {
-      return _meetingMuted;
-    }
-    
-    public function set modOnlyMessage(msg:String):void {
-      _modOnlyMessage = msg;
-    }
-    
-    public function get modOnlyMessage():String {
-      return _modOnlyMessage;
-    }
-  }
-}
-
-class MeetingModelSingletonEnforcer{}
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingStatus.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingStatus.as
index bf47cf2525..a5976a037d 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingStatus.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/MeetingStatus.as
@@ -1,23 +1,14 @@
 package org.bigbluebutton.core.model
 {
-	public class MeetingStatus
-	{
-		var recordingVoice: Boolean = false;
-		
-		var audioSettingsInited: Boolean = false;
-		var permissionsInited: Boolean = false;
-		var permissions = new Permissions();
-		var recording: Boolean = false;
-		var broadcastingRTMP: Boolean = false;
-		var muted: Boolean = false;
-		var meetingEnded: Boolean = false;
-		var meetingMuted: Boolean = false;
-		var guestPolicy: String = "ASK_MODERATOR";
-		var guestPolicySetBy: String = null;
-	
-			
-		public function MeetingStatus()
-		{
-		}
-	}
+  import org.bigbluebutton.core.vo.LockSettingsVO;
+  
+  public class MeetingStatus
+  {
+    public var permissions: Permission = new Permission();
+    public var isRecording: Boolean = false;
+    public var isMeetingMuted: Boolean = false;
+    public var guestPolicy: String = "ASK_MODERATOR";
+    public var guestPolicySetBy: String = null;
+    public var lockSettings:LockSettingsVO;
+  }
 }
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/MyStatus.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/MyStatus.as
new file mode 100755
index 0000000000..5da9713080
--- /dev/null
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/MyStatus.as
@@ -0,0 +1,47 @@
+/**
+ * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+ * 
+ * Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
+ *
+ * This program is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation; either version 3.0 of the License, or (at your option) any later
+ * version.
+ * 
+ * BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License along
+ * with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package org.bigbluebutton.core.model
+{
+ 
+  public class MyStatus {   
+    
+    // Flag to tell that user is in the process of leaving the meeting.
+    public var isLeavingFlag:Boolean = false;
+    
+    public var disableMyCam:Boolean = false;
+    public var disableMyMic:Boolean = false;
+    public var disableMyPrivateChat:Boolean = false;
+    public var disableMyPublicChat:Boolean = false;
+    public var lockedLayout:Boolean = false;
+    
+    public var iAskedToLogout:Boolean;
+    public var userEjectedFromMeeting:Boolean = false;
+    public var waitingForAcceptance: Boolean;
+    
+    public var userLocked: Boolean = false;
+    public var voiceJoined: Boolean = false;
+    public var voiceMuted: Boolean = false;
+    
+    public var isPresenter: Boolean = false;
+    public var myEmojiStatus: String = "none";
+    
+  }
+}
+
+
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/Permission.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/Permission.as
index a8d8e4f1fa..a21fcbf0c0 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/Permission.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/Permission.as
@@ -2,13 +2,13 @@ package org.bigbluebutton.core.model
 {
 	public class Permission
 	{
-		var disableCam: Boolean = false;
-		var disableMic: Boolean = false;
-		var disablePrivChat: Boolean = false;
-		var disablePubChat: Boolean = false;
-		var lockedLayout: Boolean = false;
-		var lockOnJoin: Boolean = false;
-		var lockOnJoinConfigurable: Boolean = false;
+		public var disableCam: Boolean = false;
+		public var disableMic: Boolean = false;
+		public var disablePrivChat: Boolean = false;
+		public var disablePubChat: Boolean = false;
+		public var lockedLayout: Boolean = false;
+		public var lockOnJoin: Boolean = false;
+		public var lockOnJoinConfigurable: Boolean = false;
 									
 		public function Permission()
 		{
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/Webcams.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/Webcams.as
index 70df6024ab..962995a083 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/Webcams.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/Webcams.as
@@ -1,8 +1,10 @@
 package org.bigbluebutton.core.model
 {
+	import mx.collections.ArrayCollection;
+
 	public class Webcams
 	{
-		private var _webcams:ArrayCollection = new ArrayCollection();
+		private var _webcams: ArrayCollection = new ArrayCollection();
 		
 		public function add(stream: MediaStream):void {
 			_webcams.addItem(stream);
@@ -22,7 +24,7 @@ package org.bigbluebutton.core.model
 			for (var i:int = 0; i < _webcams.length; i++) {
 				stream = _webcams.getItemAt(i) as MediaStream;
 				
-				if (stream.id == userId) {
+				if (stream.streamId == streamId) {
 					return {index:i, stream:stream};;
 				}
 			}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/int/MeetingInt.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/int/MeetingInt.as
new file mode 100755
index 0000000000..e75d90a72e
--- /dev/null
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/int/MeetingInt.as
@@ -0,0 +1,24 @@
+package org.bigbluebutton.core.model.int
+{
+	class MeetingInt
+	{
+		var name:String;
+		var internalId:String;
+		var externalId:String;
+		var isBreakout:Boolean;
+		var defaultAvatarUrl:String;
+		var voiceConference:String;
+		var dialNumber:String;
+		var recorded:Boolean;
+		var defaultLayout:String;
+		var welcomeMessage:String;
+		var modOnlyMessage:String;
+		var allowStartStopRecording:Boolean;
+		var webcamsOnlyForModerator:Boolean;
+		var metadata:Object = null;
+		
+		function MeetingInt()
+		{
+		}
+	}
+}
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/int/README.md b/bigbluebutton-client/src/org/bigbluebutton/core/model/int/README.md
new file mode 100755
index 0000000000..5f5fa24c63
--- /dev/null
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/int/README.md
@@ -0,0 +1 @@
+Internal classes so we can hide setters of these classes.
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Guest.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Guest.as
index 0451ecf140..6ecece34a5 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Guest.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Guest.as
@@ -2,10 +2,10 @@ package org.bigbluebutton.core.model.users
 {
 
 	public class Guest {
-		var intId: String;
-		var extId: String;
-		var name: String;
-		var role: String;
-		var authed: Boolean;
+		public var intId: String;
+		public var extId: String;
+		public var name: String;
+		public var role: String;
+		public var authed: Boolean;
 	}
 }
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/GuestPolicy.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/GuestPolicy.as
index 66854854ba..edef1e2397 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/GuestPolicy.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/GuestPolicy.as
@@ -1,77 +1,74 @@
-package org.bigbluebutton.core.model.users
-{
- 
-  public class GuestPolicy
-  {
-
-    private var _guestPolicy: String;
-   
-    private var _guests:ArrayCollection = new ArrayCollection();
-           
-    public function getGuestsWaitingForApproval(): ArrayCollection {
-      new ArrayCollection(ObjectUtil.copy(_guests.source))
-    }
-
-    public function add(user: Guest):void {
-      _guests.addItem(user);
-    }
-    
-	public function remove(userId: String):Guest {
-      var index:int = getIndex(userId);
-      if (index >= 0) {
-        return _guests.removeItemAt(index) as Guest;
-      }
-      
-      return null;
-    }
-    
-	public function getUserAndIndex(userId: String):Object {
-      var user:Guest;
-      for (var i:int = 0; i < _guests.length; i++) {
-        user = _guests.getItemAt(i) as Guest;
-        
-        if (user.id == userId) {
-          return {index:i, user:user};;
-        }
-      }
-      
-      return null;      
-    }
-    
-	public function getUser(userId:String):Guest {
-      var user:Guest;
-      
-      for (var i:int = 0; i < _guests.length; i++) {
-        user = _guests.getItemAt(i) as Guest;
-        
-        if (user.id == userId) {
-          return user;
-        }
-      }				
-      
-      return null;
-    }
-    
-	public function getIndex(userId: String):int {
-      var user:Guest;
-      for (var i:int = 0; i < _guests.length; i++) {
-        user = _guests.getItemAt(i) as Guest;
-        
-        if (user.id == userId) {
-          return i;
-        }
-      }
-      
-      return -1;
-    }
-        
-    public function userJoined(vu: Guest):void {
-      add(vu);    
-    }
-
-    public function userLeft(intId: String):Guest {
-      return remove(intId);
-    }
-  
-  }
+package org.bigbluebutton.core.model.users
+{
+	import mx.collections.ArrayCollection;
+ 
+  public class GuestPolicy
+  {
+
+    private var _guestPolicy: String;
+   
+    private var _guests:ArrayCollection = new ArrayCollection();
+           
+    public function add(user: Guest):void {
+      _guests.addItem(user);
+    }
+    
+	public function remove(userId: String):Guest {
+      var index:int = getIndex(userId);
+      if (index >= 0) {
+        return _guests.removeItemAt(index) as Guest;
+      }
+      
+      return null;
+    }
+    
+	public function getUserAndIndex(userId: String):Object {
+      var user:Guest;
+      for (var i:int = 0; i < _guests.length; i++) {
+        user = _guests.getItemAt(i) as Guest;
+        
+        if (user.intId == userId) {
+          return {index:i, user:user};;
+        }
+      }
+      
+      return null;      
+    }
+    
+	public function getUser(userId:String):Guest {
+      var user:Guest;
+      
+      for (var i:int = 0; i < _guests.length; i++) {
+        user = _guests.getItemAt(i) as Guest;
+        
+        if (user.intId == userId) {
+          return user;
+        }
+      }				
+      
+      return null;
+    }
+    
+	public function getIndex(userId: String):int {
+      var user:Guest;
+      for (var i:int = 0; i < _guests.length; i++) {
+        user = _guests.getItemAt(i) as Guest;
+        
+        if (user.intId == userId) {
+          return i;
+        }
+      }
+      
+      return -1;
+    }
+        
+    public function userJoined(vu: Guest):void {
+      add(vu);    
+    }
+
+    public function userLeft(intId: String):Guest {
+      return remove(intId);
+    }
+  
+  }
 }
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/User2x.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/User2x.as
index 7dbb2c9547..e3176bb58d 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/User2x.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/User2x.as
@@ -2,16 +2,16 @@ package org.bigbluebutton.core.model.users
 {
 
 	public class User2x {
-		var intId: String;
-		var extId: String;
-		var name: String;
-		var role: String;
-		var guest: Boolean;
-		var authed: Boolean;
-		var waitingForAcceptance: Boolean;
-		var emoji: String;
-		var locked: Boolean;
-		var presenter: Boolean;
-		var avatar: String;
+		public var intId: String;
+		public var extId: String;
+		public var name: String;
+		public var role: String;
+		public var guest: Boolean;
+		public var authed: Boolean;
+		public var waitingForAcceptance: Boolean;
+		public var emoji: String;
+		public var locked: Boolean;
+		public var presenter: Boolean;
+		public var avatar: String;
 	}
 }
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Users2x.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Users2x.as
index a5f0082db4..3886e5ebc9 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Users2x.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/Users2x.as
@@ -1,5 +1,6 @@
 package org.bigbluebutton.core.model.users
 {
+	import mx.collections.ArrayCollection;
  
   public class Users2x
   {
@@ -24,7 +25,7 @@ package org.bigbluebutton.core.model.users
       for (var i:int = 0; i < _users.length; i++) {
         user = _users.getItemAt(i) as User2x;
         
-        if (user.id == userId) {
+        if (user.intId == userId) {
           return {index:i, user:user};;
         }
       }
@@ -38,7 +39,7 @@ package org.bigbluebutton.core.model.users
       for (var i:int = 0; i < _users.length; i++) {
         user = _users.getItemAt(i) as User2x;
         
-        if (user.id == userId) {
+        if (user.intId == userId) {
           return user;
         }
       }				
@@ -51,7 +52,7 @@ package org.bigbluebutton.core.model.users
       for (var i:int = 0; i < _users.length; i++) {
         user = _users.getItemAt(i) as User2x;
         
-        if (user.id == userId) {
+        if (user.intId == userId) {
           return i;
         }
       }
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/UsersModel.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/UsersModel.as
index bc3b1dff9a..67db83867c 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/UsersModel.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/UsersModel.as
@@ -9,8 +9,7 @@ package org.bigbluebutton.core.model.users
   public class UsersModel
   {
     private static var instance:UsersModel = null;
-    private var _me:Me;
-    
+   
     private var _users:ArrayCollection = new ArrayCollection();
     
     public function UsersModel(enforcer: UsersModelSingletonEnforcer) {
@@ -25,15 +24,7 @@ package org.bigbluebutton.core.model.users
       }
       return instance;
     }
-    
-    public function set me(value: Me):void {
-      _me = value;
-    }
-    
-    public function get me():Me {
-      return _me;
-    }
-    
+        
     private function add(user: UserVO):void {
       _users.addItem(user);
     }
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUser2x.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUser2x.as
index 082e3aa859..e20a3c89df 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUser2x.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUser2x.as
@@ -2,13 +2,13 @@ package org.bigbluebutton.core.model.users
 {
 
 	public class VoiceUser2x {
-		var intId: String;
-		var voiceUserId: String;
-		var callingWith: String;
-		var callerName: String;
-  		var callerNum: String;
-  		var muted: Boolean;
-  		var talking: Boolean;
-  		var listenOnly: Boolean;
+		public var intId: String;
+		public var voiceUserId: String;
+		public var callingWith: String;
+		public var callerName: String;
+		public var callerNum: String;
+		public var muted: Boolean;
+		public var talking: Boolean;
+		public var listenOnly: Boolean;
 	}
 }
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUsers2x.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUsers2x.as
index f10facd946..f89377f9fd 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUsers2x.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/users/VoiceUsers2x.as
@@ -2,8 +2,6 @@ package org.bigbluebutton.core.model.users
 {
   import mx.collections.ArrayCollection;
   
-  import org.bigbluebutton.core.model.Me;
-
   public class VoiceUsers2x
   {
    
@@ -27,7 +25,7 @@ package org.bigbluebutton.core.model.users
       for (var i:int = 0; i < _users.length; i++) {
         user = _users.getItemAt(i) as VoiceUser2x;
         
-        if (user.id == userId) {
+        if (user.intId == userId) {
           return {index:i, user:user};;
         }
       }
@@ -41,7 +39,7 @@ package org.bigbluebutton.core.model.users
       for (var i:int = 0; i < _users.length; i++) {
         user = _users.getItemAt(i) as VoiceUser2x;
         
-        if (user.id == userId) {
+        if (user.intId == userId) {
           return user;
         }
       }				
@@ -54,7 +52,7 @@ package org.bigbluebutton.core.model.users
       for (var i:int = 0; i < _users.length; i++) {
         user = _users.getItemAt(i) as VoiceUser2x;
         
-        if (user.id == userId) {
+        if (user.intId == userId) {
           return i;
         }
       }
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCallbacks.as b/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCallbacks.as
index a6e4616deb..d0b4cbf03f 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCallbacks.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCallbacks.as
@@ -36,7 +36,6 @@ package org.bigbluebutton.main.api
   import org.bigbluebutton.core.events.GetMyUserInfoRequestEvent;
   import org.bigbluebutton.core.events.IsUserPublishingCamRequest;
   import org.bigbluebutton.core.events.VoiceConfEvent;
-  import org.bigbluebutton.core.managers.UserManager;
   import org.bigbluebutton.core.vo.CameraSettingsVO;
   import org.bigbluebutton.main.events.BBBEvent;
   import org.bigbluebutton.main.model.users.events.EmojiStatusEvent;
@@ -252,11 +251,11 @@ package org.bigbluebutton.main.api
     }
     
     private function handleGetExternalMeetingID():String {
-      return UserManager.getInstance().getConference().externalMeetingID;
+      return UsersUtil.getExternalMeetingID();
     }
 
     private function handleGetInternalMeetingID():String {
-      return UserManager.getInstance().getConference().internalMeetingID;
+      return UsersUtil.getInternalMeetingID();
     }
     
     private function handleGetSessionToken():String {
@@ -352,20 +351,20 @@ package org.bigbluebutton.main.api
     
     private function handleMuteMeRequest():void {
       var e:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_USER);
-      e.userid = UserManager.getInstance().getConference().getMyUserId();
+      e.userid = UsersUtil.getMyUserID();
       e.mute = true;
       _dispatcher.dispatchEvent(e);
     }
 
     private function handleUnmuteMeRequest():void {
       var e:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_USER);
-      e.userid = UserManager.getInstance().getConference().getMyUserId();
+      e.userid = UsersUtil.getMyUserID();
       e.mute = false;
       _dispatcher.dispatchEvent(e);
     }
     
     private function handleGetMyRoleRequestSync():String {
-      return UserManager.getInstance().getConference().whatsMyRole();
+      return UsersUtil.getMyRole();
     }
     
     private function handleGetMyRoleRequestAsynch():void {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCalls.as b/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCalls.as
index c779cfc48e..ec32f34963 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCalls.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/api/ExternalApiCalls.as
@@ -220,7 +220,7 @@ package org.bigbluebutton.main.api
     public function handleGetMyRoleResponse(event:CoreEvent):void {
       var payload:Object = new Object();
       payload.eventName = EventConstants.GET_MY_ROLE_RESP;
-      payload.myRole = UserManager.getInstance().getConference().whatsMyRole();
+      payload.myRole = UsersUtil.getMyRole();
       broadcastEvent(payload);        
     }
 
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/events/ResponseModeratorEvent.as b/bigbluebutton-client/src/org/bigbluebutton/main/events/ResponseModeratorEvent.as
index f10d2a30d4..755a736606 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/events/ResponseModeratorEvent.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/events/ResponseModeratorEvent.as
@@ -20,10 +20,6 @@ package org.bigbluebutton.main.events
 {
 	import flash.events.Event;
 
-	import org.bigbluebutton.main.model.ConferenceParameters;
-	import org.bigbluebutton.main.model.users.BBBUser;
-	import org.bigbluebutton.main.model.ConferenceParameters;
-
 	public class ResponseModeratorEvent extends Event
 	{
 		public static const RESPONSE:String = "Response";
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/events/SuccessfulLoginEvent.as b/bigbluebutton-client/src/org/bigbluebutton/main/events/SuccessfulLoginEvent.as
index 31103a5781..17a55f3f36 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/events/SuccessfulLoginEvent.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/events/SuccessfulLoginEvent.as
@@ -19,14 +19,11 @@
 package org.bigbluebutton.main.events
 {
 	import flash.events.Event;	
-	import org.bigbluebutton.main.model.ConferenceParameters;
 
 	public class SuccessfulLoginEvent extends Event
 	{
 		public static const USER_LOGGED_IN:String = "SuccessfullyLoggedIn";
-		
-		public var conferenceParameters:ConferenceParameters;
-		
+				
 		public function SuccessfulLoginEvent(type:String)
 		{
 			super(type, true, false);
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/maps/ApplicationEventMap.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/maps/ApplicationEventMap.mxml
old mode 100644
new mode 100755
index 6c1396e426..01158bddc2
--- a/bigbluebutton-client/src/org/bigbluebutton/main/maps/ApplicationEventMap.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/maps/ApplicationEventMap.mxml
@@ -51,7 +51,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 		</EventHandlers>
 	
 	  <EventHandlers type="{SuccessfulLoginEvent.USER_LOGGED_IN}" >
-	    <MethodInvoker generator="{ModulesProxy}" method="loadAllModules" arguments="{event.conferenceParameters}" />
+	    <MethodInvoker generator="{ModulesProxy}" method="loadAllModules" />
 	  </EventHandlers>
 	  
 		<EventHandlers type="{LogoutEvent.USER_LOGGED_OUT}" >
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/ConferenceParameters.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/ConferenceParameters.as
deleted file mode 100755
index be3fe0d947..0000000000
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/ConferenceParameters.as
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
- *
- * Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
- *
- * This program is free software; you can redistribute it and/or modify it under the
- * terms of the GNU Lesser General Public License as published by the Free Software
- * Foundation; either version 3.0 of the License, or (at your option) any later
- * version.
- *
- * BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License along
- * with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
- *
- */
-package org.bigbluebutton.main.model {
-	
-	/**
-	 * The ConferenceParameters class holds attributes that define the conference. You can access them in your module through the
-	 * attributes property that is passed to your IBigBlueButtonModule instance on startup.
-	 *
-	 */
-	public class ConferenceParameters {
-		public var meetingName:String;
-		
-		public var externMeetingID:String;
-		
-		/**
-		 * True if the room is a breakout room.
-		 */
-		public var isBreakout:Boolean;
-		
-		/**
-		 * The name of the conference
-		 */
-		public var conference:String;
-		
-		/**
-		 * The username of the local user
-		 */
-		public var username:String;
-		
-		public var avatarURL:String;
-		/**
-		 * The role of the local user. Could be MODERATOR or VIEWER
-		 */
-		public var role:String;
-		
-		/**
-		 * The room unique id, as specified in the API /create call.
-		 */
-		public var room:String;
-		
-		/**
-		 * Voice conference bridge for the client
-		 */
-		public var webvoiceconf:String;
-		
-		/**
-		 * Voice conference bridge that external SIP clients use. Usually the same as webvoiceconf
-		 */
-		public var voicebridge:String;
-
-		/**
-		 * Flag used to enter as a guest
-		 */
-		public var guest:Boolean;
-		
-		/**
-		 *  The welcome string, as passed in through the API /create call.
-		 */
-		public var welcome:String;
-		
-		public var meetingID:String;
-		
-		/**
-		 * External unique user id.
-		 */
-		public var externUserID:String;
-		
-		/**
-		 * Internal unique user id.
-		 */
-		public var internalUserID:String;
-		
-		public var logoutUrl:String;
-		
-		/**
-		 * The unique userid internal to bbb-client.
-		 */
-		public var userid:String;
-		
-		public var record:Boolean;
-		
-		/**
-		 * Flag used to start room as muted
-		 * */
-		public var muteOnStart:Boolean;
-		
-		/**
-		 * Parameter used to send initial lock settings
-		 * */
-		public var lockSettings:Object;
-		
-		public var authToken:String;
-	}
-}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleDescriptor.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleDescriptor.as
old mode 100644
new mode 100755
index 5a1cb162dd..e73f43a79f
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleDescriptor.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleDescriptor.as
@@ -31,8 +31,8 @@ package org.bigbluebutton.main.model.modules
 	import org.as3commons.logging.api.getClassLogger;
 	import org.bigbluebutton.common.IBigBlueButtonModule;
 	import org.bigbluebutton.core.UsersUtil;
-	import org.bigbluebutton.main.model.ConferenceParameters;
-	
+	import org.bigbluebutton.core.model.LiveMeeting;
+
 	public class ModuleDescriptor
 	{
 		private static const LOGGER:ILogger = getClassLogger(ModuleDescriptor);      
@@ -168,18 +168,26 @@ package org.bigbluebutton.main.model.modules
 			}
 		}
 		
-		public function loadConfigAttributes(conferenceParameters:ConferenceParameters, protocol:String):void{
-			addAttribute("conference", conferenceParameters.conference);
-			addAttribute("username", conferenceParameters.username);
-			addAttribute("userrole", conferenceParameters.role);
-			addAttribute("room", conferenceParameters.room);
-			addAttribute("userid", conferenceParameters.userid);
-			addAttribute("voicebridge", conferenceParameters.voicebridge);
-			addAttribute("webvoiceconf", conferenceParameters.webvoiceconf);
-			addAttribute("welcome", conferenceParameters.welcome);
-			addAttribute("externUserID", conferenceParameters.externUserID);
-			addAttribute("internalUserID", conferenceParameters.internalUserID);
-			addAttribute("meetingID", conferenceParameters.meetingID);
+		public function loadConfigAttributes(protocol:String):void{
+      var intMeetingId: String = LiveMeeting.inst().meeting.internalId;
+      var userName: String = LiveMeeting.inst().me.name;
+      var role: String = LiveMeeting.inst().me.role;
+      var intUserId: String = LiveMeeting.inst().me.id;
+      var voiceConf: String = LiveMeeting.inst().meeting.voiceConf;
+      var welcome: String = LiveMeeting.inst().me.welcome;
+      var extUserId: String = LiveMeeting.inst().me.externalId;
+ 
+			addAttribute("conference", intMeetingId);
+			addAttribute("username", userName);
+			addAttribute("userrole", role);
+			addAttribute("room", intMeetingId);
+			addAttribute("userid", intUserId);
+			addAttribute("voicebridge", voiceConf);
+			addAttribute("webvoiceconf", voiceConf);
+			addAttribute("welcome", welcome);
+			addAttribute("externUserID", extUserId);
+			addAttribute("internalUserID", intUserId);
+			addAttribute("meetingID", intMeetingId);
 			addAttribute("protocol", protocol);
 			useProtocol(protocol);
 		}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleManager.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleManager.as
index fa7ba03b55..5031062b7f 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleManager.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleManager.as
@@ -28,11 +28,9 @@ package org.bigbluebutton.main.model.modules
 	import org.as3commons.logging.api.ILogger;
 	import org.as3commons.logging.api.getClassLogger;
 	import org.bigbluebutton.common.IBigBlueButtonModule;
-	import org.bigbluebutton.common.Role;
 	import org.bigbluebutton.core.BBB;
 	import org.bigbluebutton.core.Options;
 	import org.bigbluebutton.main.events.AppVersionEvent;
-	import org.bigbluebutton.main.model.ConferenceParameters;
 	import org.bigbluebutton.main.model.options.PortTestOptions;
 	
 	public class ModuleManager
@@ -47,7 +45,6 @@ package org.bigbluebutton.main.model.modules
 		private var sorted:ArrayCollection; //The array of modules sorted by dependencies, with least dependent first
 		
 		private var _applicationDomain:ApplicationDomain;
-		private var conferenceParameters:ConferenceParameters;
 		
 		private var modulesDispatcher:ModulesDispatcher;
 		
@@ -107,7 +104,7 @@ package org.bigbluebutton.main.model.modules
 				if (BBB.initConnectionManager().isTunnelling) {
 					protocol = "rtmpt";
 				}
-				m.loadConfigAttributes(conferenceParameters, protocol);
+				m.loadConfigAttributes(protocol);
 				bbb.start(m.attributes);
 			}
 		}
@@ -169,10 +166,8 @@ package org.bigbluebutton.main.model.modules
 			modulesDispatcher.sendStartUserServicesEvent();
 		}
 		
-		public function loadAllModules(parameters:ConferenceParameters):void{
+		public function loadAllModules():void{
 			modulesDispatcher.sendModuleLoadingStartedEvent();
-			conferenceParameters = parameters;
-			Role.setRole(parameters.role);
 			
 			for (var i:int = 0; i<sorted.length; i++){
 				var m:ModuleDescriptor = sorted.getItemAt(i) as ModuleDescriptor;
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesProxy.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesProxy.as
old mode 100644
new mode 100755
index 0e0edb2af5..ab37b817a9
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesProxy.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesProxy.as
@@ -21,7 +21,6 @@ package org.bigbluebutton.main.model.modules
 	import org.as3commons.logging.api.ILogger;
 	import org.as3commons.logging.api.getClassLogger;
 	import org.bigbluebutton.core.UsersUtil;
-	import org.bigbluebutton.main.model.ConferenceParameters;
 	import org.bigbluebutton.main.model.PortTestProxy;
 	
 	public class ModulesProxy {
@@ -91,8 +90,8 @@ package org.bigbluebutton.main.model.modules
 			}
 		}
 
-		public function loadAllModules(params:ConferenceParameters):void{
-			modulesManager.loadAllModules(params);
+		public function loadAllModules():void{
+			modulesManager.loadAllModules();
 		}
 		
 		public function handleLogout():void {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as
index 2fee949f0f..5ac06f98ac 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/BBBUser.as
@@ -1,433 +1,435 @@
-/**
-* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
-* 
-* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
-*
-* This program is free software; you can redistribute it and/or modify it under the
-* terms of the GNU Lesser General Public License as published by the Free Software
-* Foundation; either version 3.0 of the License, or (at your option) any later
-* version.
-* 
-* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
-* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public License along
-* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
-*
-*/
-package org.bigbluebutton.main.model.users
-{
-	import com.asfusion.mate.events.Dispatcher;
-	
-	import flash.events.Event;
-	
-	import org.as3commons.lang.ArrayUtils;
-	import org.as3commons.logging.api.ILogger;
-	import org.as3commons.logging.api.getClassLogger;
-	import org.bigbluebutton.common.Role;
-	import org.bigbluebutton.core.UsersUtil;
-	import org.bigbluebutton.core.events.LockControlEvent;
-	import org.bigbluebutton.core.events.VoiceConfEvent;
-	import org.bigbluebutton.core.managers.UserManager;
-	import org.bigbluebutton.core.vo.LockSettingsVO;
-	import org.bigbluebutton.main.model.users.events.StreamStartedEvent;
-	import org.bigbluebutton.modules.videoconf.events.ClosePublishWindowEvent;
-	import org.bigbluebutton.util.i18n.ResourceUtil;
-
-	public class BBBUser {
-		private static const LOGGER:ILogger = getClassLogger(BBBUser);
-
-		public static const MODERATOR:String = "MODERATOR";
-		public static const VIEWER:String = "VIEWER";
-		public static const PRESENTER:String = "PRESENTER";
-		
-    // Flag to tell that user is in the process of leaving the meeting.
-    public var isLeavingFlag:Boolean = false;
-    
-		[Bindable] public var me:Boolean = false;
-		[Bindable] public var userID:String = "UNKNOWN USER";
-    	[Bindable] public var externUserID:String = "UNKNOWN USER";
-		[Bindable] public var name:String;
-		[Bindable] public var talking:Boolean = false;
-		[Bindable] public var phoneUser:Boolean = false;
-    	[Bindable] public var listenOnly:Boolean = false;
-    
-		[Bindable] public var disableMyCam:Boolean = false;
-		[Bindable] public var disableMyMic:Boolean = false;
-		[Bindable] public var disableMyPrivateChat:Boolean = false;
-		[Bindable] public var disableMyPublicChat:Boolean = false;
-    	[Bindable] public var lockedLayout:Boolean = false;
-		[Bindable] public var avatarURL:String="";
-    
-		[Bindable] public var guest:Boolean = false;
-		[Bindable] public var waitingForAcceptance:Boolean = false;
-
-		[Bindable]
-		public function get hasStream():Boolean {
-			return streamNames.length > 0;
-		}
-		public function set hasStream(s:Boolean):void {
-			throw new Error("hasStream cannot be set. It is derived directly from streamName");
-		}
-
-        [Bindable] private var _viewingStream:Array = new Array();
-
-        [Bindable]
-        public function get viewingStream():Array {
-        	return _viewingStream;
-        }
-        public function set viewingStream(v:Array):void {
-            throw new Error("Please use the helpers addViewingStream or removeViewingStream to handle viewingStream");
-        }
-        public function addViewingStream(streamName:String):Boolean {
-            if (isViewingStream(streamName)) {
-                return false;
-            }
-
-            _viewingStream.push(streamName);
-            return true;
-        }
-        public function removeViewingStream(streamName:String):Boolean {
-            if (!isViewingStream(streamName)) {
-                return false;
-            }
-
-            _viewingStream = _viewingStream.filter(function(item:*, index:int, array:Array):Boolean { return item != streamName; });
-            return true;
-        }
-        private function isViewingStream(streamName:String):Boolean {
-            return _viewingStream.some(function(item:*, index:int, array:Array):Boolean { return item == streamName; });
-        }
-        public function isViewingAllStreams():Boolean {
-            return _viewingStream.length == streamNames.length;
-        }
-
-		[Bindable] public var streamNames:Array = new Array();
-
-		[Bindable]
-		public function get streamName():String {
-			var streams:String = "";
-			for each(var stream:String in streamNames) {
-				streams = streams + stream + "|";
-			}
-			//Remove last |
-			streams = streams.slice(0, streams.length-1);
-			return streams;
-		}
-
-		private function hasThisStream(streamName:String):Boolean {
-			return streamNames.some(function(item:*, index:int, array:Array):Boolean { return item == streamName; });
-		}
-
-		public function set streamName(streamNames:String):void {
-			if(streamNames) {
-				var streamNamesList:Array = streamNames.split("|");
-				for each(var streamName:String in streamNamesList) {
-					sharedWebcam(streamName);
-				}
-			}
-		}
-
-		private var _presenter:Boolean = false;
-		[Bindable] 
-		public function get presenter():Boolean {
-			return _presenter;
-		}
-		public function set presenter(p:Boolean):void {
-			_presenter = p;
-			verifyUserStatus();
-		}
-		
-		public var emojiStatusTime:Date;
-		private var _emojiStatus:String = "none";
-		
-		[Bindable("emojiStatusChange")]
-		public function get emojiStatus():String {
-			return _emojiStatus;
-		}
-		public function set emojiStatus(r:String):void {
-			_emojiStatus = r;
-			emojiStatusTime = (r ? new Date() : null);
-			verifyUserStatus();
-			dispatchEvent(new Event("emojiStatusChange")); 
-		}
-		
-		[Bindable("emojiStatusChange")]
-		public function get hasEmojiStatus():Boolean {
-			return _emojiStatus != null && _emojiStatus != "none" && _emojiStatus != "null";
-		}
-		
-		private var _role:String = Role.VIEWER;
-		[Bindable] 
-		public function get role():String {
-			return _role;
-		}
-		public function set role(r:String):void {
-			_role = r;
-			verifyUserStatus();
-		}
-		
-		[Bindable] public var room:String = "";
-		[Bindable] public var authToken:String = "";
-		[Bindable] public var selected:Boolean = false;
-		
-		private var _voiceMuted:Boolean = false;
-		[Bindable]
-		public function get voiceMuted():Boolean {
-			return _voiceMuted;
-		}
-		public function set voiceMuted(v:Boolean):void {
-			_voiceMuted = v;
-			verifyMedia();
-		}
-		
-		private var _voiceJoined:Boolean = false;
-		[Bindable] 
-		public function get voiceJoined():Boolean {
-			return _voiceJoined;
-		}
-		public function set voiceJoined(v:Boolean):void {
-			_voiceJoined = v;
-			verifyMedia();
-		}
-		
-		[Bindable] public var userLocked:Boolean = false;
-		[Bindable] public var status:String = "";
-		[Bindable] public var customdata:Object = {};
-		
-		/*
-		 * This variable is for accessibility for the Users Window. It can't be manually set
-		 * and only changes when one of the relevant status variables changes. Use the verifyUserStatus
-		 * method to update the value.
-		 *			Chad
-		 */
-		private var _userStatus:String = "";
-		[Bindable] 
-		public function get userStatus():String {
-			return _userStatus;
-		}
-		private function set userStatus(s:String):void {}
-		private function verifyUserStatus():void {
-			if (presenter)
-				_userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.presenter');
-			else if (role == Role.MODERATOR)
-				_userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.moderator');
-			else if (hasEmojiStatus)
-				_userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.' + _emojiStatus);
-			else
-				_userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.viewer');
-		}
-		
-		public function amIGuest():Boolean {
-			return guest;
-		}
-
-		/*
-		* This variable is for accessibility for the Users Window. It can't be manually set
-		* and only changes when one of the relevant media variables changes. Use the verifyMedia
-		* method to update the value.
-		*			Chad
-		*/
-		private var _media:String = "";
-		[Bindable] 
-		public function get media():String {
-			return _media;
-		}
-		private function set media(m:String):void {}
-		private function verifyMedia():void {
-			_media = (hasStream ? ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.webcam') + " " : "") + 
-					(!voiceJoined ? ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.noAudio') : 
-									(voiceMuted ? ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.micOff') : 
-												  ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.micOn')));
-		}
-		 
-		private var _status:StatusCollection = new StatusCollection();
-
-		public function buildStatus():void {
-			var showingWebcam:String="";
-			var isPresenter:String="";
-			var hasEmoji:String = "";
-			if (hasStream)
-				showingWebcam=ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.streamIcon.toolTip');
-			if (presenter)
-				isPresenter=ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.presIcon.toolTip');
-			if (hasEmojiStatus)
-				hasEmoji = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.'+ emojiStatus +'.toolTip');
-
-			status = showingWebcam + isPresenter + hasEmoji;
-		}
-	
-		public function addStatus(status:Status):void {
-			_status.addStatus(status);
-		}
-		
-    public function userEmojiStatus(emoji: String):void {
-      emojiStatus = emoji;
-      if (me) {
-        UserManager.getInstance().getConference().myEmojiStatus = emoji;
-      }
-      buildStatus();
-    }
-    
-    public function sharedWebcam(stream: String):void {
-      if(stream && stream != "" && !hasThisStream(stream)) {
-          streamNames.push(stream);
-          sendStreamStartedEvent(stream);
-      }
-      buildStatus();
-      verifyMedia();
-    }
-    
-    public function unsharedWebcam(stream: String):void {
-      streamNames = streamNames.filter(function(item:*, index:int, array:Array):Boolean { return item != stream });
-      buildStatus();
-      verifyMedia();
-    }
-    
-    public function presenterStatusChanged(presenter: Boolean):void {
-      this.presenter = presenter;
-      buildStatus();
-    }
-    
-    public function lockStatusChanged(locked: Boolean):void {
-		userLocked = locked;
-		applyLockSettings();
-		buildStatus();
-    }
-
-		public function changeStatus(status:Status):void {
-			switch (status.name) {
-				case "presenter":
-					presenter=(status.value.toString().toUpperCase() == "TRUE") ? true : false;
-					break;
-				case "hasStream":
-					var streamInfo:Array=String(status.value).split(/,/);
-					/**
-					 * Cannot use this statement as new Boolean(expression)
-					 * return true if the expression is a non-empty string not
-					 * when the string equals "true". See Boolean class def.
-					 *
-					 * hasStream = new Boolean(String(streamInfo[0]));
-					 */
-					var streamNameInfo:Array=String(streamInfo[1]).split(/=/);
-					streamName=streamNameInfo[1];
-					break;
-				// @FIXME : check the coming status from the server
-				case "emojiStatus":
-					emojiStatus = status.value.toString();
-					if (me) {
-						UserManager.getInstance().getConference().myEmojiStatus=status.value.toString();
-					}
-					break;
-			}
-			buildStatus();
-		}
-		
-		public function removeStatus(name:String):void {
-			_status.removeStatus(name);
-		}
-		
-		public function getStatus(name:String):Status {
-			return _status.getStatus(name);
-		}
-
-		private var _breakoutRooms : Array = [];
-		
-		[Bindable("displayNameChange")]
-		public function get displayName():String {
-			if (ArrayUtils.isEmpty(_breakoutRooms)) {
-				return name;
-			} else {
-				return "[" + _breakoutRooms.join(",") + "] " + name;
-			}
-		}
-
-		public function get breakoutRooms():Array {
-			return _breakoutRooms;
-		}
-
-		public function set breakoutRooms(rooms:Array):void {
-			_breakoutRooms = rooms;
-			dispatchEvent(new Event("displayNameChange"));
-		}
-
-		public function addBreakoutRoom(roomNumber:int):void {
-			if (!ArrayUtils.contains(_breakoutRooms, roomNumber)) {
-				_breakoutRooms.push(roomNumber);
-				dispatchEvent(new Event("displayNameChange"));
-			}
-		}
-
-		public function removeBreakoutRoom(roomNumber:int):void {
-			_breakoutRooms.splice(_breakoutRooms.indexOf(roomNumber), 1);
-			dispatchEvent(new Event("displayNameChange"));
-		}
-
-		public static function copy(user:BBBUser):BBBUser {
-			var n:BBBUser = new BBBUser();
-			n.authToken = user.authToken;
-			n.me = user.me;
-			n.userID = user.userID;
-			n.externUserID = user.externUserID;
-			n.name = user.name;
-            n._viewingStream = user._viewingStream;
-			n.streamNames = user.streamNames;
-			n.presenter = user.presenter;
-			n.emojiStatus = user.emojiStatus;
-			n.role = user.role;	
-			n.room = user.room;
-			n.customdata = user.customdata;
-			n.media = user.media;
-			n.phoneUser = user.phoneUser;
-			n.talking = user.talking;
-			n.userStatus = user.userStatus;
-			n.voiceJoined = user.voiceJoined;
-			n.userLocked = user.userLocked;
-			n.voiceMuted = user.voiceMuted;
-			n.disableMyCam = user.disableMyCam;
-			n.disableMyMic = user.disableMyMic;
-			n.disableMyPrivateChat = user.disableMyPrivateChat;
-			n.disableMyPublicChat = user.disableMyPublicChat;
-			n.breakoutRooms = user.breakoutRooms.concat(); // concatenate an array with nothing to deliver a new array.
-			n.guest = user.guest;
-			return n;		
-		}
-		
-		private function sendStreamStartedEvent(stream: String):void{
-			var dispatcher:Dispatcher = new Dispatcher();
-			dispatcher.dispatchEvent(new StreamStartedEvent(userID, name, stream));
-		}
-		
-		public function applyLockSettings():void {
-			var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
-			var amNotModerator:Boolean = !UsersUtil.amIModerator();
-			var amNotPresenter:Boolean = !UsersUtil.amIPresenter();
-			var lockAppliesToMe:Boolean = me && amNotModerator && amNotPresenter && userLocked;
-			
-			disableMyCam = lockAppliesToMe && lockSettings.getDisableCam();
-			disableMyMic = lockAppliesToMe && lockSettings.getDisableMic();
-			disableMyPrivateChat = lockAppliesToMe && lockSettings.getDisablePrivateChat();
-			disableMyPublicChat = lockAppliesToMe && lockSettings.getDisablePublicChat();
-			lockedLayout = lockAppliesToMe && lockSettings.getLockedLayout();
-			
-			var dispatcher:Dispatcher = new Dispatcher();
-			dispatcher.dispatchEvent(new LockControlEvent(LockControlEvent.CHANGED_LOCK_SETTINGS));
-			
-			
-			if (lockAppliesToMe) {
-				//If it's sharing webcam, stop it
-				if (disableMyCam && hasStream){
-					dispatcher.dispatchEvent(new ClosePublishWindowEvent());
-				}
-				//If it's sharing microphone, mute it
-				if (disableMyMic && !UserManager.getInstance().getConference().isMyVoiceMuted()) {
-					var e:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_USER);
-					e.userid = UserManager.getInstance().getConference().getMyUserId();
-					e.mute = true;
-					dispatcher.dispatchEvent(e);
-				}
-			}
-		}
-	}
-}
+/**
+ * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+ * 
+ * Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
+ *
+ * This program is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation; either version 3.0 of the License, or (at your option) any later
+ * version.
+ * 
+ * BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License along
+ * with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package org.bigbluebutton.main.model.users
+{
+  import com.asfusion.mate.events.Dispatcher;
+  
+  import flash.events.Event;
+  
+  import org.as3commons.lang.ArrayUtils;
+  import org.as3commons.logging.api.ILogger;
+  import org.as3commons.logging.api.getClassLogger;
+  import org.bigbluebutton.common.Role;
+  import org.bigbluebutton.core.UsersUtil;
+  import org.bigbluebutton.core.events.LockControlEvent;
+  import org.bigbluebutton.core.events.VoiceConfEvent;
+  import org.bigbluebutton.core.managers.UserManager;
+  import org.bigbluebutton.core.vo.LockSettingsVO;
+  import org.bigbluebutton.main.model.users.events.StreamStartedEvent;
+  import org.bigbluebutton.modules.videoconf.events.ClosePublishWindowEvent;
+  import org.bigbluebutton.util.i18n.ResourceUtil;
+  
+  public class BBBUser {
+    private static const LOGGER:ILogger = getClassLogger(BBBUser);
+    
+    public static const MODERATOR:String = "MODERATOR";
+    public static const VIEWER:String = "VIEWER";
+    public static const PRESENTER:String = "PRESENTER";
+    
+    public var dispatcher:Dispatcher = new Dispatcher();
+    
+    // Flag to tell that user is in the process of leaving the meeting.
+    public var isLeavingFlag:Boolean = false;
+    
+    [Bindable] public var me:Boolean = false;
+    [Bindable] public var userID:String = "UNKNOWN USER";
+    [Bindable] public var externUserID:String = "UNKNOWN USER";
+    [Bindable] public var name:String;
+    [Bindable] public var talking:Boolean = false;
+    [Bindable] public var phoneUser:Boolean = false;
+    [Bindable] public var listenOnly:Boolean = false;
+    
+    [Bindable] public var disableMyCam:Boolean = false;
+    [Bindable] public var disableMyMic:Boolean = false;
+    [Bindable] public var disableMyPrivateChat:Boolean = false;
+    [Bindable] public var disableMyPublicChat:Boolean = false;
+    [Bindable] public var lockedLayout:Boolean = false;
+    [Bindable] public var avatarURL:String="";
+    
+    [Bindable] public var guest:Boolean = false;
+    [Bindable] public var waitingForAcceptance:Boolean = false;
+    
+    [Bindable]
+    public function get hasStream():Boolean {
+      return streamNames.length > 0;
+    }
+    public function set hasStream(s:Boolean):void {
+      throw new Error("hasStream cannot be set. It is derived directly from streamName");
+    }
+    
+    [Bindable] private var _viewingStream:Array = new Array();
+    
+    [Bindable]
+    public function get viewingStream():Array {
+      return _viewingStream;
+    }
+    public function set viewingStream(v:Array):void {
+      throw new Error("Please use the helpers addViewingStream or removeViewingStream to handle viewingStream");
+    }
+    public function addViewingStream(streamName:String):Boolean {
+      if (isViewingStream(streamName)) {
+        return false;
+      }
+      
+      _viewingStream.push(streamName);
+      return true;
+    }
+    public function removeViewingStream(streamName:String):Boolean {
+      if (!isViewingStream(streamName)) {
+        return false;
+      }
+      
+      _viewingStream = _viewingStream.filter(function(item:*, index:int, array:Array):Boolean { return item != streamName; });
+      return true;
+    }
+    private function isViewingStream(streamName:String):Boolean {
+      return _viewingStream.some(function(item:*, index:int, array:Array):Boolean { return item == streamName; });
+    }
+    public function isViewingAllStreams():Boolean {
+      return _viewingStream.length == streamNames.length;
+    }
+    
+    [Bindable] public var streamNames:Array = new Array();
+    
+    [Bindable]
+    public function get streamName():String {
+      var streams:String = "";
+      for each(var stream:String in streamNames) {
+        streams = streams + stream + "|";
+      }
+      //Remove last |
+      streams = streams.slice(0, streams.length-1);
+      return streams;
+    }
+    
+    private function hasThisStream(streamName:String):Boolean {
+      return streamNames.some(function(item:*, index:int, array:Array):Boolean { return item == streamName; });
+    }
+    
+    public function set streamName(streamNames:String):void {
+      if(streamNames) {
+        var streamNamesList:Array = streamNames.split("|");
+        for each(var streamName:String in streamNamesList) {
+          sharedWebcam(streamName);
+        }
+      }
+    }
+    
+    private var _presenter:Boolean = false;
+    [Bindable] 
+    public function get presenter():Boolean {
+      return _presenter;
+    }
+    public function set presenter(p:Boolean):void {
+      _presenter = p;
+      verifyUserStatus();
+    }
+    
+    public var emojiStatusTime:Date;
+    private var _emojiStatus:String = "none";
+    
+    [Bindable("emojiStatusChange")]
+    public function get emojiStatus():String {
+      return _emojiStatus;
+    }
+    public function set emojiStatus(r:String):void {
+      _emojiStatus = r;
+      emojiStatusTime = (r ? new Date() : null);
+      verifyUserStatus();
+      dispatcher.dispatchEvent(new Event("emojiStatusChange")); 
+    }
+    
+    [Bindable("emojiStatusChange")]
+    public function get hasEmojiStatus():Boolean {
+      return _emojiStatus != null && _emojiStatus != "none" && _emojiStatus != "null";
+    }
+    
+    private var _role:String = Role.VIEWER;
+    [Bindable] 
+    public function get role():String {
+      return _role;
+    }
+    public function set role(r:String):void {
+      _role = r;
+      verifyUserStatus();
+    }
+    
+    [Bindable] public var room:String = "";
+    [Bindable] public var authToken:String = "";
+    [Bindable] public var selected:Boolean = false;
+    
+    private var _voiceMuted:Boolean = false;
+    [Bindable]
+    public function get voiceMuted():Boolean {
+      return _voiceMuted;
+    }
+    public function set voiceMuted(v:Boolean):void {
+      _voiceMuted = v;
+      verifyMedia();
+    }
+    
+    private var _voiceJoined:Boolean = false;
+    [Bindable] 
+    public function get voiceJoined():Boolean {
+      return _voiceJoined;
+    }
+    public function set voiceJoined(v:Boolean):void {
+      _voiceJoined = v;
+      verifyMedia();
+    }
+    
+    [Bindable] public var userLocked:Boolean = false;
+    [Bindable] public var status:String = "";
+    [Bindable] public var customdata:Object = {};
+    
+    /*
+    * This variable is for accessibility for the Users Window. It can't be manually set
+    * and only changes when one of the relevant status variables changes. Use the verifyUserStatus
+    * method to update the value.
+    *			Chad
+    */
+    private var _userStatus:String = "";
+    [Bindable] 
+    public function get userStatus():String {
+      return _userStatus;
+    }
+    private function set userStatus(s:String):void {}
+    private function verifyUserStatus():void {
+      if (presenter)
+        _userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.presenter');
+      else if (role == Role.MODERATOR)
+        _userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.moderator');
+      else if (hasEmojiStatus)
+        _userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.' + _emojiStatus);
+      else
+        _userStatus = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.viewer');
+    }
+    
+    public function amIGuest():Boolean {
+      return guest;
+    }
+    
+    /*
+    * This variable is for accessibility for the Users Window. It can't be manually set
+    * and only changes when one of the relevant media variables changes. Use the verifyMedia
+    * method to update the value.
+    *			Chad
+    */
+    private var _media:String = "";
+    [Bindable] 
+    public function get media():String {
+      return _media;
+    }
+    private function set media(m:String):void {}
+    private function verifyMedia():void {
+      _media = (hasStream ? ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.webcam') + " " : "") + 
+        (!voiceJoined ? ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.noAudio') : 
+          (voiceMuted ? ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.micOff') : 
+            ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.micOn')));
+    }
+    
+    private var _status:StatusCollection = new StatusCollection();
+    
+    public function buildStatus():void {
+      var showingWebcam:String="";
+      var isPresenter:String="";
+      var hasEmoji:String = "";
+      if (hasStream)
+        showingWebcam=ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.streamIcon.toolTip');
+      if (presenter)
+        isPresenter=ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.presIcon.toolTip');
+      if (hasEmojiStatus)
+        hasEmoji = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.'+ emojiStatus +'.toolTip');
+      
+      status = showingWebcam + isPresenter + hasEmoji;
+    }
+    
+    public function addStatus(status:Status):void {
+      _status.addStatus(status);
+    }
+    
+    public function userEmojiStatus(emoji: String):void {
+      emojiStatus = emoji;
+      if (me) {
+        UsersUtil.setMyEmoji(emoji);
+      }
+      buildStatus();
+    }
+    
+    public function sharedWebcam(stream: String):void {
+      if(stream && stream != "" && !hasThisStream(stream)) {
+        streamNames.push(stream);
+        sendStreamStartedEvent(stream);
+      }
+      buildStatus();
+      verifyMedia();
+    }
+    
+    public function unsharedWebcam(stream: String):void {
+      streamNames = streamNames.filter(function(item:*, index:int, array:Array):Boolean { return item != stream });
+      buildStatus();
+      verifyMedia();
+    }
+    
+    public function presenterStatusChanged(presenter: Boolean):void {
+      this.presenter = presenter;
+      buildStatus();
+    }
+    
+    public function lockStatusChanged(locked: Boolean):void {
+      userLocked = locked;
+      applyLockSettings();
+      buildStatus();
+    }
+    
+    public function changeStatus(status:Status):void {
+      switch (status.name) {
+        case "presenter":
+          presenter=(status.value.toString().toUpperCase() == "TRUE") ? true : false;
+          break;
+        case "hasStream":
+          var streamInfo:Array=String(status.value).split(/,/);
+          /**
+           * Cannot use this statement as new Boolean(expression)
+           * return true if the expression is a non-empty string not
+           * when the string equals "true". See Boolean class def.
+           *
+           * hasStream = new Boolean(String(streamInfo[0]));
+           */
+          var streamNameInfo:Array=String(streamInfo[1]).split(/=/);
+          streamName=streamNameInfo[1];
+          break;
+        // @FIXME : check the coming status from the server
+        case "emojiStatus":
+          emojiStatus = status.value.toString();
+          if (me) {
+            UsersUtil.setMyEmoji(status.value.toString());
+          }
+          break;
+      }
+      buildStatus();
+    }
+    
+    public function removeStatus(name:String):void {
+      _status.removeStatus(name);
+    }
+    
+    public function getStatus(name:String):Status {
+      return _status.getStatus(name);
+    }
+    
+    private var _breakoutRooms : Array = [];
+    
+    [Bindable("displayNameChange")]
+    public function get displayName():String {
+      if (ArrayUtils.isEmpty(_breakoutRooms)) {
+        return name;
+      } else {
+        return "[" + _breakoutRooms.join(",") + "] " + name;
+      }
+    }
+    
+    public function get breakoutRooms():Array {
+      return _breakoutRooms;
+    }
+    
+    public function set breakoutRooms(rooms:Array):void {
+      _breakoutRooms = rooms;
+      dispatcher.dispatchEvent(new Event("displayNameChange"));
+    }
+    
+    public function addBreakoutRoom(roomNumber:int):void {
+      if (!ArrayUtils.contains(_breakoutRooms, roomNumber)) {
+        _breakoutRooms.push(roomNumber);
+        dispatcher.dispatchEvent(new Event("displayNameChange"));
+      }
+    }
+    
+    public function removeBreakoutRoom(roomNumber:int):void {
+      _breakoutRooms.splice(_breakoutRooms.indexOf(roomNumber), 1);
+      dispatcher.dispatchEvent(new Event("displayNameChange"));
+    }
+    
+    public static function copy(user:BBBUser):BBBUser {
+      var n:BBBUser = new BBBUser();
+      n.authToken = user.authToken;
+      n.me = user.me;
+      n.userID = user.userID;
+      n.externUserID = user.externUserID;
+      n.name = user.name;
+      n._viewingStream = user._viewingStream;
+      n.streamNames = user.streamNames;
+      n.presenter = user.presenter;
+      n.emojiStatus = user.emojiStatus;
+      n.role = user.role;	
+      n.room = user.room;
+      n.customdata = user.customdata;
+      n.media = user.media;
+      n.phoneUser = user.phoneUser;
+      n.talking = user.talking;
+      n.userStatus = user.userStatus;
+      n.voiceJoined = user.voiceJoined;
+      n.userLocked = user.userLocked;
+      n.voiceMuted = user.voiceMuted;
+      n.disableMyCam = user.disableMyCam;
+      n.disableMyMic = user.disableMyMic;
+      n.disableMyPrivateChat = user.disableMyPrivateChat;
+      n.disableMyPublicChat = user.disableMyPublicChat;
+      n.breakoutRooms = user.breakoutRooms.concat(); // concatenate an array with nothing to deliver a new array.
+      n.guest = user.guest;
+      return n;		
+    }
+    
+    private function sendStreamStartedEvent(stream: String):void{
+      var dispatcher:Dispatcher = new Dispatcher();
+      dispatcher.dispatchEvent(new StreamStartedEvent(userID, name, stream));
+    }
+    
+    public function applyLockSettings():void {
+      var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
+      var amNotModerator:Boolean = !UsersUtil.amIModerator();
+      var amNotPresenter:Boolean = !UsersUtil.amIPresenter();
+      var lockAppliesToMe:Boolean = me && amNotModerator && amNotPresenter && userLocked;
+      
+      disableMyCam = lockAppliesToMe && lockSettings.getDisableCam();
+      disableMyMic = lockAppliesToMe && lockSettings.getDisableMic();
+      disableMyPrivateChat = lockAppliesToMe && lockSettings.getDisablePrivateChat();
+      disableMyPublicChat = lockAppliesToMe && lockSettings.getDisablePublicChat();
+      lockedLayout = lockAppliesToMe && lockSettings.getLockedLayout();
+      
+      var dispatcher:Dispatcher = new Dispatcher();
+      dispatcher.dispatchEvent(new LockControlEvent(LockControlEvent.CHANGED_LOCK_SETTINGS));
+      
+      
+      if (lockAppliesToMe) {
+        //If it's sharing webcam, stop it
+        if (disableMyCam && hasStream){
+          dispatcher.dispatchEvent(new ClosePublishWindowEvent());
+        }
+        //If it's sharing microphone, mute it
+        if (disableMyMic && !UserManager.getInstance().getConference().isMyVoiceMuted()) {
+          var e:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_USER);
+          e.userid = UsersUtil.getMyUserID();
+          e.mute = true;
+          dispatcher.dispatchEvent(e);
+        }
+      }
+    }
+  }
+}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as
index dd871ed582..c0d07ff551 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as
@@ -29,37 +29,15 @@ package org.bigbluebutton.main.model.users {
 	import org.as3commons.logging.api.ILogger;
 	import org.as3commons.logging.api.getClassLogger;
 	import org.bigbluebutton.common.Role;
-	import org.bigbluebutton.core.BBB;
 	import org.bigbluebutton.core.Options;
-	import org.bigbluebutton.core.model.Config;
-	import org.bigbluebutton.core.model.MeetingModel;
+	import org.bigbluebutton.core.UsersUtil;
+	import org.bigbluebutton.core.model.LiveMeeting;
 	import org.bigbluebutton.core.vo.CameraSettingsVO;
 	import org.bigbluebutton.core.vo.LockSettingsVO;
 	import org.bigbluebutton.main.events.BreakoutRoomEvent;
 	import org.bigbluebutton.main.model.options.LockOptions;
 	
 	public class Conference {
-		public var userEjectedFromMeeting:Boolean = false;
-		public var meetingName:String;
-		
-		public var externalMeetingID:String;
-		
-		public var internalMeetingID:String;
-		
-		public var externalUserID:String;
-		
-		public var avatarURL:String;
-		
-		public var voiceBridge:String;
-		
-		public var dialNumber:String;
-		
-		public var isBreakout:Boolean;
-		
-		public var iAskedToLogout:Boolean
-		
-		[Bindable]
-		public var record:Boolean;
 		
 		[Bindable]
 		public var numAdditionalSharedNotes:Number = 0;
@@ -70,9 +48,6 @@ package org.bigbluebutton.main.model.users {
 		
 		private var _myCamSettings:ArrayCollection = null;
 		
-		[Bindable]
-		private var me:BBBUser = null;
-		
 		[Bindable]
 		public var users:ArrayCollection = null;
 		
@@ -87,7 +62,6 @@ package org.bigbluebutton.main.model.users {
 		private var defaultLayout:String;
 		
 		public function Conference():void {
-			me = new BBBUser();
 			users = new ArrayCollection();
 			sort = new Sort();
 			sort.compareFunction = sortFunction;
@@ -151,7 +125,7 @@ package org.bigbluebutton.main.model.users {
 			if (hasUser(newuser.userID)) {
 				removeUser(newuser.userID);
 			}
-			if (newuser.userID == me.userID) {
+			if (newuser.userID == LiveMeeting.inst().me.id) {
 				newuser.me = true;
 			}
 			users.addItem(newuser);
@@ -291,150 +265,56 @@ package org.bigbluebutton.main.model.users {
 			return null;
 		}
 		
-		public function whatsMyRole():String {
-			return me.role;
-		}
-		
-		[Bindable]
-		public function get amIPresenter():Boolean {
-			return me.presenter;
-		}
-		
-		public function set amIPresenter(presenter:Boolean):void {
-			me.presenter = presenter;
-			applyLockSettings();
-		}
-		
-		[Bindable]
-		public function get myEmojiStatus():String {
-			return me.emojiStatus;
-		}
-		
-		public function set myEmojiStatus(emoji:String):void {
-			me.emojiStatus = emoji;
-		}
-		
-		public function amIThisUser(userID:String):Boolean {
-			return me.userID == userID;
-		}
-		
-		public function getMyRole():String {
-			return me.role;
-		}
-		
-		public function amIModerator():Boolean {
-			return me.role == Role.MODERATOR;
-		}
 		
 		public function muteMyVoice(mute:Boolean):void {
 			voiceMuted = mute;
 		}
 		
 		public function isMyVoiceMuted():Boolean {
-			return me.voiceMuted;
+			return LiveMeeting.inst().myStatus.voiceMuted;
 		}
 		
 		[Bindable]
 		public function set voiceMuted(m:Boolean):void {
-			me.voiceMuted = m;
+      LiveMeeting.inst().myStatus.voiceMuted = m;
 		}
 		
 		public function get voiceMuted():Boolean {
-			return me.voiceMuted;
+			return LiveMeeting.inst().myStatus.voiceMuted;
 		}
 		
 		public function setMyVoiceJoined(joined:Boolean):void {
-			voiceJoined = joined;
+      LiveMeeting.inst().myStatus.voiceJoined = joined;
 		}
 		
 		public function amIVoiceJoined():Boolean {
-			return me.voiceJoined;
+			return LiveMeeting.inst().myStatus.voiceJoined;
 		}
 		
 		/** Hook to make the property Bindable **/
 		[Bindable]
 		public function set voiceJoined(j:Boolean):void {
-			me.voiceJoined = j;
+      LiveMeeting.inst().myStatus.voiceJoined = j;
 		}
 		
 		public function get voiceJoined():Boolean {
-			return me.voiceJoined;
+			return LiveMeeting.inst().myStatus.voiceJoined;
 		}
 		
 		[Bindable]
 		public function set locked(locked:Boolean):void {
-			me.userLocked = locked;
+      LiveMeeting.inst().myStatus.userLocked = locked;
 		}
 		
 		public function get locked():Boolean {
-			return me.userLocked;
-		}
-		
-		public function setUserEjectedFromMeeting():void {
-			userEjectedFromMeeting = true;
-		}
-		
-		public function getUserEjectedFromMeeting():Boolean {
-			return userEjectedFromMeeting;
-		}
-		
-		public function getMyExternalUserID():String {
-			return externalUserID;
-		}
-		
-		public function getMyUserId():String {
-			return me.userID;
-		}
-		
-		public function getMyself():BBBUser {
-			return me;
-		}
-
-		public function setMyUserid(userID:String):void {
-			me.userID = userID;
-		}
-		
-		public function setMyName(name:String):void {
-			me.name = name;
-		}
-		
-		public function getMyName():String {
-			return me.name;
-		}
-		
-		public function setMyCustomData(customdata:Object):void {
-			me.customdata = customdata;
-		}
-		
-		public function getMyCustomData():Object {
-			return me.customdata;
+			return LiveMeeting.inst().myStatus.userLocked;
 		}
 		
 		public function setMyRole(role:String):void {
-			me.role = role;
-			applyLockSettings();
-		}
-
-		public function amIGuest():Boolean {
-			return me.guest;
-		}
-
-		public function amIWaitingForAcceptance():Boolean {
-			return me.waitingForAcceptance;
-		}
-
-		public function setGuest(guest:Boolean):void {
-			me.guest = guest;
+			LiveMeeting.inst().me.role = role;
+			UsersUtil.applyLockSettings();
 		}
-		
-		public function setMyRoom(room:String):void {
-			me.room = room;
-		}
-		
-		public function setMyAuthToken(token:String):void {
-			me.authToken = token;
-		}
-		
+				
 		public function removeAllParticipants():void {
 			//users.removeAll();
 			//users.refresh();
@@ -454,9 +334,9 @@ package org.bigbluebutton.main.model.users {
 		}
 
         public function sharedWebcam(userId:String, stream:String):void {
-            var webcamsOnlyForModerator:Boolean = MeetingModel.getInstance().meeting.webcamsOnlyForModerator;
+            var webcamsOnlyForModerator:Boolean = LiveMeeting.inst().meeting.webcamsOnlyForModerator;
             if (!webcamsOnlyForModerator || 
-				(webcamsOnlyForModerator && (amIModerator() || userIsModerator(userId)))
+				(webcamsOnlyForModerator && (UsersUtil.amIModerator() || userIsModerator(userId)))
 			) {
                 var aUser:BBBUser = getUser(userId);
                 if (aUser != null) {
@@ -514,7 +394,10 @@ package org.bigbluebutton.main.model.users {
 		 * */
 		public function configLockSettings():void {
 			var lockOptions:LockOptions = Options.getOptions(LockOptions) as LockOptions;
-			lockSettings = new LockSettingsVO(lockOptions.disableCam, lockOptions.disableMic, lockOptions.disablePrivateChat, lockOptions.disablePublicChat, lockOptions.lockedLayout, lockOptions.lockOnJoin, lockOptions.lockOnJoinConfigurable);
+			lockSettings = new LockSettingsVO(lockOptions.disableCam, lockOptions.disableMic, 
+        lockOptions.disablePrivateChat, lockOptions.disablePublicChat, 
+        lockOptions.lockedLayout, lockOptions.lockOnJoin, 
+        lockOptions.lockOnJoinConfigurable);
 			setLockSettings(lockSettings);
 		}
 		
@@ -522,7 +405,7 @@ package org.bigbluebutton.main.model.users {
 			var eachUser:BBBUser;
 			for (var i:int = 0; i < users.length; i++) {
 				eachUser = users.getItemAt(i) as BBBUser;
-				if (eachUser.userID == me.userID) {
+				if (eachUser.userID == LiveMeeting.inst().me.id) {
 					return eachUser;
 				}
 			}
@@ -535,15 +418,11 @@ package org.bigbluebutton.main.model.users {
 		
 		public function setLockSettings(lockSettings:LockSettingsVO):void {
 			this.lockSettings = lockSettings;
-			applyLockSettings();
+			UsersUtil.applyLockSettings();
 			users.refresh(); // we need to refresh after updating the lock settings to trigger the user item renderers to redraw
 		}
 		
-		public function applyLockSettings():void {
-			var myUser:BBBUser = getMyUser();
-			if (myUser != null)
-				myUser.applyLockSettings();
-		}
+
 		
 		/* Breakout room feature */
 		public function addBreakoutRoom(newRoom:BreakoutRoom):void {
@@ -709,19 +588,19 @@ package org.bigbluebutton.main.model.users {
 			}
 		}
 
-		public function getUserAvatarURL(userID:String):String { // David, to get specific user avatar url
-                        if(userID != null ){
-                                var p:Object = getUserIndex(userID);
-                                if (p != null) {
-                                        var u:BBBUser = p.participant as BBBUser;
-                                        LOGGER.info("getUserAvatarURL user =" + JSON.stringify(u));
-                                        if(u.avatarURL == null || u.avatarURL == ""){
-                                                return this.avatarURL;
-                                        }
-                                        return u.avatarURL;
-                                }
-                        }
-                        return this.avatarURL;
-               }
-	}
+    public function getUserAvatarURL(userID:String):String { // David, to get specific user avatar url
+      if(userID != null ){
+        var p:Object = getUserIndex(userID);
+        if (p != null) {
+          var u:BBBUser = p.participant as BBBUser;
+          LOGGER.info("getUserAvatarURL user =" + JSON.stringify(u));
+          if(u.avatarURL == null || u.avatarURL == ""){
+            return LiveMeeting.inst().me.avatarURL;
+          }
+          return u.avatarURL;
+        }
+      }
+      return LiveMeeting.inst().me.avatarURL;
+    }
+  }
 }
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/EnterApiResponse.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/EnterApiResponse.as
new file mode 100755
index 0000000000..9a95afeb8d
--- /dev/null
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/EnterApiResponse.as
@@ -0,0 +1,31 @@
+package org.bigbluebutton.main.model.users
+{
+  public class EnterApiResponse
+  {
+    public var username: String; 
+    public var extUserId: String;
+    public var intUserId: String; 
+    public var role: String;
+    public var guest: Boolean;
+    public var authed: Boolean;
+    public var authToken: String;
+    public var customdata:Object = new Object();
+    public var logoutUrl: String;
+    public var defaultLayout: String;
+    public var avatarURL: String;
+    public var dialnumber: String;
+    public var voiceConf: String;
+    public var welcome: String;
+
+    public var meetingName: String;
+    public var extMeetingId: String;
+    public var intMeetingId: String;
+    public var isBreakout: Boolean;
+    
+    public var record: Boolean;
+    public var allowStartStopRecording: Boolean;
+    public var webcamsOnlyForModerator: Boolean;
+    public var metadata: Object = new Object();
+    public var modOnlyMessage: String;
+  }
+}
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/JoinService.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/JoinService.as
index 8452b19092..0a17b24cf9 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/JoinService.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/JoinService.as
@@ -1,197 +1,189 @@
 /**
-* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
-* 
-* Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
-*
-* This program is free software; you can redistribute it and/or modify it under the
-* terms of the GNU Lesser General Public License as published by the Free Software
-* Foundation; either version 3.0 of the License, or (at your option) any later
-* version.
-* 
-* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
-* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public License along
-* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
-*
-*/
+ * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
+ * 
+ * Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
+ *
+ * This program is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation; either version 3.0 of the License, or (at your option) any later
+ * version.
+ * 
+ * BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License along
+ * with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
+ *
+ */
 package org.bigbluebutton.main.model.users
 {
-	import com.asfusion.mate.events.Dispatcher;
-	
-	import flash.events.Event;
-	import flash.events.HTTPStatusEvent;
-	import flash.events.IOErrorEvent;
-	import flash.net.URLLoader;
-	import flash.net.URLRequest;
-	import flash.net.URLRequestMethod;
-	import flash.net.URLVariables;
-	import org.bigbluebutton.core.UsersUtil;
-	import org.as3commons.logging.api.ILogger;
-	import org.as3commons.logging.api.getClassLogger;
-	import org.as3commons.logging.util.jsonXify;
-	import org.bigbluebutton.core.model.MeBuilder;
-	import org.bigbluebutton.core.model.MeetingBuilder;
-	import org.bigbluebutton.core.model.MeetingModel;
-	import org.bigbluebutton.core.model.users.UsersModel;
-	import org.bigbluebutton.main.events.MeetingNotFoundEvent;
-	import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent;
-	import org.bigbluebutton.util.QueryStringParameters;
-        	
-	public class JoinService
-	{  
-		private static const LOGGER:ILogger = getClassLogger(JoinService);      
+  import com.asfusion.mate.events.Dispatcher;
+  
+  import flash.events.Event;
+  import flash.events.HTTPStatusEvent;
+  import flash.events.IOErrorEvent;
+  import flash.net.URLLoader;
+  import flash.net.URLRequest;
+  import flash.net.URLRequestMethod;
+  import flash.net.URLVariables;
+  import org.as3commons.logging.api.ILogger;
+  import org.as3commons.logging.api.getClassLogger;
+  import org.bigbluebutton.core.UsersUtil;
+  import org.bigbluebutton.main.events.MeetingNotFoundEvent;
+  import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent;
+  import org.bigbluebutton.util.QueryStringParameters;
+  
+  public class JoinService
+  {  
+    private static const LOGGER:ILogger = getClassLogger(JoinService);      
     
-		private var request:URLRequest = new URLRequest();
-		private var reqVars:URLVariables = new URLVariables();
-		
-		private var urlLoader:URLLoader;
-		private var _resultListener:Function;
-		
-		public function JoinService() {
-			urlLoader = new URLLoader();
-		}
-		
-		public function load(url:String):void {
-			var p:QueryStringParameters = new QueryStringParameters();
-			p.collectParameters();
-			var sessionToken:String = p.getParameter("sessionToken");
-			
-			reqVars.sessionToken = sessionToken;
-			
-			var date:Date = new Date();
-            request = new URLRequest(url);
-            request.method = URLRequestMethod.GET;
-			request.data = reqVars;
-            
-			urlLoader.addEventListener(Event.COMPLETE, handleComplete);
-			urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
-			urlLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
-            urlLoader.load(request);	
-		}
-
-		public function addJoinResultListener(listener:Function):void {
-			_resultListener = listener;
-		}
-		
-		private function httpStatusHandler(event:HTTPStatusEvent):void {
-			LOGGER.debug("httpStatusHandler: {0}", [event]);
-		}
-
-		private function ioErrorHandler(event:IOErrorEvent):void {
-			var logData:Object = UsersUtil.initLogData();
-			logData.tags = ["initialization"];
-			logData.message = "IOError calling ENTER api."; 
-			LOGGER.error(JSON.stringify(logData));
-            
-			var e:ConnectionFailedEvent = new ConnectionFailedEvent(ConnectionFailedEvent.USER_LOGGED_OUT);
-			var dispatcher:Dispatcher = new Dispatcher();
-			dispatcher.dispatchEvent(e);
-		}
-
-		private function extractMetadata(metadata:Object):Object {
-			var response:Object = new Object();
-			if (metadata) {
-				var data:Array = metadata as Array;
-				for each (var item:Object in data) {
-					for (var id:String in item) {
-						var value:String = item[id] as String;
-						response[id] = value;
-					}
-				}
-			}
-			return response;
-		}
-		
-		private function handleComplete(e:Event):void {			
-            var result:Object = JSON.parse(e.target.data);
-            
-            var logData:Object = UsersUtil.initLogData();
-            logData.tags = ["initialization"];
+    private var request:URLRequest = new URLRequest();
+    private var reqVars:URLVariables = new URLVariables();
+    
+    private var urlLoader:URLLoader;
+    private var _resultListener:Function;
+    
+    public function JoinService() {
+      urlLoader = new URLLoader();
+    }
+    
+    public function load(url:String):void {
+      var p:QueryStringParameters = new QueryStringParameters();
+      p.collectParameters();
+      var sessionToken:String = p.getParameter("sessionToken");
+      
+      reqVars.sessionToken = sessionToken;
+      
+      var date:Date = new Date();
+      request = new URLRequest(url);
+      request.method = URLRequestMethod.GET;
+      request.data = reqVars;
+      
+      urlLoader.addEventListener(Event.COMPLETE, handleComplete);
+      urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
+      urlLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
+      urlLoader.load(request);	
+    }
+    
+    public function addJoinResultListener(listener:Function):void {
+      _resultListener = listener;
+    }
+    
+    private function httpStatusHandler(event:HTTPStatusEvent):void {
+      LOGGER.debug("httpStatusHandler: {0}", [event]);
+    }
+    
+    private function ioErrorHandler(event:IOErrorEvent):void {
+      var logData:Object = UsersUtil.initLogData();
+      logData.tags = ["initialization"];
+      logData.message = "IOError calling ENTER api."; 
+      LOGGER.error(JSON.stringify(logData));
+      
+      var e:ConnectionFailedEvent = new ConnectionFailedEvent(ConnectionFailedEvent.USER_LOGGED_OUT);
+      var dispatcher:Dispatcher = new Dispatcher();
+      dispatcher.dispatchEvent(e);
+    }
+    
+    private function processLogoutUrl(confInfo:Object):String {
+      var logoutUrl:String = confInfo.logoutUrl;
+      var rules:Object = {
+        "%%FULLNAME%%": confInfo.username,
+          "%%CONFNAME%%": confInfo.conferenceName,
+          "%%DIALNUM%%": confInfo.dialnumber,
+          "%%CONFNUM%%": confInfo.voicebridge
+      }
+      
+      for (var attr:String in rules) {
+        logoutUrl = logoutUrl.replace(new RegExp(attr, "g"), rules[attr]);
+      }
+      
+      return logoutUrl;
+    }
+    
+    private function extractMetadata(metadata:Object):Object {
+      var response:Object = new Object();
+      if (metadata) {
+        var data:Array = metadata as Array;
+        for each (var item:Object in data) {
+          for (var id:String in item) {
+            var value:String = item[id] as String;
+            response[id] = value;
+          }
+        }
+      }
+      return response;
+    }
+    
+    private function handleComplete(e:Event):void {			
+      var result:Object = JSON.parse(e.target.data);
+      
+      var logData:Object = UsersUtil.initLogData();
+      logData.tags = ["initialization"];
+      
+      
+      var returncode:String = result.response.returncode;
+      if (returncode == 'FAILED') {
+        logData.message = "Calling ENTER api failed."; 
+        LOGGER.info(JSON.stringify(logData));
+        
+        var dispatcher:Dispatcher = new Dispatcher();
+        dispatcher.dispatchEvent(new MeetingNotFoundEvent(result.response.logoutURL));			
+      } else if (returncode == 'SUCCESS') {
+        logData.message = "Calling ENTER api succeeded."; 
+        LOGGER.info(JSON.stringify(logData));
+        
+        var apiResponse:EnterApiResponse = new EnterApiResponse();
+        apiResponse.meetingName = result.response.confname;
+        apiResponse.extMeetingId = result.response.externMeetingID;
+        apiResponse.intMeetingId = result.response.meetingID;
+        apiResponse.isBreakout = result.response.isBreakout;
+        
+        apiResponse.username = result.response.fullname;
+        apiResponse.extUserId = result.response.externUserID;
+        apiResponse.intUserId = result.response.internalUserID;
+        apiResponse.role = result.response.role;
+        apiResponse.guest = result.response.guest;
+        apiResponse.authed = result.response.authed;
+        apiResponse.authToken = result.response.authToken;
+        
+        apiResponse.record = (result.response.record.toUpperCase() == "TRUE");
+        apiResponse.allowStartStopRecording = result.response.allowStartStopRecording;
+        apiResponse.webcamsOnlyForModerator = result.response.webcamsOnlyForModerator;
+        
 
-            
-            var returncode:String = result.response.returncode;
-            if (returncode == 'FAILED') {
-                logData.message = "Calling ENTER api failed."; 
-                LOGGER.info(JSON.stringify(logData));
+        apiResponse.dialnumber = result.response.dialnumber;
+        apiResponse.voiceConf = result.response.voicebridge;
 
-                var dispatcher:Dispatcher = new Dispatcher();
-                dispatcher.dispatchEvent(new MeetingNotFoundEvent(result.response.logoutURL));			
-            } else if (returncode == 'SUCCESS') {
-                logData.message = "Calling ENTER api succeeded."; 
-                LOGGER.info(JSON.stringify(logData));
-                
-                var response:Object = new Object();
-                response.username = result.response.fullname;
-                response.conference = result.response.conference; 
-                response.conferenceName = result.response.confname;
-                response.externMeetingID = result.response.externMeetingID;
-                response.meetingID = result.response.meetingID;
-                response.isBreakout = result.response.isBreakout;
-                response.externUserID = result.response.externUserID;
-                response.internalUserId = result.response.internalUserID;
-                response.role = result.response.role;
-                response.guest = result.response.guest;
-				response.authed = result.response.authed;
-                response.room = result.response.room;
-                response.authToken = result.response.authToken;
-                response.record = result.response.record;
-                response.allowStartStopRecording = result.response.allowStartStopRecording;
-				response.webcamsOnlyForModerator = result.response.webcamsOnlyForModerator;
-                response.webvoiceconf = result.response.webvoiceconf;
-                response.dialnumber = result.response.dialnumber;
-                response.voicebridge = result.response.voicebridge;
-                response.mode = result.response.mode;
-                response.welcome = result.response.welcome;
-                response.logoutUrl = result.response.logoutUrl;
-                response.defaultLayout = result.response.defaultLayout;
-                response.avatarURL = result.response.avatarURL
+        apiResponse.welcome = result.response.welcome;
+        apiResponse.logoutUrl = processLogoutUrl(result.response);
+        apiResponse.defaultLayout = result.response.defaultLayout;
+        apiResponse.avatarURL = result.response.avatarURL
+        apiResponse.customdata = new Object();
         
-                if (result.response.hasOwnProperty("modOnlyMessage")) {
-                  response.modOnlyMessage = result.response.modOnlyMessage;
-                  MeetingModel.getInstance().modOnlyMessage = response.modOnlyMessage;
-                }
-          
-                response.customdata = new Object();
-       
-                if (result.response.customdata) {
-                    var cdata:Array = result.response.customdata as Array;
-                    for each (var item:Object in cdata) {
-                        for (var id:String in item) {
-                        var value:String = item[id] as String;
-                        response.customdata[id] = value;
-                    }                        
-                }
-                
+        if (result.response.customdata) {
+          var cdata:Array = result.response.customdata as Array;
+          for each (var item:Object in cdata) {
+            for (var id:String in item) {
+              var value:String = item[id] as String;
+              apiResponse.customdata[id] = value;
             }
-				        
-            response.metadata = extractMetadata(result.response.metadata);
-
-        UsersModel.getInstance().me = new MeBuilder(response.internalUserId, response.username).withAvatar(response.avatarURL)
-                                             .withExternalId(response.externUserID).withToken(response.authToken)
-                                             .withLayout(response.defaultLayout).withWelcome(response.welcome)
-                                             .withDialNumber(response.dialnumber).withRole(response.role)
-                                             .withCustomData(response.customData).withGuest(response.guest)
-											 .withAuthed(response.authed).build();
-                
-        MeetingModel.getInstance().meeting = new MeetingBuilder(response.conference, response.conferenceName)
-                                             .withDefaultLayout(response.defaultLayout).withVoiceConf(response.voiceBridge)
-                                             .withExternalId(response.externMeetingID).withRecorded(response.record.toUpperCase() == "TRUE")
-                                             .withDefaultAvatarUrl(response.avatarURL).withDialNumber(response.dialNumber)
-                                             .withWelcomeMessage(response.welcome).withModOnlyMessage(response.modOnlyMessage)
-                                             .withAllowStartStopRecording(response.allowStartStopRecording)
-                                             .withWebcamsOnlyForModerator(response.webcamsOnlyForModerator)
-											 .withBreakout(response.isBreakout)
-                                             .withMetadata(response.metadata).build();
-
-				if (_resultListener != null) _resultListener(true, response);
-			}
-
-		}
-		 
-		public function get loader():URLLoader{
-			return this.urlLoader;
-		}
-	}
+          }
+        }
+        
+        apiResponse.metadata = extractMetadata(result.response.metadata);
+        
+        if (result.response.hasOwnProperty("modOnlyMessage")) {
+          apiResponse.modOnlyMessage = result.response.modOnlyMessage;
+        }
+        
+        if (_resultListener != null) _resultListener(true, apiResponse);
+      }
+      
+    }
+    
+    public function get loader():URLLoader{
+      return this.urlLoader;
+    }
+  }
 }
\ No newline at end of file
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as
index 86cd124348..6dcfd4a268 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as
@@ -34,15 +34,19 @@ package org.bigbluebutton.main.model.users
 	import org.bigbluebutton.core.BBB;
 	import org.bigbluebutton.core.Options;
 	import org.bigbluebutton.core.UsersUtil;
+	import org.bigbluebutton.core.connection.messages.MsgFromClientHdr;
+	import org.bigbluebutton.core.connection.messages.ValidateAuthTokenReqMsg;
+	import org.bigbluebutton.core.connection.messages.ValidateAuthTokenReqMsgBody;
+	import org.bigbluebutton.core.events.TokenValidEvent;
 	import org.bigbluebutton.core.managers.ReconnectionManager;
+	import org.bigbluebutton.core.model.LiveMeeting;
 	import org.bigbluebutton.core.services.BandwidthMonitor;
+	import org.bigbluebutton.core.vo.LockSettingsVO;
 	import org.bigbluebutton.main.events.BBBEvent;
 	import org.bigbluebutton.main.events.InvalidAuthTokenEvent;
-	import org.bigbluebutton.main.model.ConferenceParameters;
 	import org.bigbluebutton.main.model.options.ApplicationOptions;
 	import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent;
-	import org.bigbluebutton.main.model.users.events.UsersConnectionEvent;
-    import org.bigbluebutton.core.connection.messages.*
+	import org.bigbluebutton.main.model.users.events.UsersConnectionEvent;
 
     public class NetConnectionDelegate {
         private static const LOGGER:ILogger = getClassLogger(NetConnectionDelegate);
@@ -121,11 +125,12 @@ package org.bigbluebutton.main.model.users
             logData.tags = ["apps", "connected"];
             logData.tokenValid = tokenValid;
             logData.status = "validate_token_response_received";
-            logData.message = "Received validate token response from server.";
+            logData.message = "Received validate token response from server. 2x";
             LOGGER.info(JSON.stringify(logData));
             
             if (tokenValid) {
                 authenticated = true;
+				dispatcher.dispatchEvent(new TokenValidEvent());
             } else {
                 dispatcher.dispatchEvent(new InvalidAuthTokenEvent());
             }
@@ -179,14 +184,16 @@ package org.bigbluebutton.main.model.users
         }
 
         private function validateToken2x():void {
-            var confParams:ConferenceParameters = BBB.initUserConfigManager().getConfParams();
+          var intMeetingId: String = LiveMeeting.inst().meeting.internalId;
+          var intUserId: String = LiveMeeting.inst().me.id;
+          var authToken: String = LiveMeeting.inst().me.authToken;
                               
             var header: MsgFromClientHdr = new MsgFromClientHdr("ValidateAuthTokenReqMsg",
-                                                confParams.meetingID, 
-                                                confParams.internalUserID);
+                                                intMeetingId, 
+                                                intUserId);
 
-            var body: ValidateAuthTokenReqMsgBody = new ValidateAuthTokenReqMsgBody(confParams.internalUserID,
-                                                confParams.authToken);
+            var body: ValidateAuthTokenReqMsgBody = new ValidateAuthTokenReqMsgBody(intUserId,
+              authToken);
 
             var message: ValidateAuthTokenReqMsg = new ValidateAuthTokenReqMsg(header, body);
 
@@ -237,11 +244,13 @@ package org.bigbluebutton.main.model.users
 
 
         private function validateToken():void {
-            var confParams:ConferenceParameters = BBB.initUserConfigManager().getConfParams();
-            
+
+          var intUserId: String = LiveMeeting.inst().me.id;
+          var authToken: String = LiveMeeting.inst().me.authToken;
+          
             var message:Object = new Object();
-            message["userId"] = confParams.internalUserID;
-            message["authToken"] = confParams.authToken;
+            message["userId"] = intUserId;
+            message["authToken"] = authToken;
                                 
             sendMessage(
                 "validateToken",// Remote function name
@@ -369,8 +378,7 @@ package org.bigbluebutton.main.model.users
         }
 
         public function connect():void {
-            var confParams:ConferenceParameters = BBB.initUserConfigManager().getConfParams();
-
+            var intMeetingId: String = LiveMeeting.inst().meeting.internalId;
                 
             try {
                 var appURL:String = _applicationOptions.uri;
@@ -380,12 +388,12 @@ package org.bigbluebutton.main.model.users
                 BandwidthMonitor.getInstance().serverURL = result.server;
             
                 var protocol:String = "rtmp";
-                var uri:String = appURL + "/" + confParams.room;
+                var uri:String = appURL + "/" + intMeetingId;
             
                 if (BBB.initConnectionManager().isTunnelling) {
-                    bbbAppsUrl = "rtmpt://" + result.server + "/" + result.app + "/" + confParams.room;
+                    bbbAppsUrl = "rtmpt://" + result.server + "/" + result.app + "/" + intMeetingId;
                 } else {
-                    bbbAppsUrl = "rtmp://" + result.server + ":1935/" + result.app + "/" + confParams.room;
+                    bbbAppsUrl = "rtmp://" + result.server + ":1935/" + result.app + "/" + intMeetingId;
                 }
 
                 var logData:Object = UsersUtil.initLogData();
@@ -400,11 +408,22 @@ package org.bigbluebutton.main.model.users
                 connectionTimer.addEventListener(TimerEvent.TIMER, connectionTimeout);
                 connectionTimer.start();
 
-                _netConnection.connect(bbbAppsUrl, confParams.username, confParams.role,
-                                        confParams.room, confParams.voicebridge, 
-                                        confParams.record, confParams.externUserID,
-                                        confParams.internalUserID, confParams.muteOnStart,
-                                        confParams.lockSettings, confParams.guest, confParams.authToken);
+                var username: String = LiveMeeting.inst().me.name;
+                var role: String = LiveMeeting.inst().me.role;
+                var voiceConf: String = LiveMeeting.inst().meeting.voiceConf;
+                var recorded: Boolean = LiveMeeting.inst().meeting.recorded;
+                var intUserId: String = LiveMeeting.inst().me.id;
+                var extUserId: String = LiveMeeting.inst().me.externalId;
+                var muteOnStart: Boolean = LiveMeeting.inst().meeting.muteOnStart;
+                var guest: Boolean = LiveMeeting.inst().me.guest;
+                var authToken: String = LiveMeeting.inst().me.authToken;
+                var lockSettings: LockSettingsVO = LiveMeeting.inst().meetingStatus.lockSettings;
+                
+                _netConnection.connect(bbbAppsUrl, username, role,
+                                        intMeetingId, voiceConf, 
+                                        recorded, extUserId,
+                                        intUserId, muteOnStart,
+                                        lockSettings.toMap(), guest, authToken);
                    
             } catch(e:ArgumentError) {
                 // Invalid parameters.
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UserService.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UserService.as
index c978efddfe..cc782f0524 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UserService.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/UserService.as
@@ -29,19 +29,20 @@ package org.bigbluebutton.main.model.users
 	import org.as3commons.logging.api.getClassLogger;
 	import org.bigbluebutton.core.BBB;
 	import org.bigbluebutton.core.Options;
+	import org.bigbluebutton.core.UsersUtil;
 	import org.bigbluebutton.core.events.LockControlEvent;
 	import org.bigbluebutton.core.events.VoiceConfEvent;
 	import org.bigbluebutton.core.managers.ConnectionManager;
-	import org.bigbluebutton.core.managers.UserConfigManager;
 	import org.bigbluebutton.core.managers.UserManager;
-	import org.bigbluebutton.core.model.Config;
+	import org.bigbluebutton.core.model.LiveMeeting;
+	import org.bigbluebutton.core.model.MeBuilder;
+	import org.bigbluebutton.core.model.MeetingBuilder;
 	import org.bigbluebutton.main.events.BBBEvent;
 	import org.bigbluebutton.main.events.BreakoutRoomEvent;
 	import org.bigbluebutton.main.events.LogoutEvent;
 	import org.bigbluebutton.main.events.ResponseModeratorEvent;
 	import org.bigbluebutton.main.events.SuccessfulLoginEvent;
 	import org.bigbluebutton.main.events.UserServicesEvent;
-	import org.bigbluebutton.main.model.ConferenceParameters;
 	import org.bigbluebutton.main.model.options.ApplicationOptions;
 	import org.bigbluebutton.main.model.options.MeetingOptions;
 	import org.bigbluebutton.main.model.users.events.BroadcastStartedEvent;
@@ -59,7 +60,6 @@ package org.bigbluebutton.main.model.users
 		private static const LOGGER:ILogger = getClassLogger(UserService);      
     
 		private var joinService:JoinService;
-		private var _conferenceParameters:ConferenceParameters;		
 		private var applicationURI:String;
 		private var hostURI:String;		
 		private var connection:NetConnection;
@@ -82,12 +82,11 @@ package org.bigbluebutton.main.model.users
 			sender.queryForRecordingStatus();
 			sender.queryForGuestPolicy();
 
-			if (!_conferenceParameters.isBreakout) {
-				sender.queryForBreakoutRooms(_conferenceParameters.meetingID);
+			if (!LiveMeeting.inst().meeting.isBreakout) {
+				sender.queryForBreakoutRooms(LiveMeeting.inst().meeting.internalId);
 			}
 
 			var loadCommand:SuccessfulLoginEvent = new SuccessfulLoginEvent(SuccessfulLoginEvent.USER_LOGGED_IN);
-			loadCommand.conferenceParameters = _conferenceParameters;
 			dispatcher.dispatchEvent(loadCommand);
 		}
 		
@@ -98,64 +97,47 @@ package org.bigbluebutton.main.model.users
 			joinService.load(applicationOptions.host);
 		}
 		
-		private function joinListener(success:Boolean, result:Object):void {
-			if (success) {
-				var config:Config = BBB.getConfigManager().config;
-				
-				UserManager.getInstance().getConference().setMyName(result.username);
-				UserManager.getInstance().getConference().setMyRole(result.role);
-				UserManager.getInstance().getConference().setMyRoom(result.room);
-				UserManager.getInstance().getConference().setGuest(result.guest);
-				UserManager.getInstance().getConference().setMyAuthToken(result.authToken);
-				UserManager.getInstance().getConference().setMyCustomData(result.customdata);
-				UserManager.getInstance().getConference().setDefaultLayout(result.defaultLayout);
-				
-				UserManager.getInstance().getConference().setMyUserid(result.internalUserId);
-				
-				UserManager.getInstance().getConference().externalMeetingID = result.externMeetingID;
-				UserManager.getInstance().getConference().isBreakout = result.isBreakout;
-				UserManager.getInstance().getConference().meetingName = result.conferenceName;
-				UserManager.getInstance().getConference().internalMeetingID = result.room;
-				UserManager.getInstance().getConference().externalUserID = result.externUserID;
-				UserManager.getInstance().getConference().avatarURL = result.avatarURL;
-				UserManager.getInstance().getConference().voiceBridge = result.voicebridge;
-				UserManager.getInstance().getConference().dialNumber = result.dialnumber;
-				UserManager.getInstance().getConference().record = (result.record.toUpperCase() == "TRUE");
+		private function joinListener(success:Boolean, result: EnterApiResponse):void {
+			if (success) {        
+				var meetingOptions : MeetingOptions = Options.getOptions(MeetingOptions) as MeetingOptions;
+        
+        LiveMeeting.inst().meetingStatus.lockSettings = UserManager.getInstance().getConference().getLockSettings();
 				
+        LiveMeeting.inst().me.id = result.intUserId
+        LiveMeeting.inst().me.name = result.username;
+        LiveMeeting.inst().me.externalId = result.extUserId;
+        LiveMeeting.inst().me.authToken = result.authToken;
+        LiveMeeting.inst().me.layout = result.defaultLayout;
+        LiveMeeting.inst().me.logoutURL = result.logoutUrl;
+        LiveMeeting.inst().me.role = result.role;
+        LiveMeeting.inst().me.welcome = result.welcome;
+        LiveMeeting.inst().me.avatarURL = result.avatarURL;
+        LiveMeeting.inst().me.dialNumber = result.dialnumber;
         
+        LiveMeeting.inst().me.guest = result.guest;
+        LiveMeeting.inst().me.authed = result.authed;
+        LiveMeeting.inst().me.customData = result.customdata;
+        
+        LiveMeeting.inst().meeting.name = result.meetingName;
+        LiveMeeting.inst().meeting.internalId = result.intMeetingId;
+        LiveMeeting.inst().meeting.externalId =  result.extMeetingId;
+        LiveMeeting.inst().meeting.isBreakout = result.isBreakout;
+        LiveMeeting.inst().meeting.defaultAvatarUrl = result.avatarURL;
+        LiveMeeting.inst().meeting.voiceConf = result.voiceConf;
+        LiveMeeting.inst().meeting.dialNumber = result.dialnumber;
+        LiveMeeting.inst().meeting.recorded = result.record;
+        LiveMeeting.inst().meeting.defaultLayout = result.defaultLayout;
+        LiveMeeting.inst().meeting.welcomeMessage = result.welcome;
+        LiveMeeting.inst().meeting.modOnlyMessage = result.modOnlyMessage;
+        LiveMeeting.inst().meeting.allowStartStopRecording = result.allowStartStopRecording;
+        LiveMeeting.inst().meeting.webcamsOnlyForModerator = result.webcamsOnlyForModerator;
+        LiveMeeting.inst().meeting.metadata = result.metadata;
+        LiveMeeting.inst().meeting.muteOnStart = meetingOptions.muteOnStart;
         
-				_conferenceParameters = new ConferenceParameters();
-				_conferenceParameters.meetingName = result.conferenceName;
-				_conferenceParameters.externMeetingID = result.externMeetingID;
-				_conferenceParameters.isBreakout = result.isBreakout;
-				_conferenceParameters.conference = result.conference;
-				_conferenceParameters.username = result.username;
-				_conferenceParameters.guest = (result.guest);
-				_conferenceParameters.role = result.role;
-				_conferenceParameters.room = result.room;
-				_conferenceParameters.authToken = result.authToken;
-				_conferenceParameters.webvoiceconf = result.webvoiceconf;
-				_conferenceParameters.voicebridge = result.voicebridge;
-				_conferenceParameters.welcome = result.welcome;
-				_conferenceParameters.meetingID = result.meetingID;
-				_conferenceParameters.externUserID = result.externUserID;
-				_conferenceParameters.internalUserID = result.internalUserId;
-				_conferenceParameters.logoutUrl = processLogoutUrl(result);
-				_conferenceParameters.record = (result.record != "false");
-				
-				var meetingOptions : MeetingOptions = Options.getOptions(MeetingOptions) as MeetingOptions;
-				
-				_conferenceParameters.muteOnStart = meetingOptions.muteOnStart;
-				_conferenceParameters.lockSettings = UserManager.getInstance().getConference().getLockSettings().toMap();
 				
 				// assign the meeting name to the document title
-				ExternalInterface.call("setTitle", _conferenceParameters.meetingName);
+				ExternalInterface.call("setTitle", result.meetingName);
 				
-				/**
-				 * Temporarily store the parameters in global BBB so we get easy access to it.
-				 */
-				var ucm:UserConfigManager = BBB.initUserConfigManager();
-				ucm.setConferenceParameters(_conferenceParameters);
 				var e:ConferenceCreatedEvent = new ConferenceCreatedEvent(ConferenceCreatedEvent.CONFERENCE_CREATED_EVENT);
 				e.conference = UserManager.getInstance().getConference();
 				dispatcher.dispatchEvent(e);
@@ -164,21 +146,7 @@ package org.bigbluebutton.main.model.users
 			}
 		}
 
-		private function processLogoutUrl(confInfo:Object):String {
-			var logoutUrl:String = confInfo.logoutUrl;
-			var rules:Object = {
-				"%%FULLNAME%%": confInfo.username,
-				"%%CONFNAME%%": confInfo.conferenceName,
-				"%%DIALNUM%%": confInfo.dialnumber,
-				"%%CONFNUM%%": confInfo.voicebridge
-			}
 
-			for (var attr:String in rules) {
-				logoutUrl = logoutUrl.replace(new RegExp(attr, "g"), rules[attr]);
-			}
-
-			return logoutUrl;
-		}
 		
     private function connect():void{
       _connectionManager = BBB.initConnectionManager();
@@ -187,7 +155,7 @@ package org.bigbluebutton.main.model.users
 	
 	public function logoutEndMeeting():void{
 		if (this.isModerator()) {
-			var myUserId: String = UserManager.getInstance().getConference().getMyUserId();
+			var myUserId: String = UsersUtil.getMyUserID();
 			sender.logoutEndMeeting(myUserId);
 		}
 	}
@@ -210,15 +178,12 @@ package org.bigbluebutton.main.model.users
 
 		public function changeRecordingStatus(e:BBBEvent):void {
 			if (this.isModerator() && !e.payload.remote) {
-				var myUserId:String = UserManager.getInstance().getConference().getMyUserId();
+				var myUserId:String = UsersUtil.getMyUserID();
 				sender.changeRecordingStatus(myUserId, e.payload.recording);
 			}
 		}
 
 		public function userLoggedIn(e:UsersConnectionEvent):void {
-			UserManager.getInstance().getConference().setMyUserid(e.userid);
-			_conferenceParameters.userid = e.userid;
-
 			var waitingForAcceptance:Boolean = true;
 			if (UserManager.getInstance().getConference().hasUser(e.userid)) {
 				LOGGER.debug("userLoggedIn - conference has this user");
@@ -245,7 +210,7 @@ package org.bigbluebutton.main.model.users
 		}
 
 		public function isModerator():Boolean {
-			return UserManager.getInstance().getConference().amIModerator();
+			return UsersUtil.amIModerator();
 		}
 		
 		public function get participants():ArrayCollection {
@@ -262,11 +227,11 @@ package org.bigbluebutton.main.model.users
 		
 		public function emojiStatus(e:EmojiStatusEvent):void {
 			// If the userId is not set in the event then the event has been dispatched for the current user
-			sender.emojiStatus(e.userId != "" ? e.userId : UserManager.getInstance().getConference().getMyUserId(), e.status);
+			sender.emojiStatus(e.userId != "" ? e.userId : UsersUtil.getMyUserID(), e.status);
 		}
 		
 		public function createBreakoutRooms(e:BreakoutRoomEvent):void{
-			sender.createBreakoutRooms(_conferenceParameters.meetingID, e.rooms, e.durationInMinutes, e.record);
+			sender.createBreakoutRooms(LiveMeeting.inst().meeting.internalId, e.rooms, e.durationInMinutes, e.record);
 		}
 
 		public function responseToGuest(e:ResponseModeratorEvent):void {
@@ -274,20 +239,21 @@ package org.bigbluebutton.main.model.users
 		}
 		
 		public function requestBreakoutJoinUrl(e:BreakoutRoomEvent):void{
-			sender.requestBreakoutJoinUrl(_conferenceParameters.meetingID, e.breakoutMeetingId, e.userId);
+			sender.requestBreakoutJoinUrl(LiveMeeting.inst().meeting.internalId, e.breakoutMeetingId, e.userId);
 		}
 		
 		public function listenInOnBreakout(e:BreakoutRoomEvent):void {
 			if (e.listen) {
-				sender.listenInOnBreakout(_conferenceParameters.meetingID, e.breakoutMeetingId, _conferenceParameters.userid);
+				sender.listenInOnBreakout(LiveMeeting.inst().meeting.internalId, 
+          e.breakoutMeetingId, LiveMeeting.inst().me.id);
 			} else {
-				sender.listenInOnBreakout(e.breakoutMeetingId, _conferenceParameters.meetingID, _conferenceParameters.userid);
+				sender.listenInOnBreakout(e.breakoutMeetingId, LiveMeeting.inst().meeting.internalId, LiveMeeting.inst().me.id);
 			}
 			UserManager.getInstance().getConference().setBreakoutRoomInListen(e.listen, e.breakoutMeetingId);
 		}
 
 		public function endAllBreakoutRooms(e:BreakoutRoomEvent):void {
-			sender.endAllBreakoutRooms(_conferenceParameters.meetingID);
+			sender.endAllBreakoutRooms(LiveMeeting.inst().meeting.internalId);
 		}
 
 		public function kickUser(e:KickUserEvent):void{
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml
old mode 100644
new mode 100755
index c254119396..7fbd85606c
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/AudioSelectionWindow.mxml
@@ -30,20 +30,21 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 
 	<fx:Script>
 		<![CDATA[
-			import com.asfusion.mate.events.Dispatcher;
-			
-			import org.as3commons.logging.api.ILogger;
-			import org.as3commons.logging.api.getClassLogger;
-			import org.bigbluebutton.core.Options;
-			import org.bigbluebutton.core.PopUpUtil;
-			import org.bigbluebutton.core.managers.UserManager;
-			import org.bigbluebutton.main.api.JSAPI;
-			import org.bigbluebutton.main.model.users.Conference;
-			import org.bigbluebutton.modules.phone.models.PhoneOptions;
-			import org.bigbluebutton.modules.phone.events.AudioSelectionWindowEvent;
-			import org.bigbluebutton.modules.phone.events.JoinVoiceConferenceCommand;
-			import org.bigbluebutton.modules.phone.events.UseFlashModeCommand;
-			import org.bigbluebutton.util.i18n.ResourceUtil;
+      import com.asfusion.mate.events.Dispatcher;
+      
+      import org.as3commons.logging.api.ILogger;
+      import org.as3commons.logging.api.getClassLogger;
+      import org.bigbluebutton.core.Options;
+      import org.bigbluebutton.core.PopUpUtil;
+      import org.bigbluebutton.core.managers.UserManager;
+      import org.bigbluebutton.core.model.LiveMeeting;
+      import org.bigbluebutton.main.api.JSAPI;
+      import org.bigbluebutton.main.model.users.Conference;
+      import org.bigbluebutton.modules.phone.events.AudioSelectionWindowEvent;
+      import org.bigbluebutton.modules.phone.events.JoinVoiceConferenceCommand;
+      import org.bigbluebutton.modules.phone.events.UseFlashModeCommand;
+      import org.bigbluebutton.modules.phone.models.PhoneOptions;
+      import org.bigbluebutton.util.i18n.ResourceUtil;
 			
 			private static const LOGGER:ILogger = getClassLogger(AudioSelectionWindow);      
 
@@ -56,11 +57,15 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				browserInfo = JSAPI.getInstance().getBrowserInfo();
 
 				var conference:Conference = UserManager.getInstance().getConference();
+        
 				if (!phoneOptions.listenOnlyMode)
 					btnListenOnly.enabled = false;
 
 				if (phoneOptions.showPhoneOption) {
-					txtPhone.text=ResourceUtil.getInstance().getString('bbb.audioSelection.txtPhone.text', [conference.dialNumber, conference.voiceBridge]);
+          var dialNumber: String = LiveMeeting.inst().meeting.dialNumber;
+          var voiceConf: String = LiveMeeting.inst().meeting.voiceConf;
+          
+					txtPhone.text=ResourceUtil.getInstance().getString('bbb.audioSelection.txtPhone.text', [dialNumber, voiceConf]);
 				} else {
 					vrulePhone.visible = vrulePhone.includeInLayout = false;
 					vboxPhone.visible = vboxPhone.includeInLayout = false;
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/LoggedOutWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/LoggedOutWindow.mxml
old mode 100644
new mode 100755
index 5915c29a4c..39846fe125
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/LoggedOutWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/LoggedOutWindow.mxml
@@ -120,7 +120,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 						message = ResourceUtil.getInstance().getString('bbb.logout.usercommand');
 						break;
 				}
-				if (message && UserManager.getInstance().getConference().isBreakout) {
+				if (message && UsersUtil.isBreakout()) {
 					message += "\n" + ResourceUtil.getInstance().getString('bbb.logour.breakoutRoomClose');
 				}
 			}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml
index a8a777f5ed..b473e9cc53 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml
@@ -768,7 +768,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 
             private function showlogoutWindow(reason:String):void {
                 if (layoutOptions != null && layoutOptions.showLogoutWindow) {
-                    if (UserManager.getInstance().getConference().iAskedToLogout) {
+                    if (UsersUtil.iAskedToLogout()) {
                         handleExitApplicationEvent();
                         return;
                     }
@@ -816,7 +816,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
             }
 
             private function handleExitApplicationEvent(e:ExitApplicationEvent = null):void {
-                if (!UserManager.getInstance().getConference().isBreakout) {
+                if (! UsersUtil.isBreakout()) {
                     navigateToURL(new URLRequest(BBB.getLogoutURL()), "_self");
                 } else {
                     ExternalInterface.call("window.close");
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml
old mode 100644
new mode 100755
index ffbe8bf02c..cf3a7e3c90
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml
@@ -50,44 +50,45 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 	</fx:Declarations>
 	<fx:Script>
 		<![CDATA[
-			import com.asfusion.mate.events.Dispatcher;
-			
-			import mx.binding.utils.BindingUtils;
-			import mx.controls.Alert;
-			import mx.core.FlexGlobals;
-			import mx.core.IToolTip;
-			import mx.core.UIComponent;
-			import mx.events.CloseEvent;
-			import mx.events.ToolTipEvent;
-			import mx.managers.PopUpManager;
-			
-			import org.as3commons.lang.ArrayUtils;
-			import org.as3commons.lang.StringUtils;
-			import org.as3commons.logging.api.ILogger;
-			import org.as3commons.logging.api.getClassLogger;
-			import org.bigbluebutton.common.IBbbToolbarComponent;
-			import org.bigbluebutton.common.events.SettingsComponentEvent;
-			import org.bigbluebutton.common.events.ToolbarButtonEvent;
-			import org.bigbluebutton.core.BBB;
-			import org.bigbluebutton.core.Options;
-			import org.bigbluebutton.core.UsersUtil;
-			import org.bigbluebutton.core.managers.UserManager;
-			import org.bigbluebutton.core.model.Config;
-			import org.bigbluebutton.main.events.BBBEvent;
-			import org.bigbluebutton.main.events.ConfigLoadedEvent;
-			import org.bigbluebutton.main.events.LogoutEvent;
-			import org.bigbluebutton.main.events.NetworkStatsEvent;
-			import org.bigbluebutton.main.events.SettingsEvent;
-			import org.bigbluebutton.main.events.ShortcutEvent;
-			import org.bigbluebutton.main.events.SuccessfulLoginEvent;
-			import org.bigbluebutton.main.model.NetworkStatsData;
-			import org.bigbluebutton.main.model.options.BrandingOptions;
-			import org.bigbluebutton.main.model.options.LayoutOptions;
-			import org.bigbluebutton.main.model.options.ShortcutKeysOptions;
-			import org.bigbluebutton.main.model.users.events.ChangeMyRole;
-			import org.bigbluebutton.main.model.users.events.ConferenceCreatedEvent;
-			import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent;
-			import org.bigbluebutton.util.i18n.ResourceUtil;
+      import com.asfusion.mate.events.Dispatcher;
+      
+      import mx.binding.utils.BindingUtils;
+      import mx.controls.Alert;
+      import mx.core.FlexGlobals;
+      import mx.core.IToolTip;
+      import mx.core.UIComponent;
+      import mx.events.CloseEvent;
+      import mx.events.ToolTipEvent;
+      import mx.managers.PopUpManager;
+      
+      import org.as3commons.lang.ArrayUtils;
+      import org.as3commons.lang.StringUtils;
+      import org.as3commons.logging.api.ILogger;
+      import org.as3commons.logging.api.getClassLogger;
+      import org.bigbluebutton.common.IBbbToolbarComponent;
+      import org.bigbluebutton.common.events.SettingsComponentEvent;
+      import org.bigbluebutton.common.events.ToolbarButtonEvent;
+      import org.bigbluebutton.core.BBB;
+      import org.bigbluebutton.core.Options;
+      import org.bigbluebutton.core.UsersUtil;
+      import org.bigbluebutton.core.managers.UserManager;
+      import org.bigbluebutton.core.model.Config;
+      import org.bigbluebutton.core.model.LiveMeeting;
+      import org.bigbluebutton.main.events.BBBEvent;
+      import org.bigbluebutton.main.events.ConfigLoadedEvent;
+      import org.bigbluebutton.main.events.LogoutEvent;
+      import org.bigbluebutton.main.events.NetworkStatsEvent;
+      import org.bigbluebutton.main.events.SettingsEvent;
+      import org.bigbluebutton.main.events.ShortcutEvent;
+      import org.bigbluebutton.main.events.SuccessfulLoginEvent;
+      import org.bigbluebutton.main.model.NetworkStatsData;
+      import org.bigbluebutton.main.model.options.BrandingOptions;
+      import org.bigbluebutton.main.model.options.LayoutOptions;
+      import org.bigbluebutton.main.model.options.ShortcutKeysOptions;
+      import org.bigbluebutton.main.model.users.events.ChangeMyRole;
+      import org.bigbluebutton.main.model.users.events.ConferenceCreatedEvent;
+      import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent;
+      import org.bigbluebutton.util.i18n.ResourceUtil;
 
 			private static const LOGGER:ILogger = getClassLogger(MainToolbar);
 
@@ -132,7 +133,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
                 timer.addEventListener(TimerEvent.TIMER, checkAccessiblity);
                 timer.start();
 
-				BindingUtils.bindSetter(refreshModeratorButtonsVisibility, UserManager.getInstance().getConference(), "record");
+				BindingUtils.bindSetter(refreshModeratorButtonsVisibility, LiveMeeting.inst().meeting, "recorded");
 			}
       
       private function checkAccessiblity(e:TimerEvent):void {
@@ -182,7 +183,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			
       private function retrieveMeetingName(e:ConferenceCreatedEvent):void {
          if (toolbarOptions.showMeetingName) {
-              var meetingTitle:String = BBB.initUserConfigManager().getMeetingTitle();                   
+              var meetingTitle:String = LiveMeeting.inst().meeting.name;                   
               if (meetingTitle != null) {
                   meetingNameLbl.text = meetingTitle;
                   meetingNameLbl.toolTip = meetingTitle;
@@ -286,7 +287,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			private function alertLogout(e:CloseEvent):void {
 				// Check to see if the YES button was pressed.
 				if (e.detail==Alert.YES) {
-					UserManager.getInstance().getConference().iAskedToLogout = true;
+					UsersUtil.setIAskedToLogout(true);
 					/* 
 					 * If doLogout() is called immediately there is a null exception in AlertAccImpl
 					 * line 185, but if we delay calling doLogout() until the next frame the Alert 
@@ -447,7 +448,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 		}
         
         if (toolbarOptions.showMeetingName) {
-          var meetingTitle:String = BBB.initUserConfigManager().getMeetingTitle();                   
+          var meetingTitle:String = LiveMeeting.inst().meeting.name;                   
           if (meetingTitle != null) {
             meetingNameLbl.text += " " + meetingTitle;
           } 
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MuteMeButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MuteMeButton.mxml
index 71ea32187d..91a25f5c9f 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MuteMeButton.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MuteMeButton.mxml
@@ -81,7 +81,7 @@ $Id: $
 			
 			private function handleUserTalking(e:CoreEvent):void {
 				//rest rolledOver when the data changes because onRollOut wont be called if the row moves
-				if (UserManager.getInstance().getConference().amIThisUser(e.message.userID)) {
+				if (UsersUtil.isMe(e.message.userID)) {
 					if (e.message.talking){
 						muteMeBtnImg.filters = [new GlowFilter(0x000000, 1, 6, 6, 2, BitmapFilterQuality.HIGH, false, false)];
 					} else {
@@ -209,8 +209,8 @@ $Id: $
 					if (!allowMuteUnmute()) return;
 					
 					var e:VoiceConfEvent = new VoiceConfEvent(VoiceConfEvent.MUTE_USER);
-					e.userid = UserManager.getInstance().getConference().getMyUserId();
-					e.mute = !UserManager.getInstance().getConference().isMyVoiceMuted();
+					e.userid = UsersUtil.getMyUserID();
+					e.mute = ! UsersUtil.isMyVoiceMuted();
 					dispatchEvent(e);
 				}
 			}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/RecordButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/RecordButton.mxml
old mode 100644
new mode 100755
index 09ff59d58f..f940041326
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/RecordButton.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/RecordButton.mxml
@@ -42,26 +42,26 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 	</fx:Declarations>
 	<fx:Script>
 		<![CDATA[
-			import com.asfusion.mate.events.Dispatcher;
-			
-			import flash.net.navigateToURL;
-			
-			import mx.controls.Alert;
-			import mx.events.CloseEvent;
-			import mx.managers.PopUpManager;
-			
-			import org.as3commons.logging.api.ILogger;
-			import org.as3commons.logging.api.getClassLogger;
-			import org.bigbluebutton.core.BBB;
-			import org.bigbluebutton.core.Options;
-			import org.bigbluebutton.core.managers.UserManager;
-			import org.bigbluebutton.core.model.MeetingModel;
-			import org.bigbluebutton.main.events.BBBEvent;
-			import org.bigbluebutton.main.model.options.LayoutOptions;
-			import org.bigbluebutton.main.model.users.events.ChangeMyRole;
-			import org.bigbluebutton.modules.phone.events.FlashJoinedVoiceConferenceEvent;
-			import org.bigbluebutton.modules.phone.events.WebRTCCallEvent;
-			import org.bigbluebutton.util.i18n.ResourceUtil;
+      import com.asfusion.mate.events.Dispatcher;
+      
+      import flash.net.navigateToURL;
+      
+      import mx.controls.Alert;
+      import mx.events.CloseEvent;
+      import mx.managers.PopUpManager;
+      
+      import org.as3commons.logging.api.ILogger;
+      import org.as3commons.logging.api.getClassLogger;
+      import org.bigbluebutton.core.BBB;
+      import org.bigbluebutton.core.Options;
+      import org.bigbluebutton.core.UsersUtil;
+      import org.bigbluebutton.core.model.LiveMeeting;
+      import org.bigbluebutton.main.events.BBBEvent;
+      import org.bigbluebutton.main.model.options.LayoutOptions;
+      import org.bigbluebutton.main.model.users.events.ChangeMyRole;
+      import org.bigbluebutton.modules.phone.events.FlashJoinedVoiceConferenceEvent;
+      import org.bigbluebutton.modules.phone.events.WebRTCCallEvent;
+      import org.bigbluebutton.util.i18n.ResourceUtil;
 
 			private static const LOGGER:ILogger = getClassLogger(RecordButton);
 
@@ -147,8 +147,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 
 				resourcesChanged();
 
-				if (UserManager.getInstance().getConference().record) {
-					this.enabled = UserManager.getInstance().getConference().amIModerator() && MeetingModel.getInstance().meeting.allowStartStopRecording;
+				if (LiveMeeting.inst().meeting.recorded) {
+					this.enabled = UsersUtil.amIModerator() 
+						&& LiveMeeting.inst().meeting.allowStartStopRecording;
 				}
 
 				if (! this.enabled) {
@@ -175,8 +176,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			private function showRecordingNotification():void {
 				if (firstAudioJoin && this.visible && !this.selected 
 						&& getLayoutOptions().showRecordingNotification
-						&& UserManager.getInstance().getConference().amIModerator()
-						&& MeetingModel.getInstance().meeting.allowStartStopRecording
+						&& UsersUtil.amIModerator()
+						&& LiveMeeting.inst().meeting.allowStartStopRecording
 						&& this.enabled) {
 					var alert:Alert = Alert.show(ResourceUtil.getInstance().getString("bbb.mainToolbar.recordBtn..notification.message1") + "\n\n" + ResourceUtil.getInstance().getString("bbb.mainToolbar.recordBtn..notification.message2"), ResourceUtil.getInstance().getString("bbb.mainToolbar.recordBtn..notification.title"), Alert.OK, this);
 					// we need to set transparency duration to avoid the blur effect when two alerts are displayed sequentially
@@ -201,21 +202,21 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			}
 			
 			private function onRecordButtonMouseOver(event:MouseEvent):void {
-				if (UserManager.getInstance().getConference().amIModerator() && UserManager.getInstance().getConference().record) {
+				if (UsersUtil.amIModerator() && LiveMeeting.inst().meeting.recorded) {
 					this.styleName = this.selected? "recordButtonStyleStop": "recordButtonStyleStart";
 				}
 			}
 
 			private function onRecordButtonMouseOut(event:MouseEvent):void {
-				if (UserManager.getInstance().getConference().amIModerator() && UserManager.getInstance().getConference().record) {
+				if (UsersUtil.amIModerator() && LiveMeeting.inst().meeting.recorded) {
 					this.styleName = this.selected? "recordButtonStyleStart": "recordButtonStyleNormal";
 				}
 			}
 
 			private function updateToolTip():void {
-				if (UserManager.getInstance().getConference().record) {
-					if (UserManager.getInstance().getConference().amIModerator()) {
-						if (MeetingModel.getInstance().meeting.allowStartStopRecording) {
+				if (LiveMeeting.inst().meeting.recorded) {
+					if (UsersUtil.amIModerator()) {
+						if (LiveMeeting.inst().meeting.allowStartStopRecording) {
 							if (this.selected) {
 								this.toolTip = ResourceUtil.getInstance().getString('bbb.mainToolbar.recordBtn.toolTip.stop');
 							} else {
@@ -232,9 +233,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 						}
 					}
 				} else {
-					if (UserManager.getInstance().getConference().amIModerator()) {
-						if (MeetingModel.getInstance().meeting.isMetadata("wont-record-message")) {
-							this.toolTip = MeetingModel.getInstance().meeting.metadata["wont-record-message"];
+					if (UsersUtil.amIModerator()) {
+						if (LiveMeeting.inst().meeting.metadata.hasOwnProperty("wont-record-message")) {
+							this.toolTip = LiveMeeting.inst().meeting.metadata["wont-record-message"];
 						} else {
 							this.toolTip = ResourceUtil.getInstance().getString('bbb.mainToolbar.recordBtn.toolTip.wontRecord');
 						}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/managers/BroadcastManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/managers/BroadcastManager.as
old mode 100644
new mode 100755
index 3ac2e98563..510bf6eea8
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/managers/BroadcastManager.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/managers/BroadcastManager.as
@@ -23,6 +23,7 @@ package org.bigbluebutton.modules.broadcast.managers
 	import org.as3commons.logging.api.ILogger;
 	import org.as3commons.logging.api.getClassLogger;
 	import org.bigbluebutton.common.events.OpenWindowEvent;
+	import org.bigbluebutton.core.UsersUtil;
 	import org.bigbluebutton.core.managers.UserManager;
 	import org.bigbluebutton.main.events.BBBEvent;
 	import org.bigbluebutton.modules.broadcast.models.BroadcastOptions;
@@ -77,7 +78,7 @@ package org.bigbluebutton.modules.broadcast.managers
       
       sendWhatIsTheCurrentStreamRequest();
       
-      if (UserManager.getInstance().getConference().amIPresenter) {
+      if (UsersUtil.amIPresenter()) {
         handleSwitchToPresenterMode();
       } else {
         handleSwitchToViewerMode();
@@ -113,7 +114,7 @@ package org.bigbluebutton.modules.broadcast.managers
 		
 		public function handleWhatIsTheCurrentStreamRequest(event:BBBEvent):void {
 			LOGGER.debug("BroadcastManager:: handleWhatIsTheCurrentStreamRequest {0}", [event.payload["requestedBy"]]);
-			var isPresenter:Boolean = UserManager.getInstance().getConference().amIPresenter;
+			var isPresenter:Boolean = UsersUtil.amIPresenter();
 			if (isPresenter && curStream != null) {
 				LOGGER.debug("MessageSender:: sendWhatIsTheCurrentStreamReply [{0},{1}]", [event.payload["requestedBy"], curStream.getStreamId()]);
 				broadcastService.sendWhatIsTheCurrentStreamReply(event.payload["requestedBy"], curStream.getStreamId());
@@ -122,8 +123,9 @@ package org.bigbluebutton.modules.broadcast.managers
 		
 		public function handleWhatIsTheCurrentStreamReply(event:BBBEvent):void {
 			LOGGER.debug("BroadcastManager:: handleWhatIsTheCurrentStreamReply [{0},{1}]",[event.payload["requestedBy"], event.payload["streamID"]]);
-			var amIRequester:Boolean = UserManager.getInstance().getConference().amIThisUser(event.payload["requestedBy"]);
-			LOGGER.debug("BroadcastManager:: handleWhatIsTheCurrentStreamReply [my id={0}, requester={1}]", [UserManager.getInstance().getConference().getMyUserId(), event.payload["requestedBy"]]);
+			var amIRequester:Boolean = UsersUtil.isMe(event.payload["requestedBy"]);
+			LOGGER.debug("BroadcastManager:: handleWhatIsTheCurrentStreamReply [my id={0}, requester={1}]", 
+        [UsersUtil.getMyUserID(), event.payload["requestedBy"]]);
 			if (amIRequester) {
 				var streamId:String = event.payload["streamID"];
 				var info:Object = streams.getStreamNameAndUrl(streamId);
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/services/MessageSender.as b/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/services/MessageSender.as
old mode 100644
new mode 100755
index bedf4d072a..6e1c88bba8
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/services/MessageSender.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/broadcast/services/MessageSender.as
@@ -21,6 +21,7 @@ package org.bigbluebutton.modules.broadcast.services
   import org.as3commons.logging.api.ILogger;
   import org.as3commons.logging.api.getClassLogger;
   import org.bigbluebutton.core.BBB;
+  import org.bigbluebutton.core.UsersUtil;
   import org.bigbluebutton.core.managers.ConnectionManager;
   import org.bigbluebutton.core.managers.UserManager;
 
@@ -65,7 +66,7 @@ package org.bigbluebutton.modules.broadcast.services
     public function sendWhatIsTheCurrentStreamRequest():void {
       var message:Object = new Object();
       message["messageID"] = "BroadcastWhatIsTheCurrentStreamRequest";	
-      message["requestedBy"] = UserManager.getInstance().getConference().getMyUserId();
+      message["requestedBy"] = UsersUtil.getMyUserID();
         
       var _nc:ConnectionManager = BBB.initConnectionManager();
       _nc.sendMessage("bigbluebutton.sendMessage", 
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/CaptionWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/CaptionWindow.mxml
index 9ee3d3dccf..a233d3a9d1 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/CaptionWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/CaptionWindow.mxml
@@ -36,25 +36,26 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 
 	<fx:Script>
 		<![CDATA[
-			import com.asfusion.mate.events.Dispatcher;
-			
-			import mx.binding.utils.BindingUtils;
-			import mx.binding.utils.ChangeWatcher;
-			import mx.collections.ArrayCollection;
-			import mx.controls.Button;
-			
-			import flexlib.controls.tabBarClasses.SuperTab;
-			
-			import org.bigbluebutton.common.events.LocaleChangeEvent;
-			import org.bigbluebutton.core.Options;
-			import org.bigbluebutton.core.managers.UserManager;
-			import org.bigbluebutton.main.events.ShortcutEvent;
-			import org.bigbluebutton.main.views.MainCanvas;
-			import org.bigbluebutton.modules.caption.events.RequestTranscriptsEvent;
-			import org.bigbluebutton.modules.caption.model.CaptionOptions;
-			import org.bigbluebutton.modules.caption.model.Transcript;
-			import org.bigbluebutton.modules.caption.model.Transcripts;
-			import org.bigbluebutton.util.i18n.ResourceUtil;
+      import com.asfusion.mate.events.Dispatcher;
+      
+      import mx.binding.utils.BindingUtils;
+      import mx.binding.utils.ChangeWatcher;
+      import mx.collections.ArrayCollection;
+      import mx.controls.Button;
+      
+      import flexlib.controls.tabBarClasses.SuperTab;
+      
+      import org.bigbluebutton.common.events.LocaleChangeEvent;
+      import org.bigbluebutton.core.Options;
+      import org.bigbluebutton.core.UsersUtil;
+      import org.bigbluebutton.core.managers.UserManager;
+      import org.bigbluebutton.main.events.ShortcutEvent;
+      import org.bigbluebutton.main.views.MainCanvas;
+      import org.bigbluebutton.modules.caption.events.RequestTranscriptsEvent;
+      import org.bigbluebutton.modules.caption.model.CaptionOptions;
+      import org.bigbluebutton.modules.caption.model.Transcript;
+      import org.bigbluebutton.modules.caption.model.Transcripts;
+      import org.bigbluebutton.util.i18n.ResourceUtil;
 			
 			[Bindable]
 			private var transcriptsCollection:ArrayCollection;
@@ -107,7 +108,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			private function setTranscripts(t:Transcripts):void {
 				transcriptsObject = t;
 				
-				if (UserManager.getInstance().getConference().amIModerator()) {
+				if (UsersUtil.amIModerator()) {
 					transcriptsCollection = new ArrayCollection();
 					
 					var locales:Array = ResourceUtil.getInstance().locales;
@@ -188,7 +189,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 					//unclaimed text
 					//ownerNameOutputLabel.text = "Owner - " + "None";
 					textTab.label += ResourceUtil.getInstance().getString('bbb.caption.transcript.noowner');
-				} else if (ownerId == UserManager.getInstance().getConference().getMyUserId()) {
+				} else if (ownerId == UsersUtil.getMyUserID()) {
 					//release text
 					textTab.label += ResourceUtil.getInstance().getString('bbb.caption.transcript.youowner');
 				} else {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/TextTab.as b/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/TextTab.as
index b60470ff1b..87d49638cc 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/TextTab.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/caption/views/TextTab.as
@@ -38,13 +38,12 @@ package org.bigbluebutton.modules.caption.views {
 	import mx.events.FlexEvent;
 	
 	import org.bigbluebutton.common.events.LocaleChangeEvent;
-	import org.bigbluebutton.core.managers.UserManager;
+	import org.bigbluebutton.core.UsersUtil;
 	import org.bigbluebutton.modules.caption.events.SendEditCaptionHistoryEvent;
 	import org.bigbluebutton.modules.caption.events.SendUpdateCaptionOwnerEvent;
 	import org.bigbluebutton.modules.caption.model.CaptionOptions;
 	import org.bigbluebutton.modules.caption.model.Transcript;
 	import org.bigbluebutton.util.i18n.ResourceUtil;
-	import org.osmf.events.TimeEvent;
 
 	public class TextTab extends VBox {
 		
@@ -179,7 +178,7 @@ package org.bigbluebutton.modules.caption.views {
 			//check focus targets before switching visibility
 			var focusedTextArea:TextArea2 = null;
 			
-			if (ownerID == UserManager.getInstance().getConference().getMyUserId()) {
+			if (ownerID == UsersUtil.getMyUserID()) {
 				claimButton.visible = claimButton.includeInLayout = false;
 				
 				if (focusManager && focusManager.getFocus() == outputArea) {
@@ -192,7 +191,7 @@ package org.bigbluebutton.modules.caption.views {
 				inputArea.getInternalTextField().type = TextFieldType.INPUT;
 				inputArea.text = currentTranscript.transcript;
 			} else {
-				claimButton.visible = claimButton.includeInLayout = UserManager.getInstance().getConference().amIModerator();
+				claimButton.visible = claimButton.includeInLayout = UsersUtil.amIModerator();
 				
 				if (focusManager && focusManager.getFocus() == outputArea) {
 					delayedFocusTextArea();
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as
index 72c4d26424..e886d5f7dc 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/services/ChatMessageService.as
@@ -25,7 +25,7 @@ package org.bigbluebutton.modules.chat.services
   import org.as3commons.logging.api.getClassLogger;
   import org.bigbluebutton.core.BBB;
   import org.bigbluebutton.core.UsersUtil;
-  import org.bigbluebutton.core.model.MeetingModel;
+  import org.bigbluebutton.core.model.LiveMeeting;
   import org.bigbluebutton.modules.chat.ChatConstants;
   import org.bigbluebutton.modules.chat.events.PublicChatMessageEvent;
   import org.bigbluebutton.modules.chat.vo.ChatMessageVO;
@@ -95,7 +95,7 @@ package org.bigbluebutton.modules.chat.services
     
     public function sendWelcomeMessage():void {
 	  LOGGER.debug("sendWelcomeMessage");
-      var welcome:String = BBB.initUserConfigManager().getWelcomeMessage();
+      var welcome:String = LiveMeeting.inst().me.welcome;
       if (welcome != "") {
         var welcomeMsg:ChatMessageVO = new ChatMessageVO();
         welcomeMsg.chatType = ChatConstants.PUBLIC_CHAT;
@@ -118,7 +118,7 @@ package org.bigbluebutton.modules.chat.services
       }	
       
       if (UsersUtil.amIModerator()) {
-        if (MeetingModel.getInstance().modOnlyMessage != null) {
+        if (LiveMeeting.inst().meeting.modOnlyMessage != null) {
           var moderatorOnlyMsg:ChatMessageVO = new ChatMessageVO();
           moderatorOnlyMsg.chatType = ChatConstants.PUBLIC_CHAT;
           moderatorOnlyMsg.fromUserID = SPACE;
@@ -128,7 +128,7 @@ package org.bigbluebutton.modules.chat.services
           moderatorOnlyMsg.fromTimezoneOffset = new Date().getTimezoneOffset();
           moderatorOnlyMsg.toUserID = SPACE;
           moderatorOnlyMsg.toUsername = SPACE;
-          moderatorOnlyMsg.message = MeetingModel.getInstance().modOnlyMessage;
+          moderatorOnlyMsg.message = LiveMeeting.inst().meeting.modOnlyMessage;
           
           var moderatorOnlyMsgEvent:PublicChatMessageEvent = new PublicChatMessageEvent(PublicChatMessageEvent.PUBLIC_CHAT_MESSAGE_EVENT);
           moderatorOnlyMsgEvent.message = moderatorOnlyMsg;
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml
index fb800e273b..0ae75755dd 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/chat/views/ChatBox.mxml
@@ -181,7 +181,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				
 				chatMessagesList.accessibilityProperties.description = ResourceUtil.getInstance().getString('bbb.accessibility.chat.initialDescription');
 				
-				if (publicChat && UserManager.getInstance().getConference().isBreakout){
+				if (publicChat && UsersUtil.isBreakout()){
 					var timerListener : Listener = new Listener();
 					timerListener.type = BreakoutRoomEvent.UPDATE_REMAINING_TIME_BREAKOUT;
 					timerListener.method = handleRemaininTimeBreakout;
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/model/LayoutDefinition.as b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/model/LayoutDefinition.as
index c2485cc8f2..f6facc64e2 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/model/LayoutDefinition.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/model/LayoutDefinition.as
@@ -82,9 +82,9 @@ package org.bigbluebutton.modules.layout.model {
 			var hasModeratorLayout:Boolean = _layoutsPerRole.hasOwnProperty(Role.MODERATOR);
 			var hasPresenterLayout:Boolean = _layoutsPerRole.hasOwnProperty(Role.PRESENTER);
 			
-			if (UserManager.getInstance().getConference().amIPresenter && hasPresenterLayout) {
+			if (UsersUtil.amIPresenter() && hasPresenterLayout) {
 				return _layoutsPerRole[Role.PRESENTER];
-			} else if (UserManager.getInstance().getConference().amIModerator() && hasModeratorLayout) {
+			} else if (UsersUtil.amIModerator() && hasModeratorLayout) {
 				return _layoutsPerRole[Role.MODERATOR];
 			} else if (hasViewerLayout)   {
 				return _layoutsPerRole[Role.VIEWER];
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml
index 4a2a5c6398..2910ecaaad 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/AddButton.mxml
@@ -26,19 +26,17 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 		   toolTip="{ResourceUtil.getInstance().getString('bbb.layout.addButton.toolTip')}"
 		   styleName="addLayoutButtonStyle"
 		   click="onClick(event)"
-		   enabled="{UserManager.getInstance().getConference().amIModerator()}">
+		   enabled="{UsersUtil.amIModerator()}">
 	
 	<fx:Script>
 		<![CDATA[
 			import com.asfusion.mate.events.Dispatcher;
-			
+      import org.bigbluebutton.core.UsersUtil;
 			import flash.events.Event;
 			
 			import mx.core.FlexGlobals;
 			import mx.core.IFlexDisplayObject;
 			import mx.managers.PopUpManager;
-			import org.bigbluebutton.common.Images;
-			import org.bigbluebutton.core.managers.UserManager;
 			import org.bigbluebutton.util.i18n.ResourceUtil;
 
 			private var _dispatcher:Dispatcher = new Dispatcher();
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/BroadcastButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/BroadcastButton.mxml
old mode 100644
new mode 100755
index c1cd2b3de3..396174aba2
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/BroadcastButton.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/BroadcastButton.mxml
@@ -29,16 +29,16 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 
 	<fx:Script>
 		<![CDATA[
-			import com.asfusion.mate.events.Dispatcher;
-
-			import org.bigbluebutton.core.managers.UserManager;
-			import org.bigbluebutton.modules.layout.events.LayoutEvent;
-			import org.bigbluebutton.util.i18n.ResourceUtil;
+      import com.asfusion.mate.events.Dispatcher;
+      
+      import org.bigbluebutton.core.UsersUtil;
+      import org.bigbluebutton.modules.layout.events.LayoutEvent;
+      import org.bigbluebutton.util.i18n.ResourceUtil;
 
 			private var _dispatcher:Dispatcher = new Dispatcher();
 			
 			private function init():void {
-				refreshRole(UserManager.getInstance().getConference().amIModerator());
+				refreshRole(UsersUtil.amIModerator());
 			}
 			
 			private function onClick(e:Event):void {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/LoadButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/LoadButton.mxml
index 61f6f52949..2b77167950 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/LoadButton.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/LoadButton.mxml
@@ -26,13 +26,12 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 		   toolTip="{ResourceUtil.getInstance().getString('bbb.layout.loadButton.toolTip')}"
 		   styleName="loadLayoutButtonStyle"
 		   click="onClick(event)"
-		   enabled="{UserManager.getInstance().getConference().amIModerator()}">
+		   enabled="{UsersUtil.amIModerator()}">
 	
 	<fx:Script>
 		<![CDATA[
 			import com.asfusion.mate.events.Dispatcher;
-
-			import org.bigbluebutton.core.managers.UserManager;
+      import org.bigbluebutton.core.UsersUtil;
 			import org.bigbluebutton.modules.layout.events.LayoutEvent;
 			import org.bigbluebutton.util.i18n.ResourceUtil;
 
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/SaveButton.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/SaveButton.mxml
index 0c51695404..1109b80da5 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/SaveButton.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/SaveButton.mxml
@@ -26,15 +26,14 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 		   toolTip="{ResourceUtil.getInstance().getString('bbb.layout.saveButton.toolTip')}"
 		   styleName="saveLayoutButtonStyle"
 		   click="onClick(event)"
-		   enabled="{UserManager.getInstance().getConference().amIModerator()}">
+		   enabled="{UsersUtil.amIModerator()}">
 	
 	<fx:Script>
 		<![CDATA[
 			import com.asfusion.mate.events.Dispatcher;
-
-			import org.bigbluebutton.core.managers.UserManager;
 			import org.bigbluebutton.modules.layout.events.LayoutEvent;
 			import org.bigbluebutton.util.i18n.ResourceUtil;
+      import org.bigbluebutton.core.UsersUtil;
 
 			private var _dispatcher:Dispatcher = new Dispatcher();
 			
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/ToolbarComponent.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/ToolbarComponent.mxml
old mode 100644
new mode 100755
index fdaf43dd64..63eaaa21ef
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/ToolbarComponent.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/views/ToolbarComponent.mxml
@@ -28,12 +28,12 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 	
 	<fx:Script>
 		<![CDATA[
-			import com.asfusion.mate.events.Dispatcher;
-			import flexlib.mdi.containers.MDICanvas;
-			import org.bigbluebutton.core.managers.UserManager;
-			import org.bigbluebutton.main.views.MainToolbar;
-			import org.bigbluebutton.modules.layout.events.ViewInitializedEvent;
-			import org.bigbluebutton.modules.layout.model.WindowLayout;
+      import com.asfusion.mate.events.Dispatcher;
+      import flexlib.mdi.containers.MDICanvas;
+      import org.bigbluebutton.core.UsersUtil;
+      import org.bigbluebutton.main.views.MainToolbar;
+      import org.bigbluebutton.modules.layout.events.ViewInitializedEvent;
+      import org.bigbluebutton.modules.layout.model.WindowLayout;
 
 			private var _dispatcher:Dispatcher = new Dispatcher();
 			[Bindable] private var _enableEdit:Boolean = false;
@@ -46,7 +46,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			}
 			
 			public function set enableEdit(arg:Boolean):void {
-				_enableEdit = arg && UserManager.getInstance().getConference().amIModerator();
+				_enableEdit = arg && UsersUtil.amIModerator();
 			}
 
 			public function refreshRole(amIModerator:Boolean):void {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/SlideView.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/SlideView.mxml
index a8039853ff..2d1392662c 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/SlideView.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/SlideView.mxml
@@ -201,7 +201,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				
 				slideModel.parentChange(parentWidth, parentHeight);
 				
-				if (UserManager.getInstance().getConference().amIPresenter) {
+				if (UsersUtil.amIPresenter()) {
 					slideModel.adjustSlideAfterParentResized();
 					slideModel.onMove(0, 0); // fake a move to reset some values
 					slideModel.displayPresenterView();
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCDeskshareManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCDeskshareManager.as
index d8439c44ad..bc215154db 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCDeskshareManager.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/managers/WebRTCDeskshareManager.as
@@ -123,8 +123,8 @@ package org.bigbluebutton.modules.screenshare.managers
 				};
 				ExternalInterface.addCallback("onFail", onFail);
 
-				var voiceBridge:String = UserManager.getInstance().getConference().voiceBridge;
-				var myName:String = UserManager.getInstance().getConference().getMyName();
+				var voiceBridge:String = UsersUtil.getVoiceBridge();
+				var myName:String = UsersUtil.getMyUsername();
 
 				ExternalInterface.call(
 					'vertoShareScreen',
@@ -239,7 +239,7 @@ package org.bigbluebutton.modules.screenshare.managers
 
 		public function handleStreamStartEvent(e:WebRTCViewStreamEvent):void{
 			if (sharing) return; //TODO must uncomment this for the non-webrtc desktop share
-			var isPresenter:Boolean = UserManager.getInstance().getConference().amIPresenter;
+			var isPresenter:Boolean = UsersUtil.amIPresenter();
 			LOGGER.debug("Received start viewing command when isPresenter==[{0}]",[isPresenter]);
 
 			if(isPresenter && usingWebRTC) {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/managers/SharedNotesManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/managers/SharedNotesManager.as
index 8d8e6d01da..75672613cf 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/managers/SharedNotesManager.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/sharednotes/managers/SharedNotesManager.as
@@ -18,15 +18,14 @@
 */
 
 package org.bigbluebutton.modules.sharednotes.managers {
-	import com.asfusion.mate.events.Dispatcher;
 
 	import org.as3commons.logging.api.ILogger;
 	import org.as3commons.logging.api.getClassLogger;
+	import org.bigbluebutton.core.UsersUtil;
 	import org.bigbluebutton.modules.sharednotes.events.SendPatchEvent;
 	import org.bigbluebutton.modules.sharednotes.events.SharedNotesEvent;
 	import org.bigbluebutton.modules.sharednotes.services.MessageReceiver;
 	import org.bigbluebutton.modules.sharednotes.services.MessageSender;
-	import org.bigbluebutton.core.managers.UserManager;
 
 	public class SharedNotesManager {
 		private static const LOGGER:ILogger = getClassLogger(SharedNotesManager);
@@ -42,7 +41,7 @@ package org.bigbluebutton.modules.sharednotes.managers {
 		}
 
 		public function patchDocument(e:SendPatchEvent):void {
-			sender.patchDocument(e.noteId, UserManager.getInstance().getConference().getMyUserId(), e.patch, e.operation);
+			sender.patchDocument(e.noteId, UsersUtil.getMyUserID(), e.patch, e.operation);
 		}
 
 		public function getCurrentDocument():void {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as
index 21e6a36d8d..85e925c372 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as
@@ -31,7 +31,7 @@ package org.bigbluebutton.modules.users.services
   import org.bigbluebutton.core.events.CoreEvent;
   import org.bigbluebutton.core.events.VoiceConfEvent;
   import org.bigbluebutton.core.managers.UserManager;
-  import org.bigbluebutton.core.model.MeetingModel;
+  import org.bigbluebutton.core.model.LiveMeeting;
   import org.bigbluebutton.core.services.UsersService;
   import org.bigbluebutton.core.vo.LockSettingsVO;
   import org.bigbluebutton.main.events.BBBEvent;
@@ -242,7 +242,7 @@ package org.bigbluebutton.modules.users.services
     }
     
     private function sendRecordingStatusUpdate(recording:Boolean):void {
-      MeetingModel.getInstance().recording = recording;
+      LiveMeeting.inst().meetingStatus.isRecording = recording;
       
       var e:BBBEvent = new BBBEvent(BBBEvent.CHANGE_RECORDING_STATUS);
       e.payload.remote = true;
@@ -261,14 +261,14 @@ package org.bigbluebutton.modules.users.services
       dispatcher.dispatchEvent(e);      
 
       // If the user was the presenter he's reconnecting and must become viewer
-      if (UserManager.getInstance().getConference().amIPresenter) {
+      if (UsersUtil.amIPresenter()) {
         sendSwitchedPresenterEvent(false, UsersUtil.getPresenterUserID());
-        UserManager.getInstance().getConference().amIPresenter = false;
+        UsersUtil.setMeAsPresenter(false);
         var viewerEvent:MadePresenterEvent = new MadePresenterEvent(MadePresenterEvent.SWITCH_TO_VIEWER_MODE);
         dispatcher.dispatchEvent(viewerEvent);
       }
 
-      var myRole:String = UserManager.getInstance().getConference().whatsMyRole();
+      var myRole:String = UsersUtil.getMyRole();
       var role:String = map.user.role;
       // If a (pro/de)moted user refresh his browser he must reassing his role for permissions
       if (role != myRole) {
@@ -282,7 +282,7 @@ package org.bigbluebutton.modules.users.services
     private function handleMeetingMuted(msg:Object):void {
       var map:Object = JSON.parse(msg.msg);
       if (map.hasOwnProperty("meetingMuted")) {
-        MeetingModel.getInstance().meetingMuted = map.meetingMuted;
+        LiveMeeting.inst().meetingStatus.isMeetingMuted = map.meetingMuted;
         dispatcher.dispatchEvent(new MeetingMutedEvent());
       }
     }
@@ -294,9 +294,9 @@ package org.bigbluebutton.modules.users.services
       var lockSettings:LockSettingsVO = new LockSettingsVO(perm.disableCam, perm.disableMic,
                                                  perm.disablePrivateChat, perm.disablePublicChat, perm.lockedLayout, perm.lockOnJoin, perm.lockOnJoinConfigurable);
       UserManager.getInstance().getConference().setLockSettings(lockSettings);
-      MeetingModel.getInstance().meetingMuted = map.meetingMuted;
+	  LiveMeeting.inst().meetingStatus.isMeetingMuted = map.meetingMuted;
       
-      UserManager.getInstance().getConference().applyLockSettings();
+      UsersUtil.applyLockSettings();
     }
     
     private function handleInactivityWarning(msg:Object):void {
@@ -398,7 +398,7 @@ package org.bigbluebutton.modules.users.services
        * Let's store the voice userid so we can do push to talk.
        */
       if (l != null) {
-        if (_conference.getMyUserId() == l.userID) {
+        if (UsersUtil.getMyUserID() == l.userID) {
           _conference.muteMyVoice(false);
           _conference.setMyVoiceJoined(false);
         }
@@ -531,7 +531,7 @@ package org.bigbluebutton.modules.users.services
           processUserVoice(user);
         }
         
-        UserManager.getInstance().getConference().applyLockSettings();
+        UsersUtil.applyLockSettings();
       }	 
     }
     
@@ -566,10 +566,11 @@ package org.bigbluebutton.modules.users.services
       
       var meeting:Conference = UserManager.getInstance().getConference();
       
-      if (meeting.amIThisUser(newPresenterID)) {
+      if (UsersUtil.isMe(newPresenterID)) {
         sendSwitchedPresenterEvent(true, newPresenterID);
         
-        meeting.amIPresenter = true;				
+        UsersUtil.setMeAsPresenter(true);
+        
         var e:MadePresenterEvent = new MadePresenterEvent(MadePresenterEvent.SWITCH_TO_PRESENTER_MODE);
         e.userID = newPresenterID;
         e.presenterName = newPresenterName;
@@ -580,7 +581,7 @@ package org.bigbluebutton.modules.users.services
       } else {	
         sendSwitchedPresenterEvent(false, newPresenterID);
         
-        meeting.amIPresenter = false;
+        UsersUtil.setMeAsPresenter(false);
         var viewerEvent:MadePresenterEvent = new MadePresenterEvent(MadePresenterEvent.SWITCH_TO_VIEWER_MODE);
         viewerEvent.userID = newPresenterID;
         viewerEvent.presenterName = newPresenterName;
@@ -658,7 +659,7 @@ package org.bigbluebutton.modules.users.services
       user.listenOnly = joinedUser.listenOnly;
       user.userLocked = joinedUser.locked;
       user.avatarURL = joinedUser.avatarURL;
-      user.me = (user.userID == UserManager.getInstance().getConference().getMyUserId());
+      user.me = (user.userID == UsersUtil.getMyUserID());
 
       UserManager.getInstance().getConference().addUser(user);
       
@@ -793,7 +794,7 @@ package org.bigbluebutton.modules.users.services
       var map:Object = JSON.parse(msg.msg);
       LOGGER.debug("*** received participant role change [" + map.userID + "," + map.role + "]");
       UserManager.getInstance().getConference().newUserRole(map.userID, map.role);
-      if(UserManager.getInstance().getConference().amIThisUser(map.userID)) {
+      if(UsersUtil.isMe(map.userID)) {
         UserManager.getInstance().getConference().setMyRole(map.role);
         var e:ChangeMyRole = new ChangeMyRole(map.role);
         dispatcher.dispatchEvent(e);
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml
old mode 100644
new mode 100755
index 7148f74a81..c934b4ec66
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/BreakoutRoomSettings.mxml
@@ -32,16 +32,17 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 
 	<fx:Script>
 		<![CDATA[
-			import com.asfusion.mate.events.Dispatcher;
-			
-			import mx.collections.ArrayCollection;
-			import mx.controls.Alert;
-			
-			import org.bigbluebutton.core.PopUpUtil;
-			import org.bigbluebutton.core.managers.UserManager;
-			import org.bigbluebutton.main.events.BreakoutRoomEvent;
-			import org.bigbluebutton.main.model.users.BBBUser;
-			import org.bigbluebutton.util.i18n.ResourceUtil;
+      import com.asfusion.mate.events.Dispatcher;
+      
+      import mx.collections.ArrayCollection;
+      import mx.controls.Alert;
+      
+      import org.bigbluebutton.core.PopUpUtil;
+      import org.bigbluebutton.core.UsersUtil;
+      import org.bigbluebutton.core.managers.UserManager;
+      import org.bigbluebutton.main.events.BreakoutRoomEvent;
+      import org.bigbluebutton.main.model.users.BBBUser;
+      import org.bigbluebutton.util.i18n.ResourceUtil;
 
 			[Bindable]
 			private var roomsProvider:Array;
@@ -69,7 +70,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				var event:BreakoutRoomEvent = new BreakoutRoomEvent(BreakoutRoomEvent.CREATE_BREAKOUT_ROOMS);
 				// event.meetingId is filled in the event handler for BreakoutRoomEvent in UserService class
 				event.rooms = new Array();
-				var parentMeetingName:String = UserManager.getInstance().getConference().meetingName;
+				var parentMeetingName:String = UsersUtil.getMeetingName();
 				var roomResource:String = ResourceUtil.getInstance().getString('bbb.users.breakout.room');
 				for (var i:int = 0; i < (roomsCombo.selectedIndex + 2); i++) {
 					var users:Array = BreakoutList(roomsContainer.getChildAt(i)).users.source;
@@ -127,7 +128,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				var me:BBBUser;
 				// Copy users to avoid removing the references from the original ArrayCollection
 				for (var l:int = 0; l < originalUsers.length; l++) {
-					if (!UserManager.getInstance().getConference().amIThisUser(BBBUser(originalUsers[l]).userID)) {
+					if (! UsersUtil.isMe((BBBUser(originalUsers[l]).userID))) {
 						users.addItem(BBBUser.copy(originalUsers[l]));
 					} // Put the current user to the unassigned box because he is the moderator
 					else {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml
old mode 100644
new mode 100755
index 3f5d331a45..78b3423579
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml
@@ -79,7 +79,7 @@
 			private var myMenu:Menu = null;
 			
 			private function onCreationComplete():void{
-				refreshRole(UserManager.getInstance().getConference().amIModerator());
+				refreshRole(UsersUtil.amIModerator());
 				
 				this.addEventListener(FlexEvent.DATA_CHANGE, dataChangeHandler);
 				
@@ -182,7 +182,7 @@
 				var ls:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
 				
 				if (data != null) {
-					settingsBtn.visible = rolledOver && !data.me && !UserManager.getInstance().getConference().isBreakout;
+					settingsBtn.visible = rolledOver && !data.me && !UsersUtil.isBreakout();
 					
 					if (!data.voiceJoined) {
 						if (data.listenOnly) {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MoodMenu.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MoodMenu.as
old mode 100644
new mode 100755
index 6306fa0b82..ed25885c3a
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MoodMenu.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MoodMenu.as
@@ -19,6 +19,7 @@
 package org.bigbluebutton.modules.users.views {
 
 	import com.asfusion.mate.events.Dispatcher;
+	
 	import mx.collections.ArrayCollection;
 	import mx.containers.VBox;
 	import mx.controls.Button;
@@ -27,11 +28,13 @@ package org.bigbluebutton.modules.users.views {
 	import mx.events.FlexMouseEvent;
 	import mx.events.MenuEvent;
 	import mx.managers.PopUpManager;
+	
 	import org.bigbluebutton.common.Images;
+	import org.bigbluebutton.core.UsersUtil;
 	import org.bigbluebutton.core.managers.UserManager;
 	import org.bigbluebutton.main.model.users.events.EmojiStatusEvent;
 	import org.bigbluebutton.main.views.WellPositionedMenu;
-	import org.bigbluebutton.util.i18n.ResourceUtil;
+	import org.bigbluebutton.util.i18n.ResourceUtil;
 
 	public class MoodMenu extends VBox {
 		private const MOODS:Array = [
@@ -78,7 +81,7 @@ package org.bigbluebutton.modules.users.views {
 		private function drawMoodMenu():void {
 			var moods:ArrayCollection = new ArrayCollection();
 			for each (var mood:String in MOODS) {
-				if (mood == "clear" && UserManager.getInstance().getConference().myEmojiStatus == "none") {
+				if (mood == "clear" && UsersUtil.myEmoji() == "none") {
 					continue;
 				}
 
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/RoomActionsRenderer.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/RoomActionsRenderer.mxml
old mode 100644
new mode 100755
index 920f6873e0..bf0a724042
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/RoomActionsRenderer.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/RoomActionsRenderer.mxml
@@ -7,15 +7,16 @@
 		 creationComplete="onCreationCompleteHandler(event)">
 	<fx:Script>
 		<![CDATA[
-			import com.asfusion.mate.events.Dispatcher;
-
-			import mx.events.FlexEvent;
-
-			import org.bigbluebutton.common.Images;
-			import org.bigbluebutton.core.managers.UserManager;
-			import org.bigbluebutton.main.events.BreakoutRoomEvent;
-			import org.bigbluebutton.main.model.users.BreakoutRoom;
-			import org.bigbluebutton.util.i18n.ResourceUtil;
+      import com.asfusion.mate.events.Dispatcher;
+      
+      import mx.events.FlexEvent;
+      
+      import org.bigbluebutton.common.Images;
+      import org.bigbluebutton.core.UsersUtil;
+      import org.bigbluebutton.core.managers.UserManager;
+      import org.bigbluebutton.main.events.BreakoutRoomEvent;
+      import org.bigbluebutton.main.model.users.BreakoutRoom;
+      import org.bigbluebutton.util.i18n.ResourceUtil;
 
 			private var globalDispatch:Dispatcher = new Dispatcher();
 
@@ -26,7 +27,7 @@
 			private var moderator:Boolean = false;
 
 			protected function onCreationCompleteHandler(event:FlexEvent):void {
-				moderator = UserManager.getInstance().getConference().amIModerator();
+				moderator = UsersUtil.amIModerator();
 
 				this.addEventListener(FlexEvent.DATA_CHANGE, dataChangeHandler);
 			}
@@ -51,7 +52,7 @@
 			protected function requestBreakoutJoinUrl(event:MouseEvent):void {
 				var e:BreakoutRoomEvent = new BreakoutRoomEvent(BreakoutRoomEvent.REQUEST_BREAKOUT_JOIN_URL);
 				e.breakoutMeetingId = data.externalMeetingId as String;
-				e.userId = UserManager.getInstance().getConference().getMyUserId();
+				e.userId = UsersUtil.getMyUserID();
 				globalDispatch.dispatchEvent(e);
 			}
 		]]>
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml
index 1c37209d7b..639df7395d 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml
@@ -38,26 +38,25 @@
 	
 	<fx:Script>
 		<![CDATA[
-			import mx.binding.utils.BindingUtils;
-			import mx.binding.utils.ChangeWatcher;
-			import mx.events.FlexEvent;
-			
-			import org.bigbluebutton.common.Images;
-			import org.bigbluebutton.common.Role;
-			import org.bigbluebutton.common.events.LocaleChangeEvent;
-			import org.bigbluebutton.core.managers.UserManager;
-			import org.bigbluebutton.main.model.users.events.ChangeMyRole;
-			import org.bigbluebutton.main.model.users.events.EmojiStatusEvent;
-			import org.bigbluebutton.main.model.users.events.RoleChangeEvent;
-			import org.bigbluebutton.modules.users.events.UsersRollEvent;
-			import org.bigbluebutton.util.i18n.ResourceUtil;
+      import mx.binding.utils.BindingUtils;
+      import mx.binding.utils.ChangeWatcher;
+      import mx.events.FlexEvent;
+      import org.bigbluebutton.common.Images;
+      import org.bigbluebutton.common.Role;
+      import org.bigbluebutton.common.events.LocaleChangeEvent;
+      import org.bigbluebutton.core.UsersUtil;
+      import org.bigbluebutton.main.model.users.events.ChangeMyRole;
+      import org.bigbluebutton.main.model.users.events.EmojiStatusEvent;
+      import org.bigbluebutton.main.model.users.events.RoleChangeEvent;
+      import org.bigbluebutton.modules.users.events.UsersRollEvent;
+      import org.bigbluebutton.util.i18n.ResourceUtil;
 			
 			private var images:Images = new Images();
   			private var rolledOver:Boolean = false;
   			private var moderator:Boolean = false;
   			
   			private function onCreationComplete():void {
-  				refreshRole(UserManager.getInstance().getConference().amIModerator());
+  				refreshRole(UsersUtil.amIModerator());
   				
   				/* I was trying to the binds through actionscript, but every time the itemrenderer was recycled 
   				 * the binds would stop functioning. I think it might have been because I was using strong 
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml
index 3d7e5f9d49..683b716d50 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml
@@ -76,20 +76,19 @@
 			import org.bigbluebutton.core.events.LockControlEvent;
 			import org.bigbluebutton.core.events.VoiceConfEvent;
 			import org.bigbluebutton.core.managers.UserManager;
-			import org.bigbluebutton.core.model.MeetingModel;
+			import org.bigbluebutton.core.model.LiveMeeting;
 			import org.bigbluebutton.core.vo.LockSettingsVO;
 			import org.bigbluebutton.main.events.BreakoutRoomEvent;
 			import org.bigbluebutton.main.events.ShortcutEvent;
 			import org.bigbluebutton.main.model.users.BBBUser;
 			import org.bigbluebutton.main.model.users.BreakoutRoom;
 			import org.bigbluebutton.main.model.users.events.ChangeMyRole;
-			import org.bigbluebutton.main.model.users.events.ChangeRoleEvent;
 			import org.bigbluebutton.main.model.users.events.EmojiStatusEvent;
 			import org.bigbluebutton.main.model.users.events.KickUserEvent;
 			import org.bigbluebutton.main.model.users.events.RoleChangeEvent;
 			import org.bigbluebutton.main.views.MainCanvas;
-			import org.bigbluebutton.modules.phone.events.LeaveVoiceConferenceCommand;
 			import org.bigbluebutton.main.views.WellPositionedMenu;
+			import org.bigbluebutton.modules.phone.events.LeaveVoiceConferenceCommand;
 			import org.bigbluebutton.modules.users.events.MeetingMutedEvent;
 			import org.bigbluebutton.modules.users.events.UsersRollEvent;
 			import org.bigbluebutton.modules.users.model.BreakoutRoomsOptions;
@@ -158,12 +157,12 @@
 				breakoutRoomsList = UserManager.getInstance().getConference().breakoutRooms;
 				breakoutRoomsList.addEventListener(CollectionEvent.COLLECTION_CHANGE, breakoutRoomsListChangeListener);
 
-				amIModerator = UserManager.getInstance().getConference().amIModerator();
-				amIPresenter = UserManager.getInstance().getConference().amIPresenter;
+				amIModerator = UsersUtil.amIModerator();
+				amIPresenter = UsersUtil.amIPresenter();
 
 				settingsBtn.visible = settingsBtn.includeInLayout = partOptions.enableSettingsButton && amIModerator;
 				closeRoomsBtn.visible = closeRoomsBtn.includeInLayout = amIModerator;
-				refreshRole(UserManager.getInstance().getConference().amIModerator());
+				refreshRole(UsersUtil.amIModerator());
 				emojiStatusBtn.visible = emojiStatusBtn.includeInLayout = partOptions.enableEmojiStatus;
 
 				BindingUtils.bindSetter(updateNumberofUsers, users, "length");
@@ -176,7 +175,7 @@
 				
 				resourcesChanged();
 				
-				roomMuted = MeetingModel.getInstance().meetingMuted;
+				roomMuted = LiveMeeting.inst().meetingStatus.isMeetingMuted;
 				var lockSettings:LockSettingsVO = UserManager.getInstance().getConference().getLockSettings();
 				roomLocked = lockSettings.isAnythingLocked() && ( lockSettings.getLockOnJoin() || UsersUtil.isAnyoneLocked());
 				
@@ -196,7 +195,7 @@
 
 				settingsBtn.visible = settingsBtn.includeInLayout = partOptions.enableSettingsButton && amIModerator;
 
-				changeButtons(UserManager.getInstance().getConference().amIPresenter);
+				changeButtons(UsersUtil.amIPresenter());
 
 				if (paramsMenu) paramsMenu.hide();
 			}
@@ -303,7 +302,7 @@
 					paramsMenuData.push({label: ResourceUtil.getInstance().getString('bbb.users.settings.unmuteAll'), icon: images.audio, handler: muteAll});
 								
 				paramsMenuData.push({label: ResourceUtil.getInstance().getString('bbb.users.settings.lockSettings'), icon: images.lock_open, handler: lockSettings});
-				if (breakoutOptions.enabled && amIModerator && !UserManager.getInstance().getConference().isBreakout) {
+				if (breakoutOptions.enabled && amIModerator && ! UsersUtil.isBreakout()) {
 					if (breakoutRoomsList.length == 0) {
 						paramsMenuData.push({label: ResourceUtil.getInstance().getString('bbb.users.settings.breakoutRooms'), handler: breakoutRooms});
 					} else {
@@ -391,7 +390,7 @@
 			}
 
 			private function handleMeetingMuted(e:MeetingMutedEvent):void {
-				roomMuted = MeetingModel.getInstance().meetingMuted;
+				roomMuted = LiveMeeting.inst().meetingStatus.isMeetingMuted;
 			}
 			
 			private function muteAll():void {
@@ -455,7 +454,7 @@
 			private function loadKeyCombos(modifier:String):void {
 				keyCombos = new Object(); // always start with a fresh array bbb.shortcutkey.users.muteall
 				keyCombos[modifier + (ResourceUtil.getInstance().getString('bbb.shortcutkey.users.makePresenter') as String)] = MAKE_PRESENTER;
-				if (!UserManager.getInstance().getConference().isBreakout) {
+				if (! UsersUtil.isBreakout()) {
 					keyCombos[modifier + (ResourceUtil.getInstance().getString('bbb.shortcutkey.users.kick') as String)] = KICK_USER;
 				}
 				keyCombos[modifier + (ResourceUtil.getInstance().getString('bbb.shortcutkey.users.mute') as String)] = MUTE_USER;
@@ -507,7 +506,7 @@
 			}
 			
 			public function remoteRaiseHand(e:ShortcutEvent):void{
-				if (UserManager.getInstance().getConference().myEmojiStatus == "raiseHand")
+				if (UsersUtil.myEmoji() == "raiseHand")
 					dispatchEvent(new EmojiStatusEvent(EmojiStatusEvent.EMOJI_STATUS, "none"));
 				else 
 					dispatchEvent(new EmojiStatusEvent(EmojiStatusEvent.EMOJI_STATUS, "raiseHand"));
@@ -541,7 +540,7 @@
 			}
 			
 			public function remoteKickUser():void {
-				if (amIModerator && usersGrid.selectedIndex != -1 && partOptions.allowKickUser && !UserManager.getInstance().getConference().isBreakout) {
+				if (amIModerator && usersGrid.selectedIndex != -1 && partOptions.allowKickUser && !UsersUtil.isBreakout()) {
 					var selData:Object = usersGrid.selectedItem;
 					
 					if (!selData.me)
@@ -598,7 +597,7 @@
 			}
 
 			private function handleOpenBreakoutRooms(e:ShortcutEvent):void{
-				if (breakoutOptions.enabled && amIModerator && !UserManager.getInstance().getConference().isBreakout) {
+				if (breakoutOptions.enabled && amIModerator && !UsersUtil.isBreakout()) {
 					breakoutRooms();
 				}
 			}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMapDelegate.as b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMapDelegate.as
index 13b5b09dd0..3a23350355 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMapDelegate.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/maps/VideoEventMapDelegate.as
@@ -114,13 +114,13 @@ package org.bigbluebutton.modules.videoconf.maps
 
       if (!_ready) return;
       LOGGER.debug("VideoEventMapDelegate:: [{0}] Viewing [{1} stream [{2}]", [me, userID, stream]);
-      if (! UserManager.getInstance().getConference().amIThisUser(userID)) {
+      if (! UsersUtil.isMe(userID)) {
         openViewWindowFor(userID);
       }
     }
 
     public function handleStreamStoppedEvent(event:StreamStoppedEvent):void {
-      if (UserManager.getInstance().getConference().amIThisUser(event.userId)) {
+      if (UsersUtil.isMe(event.userId)) {
         closePublishWindowByStream(event.streamId);
       } else {
         closeViewWindowWithStream(event.userId, event.streamId);
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasDisplayModel.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasDisplayModel.as
index 00f999e090..d58fe2bc7b 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasDisplayModel.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasDisplayModel.as
@@ -109,7 +109,7 @@ package org.bigbluebutton.modules.whiteboard
 			
 			if (o.type == AnnotationType.TEXT && 
 				o.status != AnnotationStatus.DRAW_END && 
-				o.userId == UserManager.getInstance().getConference().getMyUserId()) {
+				o.userId == UsersUtil.getMyUserID()) {
 				textUpdateListener.newTextObject(gobj as TextObject);
 			}
 		}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasModel.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasModel.as
index 1976c39d88..8239d35bae 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasModel.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/WhiteboardCanvasModel.as
@@ -22,6 +22,7 @@ package org.bigbluebutton.modules.whiteboard
   
   import mx.containers.Canvas;
   
+  import org.bigbluebutton.core.UsersUtil;
   import org.bigbluebutton.core.managers.UserManager;
   import org.bigbluebutton.modules.whiteboard.business.shapes.ShapeFactory;
   import org.bigbluebutton.modules.whiteboard.models.WhiteboardModel;
@@ -115,7 +116,7 @@ package org.bigbluebutton.modules.whiteboard
 
     /** Helper method to test whether this user is the presenter */
     private function get isPresenter():Boolean {
-      return UserManager.getInstance().getConference().amIPresenter;
+      return UsersUtil.amIPresenter();
     }
   }
 }
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/TextObject.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/TextObject.as
index b7c0732a47..23538ea57b 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/TextObject.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/business/shapes/TextObject.as
@@ -27,6 +27,7 @@ package org.bigbluebutton.modules.whiteboard.business.shapes {
 	import flash.text.TextFormat;
 	
 	import org.bigbluebutton.common.IMETextField;
+	import org.bigbluebutton.core.UsersUtil;
 	import org.bigbluebutton.core.managers.UserManager;
 	import org.bigbluebutton.modules.whiteboard.models.Annotation;
 	import org.bigbluebutton.modules.whiteboard.models.AnnotationStatus;
@@ -57,7 +58,7 @@ package org.bigbluebutton.modules.whiteboard.business.shapes {
 			maxChars = 1024;
 			
 			//determine editability
-			makeEditable(userId == UserManager.getInstance().getConference().getMyUserId() && status != AnnotationStatus.DRAW_END);
+			makeEditable(userId == UsersUtil.getMyUserID() && status != AnnotationStatus.DRAW_END);
 		}
 		
 		public function get id():String {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/AnnotationIDGenerator.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/AnnotationIDGenerator.as
index cd7df04915..5a9bbc0269 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/AnnotationIDGenerator.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/views/AnnotationIDGenerator.as
@@ -18,7 +18,7 @@
  */
 package org.bigbluebutton.modules.whiteboard.views
 {
-    import org.bigbluebutton.core.managers.UserManager;
+    import org.bigbluebutton.core.UsersUtil;
 
     public class AnnotationIDGenerator
     {
@@ -27,7 +27,7 @@ package org.bigbluebutton.modules.whiteboard.views
         
         public function AnnotationIDGenerator()
         {
-            _userid = UserManager.getInstance().getConference().getMyUserId();
+            _userid = UsersUtil.getMyUserID();
         }
         
         public function generateID():String {
-- 
GitLab