diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as b/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as
index 0b46c6b3f5ffccea55307f9f5dd5eb8673d31a36..635d72726174bd22f25046000be7af2ce92a00f0 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/UsersUtil.as
@@ -25,7 +25,8 @@ package org.bigbluebutton.core
   import org.bigbluebutton.core.managers.UserManager;
   import org.bigbluebutton.core.vo.CameraSettingsVO;
   import org.bigbluebutton.main.model.users.BBBUser;
-
+  import org.bigbluebutton.util.SessionTokenUtil;
+  
   public class UsersUtil
   {
     
@@ -194,7 +195,7 @@ package org.bigbluebutton.core
       return null;
     }
     
-    public static function getUserData():Object {
+    private static function getUserData():Object {
       var userData:Object = new Object();
       userData.meetingId = getInternalMeetingID();
       userData.externalMeetingId = getExternalMeetingID();
@@ -215,5 +216,20 @@ package org.bigbluebutton.core
 		return false;
 	}
     
+    
+    public static function initLogData():Object {
+        var logData:Object = new Object();
+        if (getInternalMeetingID() != null) {
+            logData.user = UsersUtil.getUserData();
+        }
+        logData.sessionToken = getUserSession();
+        return logData;
+    }
+    
+    public static function getUserSession():String {
+        var sessionUtil:SessionTokenUtil = new SessionTokenUtil()
+        return sessionUtil.getSessionToken();
+    }
+    
   }
 }
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/managers/ReconnectionManager.as b/bigbluebutton-client/src/org/bigbluebutton/core/managers/ReconnectionManager.as
index 7c684a195e12f1625542a2c70f9ce57baf086dcb..fe094f6dd7dbe9747859fe0d7653eceef578296b 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/core/managers/ReconnectionManager.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/managers/ReconnectionManager.as
@@ -85,12 +85,9 @@ package org.bigbluebutton.core.managers
 
     public function onDisconnected(type:String, callback:Function, parameters:Array):void {
       if (!_canceled) {
-		var logData:Object = new Object();
-		logData.user = UsersUtil.getUserData();
+		var logData:Object = UsersUtil.initLogData();
 		logData.user.connection = type;
-		
-		JSLog.warn("Connection disconnected", logData);
-		
+        logData.tags = ["connection"];
 		logData.message = "Connection disconnected";
 		LOGGER.info(JSON.stringify(logData));
 		
@@ -110,14 +107,9 @@ package org.bigbluebutton.core.managers
     }
 
     public function onConnectionAttemptFailed(type:String):void {
-      LOGGER.warn("onConnectionAttemptFailed, type={0}", [type]);
-	  
-	  var logData:Object = new Object();
-	  logData.user = UsersUtil.getUserData();
-	  logData.user.connection = type;
-	  
-	  JSLog.warn("Reconnect attempt on connection failed.", logData);
-	  
+	  var logData:Object = UsersUtil.initLogData();
+	  logData.user.connection = type; 
+      logData.tags = ["connection"];
 	  logData.message = "Reconnect attempt on connection failed.";
 	  LOGGER.info(JSON.stringify(logData));
 	  
@@ -150,13 +142,9 @@ package org.bigbluebutton.core.managers
     }
 
     public function onConnectionAttemptSucceeded(type:String):void {
-	  LOGGER.debug("onConnectionAttemptSucceeded, type={0}", [type]);
-	  var logData:Object = new Object();
-	  logData.user = UsersUtil.getUserData();
+	  var logData:Object = UsersUtil.initLogData();
 	  logData.user.connection = type;
-	  
-	  JSLog.warn("Reconnect succeeded.", logData);
-	  
+      logData.tags = ["connection"];
 	  logData.message = "Reconnect succeeded.";
 	  LOGGER.info(JSON.stringify(logData));
 	  
diff --git a/bigbluebutton-client/src/org/bigbluebutton/core/model/VideoProfile.as b/bigbluebutton-client/src/org/bigbluebutton/core/model/VideoProfile.as
old mode 100644
new mode 100755
index 72aa9c878f1661531b8ad1ec365ac7fda78f25bc..6d59301bed663c546b4b93a8020ca9defbb657f8
--- a/bigbluebutton-client/src/org/bigbluebutton/core/model/VideoProfile.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/core/model/VideoProfile.as
@@ -19,10 +19,10 @@
 package org.bigbluebutton.core.model
 {
     import flash.utils.Dictionary;
-    
+    import org.bigbluebutton.core.UsersUtil;
     import org.as3commons.logging.api.ILogger;
     import org.as3commons.logging.api.getClassLogger;
-    import org.bigbluebutton.util.i18n.ResourceUtil;
+    import org.bigbluebutton.util.i18n.ResourceUtil;
 
     public class VideoProfile
     {
@@ -89,8 +89,11 @@ package org.bigbluebutton.core.model
                 _h264Profile = vxml.h264Profile.toString();
             }
 
-			LOGGER.debug("This is a new video profile");
-			LOGGER.debug(this.toString());
+            var logData:Object = UsersUtil.initLogData();
+            logData.videoProfile = this.toString();
+            logData.tags = ["video"];
+            logData.message = "Loaded new video profile.";
+            LOGGER.info(JSON.stringify(logData));
         }
 
         public function toString():String {
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/PortTest.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/PortTest.as
index faf05a8cfea82b42515b682d1e12b401cc772ec4..1c4f27e3a64fd24ad8cc41d782fa9c997af2453d 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/PortTest.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/PortTest.as
@@ -1,3 +1,265 @@
-/**
* 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
{
	 
	import flash.events.NetStatusEvent;
	import flash.events.TimerEvent;
	import flash.net.NetConnection;
	import flash.net.ObjectEncoding;
	import flash.utils.Timer;
  import flash.utils.Dictionary;
	import org.as3commons.logging.api.ILogger;
	import org.as3commons.logging.api.getClassLogger;
	
	[Bindable]
	/**
	 * Test RTMP port.
	 * 
	 * @author Thijs Triemstra ( info@collab.nl )
	 */	
	public class PortTest 
	{
		private static const LOGGER:ILogger = getClassLogger(PortTest);      

		/**
		* Connect using rtmp or rtmpt.
		*/		
		private var tunnel: Boolean;
			
		/**
		* RTMP hostname.
		*/		
		private var hostname 		: String;
		
		/**
		* RTMP port.
		*/		
		public var port 			: String;
		
		/**
		* RTMP port.
		*/		
		public var portName 		: String = "Default";
		
		/**
		* RTMP application.
		*/		
		private var application 	: String;

		/**
		* Base RTMP URI.
		*/		
		private var baseURI 		: String;
		
		/**
		* RTMP connection.
		*/		
		public var nc 				: NetConnection;
		
		/**
		* Connection status.
		*/		
		public var status 			: String;
		
		private var _connectionListener:Function;
		
		/**
		* Timer to control timeout of connection test
		*/
		private var testTimeout:Number = 0;
		
		/**
		* Timer to control timeout of connection test
		*/
		private var connectionTimer:Timer;
    
    private var closeConnectionTimer:Timer;
		
		/**
		* Set default encoding to AMF0 so FMS also understands.
		*/		
		NetConnection.defaultObjectEncoding = ObjectEncoding.AMF0;
		
		/**
		 * Create new port test and connect to the RTMP server.
		 * 
		 * @param protocol
		 * @param hostname
		 * @param port
		 * @param application
		 * @testTimeout timeout of test in milliseconds
		 */			
		public function PortTest( tunnel : Boolean,
								  hostname : String = "",
								  port : String = "",
								  application : String = "",
								  testTimeout : Number = 10000) {
			this.tunnel = tunnel;
			this.hostname = hostname;
			this.application = application;
			this.testTimeout = testTimeout;
			
			if ( port.length > 0 ) {
				this.portName = port;
				this.port = ":" + port;
			} else {
				this.port = port;
			}
			// Construct URI.
      if (tunnel) {
        this.baseURI = "rtmpt://" + this.hostname + "/" + this.application;
      } else {
        this.baseURI = "rtmp://" + this.hostname + this.port + "/" + this.application;
      }
		}
		
		/**
		 * Start connection.
		 */		
		public function connect():void {
			nc = new NetConnection();
			nc.client = this;
-      nc.proxyType = "best";
-
			nc.addEventListener( NetStatusEvent.NET_STATUS, netStatus );
			// connect to server
			try {
        LOGGER.debug("Testing connection to " + this.baseURI);
        
        connectionTimer = new Timer(testTimeout, 1);
        connectionTimer.addEventListener(TimerEvent.TIMER, connectionTimeout);
        connectionTimer.start();
        
        var curTime:Number = new Date().getTime();
				// Create connection with the server.
				nc.connect( this.baseURI, "portTestMeetingId-" + curTime, "portTestDummyUserId-" + curTime);
				status = "Connecting...";
			} catch( e : ArgumentError ) {
				// Invalid parameters.
				status = "ERROR: " + e.message;
			}	
		}
		
		/**
		* Method called when connection timed out
		*/
		public function connectionTimeout (e:TimerEvent) : void {
      LOGGER.debug("Timedout trying to connect to " + this.baseURI); 
			status = "FAILED";
			_connectionListener(status, tunnel, hostname, port, application);
      closeConnection();
		}
		
		/**
		 * Close connection.
		 */		
		private function close():void {	
      LOGGER.debug("Closing port test connection.");
      var dc:Dictionary = new Dictionary(true);
      nc.client = dc;
      // Remove listener.
      nc.removeEventListener( NetStatusEvent.NET_STATUS, netStatus );
			// Close the NetConnection.
			nc.close();

		}
			
    
    private function closeConnection():void {
      closeConnectionTimer = new Timer(100, 1);
      closeConnectionTimer.addEventListener(TimerEvent.TIMER, closeConnectionTimerHandler);
      closeConnectionTimer.start();
    }
    
    private function closeConnectionTimerHandler (e:TimerEvent) : void {
      LOGGER.debug("Closing connection to " + this.baseURI); 
      close();
    }
    
		/**
		 * Catch NetStatusEvents.
		 * 
		 * @param event
		 */		
		protected function netStatus(event : NetStatusEvent):void {
      
      //Stop timeout timer when connected/rejected
      connectionTimer.stop();
      
			var info : Object = event.info;
			var statusCode : String = info.code;
            
			if ( statusCode == "NetConnection.Connect.Success" ) {
				status = "SUCCESS";
        LOGGER.debug("Successfully connected to " + this.baseURI); 
				_connectionListener(status, tunnel, hostname, port, application);
			} else if ( statusCode == "NetConnection.Connect.Rejected" ||
				 	  statusCode == "NetConnection.Connect.Failed" || 
				 	  statusCode == "NetConnection.Connect.Closed" ) {
        LOGGER.debug("Failed to connect to " + this.baseURI); 
				status = "FAILED";
				_connectionListener(status, tunnel, hostname, port, application);
			}
      
      closeConnection();
		}
		
		public function onBWCheck(... rest):Number { 
			return 0; 
		} 
    
		public function onBWDone(... rest):void { 
			var p_bw:Number; 
			if (rest.length > 0) p_bw = rest[0]; 
			// your application should do something here 
			// when the bandwidth check is complete 
			LOGGER.debug("bandwidth = {0} Kbps.", [p_bw]); 
		}
		
		public function addConnectionSuccessListener(listener:Function):void {
			_connectionListener = listener;
		}
	}
}
+/**
+* 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
+{
+	 
+	import flash.events.NetStatusEvent;
+	import flash.events.TimerEvent;
+	import flash.net.NetConnection;
+	import flash.net.ObjectEncoding;
+	import flash.utils.Timer;
+    import flash.utils.Dictionary;
+    import org.bigbluebutton.core.UsersUtil;
+	import org.as3commons.logging.api.ILogger;
+	import org.as3commons.logging.api.getClassLogger;
+	
+	[Bindable]
+	/**
+	 * Test RTMP port.
+	 * 
+	 * @author Thijs Triemstra ( info@collab.nl )
+	 */	
+	public class PortTest 
+	{
+		private static const LOGGER:ILogger = getClassLogger(PortTest);      
+
+		/**
+		* Connect using rtmp or rtmpt.
+		*/		
+		private var tunnel: Boolean;
+			
+		/**
+		* RTMP hostname.
+		*/		
+		private var hostname 		: String;
+		
+		/**
+		* RTMP port.
+		*/		
+		public var port 			: String;
+		
+		/**
+		* RTMP port.
+		*/		
+		public var portName 		: String = "Default";
+		
+		/**
+		* RTMP application.
+		*/		
+		private var application 	: String;
+
+		/**
+		* Base RTMP URI.
+		*/		
+		private var baseURI 		: String;
+		
+		/**
+		* RTMP connection.
+		*/		
+		public var nc 				: NetConnection;
+		
+		/**
+		* Connection status.
+		*/		
+		public var status 			: String;
+		
+		private var _connectionListener:Function;
+		
+		/**
+		* Timer to control timeout of connection test
+		*/
+		private var testTimeout:Number = 0;
+		
+		/**
+		* Timer to control timeout of connection test
+		*/
+		private var connectionTimer:Timer;
+    
+    private var closeConnectionTimer:Timer;
+		
+		/**
+		* Set default encoding to AMF0 so FMS also understands.
+		*/		
+		NetConnection.defaultObjectEncoding = ObjectEncoding.AMF0;
+		
+		/**
+		 * Create new port test and connect to the RTMP server.
+		 * 
+		 * @param protocol
+		 * @param hostname
+		 * @param port
+		 * @param application
+		 * @testTimeout timeout of test in milliseconds
+		 */			
+		public function PortTest( tunnel : Boolean,
+								  hostname : String = "",
+								  port : String = "",
+								  application : String = "",
+								  testTimeout : Number = 10000) {
+			this.tunnel = tunnel;
+			this.hostname = hostname;
+			this.application = application;
+			this.testTimeout = testTimeout;
+			
+			if ( port.length > 0 ) {
+				this.portName = port;
+				this.port = ":" + port;
+			} else {
+				this.port = port;
+			}
+			// Construct URI.
+      if (tunnel) {
+        this.baseURI = "rtmpt://" + this.hostname + "/" + this.application;
+      } else {
+        this.baseURI = "rtmp://" + this.hostname + this.port + "/" + this.application;
+      }
+		}
+		
+		/**
+		 * Start connection.
+		 */		
+		public function connect():void {
+			nc = new NetConnection();
+			nc.client = this;
+      nc.proxyType = "best";
+
+			nc.addEventListener( NetStatusEvent.NET_STATUS, netStatus );
+			// connect to server
+			try {
+                var logData:Object = UsersUtil.initLogData();
+                logData.connection = this.baseURI;
+                logData.tags = ["connection"];
+                logData.message = "Port testing connection.";
+                LOGGER.info(JSON.stringify(logData));
+        
+        connectionTimer = new Timer(testTimeout, 1);
+        connectionTimer.addEventListener(TimerEvent.TIMER, connectionTimeout);
+        connectionTimer.start();
+        
+        var curTime:Number = new Date().getTime();
+				// Create connection with the server.
+				nc.connect( this.baseURI, "portTestMeetingId-" + curTime, "portTestDummyUserId-" + curTime);
+				status = "Connecting...";
+			} catch( e : ArgumentError ) {
+				// Invalid parameters.
+				status = "ERROR: " + e.message;
+			}	
+		}
+		
+		/**
+		* Method called when connection timed out
+		*/
+		public function connectionTimeout (e:TimerEvent) : void {
+            var logData:Object = UsersUtil.initLogData();
+            logData.connection = this.baseURI;
+            logData.tags = ["connection"];
+            logData.message = "Port testing connection timedout.";
+            LOGGER.info(JSON.stringify(logData));
+
+			status = "FAILED";
+			_connectionListener(status, tunnel, hostname, port, application);
+      closeConnection();
+		}
+		
+		/**
+		 * Close connection.
+		 */		
+		private function close():void {	
+      var dc:Dictionary = new Dictionary(true);
+      nc.client = dc;
+      // Remove listener.
+      nc.removeEventListener( NetStatusEvent.NET_STATUS, netStatus );
+			// Close the NetConnection.
+			nc.close();
+
+		}
+			
+    
+    private function closeConnection():void {
+      closeConnectionTimer = new Timer(100, 1);
+      closeConnectionTimer.addEventListener(TimerEvent.TIMER, closeConnectionTimerHandler);
+      closeConnectionTimer.start();
+    }
+    
+    private function closeConnectionTimerHandler (e:TimerEvent) : void {
+        var logData:Object = UsersUtil.initLogData();
+        logData.connection = this.baseURI;
+        logData.tags = ["connection"];
+        logData.message = "Closing port testing connection.";
+        LOGGER.info(JSON.stringify(logData));
+
+        close();
+    }
+    
+    /**
+    * Catch NetStatusEvents.
+    * 
+    * @param event
+    * */
+    protected function netStatus(event : NetStatusEvent):void {
+      
+        //Stop timeout timer when connected/rejected
+        connectionTimer.stop();
+      
+        var info : Object = event.info;
+        var statusCode : String = info.code;
+            
+        var logData:Object = UsersUtil.initLogData();
+        logData.connection = this.baseURI;
+        logData.tags = ["connection"];
+
+        
+        if ( statusCode == "NetConnection.Connect.Success" ) {
+            status = "SUCCESS";
+            logData.message = "Port test successfully connected.";
+            LOGGER.info(JSON.stringify(logData));
+
+            _connectionListener(status, tunnel, hostname, port, application);
+        } else if ( statusCode == "NetConnection.Connect.Rejected" ||
+                    statusCode == "NetConnection.Connect.Failed" || 
+                    statusCode == "NetConnection.Connect.Closed" ) {
+                        
+            logData.message = "Port test failed to connect.";
+            LOGGER.info(JSON.stringify(logData));
+            
+            status = "FAILED";
+            _connectionListener(status, tunnel, hostname, port, application);
+            
+        }
+      
+      //closeConnection();
+    }
+		
+		public function onBWCheck(... rest):Number { 
+			return 0; 
+		} 
+    
+		public function onBWDone(... rest):void { 
+			var p_bw:Number; 
+			if (rest.length > 0) p_bw = rest[0]; 
+			// your application should do something here 
+			// when the bandwidth check is complete 
+			LOGGER.debug("bandwidth = {0} Kbps.", [p_bw]); 
+		}
+		
+		public function addConnectionSuccessListener(listener:Function):void {
+			_connectionListener = listener;
+		}
+	}
+}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/EnterApiService.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/EnterApiService.as
index c499fbddbf224228a4d757d3ce5d41e8e8d0252e..a5cac6a9fd97a0b856f979517fbf51c55f2f45c7 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/EnterApiService.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/EnterApiService.as
@@ -9,7 +9,7 @@ package org.bigbluebutton.main.model.modules
   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;
@@ -59,13 +59,21 @@ package org.bigbluebutton.main.model.modules
       var result:Object = JSON.parse(e.target.data);
       LOGGER.debug("Enter response = {0}", [jsonXify(result)]);
       
+        var logData:Object = UsersUtil.initLogData
+        
       var returncode:String = result.response.returncode;
       if (returncode == 'FAILED') {
-        LOGGER.error("Enter API call FAILED = {0}", [jsonXify(result)]);						
+        logData.tags = ["initialization"];
+        logData.message = "Enter API call failed.";
+        LOGGER.info(JSON.stringify(logData));
+
         var dispatcher:Dispatcher = new Dispatcher();
         dispatcher.dispatchEvent(new MeetingNotFoundEvent(result.response.logoutURL));			
       } else if (returncode == 'SUCCESS') {
-        LOGGER.debug("Enter API call SUCESS = {0}", [jsonXify(result)]);
+        logData.tags = ["initialization"];
+        logData.message = "Enter API call succeeded.";
+        LOGGER.info(JSON.stringify(logData));
+          
         var response:Object = new Object();
         response.username = result.response.fullname;
         response.userId = result.response.internalUserID;
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesDispatcher.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesDispatcher.as
index b7aa4724373451d46053f08d09e5fe462bd27184..4eeeb8a8fd0900bd66da3b4476b5f07137000104 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesDispatcher.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesDispatcher.as
@@ -32,7 +32,7 @@ package org.bigbluebutton.main.model.modules
   import org.bigbluebutton.main.events.ModuleLoadEvent;
   import org.bigbluebutton.main.events.PortTestEvent;
   import org.bigbluebutton.main.events.UserServicesEvent;
-  import org.bigbluebutton.main.model.ConfigParameters;
+  import org.bigbluebutton.main.model.ConfigParameters;
   
   public class ModulesDispatcher
   {
@@ -111,31 +111,11 @@ package org.bigbluebutton.main.model.modules
       dispatcher.dispatchEvent(evt);
     }
     
-    public function sendTunnelingFailedEvent(server: String, app: String):void{
-      var logData:Object = new Object();
-      logData.server = server;
-      logData.app = app;
-      logData.userId = meetingInfo.userId;
-      logData.username = meetingInfo.username;
-      logData.meetingName = meetingInfo.meetingName;
-      logData.meetingId = meetingInfo.meetingId;
-	  LOGGER.fatal("Cannot connect to Red5 using RTMP and RTMPT {0}", [jsonXify(logData)]);
-      JSLog.critical("Cannot connect to Red5 using RTMP and RTMPT", logData);
-      
+    public function sendTunnelingFailedEvent(server: String, app: String):void{     
       dispatcher.dispatchEvent(new PortTestEvent(PortTestEvent.TUNNELING_FAILED));
     }
     
     public function sendPortTestSuccessEvent(port:String, host:String, tunnel:Boolean, app:String):void{
-      var logData:Object = new Object();
-      logData.port = port;
-      logData.server = host;
-      logData.tunnel = tunnel;
-      logData.app = app;      
-      logData.userId = meetingInfo.userId;
-      logData.username = meetingInfo.username;
-      logData.meetingName = meetingInfo.meetingName;
-      logData.meetingId = meetingInfo.meetingId;
-      JSLog.debug("Successfully connected on test connection.", logData);
       
       var portEvent:PortTestEvent = new PortTestEvent(PortTestEvent.PORT_TEST_SUCCESS);
       portEvent.port = port;
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesProxy.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesProxy.as
index fea887fa47aba690ae15cea8d86bf71af4295cc5..58fcc15ea5ae70f6c01232f76191f04e858f9218 100755
--- 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,8 @@ package org.bigbluebutton.main.model.modules
 	import org.as3commons.logging.api.ILogger;
 	import org.as3commons.logging.api.getClassLogger;
 	import org.bigbluebutton.main.model.ConferenceParameters;
-	import org.bigbluebutton.main.model.PortTestProxy;
+	import org.bigbluebutton.main.model.PortTestProxy;
+    import org.bigbluebutton.core.UsersUtil;
 	
 	public class ModulesProxy {
 		private static const LOGGER:ILogger = getClassLogger(ModulesProxy);      
@@ -43,7 +44,12 @@ package org.bigbluebutton.main.model.modules
 		}
 
 		public function portTestSuccess(tunnel:Boolean):void {
-      LOGGER.debug("Successfully tested connection to server. isTunnelling=" + tunnel);
+            var logData:Object = UsersUtil.initLogData();
+            logData.tags = ["initialization"];
+            logData.tunnel = tunnel;
+            logData.message = "Successfully tested connection to server.";
+            LOGGER.info(JSON.stringify(logData));
+                
 			modulesManager.useProtocol(tunnel);
 			modulesManager.startUserServices();
 		}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as
old mode 100644
new mode 100755
index 61022aa41a66fe7c82fe9f8a4cc8a44d0b5f4744..8cbf366250d46ee6034e9d0a19990ce438dfc6be
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/Conference.as
@@ -1,4 +1,4 @@
-/**
+ /**
  * BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
  *
  * Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
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 9b2d9f1ff35113193e9fd59c031978588733997e..2e4b15c1983b12d150fb547090f3b4da5e4ed1d3 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/JoinService.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/JoinService.as
@@ -27,7 +27,7 @@ package org.bigbluebutton.main.model.users
 	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;
@@ -80,62 +80,74 @@ package org.bigbluebutton.main.model.users
 		}
 
 		private function ioErrorHandler(event:IOErrorEvent):void {
-			LOGGER.error("ioErrorHandler: {0}", [event]);
+			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 handleComplete(e:Event):void {			
-      var result:Object = JSON.parse(e.target.data);
-      LOGGER.debug("Enter response = {0}" + [jsonXify(result)]);
+            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') {
-				LOGGER.error("Join FAILED = {0}", [jsonXify(result)]);						
-        var dispatcher:Dispatcher = new Dispatcher();
-        dispatcher.dispatchEvent(new MeetingNotFoundEvent(result.response.logoutURL));			
-			} else if (returncode == 'SUCCESS') {
-				LOGGER.debug("Join SUCESS = {0}", [jsonXify(result)]);
-        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.room = result.response.room;
-        response.authToken = result.response.authToken;
-        response.record = result.response.record;
-        response.allowStartStopRecording = result.response.allowStartStopRecording;
-        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
+            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 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.room = result.response.room;
+                response.authToken = result.response.authToken;
+                response.record = result.response.record;
+                response.allowStartStopRecording = result.response.allowStartStopRecording;
+                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
         
-        if (result.response.hasOwnProperty("modOnlyMessage")) {
-          response.modOnlyMessage = result.response.modOnlyMessage;
-          MeetingModel.getInstance().modOnlyMessage = response.modOnlyMessage;
-        }
+                if (result.response.hasOwnProperty("modOnlyMessage")) {
+                  response.modOnlyMessage = result.response.modOnlyMessage;
+                  MeetingModel.getInstance().modOnlyMessage = response.modOnlyMessage;
+                }
           
-        response.customdata = new Object();
+                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;
+                        response.customdata[id] = value;
+                    }                        
+                }
+                
+            }
 				        
         UsersModel.getInstance().me = new MeBuilder(response.internalUserId, response.username).withAvatar(response.avatarURL)
                                              .withExternalId(response.externUserID).withToken(response.authToken)
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 d3e4860ac90f226c0784efba6ae632e7a2eb62f4..7b5cad45d88fa94b13458a3bf211cfa1104c1c06 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/NetConnectionDelegate.as
@@ -105,9 +105,8 @@ package org.bigbluebutton.main.model.users
     }
 	
 	private function validataTokenTimerHandler(event:TimerEvent):void {
-		var logData:Object = new Object();
-		logData.user = UsersUtil.getUserData();
-		JSLog.critical("No response for validate token request.", logData);
+		var logData:Object = UsersUtil.initLogData();
+        logData.tags = ["apps"];
 		logData.message = "No response for validate token request.";
 		LOGGER.info(JSON.stringify(logData));
 	}
@@ -154,10 +153,8 @@ package org.bigbluebutton.main.model.users
       var tokenValid: Boolean = map.valid as Boolean;
       var userId: String = map.userId as String;
 
-      var logData:Object = new Object();
-      logData.user = UsersUtil.getUserData();
-      JSLog.critical("Validate auth token timed out.", logData);
-      
+      var logData:Object = UsersUtil.initLogData();
+      logData.tags = ["apps"];
 	  logData.message = "Validate auth token timed out.";
 	  LOGGER.info(JSON.stringify(logData));
 	  
@@ -308,35 +305,37 @@ package org.bigbluebutton.main.model.users
 			var info : Object = event.info;
 			var statusCode : String = info.code;
 
-      var logData:Object = new Object();
-      logData.user = UsersUtil.getUserData();
+            var logData:Object = UsersUtil.initLogData();
+            logData.tags = ["apps"];
       
 			switch (statusCode) {
 				case "NetConnection.Connect.Success":
 					numNetworkChangeCount = 0;
                     logData.message = "Successfully connected to BBB App.";
                     LOGGER.info(JSON.stringify(logData));
-          validateToken();
+                    validateToken();
 					break;
 			
 				case "NetConnection.Connect.Failed":					
-            LOGGER.error(":Connection to viewers application failed...even when tunneling");
-						sendConnectionFailedEvent(ConnectionFailedEvent.CONNECTION_FAILED);								
+                    logData.message = "Connection to bbb-apps failed, even when tunneling.";
+                    LOGGER.info(JSON.stringify(logData));
+					sendConnectionFailedEvent(ConnectionFailedEvent.CONNECTION_FAILED);								
 					break;
 					
 				case "NetConnection.Connect.Closed":	
 					logData.message = "NetConnection.Connect.Closed on bbb-apps";
 					LOGGER.info(JSON.stringify(logData));
-          sendConnectionFailedEvent(ConnectionFailedEvent.CONNECTION_CLOSED);		
+                    sendConnectionFailedEvent(ConnectionFailedEvent.CONNECTION_CLOSED);		
 					break;
 					
-				case "NetConnection.Connect.InvalidApp":	
-          LOGGER.debug(":viewers application not found on server");			
+				case "NetConnection.Connect.InvalidApp":
+                    logData.message = "bbb-app not found.";
+                    LOGGER.info(JSON.stringify(logData));
 					sendConnectionFailedEvent(ConnectionFailedEvent.INVALID_APP);				
 					break;
 					
 				case "NetConnection.Connect.AppShutDown":
-          LOGGER.debug(":viewers application has been shutdown");
+                    LOGGER.debug(":viewers application has been shutdown");
 					sendConnectionFailedEvent(ConnectionFailedEvent.APP_SHUTDOWN);	
 					break;
 					
@@ -363,12 +362,19 @@ package org.bigbluebutton.main.model.users
 		}
 			
 		protected function netSecurityError(event: SecurityErrorEvent):void {
-      LOGGER.error("Security error - {0}", [event.text]);
+            var logData:Object = UsersUtil.initLogData();
+            logData.tags = ["apps"];
+            logData.message = "Security error - " + event.text;
+            LOGGER.info(JSON.stringify(logData));
 			sendConnectionFailedEvent(ConnectionFailedEvent.UNKNOWN_REASON);
 		}
 		
 		protected function netIOError(event: IOErrorEvent):void {
-      LOGGER.error("Input/output error - {0}", [event.text]);
+            var logData:Object = UsersUtil.initLogData();
+            logData.tags = ["apps"];
+            logData.message = "Input/output error - " + event.text;
+            LOGGER.info(JSON.stringify(logData));
+
 			sendConnectionFailedEvent(ConnectionFailedEvent.UNKNOWN_REASON);
 		}
 			
@@ -378,11 +384,11 @@ package org.bigbluebutton.main.model.users
 		}	
 			
         private function sendConnectionFailedEvent(reason:String):void{
-            var logData:Object = new Object();
+            var logData:Object = UsersUtil.initLogData();
+            logData.tags = ["apps"];
 
             if (this.logoutOnUserCommand) {
                 logData.reason = "User requested.";
-                logData.user = UsersUtil.getUserData();
                 logData.message = "User logged out from BBB App.";
                 LOGGER.info(JSON.stringify(logData));
                 
@@ -390,7 +396,6 @@ package org.bigbluebutton.main.model.users
             } else if (reason == ConnectionFailedEvent.CONNECTION_CLOSED && !UsersUtil.isUserEjected()) {
                 // do not try to reconnect if the connection failed is different than CONNECTION_CLOSED  
                 logData.reason = reason;
-                logData.user = UsersUtil.getUserData();
                 logData.message = "User disconnected from BBB App.";
                 LOGGER.info(JSON.stringify(logData));
 
@@ -411,14 +416,16 @@ package org.bigbluebutton.main.model.users
 
             } else {
                 if (UsersUtil.isUserEjected()) {
-                    logData.user = UsersUtil.getUserData();
                     logData.message = "User has been ejected from meeting.";
                     LOGGER.info(JSON.stringify(logData));
                     reason = ConnectionFailedEvent.USER_EJECTED_FROM_MEETING;
+                } else {
+                    logData.message = "Connection failed event - " + reason;
+                    LOGGER.info(JSON.stringify(logData));
+                    var e:ConnectionFailedEvent = new ConnectionFailedEvent(reason);
+                    dispatcher.dispatchEvent(e);
                 }
-                LOGGER.debug("Connection failed event - " + reason);
-                var e:ConnectionFailedEvent = new ConnectionFailedEvent(reason);
-                dispatcher.dispatchEvent(e);
+
             }
         }
 		
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/FlashMicSettings.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/FlashMicSettings.mxml
index b8ceb6b8de1664adc5457c327baae04a8aa0d1b4..ac461d35064fc6202b3ab69a15578619e2057eab 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/FlashMicSettings.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/FlashMicSettings.mxml
@@ -39,7 +39,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			import com.asfusion.mate.events.Dispatcher;
 			
 			import flash.ui.Keyboard;
-			
+			import org.bigbluebutton.core.UsersUtil;
 			import mx.controls.sliderClasses.Slider;
 			import mx.events.CloseEvent;
 			import mx.events.SliderEvent;
@@ -100,7 +100,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			
       private function reInitialize():void {
         my_nc = new NetConnection();
-	      my_nc.proxyType = "best";
+	      my_nc.proxyType = "best";
         my_nc.connect(null);
         nsStream = new NetStream(my_nc);
         if (mic != null) {
@@ -127,14 +127,21 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
         audioMicLevelDetected = 0;     
 			}
       
-      private function micStatusEventHandler(event:StatusEvent):void {					
+      private function micStatusEventHandler(event:StatusEvent):void {
+        var logData:Object = UsersUtil.initLogData();
+            
         switch(event.code) {
-          case "Microphone.Muted":						
-			LOGGER.debug("Access to microphone has been denied.");
+          case "Microphone.Muted":
+            logData.tags = ["voice", "flash"];
+            logData.message = "Access to microphone has been denied.";
+            LOGGER.info(JSON.stringify(logData));
             statusText.text = "You did not allow Flash to access your mic.";
             break;
           case "Microphone.Unmuted":         
-			LOGGER.debug("Access to the microphone has been allowed.");
+            logData.tags = ["voice", "flash"];
+            logData.message = "Access to the microphone has been allowed.";
+            LOGGER.info(JSON.stringify(logData));
+            
             // Comment these next 2-lines. We don't want the user hearing audio
             // while testing mic levels. (richard mar 26, 2014)
             // mic.setLoopBack(true);
@@ -155,7 +162,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
         micActivityTimer.start();          
       }
       
-			private function onCreationComplete():void {
+      private function onCreationComplete():void {
         LOGGER.debug("onCreationComplete. Seeting state to [flashMicSettingsTest]");
         microphoneList = Media.getMicrophoneNames();
         setupForMicLoopbackTest();
@@ -252,7 +259,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
       }
       
       private function onCancelClicked():void {
-		LOGGER.debug("onCancelClicked closing popup");
         cleanUp();
         stopEchoTest();
         var dispatcher:Dispatcher = new Dispatcher();
@@ -292,7 +298,11 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			}
      
       private function yesButtonClicked():void {
-        LOGGER.debug("Echo test passed.");    
+        var logData:Object = UsersUtil.initLogData();
+        logData.tags = ["voice"];
+        logData.message = "Echo test passed.";
+        LOGGER.info(JSON.stringify(logData));
+
         cleanUp();
         dispatchEvent(new FlashEchoTestHasAudioEvent());
         var dispatcher:Dispatcher = new Dispatcher();
@@ -301,7 +311,11 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
       }
       
       private function noButtonClicked():void {
-		LOGGER.debug("Echo test failed.");
+        var logData:Object = UsersUtil.initLogData();
+        logData.tags = ["voice"];
+        logData.message = "Echo test failed.";
+        LOGGER.info(JSON.stringify(logData));
+        
         dispatchEvent(new FlashEchoTestNoAudioEvent());
         testMicrophoneLoopback();
         setupForMicLoopbackTest();
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml
index 230deeb12e28204dd0fbd9a624066a4fb3d08441..ffa3e7ae610a24cbc71b140b767f41c81f5d4a3f 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainApplicationShell.mxml
@@ -119,6 +119,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			import org.bigbluebutton.modules.users.views.BreakoutRoomSettings;
 			import org.bigbluebutton.modules.videoconf.events.ShareCameraRequestEvent;
 			import org.bigbluebutton.util.i18n.ResourceUtil;
+            import org.bigbluebutton.core.UsersUtil;
 	
 			private static const LOGGER:ILogger = getClassLogger(MainApplicationShell);      
       
@@ -222,14 +223,27 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			}
 			
 			private function handleApplicationVersionEvent(event:AppVersionEvent):void {
+                var logData:Object = UsersUtil.initLogData();
+                
 				if (event.configLocaleVersion == true) {
 					receivedConfigLocaleVer = true;
 					appVersion = event.appVersion;
 					localeVersion = event.localeVersion;
+                                        
+                    logData.localeVersion = localeVersion;
+                    logData.tags = ["locale"];
+                    logData.message = "Received locale version fron config.xml";
+                    LOGGER.info(JSON.stringify(logData));
+      
 					LOGGER.debug("Received locale version fron config.xml");
 				} else {
 					receivedResourceLocaleVer = true;
-					LOGGER.debug("Received locale version fron locale file.");
+                    localeVersion = event.localeVersion;
+                    
+                    logData.localeVersion = localeVersion;
+                    logData.tags = ["locale"];
+                    logData.message = "Received locale version fronm locale file";
+                    LOGGER.info(JSON.stringify(logData));
 				}
 				
 				if (receivedConfigLocaleVer && receivedResourceLocaleVer) {
@@ -252,11 +266,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			private function fullScreenHandler(evt:FullScreenEvent):void {
 				dispState = stage.displayState + " (fullScreen=" + evt.fullScreen.toString() + ")";
 				if (evt.fullScreen) {
-					LOGGER.debug("Switching to full screen");
 					/* Do something specific here if we switched to full screen mode. */
 				
 				} else {
-					LOGGER.debug("Switching to normal screen");
 					/* Do something specific here if we switched to normal mode. */
 				}
 			}			
@@ -286,16 +298,13 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			}
 			
 			private function toggleFullScreen():void{
-				LOGGER.debug("Toggling fullscreen");
 	   			try {
 					switch (stage.displayState) {
 						case StageDisplayState.FULL_SCREEN:
-							LOGGER.debug("full screen mode");
 							// If already in full screen mode, switch to normal mode.
 							stage.displayState = StageDisplayState.NORMAL;
 							break;
 						default:
-							LOGGER.debug("Normal screen mode");
 							// If not in full screen mode, switch to full screen mode.
 							stage.displayState = StageDisplayState.FULL_SCREEN;
 							break;
@@ -630,7 +639,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			}
 			
 			private function onFooterLinkClicked(e:TextEvent):void{
-				LOGGER.debug("Clicked on link[{0}] from footer", [e.text]);
 				if (ExternalInterface.available) {
 					ExternalInterface.call("chatLinkClicked", e.text);
 				}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml
index 5d1841b93abf8a28cf15308e05efc5cc59c6bedd..f73c205eb38f9be439a7efa1612abfbb035c3bc6 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/MainToolbar.mxml
@@ -187,8 +187,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
      }
 
      private function logFlashPlayerCapabilities():void {
-         var logData:Object = new Object();
-         logData.user = UsersUtil.getUserData();
+         var logData:Object = UsersUtil.initLogData();
+         logData.tags = ["initialization"];
          logData.capabilities = getFlashPlayerCapabilities();
          logData.message = "Flash Player Capabilities.";
          LOGGER.info(JSON.stringify(logData));
diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/WebRTCEchoTest.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/WebRTCEchoTest.mxml
index d8001da96670d90f55d621dd22229761aef5d613..4435fe9a5c53eebddd1b23951e7b7edfcc416c0c 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/main/views/WebRTCEchoTest.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/WebRTCEchoTest.mxml
@@ -101,13 +101,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 				userClosed = true;
 				
         
-        var logData:Object = new Object();       
+        var logData:Object = UsersUtil.initLogData();       
         logData.reason = "User requested.";
-        logData.user = UsersUtil.getUserData();
+        logData.tags = ["voice", "webrtc"];
         logData.message = "WebRtc Echo test passed.";
-        
-        JSLog.info("WebRtc Echo test passed.", logData);
-        
         LOGGER.info(JSON.stringify(logData));
         
 				setCurrentState("connecting");
@@ -120,11 +117,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			private function noButtonClicked():void {
 				userClosed = true;
                 
-                var logData:Object = new Object();       
+                var logData:Object = UsersUtil.initLogData();       
                 logData.reason = "User requested.";
-                logData.user = UsersUtil.getUserData();
-                logData.message = "WebRtc Echo test failed.";
-                
+                logData.tags = ["voice", "webrtc"];
+                logData.message = "WebRtc Echo test failed.";                
                 LOGGER.info(JSON.stringify(logData));
                 
 				var dispatcher:Dispatcher = new Dispatcher();
@@ -190,9 +186,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 			}
       
       private function webRTCCallStarted():void {
-        var logData:Object = new Object();       
+        var logData:Object = UsersUtil.initLogData();       
         logData.reason = "User requested.";
-        logData.user = UsersUtil.getUserData();
+        logData.tags = ["voice", "webrtc"];
         logData.message = "WebRtc call started.";
                 
         LOGGER.info(JSON.stringify(logData));
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/model/LayoutDefinition.as b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/model/LayoutDefinition.as
old mode 100644
new mode 100755
index 18526f150aae6e1aa7ee1339e8a111c11ce7cff2..57eb6a74c19973bde61a624af421b981f6f85bb9
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/layout/model/LayoutDefinition.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/layout/model/LayoutDefinition.as
@@ -16,16 +16,16 @@
 * with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 *
 */
-package org.bigbluebutton.modules.layout.model {
-	import flash.utils.Dictionary;
-	
-	import flexlib.mdi.containers.MDICanvas;
-	import flexlib.mdi.containers.MDIWindow;
-	
-	import org.as3commons.logging.api.ILogger;
-	import org.as3commons.logging.api.getClassLogger;
-	import org.bigbluebutton.common.Role;
-	import org.bigbluebutton.core.managers.UserManager;
+package org.bigbluebutton.modules.layout.model {
+	import flash.utils.Dictionary;
+	
+	import flexlib.mdi.containers.MDICanvas;
+	import flexlib.mdi.containers.MDIWindow;
+	import org.bigbluebutton.core.UsersUtil;
+	import org.as3commons.logging.api.ILogger;
+	import org.as3commons.logging.api.getClassLogger;
+	import org.bigbluebutton.common.Role;
+	import org.bigbluebutton.core.managers.UserManager;
 
 	public class LayoutDefinition {
 		
@@ -92,8 +92,11 @@ package org.bigbluebutton.modules.layout.model {
 			} else if (hasPresenterLayout) {
 				return _layoutsPerRole[Role.PRESENTER];
 			} else {
-				LOGGER.error("There's no layout that fits the participants profile");
-        //trace(LOG + "getMyLayout There's no layout that fits the participants profile");
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["layout"];
+                logData.message = "There's no layout that fits the participants profile."; 
+                LOGGER.error(JSON.stringify(logData));
+
 				return null;
 			}
 		}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/ConnectionManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/ConnectionManager.as
index a3eaa9085b6eddd71cc3df962148915cdb52ce00..7d4e2357b50d02194697d72ef2a80d83be8d3114 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/ConnectionManager.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/ConnectionManager.as
@@ -148,18 +148,18 @@ package org.bigbluebutton.modules.phone.managers {
       var info : Object = event.info;
       var statusCode : String = info.code;
       
-      var logData:Object = new Object();       
-      logData.user = UsersUtil.getUserData();
+      var logData:Object = UsersUtil.initLogData();
       
       switch (statusCode) {
         case "NetConnection.Connect.Success":
           numNetworkChangeCount = 0;
-          LOGGER.debug("Connection success");
-          JSLog.debug("Successfully connected to BBB Voice", logData);
+          logData.tags = ["voice", "flash"];
+          logData.message = "Connection success.";
+          LOGGER.info(JSON.stringify(logData));
           handleConnectionSuccess();
           break;
         case "NetConnection.Connect.Failed":
-          JSLog.error("Failed to connect to BBB Voice", logData);
+          logData.tags = ["voice", "flash"];
 		  logData.message = "NetConnection.Connect.Failed from bbb-voice";
 		  LOGGER.info(JSON.stringify(logData));
           handleConnectionFailed();
@@ -167,13 +167,14 @@ package org.bigbluebutton.modules.phone.managers {
         case "NetConnection.Connect.NetworkChange":
           numNetworkChangeCount++;
           if (numNetworkChangeCount % 20 == 0) {
+              logData.tags = ["voice", "flash"];
              logData.message = "Detected network change on bbb-voice";
              logData.numNetworkChangeCount = numNetworkChangeCount;
              LOGGER.info(JSON.stringify(logData));
           }
           break;
         case "NetConnection.Connect.Closed":
-          JSLog.debug("Disconnected from BBB Voice", logData);
+          logData.tags = ["voice", "flash"];
 		  logData.message = "Disconnected from BBB Voice";
 		  LOGGER.info(JSON.stringify(logData));
           handleConnectionClosed();
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/FlashCallManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/FlashCallManager.as
index 3d5ba4ee6319b9bab1501cf71456622989f144ca..bab48ef7345453058369ad83338c26fe72c2a40c 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/FlashCallManager.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/FlashCallManager.as
@@ -277,12 +277,11 @@
     
     public function handleFlashCallConnectedEvent(event:FlashCallConnectedEvent):void {      
       LOGGER.debug("handling FlashCallConnectedEvent, current state: {0}", [state]);
-      var logData:Object = new Object();       
-      logData.user = UsersUtil.getUserData();
+      var logData:Object = UsersUtil.initLogData();
+      logData.tags = ["voice", "flash"];
       
       switch (state) {
         case CALLING_INTO_CONFERENCE:
-          JSLog.info("Successfully joined the voice conference.", logData);
 		  logData.message = "Successfully joined the voice conference";
           LOGGER.info(jsonXify(logData));
           state = IN_CONFERENCE;
@@ -290,7 +289,6 @@
           streamManager.callConnected(event.playStreamName, event.publishStreamName, event.codec, event.listenOnlyCall);
           break;
         case CONNECTING_TO_LISTEN_ONLY_STREAM:
-          JSLog.info("Successfully connected to the listen only stream.", logData);
 		  logData.message = "Successfully connected to the listen only stream.";
           LOGGER.info(jsonXify(logData));
           state = ON_LISTEN_ONLY_STREAM;
@@ -299,7 +297,6 @@
           break;
         case CALLING_INTO_ECHO_TEST:
           state = IN_ECHO_TEST;
-          JSLog.info("Successfully called into the echo test application.", logData);
 		  logData.message = "Successfully called into the echo test application.";
 		  logData.publishStreamName = event.publishStreamName;
 		  logData.playStreamName = event.playStreamName;
@@ -317,8 +314,8 @@
     }
 
     public function handleFlashCallDisconnectedEvent(event:FlashCallDisconnectedEvent):void {
-      var logData:Object = new Object();       
-      logData.user = UsersUtil.getUserData();
+      var logData:Object = UsersUtil.initLogData();
+      logData.tags = ["voice", "flash"];
       
       LOGGER.debug("Flash call disconnected, current state: {0}", [state]);
       switch (state) {
@@ -328,14 +325,12 @@
           break;
         case ON_LISTEN_ONLY_STREAM:
           state = INITED;
-          JSLog.info("Flash user left the listen only stream.", logData);
 		  logData.message = "Flash user left the listen only stream.";
           LOGGER.info(jsonXify(logData));
 		  dispatcher.dispatchEvent(new FlashLeftVoiceConferenceEvent());
           break;
         case IN_ECHO_TEST:
           state = INITED;
-          JSLog.info("Flash echo test stopped.", logData);
 		  logData.message = "Flash echo test stopped.";
 		  LOGGER.info(jsonXify(logData));
 
@@ -347,8 +342,6 @@
           break;
         case CALLING_INTO_ECHO_TEST:
           state = INITED;
-          JSLog.error("Unsuccessfully called into the echo test application.", logData);
-
 		  logData.message = "Unsuccessfully called into the echo test application.";
 		  LOGGER.info(jsonXify(logData));
           dispatcher.dispatchEvent(new FlashEchoTestFailedEvent());
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/WebRTCCallManager.as b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/WebRTCCallManager.as
index 7c0ea79396a6e7c288333e94debd60dbdebbac5e..fa182bb265371e07c876e632c1a0abb1b8c8f543 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/WebRTCCallManager.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/phone/managers/WebRTCCallManager.as
@@ -200,12 +200,10 @@ package org.bigbluebutton.modules.phone.managers
         errorString = ResourceUtil.getInstance().getString("bbb.webrtcWarning.failedError.unknown", [event.errorCode]);
       }
       
-	  var logData:Object = new Object();       
-	  logData.user = UsersUtil.getUserData();
+	  var logData:Object = UsersUtil.initLogData();
 	  logData.user.reason = errorString;
-      logData.message = "WebRtc Echo test failed.";
-	  JSLog.warn("WebRtc Echo test failed.", logData);
-	  
+      logData.tags = ["voice", "webrtc"];
+      logData.message = "WebRtc Echo test failed.";	  
 	  LOGGER.info(jsonXify(logData));
 	  
       sendWebRTCAlert(ResourceUtil.getInstance().getString("bbb.webrtcWarning.title"), ResourceUtil.getInstance().getString("bbb.webrtcWarning.message", [errorString]), errorString);
@@ -215,9 +213,9 @@ package org.bigbluebutton.modules.phone.managers
       model.state = Constants.INITED;
       var errorString:String = ResourceUtil.getInstance().getString("bbb.webrtcWarning.failedError.endedunexpectedly");
 	  
-	  var logData:Object = new Object();       
-	  logData.user = UsersUtil.getUserData();
+	  var logData:Object = UsersUtil.initLogData();
 	  logData.user.reason = errorString;
+      logData.tags = ["voice", "webrtc"];
       logData.message = "WebRtc Echo test ended unexpectedly.";
 	  LOGGER.info(jsonXify(logData));
 	  
@@ -256,8 +254,8 @@ package org.bigbluebutton.modules.phone.managers
             errorString = ResourceUtil.getInstance().getString("bbb.webrtcWarning.failedError.unknown", [event.errorCode]);
           }
           
-          var logData:Object = new Object();       
-          logData.user = UsersUtil.getUserData();
+          var logData:Object = UsersUtil.initLogData();
+          logData.tags = ["voice", "webrtc"];
           logData.user.reason = errorString;
           LOGGER.info(jsonXify(logData));
           
@@ -270,8 +268,7 @@ package org.bigbluebutton.modules.phone.managers
       model.state = Constants.INITED;
       var errorString:String = ResourceUtil.getInstance().getString("bbb.webrtcWarning.failedError.mediamissing");
 	  
-	  var logData:Object = new Object();       
-	  logData.user = UsersUtil.getUserData();
+	  var logData:Object = UsersUtil.initLogData();
 	  logData.user.reason = errorString;
 	  LOGGER.info(jsonXify(logData));
 	  
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/present/business/FileUploadService.as b/bigbluebutton-client/src/org/bigbluebutton/modules/present/business/FileUploadService.as
old mode 100644
new mode 100755
index d9e57878dfe7930568e1d77a42a3819080f1ec47..11839bce8688bb8c5e0d6691436def93d205cfb1
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/business/FileUploadService.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/business/FileUploadService.as
@@ -29,13 +29,13 @@ package org.bigbluebutton.modules.present.business
 	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.bigbluebutton.modules.present.events.UploadCompletedEvent;
 	import org.bigbluebutton.modules.present.events.UploadIoErrorEvent;
 	import org.bigbluebutton.modules.present.events.UploadProgressEvent;
-	import org.bigbluebutton.modules.present.events.UploadSecurityErrorEvent;
+	import org.bigbluebutton.modules.present.events.UploadSecurityErrorEvent;
 	
 	public class FileUploadService {
 		public static const ID:String = "FileUploadService";
@@ -125,8 +125,12 @@ package org.bigbluebutton.modules.present.business
 		 * 
 		 */
 		private function onUploadIoError(event:IOErrorEvent):void {
-			if(event.errorID != 2038){ //upload works despite of this error.
-				LOGGER.error("onUploadIoError text: {0}, errorID: {1}", [event.text, event.errorID]);
+			if (event.errorID != 2038){ //upload works despite of this error.
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["presentation"];
+                logData.message = "IOError while uploading presentation."; 
+                LOGGER.error(JSON.stringify(logData));
+            
 				dispatcher.dispatchEvent(new UploadIoErrorEvent());
 			}
 			
@@ -138,8 +142,11 @@ package org.bigbluebutton.modules.present.business
 		 * 
 		 */		
 		private function onUploadSecurityError(event:SecurityErrorEvent) : void {
-			dispatcher.dispatchEvent(new UploadSecurityErrorEvent());
-			LOGGER.error("A security error occured while trying to upload the presentation. {0}", [event.toString()]);
+            var logData:Object = UsersUtil.initLogData();
+            logData.tags = ["presentation"];
+            logData.message = "Security error while uploading presentation."; 
+            LOGGER.error(JSON.stringify(logData));
+            dispatcher.dispatchEvent(new UploadSecurityErrorEvent());
 		}		
 	}
 }
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileUploadWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileUploadWindow.mxml
old mode 100644
new mode 100755
index 6a78844833a91a91f73014f26f53c57122242f97..410e40c51e043ae9827744d4fdb5644b72204f91
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileUploadWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/present/ui/views/FileUploadWindow.mxml
@@ -44,7 +44,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
     <![CDATA[
 		import mx.collections.ArrayCollection;
 		import mx.utils.StringUtil;
-		
+		import org.bigbluebutton.core.UsersUtil;
 		import org.as3commons.logging.api.ILogger;
 		import org.as3commons.logging.api.getClassLogger;
 		import org.bigbluebutton.common.Images;
@@ -158,12 +158,17 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
         if (fileSize > maxFileSizeBytes) {     
           // Hardcode for now to 30M limit. 
           // This should be configurable to match what's allowed in nginx. (ralam feb 23, 2010) 
-          LOGGER.debug("File exceeds max limit:({0}>{1})", [fileSize, maxFileSizeBytes]);  			
+            var logData:Object = UsersUtil.initLogData();
+            logData.tags = ["presentation"];
+            logData.message = "File exceeds max limit."; 
+            logData.fileSizeBytes = fileSize;
+            logData.maxFileSizeBytes = maxFileSizeBytes;
+            LOGGER.error(JSON.stringify(logData));
+                
           enableControls();
           displayAlert(ResourceUtil.getInstance().getString('bbb.presentation.maxUploadFileExceededAlert'));
         } else {
           var presentationName:String = StringUtil.trim(fileToUpload.name);
-          LOGGER.debug("Uploading file : {0}", [presentationName]);
 
           progBarLbl.visible = true;          
           lblFileName.enabled = false;
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ScreenshareViewWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ScreenshareViewWindow.mxml
index 68ba332a19dbaaa436c1322652f77e5ca27f579d..fbf95f7a868d9ef21f09eae4d2e28d68efc026c3 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ScreenshareViewWindow.mxml
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/screenshare/view/components/ScreenshareViewWindow.mxml
@@ -58,6 +58,7 @@
       import org.bigbluebutton.core.managers.ReconnectionManager;
       import org.bigbluebutton.main.events.BBBEvent;
       import org.bigbluebutton.modules.screenshare.services.red5.Connection;
+      import org.bigbluebutton.core.UsersUtil;
       
       private static const LOG:String = "SC::ScreenshareViewWIndow - ";
       private static const LOGGER:ILogger = getClassLogger(ScreenshareViewWindow);
@@ -116,12 +117,13 @@
 				maximizeRestoreBtn.tabIndex = baseIndex+2;
 				closeBtn.tabIndex = baseIndex+3;
                
-        var logData:Object = new Object();
+        var logData:Object = UsersUtil.initLogData();
+        logData.tags = ["screenshare"];
         logData.width = videoWidth;
         logData.height = videoHeight;
         logData.streamId = streamId;
         
-        JSLog.debug(LOG + "onCreationComplete", logData);
+        LOGGER.info(JSON.stringify(logData));
 			}
 			
 			private function onResizeEndEvent(event:MDIWindowEvent):void {
@@ -146,12 +148,13 @@
         videoHeight = ScreenshareModel.getInstance().height;
         streamId = ScreenshareModel.getInstance().streamId;
         
-        var logData:Object = new Object();
+        var logData:Object = UsersUtil.initLogData();
+        logData.tags = ["screenshare"];
         logData.width = videoWidth;
         logData.height = videoHeight;
         logData.streamId = streamId;
         
-        JSLog.debug(LOG + "viewScreenshareStream Chrome", logData);
+        LOGGER.info(JSON.stringify(logData));
         
         ns = new NetStream(connection.getConnection());
         ns.addEventListener( NetStatusEvent.NET_STATUS, onNetStatus );
@@ -176,11 +179,12 @@
       public function onMetaData(info:Object):void{
         trace("metadata: width=" + info.width + " height=" + info.height);
         
-        var logData:Object = new Object();
+        var logData:Object = UsersUtil.initLogData();
+        logData.tags = ["screenshare"];
         logData.width = info.width;
         logData.height = info.height;
         
-        JSLog.debug(LOG + "onMetaData", logData);
+        LOGGER.info(JSON.stringify(logData));
       }
       
       protected function updateButtonsPosition():void {
@@ -207,23 +211,25 @@
 						
 			private function onAsyncError(e:AsyncErrorEvent):void{
         LOGGER.debug("asyncerror " + e.toString());
-        var logData:Object = new Object();
-        logData.error = e.toString();
-        JSLog.debug(LOG + "asyncerror ", logData);
+        var logData:Object = UsersUtil.initLogData();
+        logData.tags = ["screenshare"];
+        logData.message = "asyncerror";
+        LOGGER.info(JSON.stringify(logData));
 			}
 			
 			private function onNetStatus(e:NetStatusEvent):void{
-        var logData:Object = new Object();
+        var logData:Object = UsersUtil.initLogData();
+        logData.tags = ["screenshare"];
         logData.stream = streamId;
         
 				switch(e.info.code){
   				case "NetStream.Play.Start":
-            LOGGER.debug("NetStream.Publish.Start for broadcast stream " + streamId);
-            JSLog.debug(LOG + "NetStream.Publish.Start for broadcast stream ", logData);
+            logData.message = "NetStream.Publish.Start for broadcast stream " + streamId;
+            LOGGER.info(JSON.stringify(logData));
   					break;
   				case "NetStream.Play.UnpublishNotify":
-            LOGGER.debug("NetStream.Play.UnpublishNotify for broadcast stream " + streamId);
-            JSLog.debug(LOG + "NetStream.Play.UnpublishNotify for broadcast stream ", logData);
+            logData.message = "NetStream.Play.UnpublishNotify for broadcast stream " + streamId;
+            LOGGER.info(JSON.stringify(logData));
   					stopViewing();
   					break;
 				}
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 ab78afac831d82340a10a5f288d21326ab6f9a5c..ac70f0ada31620d53fa3962da4c4cebb1976f55e 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageReceiver.as
@@ -540,13 +540,12 @@ package org.bigbluebutton.modules.users.services
     private function handleUserUnsharedWebcam(msg: Object):void {  
 	  var map:Object = JSON.parse(msg.msg);
 	  
-	  var logData:Object = new Object();
-	  logData.user = UsersUtil.getUserData();
-	  logData.user.webcamStream = map.webcamStream;
-	  logData.user.serverTimestamp = map.serverTimestamp;
-	  JSLog.warn("UserUnsharedWebcam server message", logData);
-      
-	  logData.message = "UserUnsharedWebcam server message";
+       var logData:Object = UsersUtil.initLogData();
+       logData.tags = ["webcam"];
+       logData.message = "UserUnsharedWebcam server message";
+       logData.user.webcamStream = map.webcamStream;
+       logData.user.serverTimestamp = map.serverTimestamp;
+
 	  LOGGER.info(JSON.stringify(logData));
 	  
       UserManager.getInstance().getConference().unsharedWebcam(map.userId, map.webcamStream);
@@ -570,8 +569,6 @@ package org.bigbluebutton.modules.users.services
     }
     
     public function participantJoined(joinedUser:Object):void {    
-      LOGGER.info(JSON.stringify(joinedUser));
-	  
       var user:BBBUser = new BBBUser();
       user.userID = joinedUser.userId;
       user.name = joinedUser.name;
@@ -582,7 +579,8 @@ package org.bigbluebutton.modules.users.services
       user.userLocked = joinedUser.locked;
       user.avatarURL = joinedUser.avatarURL;
 	  
-      var logData:Object = new Object();
+      var logData:Object = UsersUtil.initLogData();
+      logData.tags = ["apps"];
 	  logData.user = user;
       logData.message = "User joined.";
 	  LOGGER.info(JSON.stringify(logData));
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as
index 9881a0fe0f5a13b9fe736c68e6ef0d8c80bddd2e..ba3404ea525ddab5f21ed6f0adc3cc7d5dc75a04 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/services/MessageSender.as
@@ -23,7 +23,7 @@ package org.bigbluebutton.modules.users.services
   import org.bigbluebutton.core.BBB;
   import org.bigbluebutton.core.UsersUtil;
   import org.bigbluebutton.core.managers.ConnectionManager;
-  import org.bigbluebutton.main.api.JSLog;
+  import org.bigbluebutton.main.api.JSLog;
   
   public class MessageSender {
 	private static const LOGGER:ILogger = getClassLogger(MessageSender);      
@@ -38,7 +38,11 @@ package org.bigbluebutton.modules.users.services
         function(result:String):void { // On successful result
         },	                   
         function(status:String):void { // status - On error occurred
-		  LOGGER.error(status); 
+            var logData:Object = UsersUtil.initLogData();
+            logData.tags = ["apps"];
+            logData.userId = userID;
+            logData.message = "Error occured ejecting user.";
+            LOGGER.info(JSON.stringify(logData));
         },
         message
       );
@@ -50,7 +54,10 @@ package org.bigbluebutton.modules.users.services
         function(result:String):void { // On successful result
         },	                   
         function(status:String):void { // status - On error occurred
-		  LOGGER.error(status); 
+            var logData:Object = UsersUtil.initLogData();
+            logData.tags = ["apps"];
+            logData.message = "Error occured querying users.";
+            LOGGER.info(JSON.stringify(logData));
         }
       );
     }
@@ -66,26 +73,34 @@ package org.bigbluebutton.modules.users.services
         function(result:String):void { // On successful result
         },	                   
         function(status:String):void { // status - On error occurred
-		  LOGGER.error(status); 
+            var logData:Object = UsersUtil.initLogData();
+            logData.tags = ["apps"];
+            logData.message = "Error occured assigning presenter.";
+            LOGGER.info(JSON.stringify(logData));
         },
         message
       );
-		}
-		
-		public function emojiStatus(userID:String, emoji:String):void {
-			var message:Object = new Object();
-			message["emojiStatus"] = emoji;
-			message["userId"] = userID;
-			var _nc:ConnectionManager = BBB.initConnectionManager();
-			_nc.sendMessage("participants.userEmojiStatus", function(result:String):void
-			{ // On successful result
-			}, function(status:String):void
-			{ // status - On error occurred
-				LOGGER.error(status);
-			},
-			message
-			);
-		}
+      
+    }
+
+    public function emojiStatus(userID:String, emoji:String):void {
+        var message:Object = new Object();
+        message["emojiStatus"] = emoji;
+        message["userId"] = userID;
+        
+        var _nc:ConnectionManager = BBB.initConnectionManager();
+        _nc.sendMessage("participants.userEmojiStatus", 
+            function(result:String):void { // On successful result   
+                
+            }, function(status:String):void { // status - On error occurred
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured setting emoji status.";
+                LOGGER.info(JSON.stringify(logData));
+            },
+            message
+        );
+    }
 		
 		public function createBreakoutRooms(meetingId:String, rooms:Array, durationInMinutes:int, record:Boolean, redirectOnJoin:Boolean):void {
 			var message:Object = new Object();
@@ -102,7 +117,10 @@ package org.bigbluebutton.modules.users.services
 				// On successful result
 			}, function(status:String):void
 			{ // status - On error occurred
-				LOGGER.error(status);
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured creating breakout rooms.";
+                LOGGER.info(JSON.stringify(logData));
 			},
 			jsonMsg
 			);
@@ -121,7 +139,10 @@ package org.bigbluebutton.modules.users.services
 			_nc.sendMessage("breakoutroom.requestBreakoutJoinUrl", function(result:String):void {
 				// On successful result
 			}, function(status:String):void { // status - On error occurred
-				LOGGER.error(status);
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured requesting breakout room join url.";
+                LOGGER.info(JSON.stringify(logData));
 			}, jsonMsg);
 		}
 		
@@ -132,7 +153,10 @@ package org.bigbluebutton.modules.users.services
 				// On successful result
 			}, function(status:String):void
 			{ // status - On error occurred
-				LOGGER.error(status);
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured listen on breakout room.";
+                LOGGER.info(JSON.stringify(logData));
 			},
 			JSON.stringify({meetingId: meetingId, targetMeetingId: targetMeetingId, userId: userId})
 			);
@@ -145,7 +169,10 @@ package org.bigbluebutton.modules.users.services
 				// On successful result
 			}, function(status:String):void
 			{ // status - On error occurred
-				LOGGER.error(status);
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured ending breakout rooms.";
+                LOGGER.info(JSON.stringify(logData));
 			},
 			JSON.stringify({meetingId: meetingId})
 			);
@@ -157,29 +184,33 @@ package org.bigbluebutton.modules.users.services
         function(result:String):void { // On successful result
         },	                   
         function(status:String):void { // status - On error occurred
-		  LOGGER.error(status); 
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured sharing webcam.";
+                LOGGER.info(JSON.stringify(logData));
         },
         streamName
       );
     }
     
     public function removeStream(userID:String, streamName:String):void {
-	  
-	  var logData:Object = new Object();
-	  logData.user = UsersUtil.getUserData();
-	  
-	  JSLog.warn("User stopped sharing webcam event.", logData);
-	  
-	  logData.streamId = streamName;
-	  logData.message = "User stopped sharing webcam";
-	  LOGGER.info(JSON.stringify(logData));
-	  
+  
+        var logData:Object = UsersUtil.initLogData();
+        logData.tags = ["webcam"];
+        logData.streamId = streamName;
+        logData.message = "User stopped sharing webcam";
+        LOGGER.info(JSON.stringify(logData));
+
+  
       var _nc:ConnectionManager = BBB.initConnectionManager();
       _nc.sendMessage("participants.unshareWebcam", 
         function(result:String):void { // On successful result
         },	                   
         function(status:String):void { // status - On error occurred
-		  LOGGER.error(status);  
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured unsharing webcam.";
+                LOGGER.info(JSON.stringify(logData));
         },
         streamName
       );
@@ -192,7 +223,10 @@ package org.bigbluebutton.modules.users.services
         function(result:String):void { // On successful result
         },	                   
         function(status:String):void { // status - On error occurred
-		  LOGGER.error(status); 
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured getting recording status.";
+                LOGGER.info(JSON.stringify(logData));
         }
       ); //_netConnection.call
     }
@@ -208,7 +242,10 @@ package org.bigbluebutton.modules.users.services
 			// On successful result
 		}, function(status:String):void
 		{ // status - On error occurred
-			LOGGER.error(status);
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured querying breakout rooms.";
+                LOGGER.info(JSON.stringify(logData));
 		},
 			jsonMsg
 		);
@@ -225,7 +262,10 @@ package org.bigbluebutton.modules.users.services
         function(result:String):void { // On successful result
         },	                   
         function(status:String):void { // status - On error occurred
-		  LOGGER.error(status); 
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured change recording status.";
+                LOGGER.info(JSON.stringify(logData));
         },
         message
       ); //_netConnection.call
@@ -241,7 +281,10 @@ package org.bigbluebutton.modules.users.services
         function(result:String):void { // On successful result
         },	                   
         function(status:String):void { // status - On error occurred
-		  LOGGER.error(status); 
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured muting all users.";
+                LOGGER.info(JSON.stringify(logData));
         },
         message
       ); 
@@ -257,7 +300,10 @@ package org.bigbluebutton.modules.users.services
         function(result:String):void { // On successful result
         },	                   
         function(status:String):void { // status - On error occurred
-		  LOGGER.error(status); 
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured muting all users except presenter.";
+                LOGGER.info(JSON.stringify(logData));
         },
         message
       ); 
@@ -274,7 +320,10 @@ package org.bigbluebutton.modules.users.services
         function(result:String):void { // On successful result
         },	                   
         function(status:String):void { // status - On error occurred
-		  LOGGER.error(status); 
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured muting user.";
+                LOGGER.info(JSON.stringify(logData));
         },
         message
       );          
@@ -290,7 +339,10 @@ package org.bigbluebutton.modules.users.services
         function(result:String):void { // On successful result
         },	                   
         function(status:String):void { // status - On error occurred
-		  LOGGER.error(status); 
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured ejecting user.";
+                LOGGER.info(JSON.stringify(logData));
         },
         message
       );    
@@ -305,7 +357,10 @@ package org.bigbluebutton.modules.users.services
         function(result:String):void { // On successful result
         },	                   
         function(status:String):void { // status - On error occurred
-		  LOGGER.error(status); 
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occuredget room mute state.";
+                LOGGER.info(JSON.stringify(logData));
         }
       ); 
     }
@@ -319,7 +374,10 @@ package org.bigbluebutton.modules.users.services
         function(result:String):void { // On successful result
         },	                   
         function(status:String):void { // status - On error occurred
-		  LOGGER.error(status); 
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured getting lock state.";
+                LOGGER.info(JSON.stringify(logData));
         }
       );    
     }    
@@ -367,7 +425,10 @@ package org.bigbluebutton.modules.users.services
 			function(result:String):void { // On successful result
 			},	                   
 			function(status:String):void { // status - On error occurred
-			  LOGGER.error(status); 
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured setting user lock status.";
+                LOGGER.info(JSON.stringify(logData));
 			},
 			message
 		);
@@ -421,10 +482,13 @@ package org.bigbluebutton.modules.users.services
         function(result:String):void { // On successful result
         },	                   
         function(status:String):void { // status - On error occurred
-		  LOGGER.error(status); 
+                var logData:Object = UsersUtil.initLogData();
+                logData.tags = ["apps"];
+                logData.message = "Error occured saving lock settings.";
+                LOGGER.info(JSON.stringify(logData));
         },
         newLockSettings
       );      
     }
   }
-}
+}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoProxy.as b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoProxy.as
index 6dfe4584e17c078b4c89e3da5e6be2b6c1649436..0a1590bc2c0d760821d44b9f87b541fde3cde56f 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoProxy.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/videoconf/business/VideoProxy.as
@@ -85,15 +85,15 @@ package org.bigbluebutton.modules.videoconf.business
 	    }
 	    
 		private function onAsyncError(event:AsyncErrorEvent):void{
-			var logData:Object = new Object();
-			logData.user = UsersUtil.getUserData();
+			var logData:Object = UsersUtil.initLogData();
+			logData.tags = ["webcam"];
 			logData.message = "VIDEO WEBCAM onAsyncError"; 
 			LOGGER.error(JSON.stringify(logData));
 		}
 		
 		private function onIOError(event:NetStatusEvent):void{
-			var logData:Object = new Object();
-			logData.user = UsersUtil.getUserData();
+			var logData:Object = UsersUtil.initLogData();
+			logData.tags = ["webcam"];
 			logData.message = "VIDEO WEBCAM onIOError"; 
 			LOGGER.error(JSON.stringify(logData));
 		}
@@ -112,8 +112,8 @@ package org.bigbluebutton.modules.videoconf.business
 		private function onNetStatus(event:NetStatusEvent):void{
 
 			LOGGER.debug("[{0}] for [{1}]", [event.info.code, _url]);
-			var logData:Object = new Object();
-			logData.user = UsersUtil.getUserData();
+			var logData:Object = UsersUtil.initLogData();
+			logData.tags = ["webcam"];
 			logData.user.eventCode = event.info.code + "[reconnecting=" + reconnecting + ",reconnect=" + reconnect + "]";
 						
 			switch(event.info.code){
@@ -123,7 +123,6 @@ package org.bigbluebutton.modules.videoconf.business
 					break;
 				case "NetStream.Play.Failed":
 					if (reconnect) {
-						JSLog.warn("NetStream.Play.Failed from bbb-video", logData);
 						logData.message = "NetStream.Play.Failed from bbb-video";
 						LOGGER.info(JSON.stringify(logData));
 					}
@@ -131,7 +130,6 @@ package org.bigbluebutton.modules.videoconf.business
 					break;
 				case "NetStream.Play.Stop":
 					if (reconnect) {
-						JSLog.warn("NetStream.Play.Stop from bbb-video", logData);
 						logData.message = "NetStream.Play.Stop from bbb-video";
 						LOGGER.info(JSON.stringify(logData));
 					}
@@ -162,7 +160,6 @@ package org.bigbluebutton.modules.videoconf.business
 					}
 					
 					if (reconnect) {
-						JSLog.warn("NetConnection.Connect.Failed from bbb-video", logData);
 						logData.message = "NetConnection.Connect.Failed from bbb-video";
 						LOGGER.info(JSON.stringify(logData));
 					}
diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/models/WhiteboardModel.as b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/models/WhiteboardModel.as
old mode 100644
new mode 100755
index fd1c4b09996ff3be9d427477b502594fe747f46a..792d6246b1a267cac1eadb31bf8966935ed023fc
--- a/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/models/WhiteboardModel.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/modules/whiteboard/models/WhiteboardModel.as
@@ -21,7 +21,7 @@ package org.bigbluebutton.modules.whiteboard.models
 	import flash.events.IEventDispatcher;
 	
 	import mx.collections.ArrayCollection;
-	
+	import org.bigbluebutton.core.UsersUtil;
 	import org.as3commons.logging.api.ILogger;
 	import org.as3commons.logging.api.getClassLogger;
 	import org.bigbluebutton.modules.present.model.Page;
@@ -51,7 +51,7 @@ package org.bigbluebutton.modules.whiteboard.models
     }
     
 		public function addAnnotation(annotation:Annotation):void {
-      LOGGER.debug("*** Adding annotation [{0},{1},{2}] ****", [annotation.id, annotation.type, annotation.status]);
+     // LOGGER.debug("*** Adding annotation [{0},{1},{2}] ****", [annotation.id, annotation.type, annotation.status]);
       var wb:Whiteboard;
       if (annotation.status == DrawObject.DRAW_START || annotation.type == DrawObject.POLL
 		  || annotation.status == TextObject.TEXT_CREATED) {
@@ -70,7 +70,7 @@ package org.bigbluebutton.modules.whiteboard.models
          }
        }
 			 
-       LOGGER.debug("*** Dispatching WhiteboardUpdate.BOARD_UPDATED Event ****");
+      // LOGGER.debug("*** Dispatching WhiteboardUpdate.BOARD_UPDATED Event ****");
        var event:WhiteboardUpdate = new WhiteboardUpdate(WhiteboardUpdate.BOARD_UPDATED);
        event.annotation = annotation;
        _dispatcher.dispatchEvent(event);
@@ -86,13 +86,13 @@ package org.bigbluebutton.modules.whiteboard.models
     
     
     public function addAnnotationFromHistory(whiteboardId:String, annotation:Array):void {                
-      LOGGER.debug("addAnnotationFromHistory: wb id=[{0}]", [whiteboardId]);
+      //LOGGER.debug("addAnnotationFromHistory: wb id=[{0}]", [whiteboardId]);
       var wb:Whiteboard = getWhiteboard(whiteboardId);
       if (wb != null) {
-        LOGGER.debug("Whiteboard is already present. Adding shapes.");
+       // LOGGER.debug("Whiteboard is already present. Adding shapes.");
         addShapes(wb, annotation);
       } else {
-        LOGGER.debug("Whiteboard is NOT present. Creating WB and adding shapes.");
+       // LOGGER.debug("Whiteboard is NOT present. Creating WB and adding shapes.");
         wb = new Whiteboard(whiteboardId);
         addShapes(wb, annotation);
         _whiteboards.addItem(wb);
diff --git a/bigbluebutton-client/src/org/bigbluebutton/util/i18n/ResourceUtil.as b/bigbluebutton-client/src/org/bigbluebutton/util/i18n/ResourceUtil.as
index 917451c0f61724e15321e1cd1c46127bdbc381ea..a29d34af03943a0de3fd11b46bf680c657b83892 100755
--- a/bigbluebutton-client/src/org/bigbluebutton/util/i18n/ResourceUtil.as
+++ b/bigbluebutton-client/src/org/bigbluebutton/util/i18n/ResourceUtil.as
@@ -32,7 +32,7 @@ package org.bigbluebutton.util.i18n
 	import mx.resources.IResourceManager;
 	import mx.resources.ResourceManager;
 	import mx.utils.URLUtil;
-	
+    import org.bigbluebutton.core.UsersUtil;
 	import org.as3commons.logging.api.ILogger;
 	import org.as3commons.logging.api.getClassLogger;
 	import org.bigbluebutton.common.events.LocaleChangeEvent;
@@ -180,7 +180,10 @@ package org.bigbluebutton.util.i18n
 				localeIndex = getIndexForLocale(preferredLocale);
 			} else {
 				if (preferredLocale != MASTER_LOCALE) {
-					LOGGER.debug("Failed to load locale [{0}].", [preferredLocale]);
+                    var logData:Object = UsersUtil.initLogData();
+                    logData.tags = ["locale"];
+                    logData.message = "Failed to load locale = " + preferredLocale;
+                    LOGGER.info(JSON.stringify(logData));
 				}
 	
 				resourceManager.localeChain = [MASTER_LOCALE];