diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/BigBlueButtonApplication.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/BigBlueButtonApplication.java
index 17347e4dd4e808fd6694712aa55bc234a59f5f55..6010fd0e53239103318680f48259a2ddbb89842d 100755
--- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/BigBlueButtonApplication.java
+++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/BigBlueButtonApplication.java
@@ -25,6 +25,7 @@ import org.bigbluebutton.conference.service.recorder.RecorderApplication;
 import org.red5.logging.Red5LoggerFactory;
 import org.red5.server.adapter.IApplication;
 import org.red5.server.adapter.MultiThreadedApplicationAdapter;
+import org.red5.server.api.IClient;
 import org.red5.server.api.IConnection;
 import org.red5.server.api.IContext;
 import org.red5.server.api.scope.IScope;
@@ -40,7 +41,40 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter {
 	private RecorderApplication recorderApplication;
 	private AbstractApplicationContext appCtx;
 	private ConnectionInvokerService connInvokerService;
-		
+	
+	@Override
+	public boolean appConnect(IConnection conn, Object[] params) {
+		log.debug("appConnect");
+		return true;
+	}
+
+	@Override
+	public void appDisconnect(IConnection conn) {
+		log.debug("appDisconnect");
+	}
+
+	@Override
+	public boolean appJoin(IClient client, IScope scope) {
+		log.debug("appJoin: " + scope.getName());
+		return true;
+	}
+
+	@Override
+	public void appLeave(IClient client, IScope scope) {
+		log.debug("appLeave: " + scope.getName());
+	}
+	
+	@Override
+	public boolean roomJoin(IClient client, IScope scope) {
+		log.debug("roomJoin " + scope.getName(), scope.getParent().getName());
+		return true;
+	}
+	
+	@Override
+	public void roomLeave(IClient client, IScope scope) {
+		log.debug("roomLeave: " + scope.getName());
+	}
+	
 	@Override
     public boolean appStart(IScope app) {
         log.debug("Starting BigBlueButton "); 
@@ -48,10 +82,11 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter {
         appCtx = (AbstractApplicationContext) context.getApplicationContext();
         appCtx.addApplicationListener(new ShutdownHookListener());
         appCtx.registerShutdownHook();
+        super.appStart(app);
         
         connInvokerService.start();
         
-        return super.appStart(app);
+        return true;
     }
     
 	@Override
@@ -65,8 +100,10 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter {
     public boolean roomStart(IScope room) {
     	log.debug("Starting room [" + room.getName() + "].");
     	assert participantsApplication != null;
+    	super.roomStart(room);
+    	
     	connInvokerService.addScope(room.getName(), room);
-    	return super.roomStart(room);
+    	return true;
     }	
 	
 	@Override
@@ -117,10 +154,13 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter {
         					"session=" + sessionName + ",voiceConf=" + voiceBridge + ",room=" + room + ",externalUserid=" + externalUserID;
 		log.debug("User [{}] connected to room [{}]", debugInfo, room); 
 		participantsApplication.createRoom(room);
-        super.roomConnect(connection, params);
-        
+
+		super.roomConnect(connection, params);
+		
         connInvokerService.addConnection(bbbSession.getInternalUserID(), connection);
-    	return true;
+        
+        return true;
+        
 	}
 
 	@Override
diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatHandler.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatHandler.java
index 589dca753a0346036f651fe1ec3c3f22405326f8..ea7a2c5b66e10a872974d96412d004a01ce2ba2d 100755
--- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatHandler.java
+++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/chat/ChatHandler.java
@@ -69,15 +69,7 @@ public class ChatHandler extends ApplicationAdapter implements IApplication{
 	public void appStop(IScope scope) {
 		log.debug("appStop: " + scope.getName());
 	}
-
-	@Override
-	public boolean roomConnect(IConnection connection, Object[] params) {
-		ChatEventRecorder recorder = new ChatEventRecorder(connection.getScope().getName(), recorderApplication);
-		chatApplication.addRoomListener(connection.getScope().getName(), recorder);
-
-		return true;
-	}
-
+	
 	@Override
 	public void roomDisconnect(IConnection connection) {
 		log.debug("roomDisconnect");
@@ -94,6 +86,14 @@ public class ChatHandler extends ApplicationAdapter implements IApplication{
 		log.debug("roomLeave: " + scope.getName());
 	}
 
+	@Override
+	public boolean roomConnect(IConnection connection, Object[] params) {
+		ChatEventRecorder recorder = new ChatEventRecorder(connection.getScope().getName(), recorderApplication);
+		chatApplication.addRoomListener(connection.getScope().getName(), recorder);
+
+		return true;
+	}
+
 	@Override
 	public boolean roomStart(IScope scope) {
 		log.debug("roomStart " + scope.getName());
diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/layout/LayoutHandler.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/layout/LayoutHandler.java
index ce570d073f7ca8f729d1c904f88d7f6a38cd7146..e8655fca3c8743c9e8d53f2d17532645a466303d 100755
--- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/layout/LayoutHandler.java
+++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/layout/LayoutHandler.java
@@ -23,7 +23,6 @@ import org.red5.server.adapter.ApplicationAdapter;
 import org.red5.server.adapter.IApplication;
 import org.red5.server.api.IClient;
 import org.red5.server.api.IConnection;
-import org.red5.server.api.Red5;
 import org.red5.server.api.scope.IScope;
 import org.red5.server.api.so.ISharedObject;
 import org.slf4j.Logger;
@@ -38,74 +37,64 @@ public class LayoutHandler extends ApplicationAdapter implements IApplication {
 
 	@Override
 	public boolean appConnect(IConnection conn, Object[] params) {
-		log.debug(APP + ":appConnect");
+		log.debug("appConnect");
 		return true;
 	}
 
 	@Override
 	public void appDisconnect(IConnection conn) {
-		log.debug( APP + ":appDisconnect");
+		log.debug("appDisconnect");
 	}
 
 	@Override
 	public boolean appJoin(IClient client, IScope scope) {
-		log.debug( APP + ":appJoin " + scope.getName());
+		log.debug("appJoin: " + scope.getName());
 		return true;
 	}
 
 	@Override
 	public void appLeave(IClient client, IScope scope) {
-		log.debug(APP + ":appLeave " + scope.getName());
+		log.debug("appLeave: " + scope.getName());
 	}
 
 	@Override
 	public boolean appStart(IScope scope) {
-		log.debug(APP + ":appStart " + scope.getName());
+		this.scope = scope;
+		log.debug("appStart: " + scope.getName());
 		return true;
 	}
 
 	@Override
 	public void appStop(IScope scope) {
-		log.debug(APP + ":appStop " + scope.getName());
+		log.debug("appStop: " + scope.getName());
 	}
-
-	@Override
-	public boolean roomConnect(IConnection connection, Object[] params) {
-		log.debug(APP + ":roomConnect");
-		
-		IScope scope = Red5.getConnectionLocal().getScope();
-		
-    	if (!hasSharedObject(scope, LAYOUT_SO)) {
-    		if (createSharedObject(scope, LAYOUT_SO, false)) {   
-    			ISharedObject so = getSharedObject(connection.getScope(), LAYOUT_SO);
-    			log.debug("Setting up Listener");
-    			LayoutSender sender = new LayoutSender(so);
-    			String room = connection.getScope().getName();
-    			log.debug("Adding event listener to " + room);
-    			log.debug("Adding room listener");
-    			layoutApplication.addRoomListener(room, sender);
-    			log.debug("Done setting up listener");
-    			return true;
-    		}    		
-    	}  	
-    	
-		return false;
-	}
-
+	
 	@Override
 	public void roomDisconnect(IConnection connection) {
-		log.debug(APP + ":roomDisconnect");
+		log.debug("roomDisconnect");
 	}
 
 	@Override
 	public boolean roomJoin(IClient client, IScope scope) {
-		log.debug(APP + ":roomJoin " + scope.getName() + " - " + scope.getParent().getName());
+		log.debug("roomJoin " + scope.getName(), scope.getParent().getName());
 		return true;
 	}
-
+	
 	@Override
-	public void roomLeave(IClient client, IScope scope) {
-		log.debug(APP + ":roomLeave " + scope.getName());
+	public boolean roomConnect(IConnection connection, Object[] params) {
+		System.out.println("********* " + APP + ":roomConnect");
+		
+		log.debug(APP + ":roomConnect");
+		
+		ISharedObject so = getSharedObject(connection.getScope(), LAYOUT_SO);
+    	log.debug("Setting up Listener");
+    	LayoutSender sender = new LayoutSender(so);
+    	String room = connection.getScope().getName();
+    	log.debug("Adding event listener to " + room);
+    	log.debug("Adding room listener");
+    	layoutApplication.addRoomListener(room, sender);
+    	log.debug("Done setting up listener");
+    	return true;
 	}
 	
 	@Override
@@ -126,6 +115,8 @@ public class LayoutHandler extends ApplicationAdapter implements IApplication {
 	}
 	
 	public void setLayoutApplication(LayoutApplication a) {
+		System.out.println("****** Setting layout application ********");
+		
 		log.debug("Setting layout application");
 		layoutApplication = a;
 		layoutApplication.handler = this;
diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsHandler.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsHandler.java
index cd2b6428e4cc4072aa4fffbfd97c7a245c855c20..a980b922bab9ffe7a47c1be47828d01c59f174e6 100755
--- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsHandler.java
+++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/participants/ParticipantsHandler.java
@@ -43,62 +43,57 @@ public class ParticipantsHandler extends ApplicationAdapter implements IApplicat
 	
 	@Override
 	public boolean appConnect(IConnection conn, Object[] params) {
-		log.debug(APP + ":appConnect");
+		log.debug("appConnect");
 		return true;
 	}
 
 	@Override
 	public void appDisconnect(IConnection conn) {
-		log.debug( APP + ":appDisconnect");
+		log.debug("appDisconnect");
 	}
 
 	@Override
 	public boolean appJoin(IClient client, IScope scope) {
-		log.debug( APP + ":appJoin " + scope.getName());
+		log.debug("appJoin: " + scope.getName());
 		return true;
 	}
 
 	@Override
 	public void appLeave(IClient client, IScope scope) {
-		log.debug(APP + ":appLeave " + scope.getName());
+		log.debug("appLeave: " + scope.getName());
 	}
 
 	@Override
 	public boolean appStart(IScope scope) {
-		log.debug(APP + ":appStart " + scope.getName());
+		this.scope = scope;
+		log.debug("appStart: " + scope.getName());
 		return true;
 	}
 
 	@Override
 	public void appStop(IScope scope) {
-		log.debug(APP + ":appStop " + scope.getName());
+		log.debug("appStop: " + scope.getName());
 	}
-
+	
+	@Override
+	public boolean roomStart(IScope scope) {
+		return true;
+	}
+	
 	@Override
 	public boolean roomConnect(IConnection connection, Object[] params) {
 		log.debug(APP + ":roomConnect");
-		
-		IScope scope = Red5.getConnectionLocal().getScope();
-		
-    	if (!hasSharedObject(scope, PARTICIPANTS_SO)) {
-    		if (createSharedObject(scope, PARTICIPANTS_SO, false)) {   
-    			ISharedObject so = getSharedObject(connection.getScope(), PARTICIPANTS_SO);
-    			ParticipantsEventSender sender = new ParticipantsEventSender(so);
-    			ParticipantsEventRecorder recorder = new ParticipantsEventRecorder(connection.getScope().getName(), recorderApplication);
+		 
+		ISharedObject so = getSharedObject(connection.getScope(), PARTICIPANTS_SO);
+    	ParticipantsEventSender sender = new ParticipantsEventSender(so);
+    	ParticipantsEventRecorder recorder = new ParticipantsEventRecorder(connection.getScope().getName(), recorderApplication);
     			
-    			log.debug("Adding room listener " + connection.getScope().getName());
-    			participantsApplication.addRoomListener(connection.getScope().getName(), recorder);
-    			participantsApplication.addRoomListener(connection.getScope().getName(), sender);
-    			log.debug("Done setting up recorder and listener");	
-    		}    		
-    	}  	
-    			
-		return false;
-	}
-
-	@Override
-	public void roomDisconnect(IConnection connection) {
-		log.debug(APP + ":roomDisconnect");
+    	log.debug("Adding room listener " + connection.getScope().getName());
+    	participantsApplication.addRoomListener(connection.getScope().getName(), recorder);
+    	participantsApplication.addRoomListener(connection.getScope().getName(), sender);
+    	log.debug("Done setting up recorder and listener");	
+	
+		return true;
 	}
 
 	@Override
@@ -119,12 +114,6 @@ public class ParticipantsHandler extends ApplicationAdapter implements IApplicat
 		}		
 	}
 	
-	@Override
-	public boolean roomStart(IScope scope) {
-		log.debug(APP + " - roomStart "+scope.getName());
-    	return true;
-	}
-
 	@Override
 	public void roomStop(IScope scope) {
 		log.debug(APP + ":roomStop " + scope.getName());
diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/poll/PollHandler.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/poll/PollHandler.java
index e04189a222f863fbf3d6cdf1e8ab6cb28bfbf492..5a95fb4c80190717fb0196651a6cf32901b23d9a 100755
--- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/poll/PollHandler.java
+++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/poll/PollHandler.java
@@ -20,90 +20,18 @@
 package org.bigbluebutton.conference.service.poll;
 
 import org.red5.server.adapter.IApplication;
-import org.red5.server.api.IClient;
-import org.red5.server.api.IConnection;
-import org.red5.server.api.scope.IScope;
 import org.slf4j.Logger;
 import org.red5.logging.Red5LoggerFactory;
-import org.red5.server.api.so.ISharedObject;
 import org.red5.server.adapter.ApplicationAdapter;
-import org.red5.server.api.Red5;
-import org.bigbluebutton.conference.BigBlueButtonSession;
-import org.bigbluebutton.conference.Constants;
+import org.red5.server.api.scope.IScope;
 import org.bigbluebutton.conference.service.recorder.RecorderApplication;
-//import org.bigbluebutton.conference.service.recorder.poll.PollEventRecorder;
 
-public class PollHandler extends ApplicationAdapter implements IApplication{
+public class PollHandler extends ApplicationAdapter implements IApplication {
 
 	private static Logger log = Red5LoggerFactory.getLogger( PollHandler.class, "bigbluebutton" );
-	private static final String POLL = "POLL";
-	private static final String POLL_SO = "pollSO";   
 	private static final String APP = "POLL";
-
-	private RecorderApplication recorderApplication;
 	private PollApplication pollApplication;
-	private IScope scope;
-
-	
-	@Override
-	public boolean appConnect(IConnection conn, Object[] params) {
-		log.debug(APP + "appConnect");
-		return true;
-	}
-
-	@Override
-	public void appDisconnect(IConnection conn) {
-		log.debug(APP + "appDisconnect");
-	}
-
-	@Override
-	public boolean appJoin(IClient client, IScope scope) {
-		log.debug(APP + "appJoin: " + scope.getName());
-		return true;
-	}
-
-	@Override
-	public void appLeave(IClient client, IScope scope) {
-		log.debug(APP + "appLeave: " + scope.getName());
-	}
-
-	@Override
-	public boolean appStart(IScope scope) {
-		this.scope = scope;
-		log.debug(APP + "appStart: " + scope.getName());
-		return true;
-	}
 
-	@Override
-	public void appStop(IScope scope) {
-		log.debug(APP + "appStop: " + scope.getName());
-	}
-
-	@Override
-	public boolean roomConnect(IConnection connection, Object[] params) {
-		log.debug("roomConnect");
-		log.debug(APP + "Setting up recorder");
-		log.debug(APP + "adding event recorder to " + connection.getScope().getName());
-		log.debug(APP + "Adding room listener");
-		log.debug(APP + "Done setting up recorder and listener");
-		return true;
-	}
-
-	@Override
-	public void roomDisconnect(IConnection connection) {
-		log.debug(APP + "roomDisconnect");
-	}
-
-	@Override
-	public boolean roomJoin(IClient client, IScope scope) {
-		log.debug(APP + "roomJoin " + scope.getName(), scope.getParent().getName());
-		return true;
-	}
-
-	@Override
-	public void roomLeave(IClient client, IScope scope) {
-		log.debug(APP + "roomLeave: " + scope.getName());
-	}
 
 	@Override
 	public boolean roomStart(IScope scope) {
@@ -128,12 +56,8 @@ public class PollHandler extends ApplicationAdapter implements IApplication{
 	
 	public void setRecorderApplication(RecorderApplication a) {
 		log.debug(APP + " Setting poll archive application");
-		recorderApplication = a;
 	}
 	
 
-	private BigBlueButtonSession getBbbSession() {
-		return (BigBlueButtonSession) Red5.getConnectionLocal().getAttribute(Constants.SESSION);
-	}
 	
 }
diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationHandler.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationHandler.java
index c34d003b2902d2d96679ec6fdede7817c571d466..c12c8623f78cafaf966e6023390b0e47c28c4c09 100755
--- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationHandler.java
+++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationHandler.java
@@ -29,8 +29,6 @@ import org.red5.server.api.scope.IScope;
 import org.red5.server.api.so.ISharedObject;
 import org.red5.server.adapter.ApplicationAdapter;
 import org.red5.server.api.Red5;
-import org.bigbluebutton.conference.BigBlueButtonSession;
-import org.bigbluebutton.conference.Constants;
 import org.bigbluebutton.conference.service.recorder.RecorderApplication;
 import org.bigbluebutton.conference.service.recorder.presentation.PresentationEventRecorder;
 
diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/voice/VoiceHandler.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/voice/VoiceHandler.java
index 5a09b00648ec6ef7c57841048c360fafeb1fe975..5b4ae6acc399fe3af9c55f055fcf5c5992f7f5ac 100755
--- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/voice/VoiceHandler.java
+++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/voice/VoiceHandler.java
@@ -38,28 +38,6 @@ public class VoiceHandler extends ApplicationAdapter implements IApplication{
 	private ClientNotifier clientManager;
 	private ConferenceService conferenceService;
 	
-	@Override
-	public boolean appConnect(IConnection conn, Object[] params) {
-		log.debug(APP + ":appConnect");
-		return true;
-	}
-
-	@Override
-	public void appDisconnect(IConnection conn) {
-		log.debug(APP + ":appDisconnect");
-	}
-
-	@Override
-	public boolean appJoin(IClient client, IScope scope) {
-		log.debug(APP + ":appJoin " + scope.getName());
-		return true;
-	}
-
-	@Override
-	public void appLeave(IClient client, IScope scope) {
-		log.debug(APP + ":appLeave " + scope.getName());
-
-	}
 
 	@Override
 	public boolean appStart(IScope scope) {
@@ -77,51 +55,21 @@ public class VoiceHandler extends ApplicationAdapter implements IApplication{
 	public boolean roomConnect(IConnection connection, Object[] params) {
 		log.debug(APP + ":roomConnect");
 		log.debug("In live mode");
-		
-		IScope scope = Red5.getConnectionLocal().getScope();
-		
-    	if (!hasSharedObject(scope, VOICE_SO)) {
-    		if (createSharedObject(scope, VOICE_SO, false)) {    			
-    			ISharedObject so = getSharedObject(connection.getScope(), VOICE_SO);
+		  			
+		ISharedObject so = getSharedObject(connection.getScope(), VOICE_SO);
 	    		
-    			String voiceBridge = getBbbSession().getVoiceBridge();
-    			String meetingid = getBbbSession().getConference(); 
-    			Boolean record = getBbbSession().getRecord();
+    	String voiceBridge = getBbbSession().getVoiceBridge();
+    	String meetingid = getBbbSession().getConference(); 
+    	Boolean record = getBbbSession().getRecord();
     			
-    			log.debug("Setting up voiceBridge " + voiceBridge);
-    			clientManager.addSharedObject(connection.getScope().getName(), voiceBridge, so);
-    			conferenceService.createConference(voiceBridge, meetingid, record); 			
-    		}    		
-    	}  	
-    	
-	
-		return true;
-	}
+    	log.debug("Setting up voiceBridge " + voiceBridge);
+    	clientManager.addSharedObject(connection.getScope().getName(), voiceBridge, so);
+    	conferenceService.createConference(voiceBridge, meetingid, record); 			
 
-	@Override
-	public void roomDisconnect(IConnection connection) {
-		log.debug(APP + ":roomDisconnect");
-	}
-
-	@Override
-	public boolean roomJoin(IClient client, IScope scope) {
-		log.debug(APP + ":roomJoin " + scope.getName() + " - " + scope.getParent().getName());
 		return true;
 	}
 
-	@Override
-	public void roomLeave(IClient client, IScope scope) {
-		log.debug(APP + ":roomLeave " + scope.getName());
-	}
-
-	@Override
-	public boolean roomStart(IScope scope) {
-		log.debug(APP + " - roomStart " + scope.getName());
-
 
-		log.error("Failed to start room " + scope.getName());
-    	return true;
-	}
 
 	@Override
 	public void roomStop(IScope scope) {