diff --git a/bbb-voice/build.gradle b/bbb-voice/build.gradle
index 21137a340ca2163064965c6c4bf31d868f5de7e9..805c83b9d8441ab10c0690ce5dab068dbbc767d1 100755
--- a/bbb-voice/build.gradle
+++ b/bbb-voice/build.gradle
@@ -50,7 +50,13 @@ repositories {
             addArtifactPattern "http://repository.springsource.com/maven/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
             addArtifactPattern "http://repository.springsource.com/maven/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
         }        
-   	}
+   	add(new org.apache.ivy.plugins.resolver.URLResolver()) {
+            name = "Red5"
+            m2compatible = true
+            addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
+            addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
+        }        
+    }
 }
 
 dependencies {	 
@@ -62,22 +68,23 @@ dependencies {
 	providedCompile 'org.apache.mina:mina-integration-beans:2.0.7@jar'
 	providedCompile 'org.apache.mina:mina-integration-jmx:2.0.7@jar'
 	
-	// Spring 
-	providedCompile 'org.springframework:spring-web:3.1.1.RELEASE@jar' 
-	providedCompile  'org.springframework:spring-beans:3.1.1.RELEASE@jar'
-	providedCompile 'org.springframework:spring-context:3.1.1.RELEASE@jar'
-	providedCompile 'org.springframework:spring-core:3.1.1.RELEASE@jar'
-	
-	// Red5
-	providedCompile 'org/red5:red5:1.0r4643@jar'
-	
-	// Logging
-	providedCompile 'ch.qos.logback:logback-core:1.0.9@jar'
-	providedCompile 'ch.qos.logback:logback-classic:1.0.9@jar'
-	providedCompile 'org.slf4j:log4j-over-slf4j:1.7.2@jar' 
-	providedCompile 'org.slf4j:jcl-over-slf4j:1.7.2@jar'
-	providedCompile 'org.slf4j:jul-to-slf4j:1.7.2@jar'
-    providedCompile 'org.slf4j:slf4j-api:1.7.2@jar'
+  // Spring 
+  providedCompile 'org.springframework:spring-web:4.0.0.RELEASE@jar' 
+  providedCompile  'org.springframework:spring-beans:4.0.0.RELEASE@jar'
+  providedCompile 'org.springframework:spring-context:4.0.0.RELEASE@jar'
+  providedCompile 'org.springframework:spring-core:4.0.0.RELEASE@jar'
+
+  // Red5
+  providedCompile 'org/red5:red5:1.0.2-M1@jar'
+  providedCompile 'org.red5:red5-io:1.0.3@jar'
+  
+  // Logging
+  providedCompile 'ch.qos.logback:logback-core:1.0.13@jar'
+  providedCompile 'ch.qos.logback:logback-classic:1.0.13@jar'
+  providedCompile 'org.slf4j:log4j-over-slf4j:1.7.5@jar' 
+  providedCompile 'org.slf4j:jcl-over-slf4j:1.7.5@jar'
+  providedCompile 'org.slf4j:jul-to-slf4j:1.7.5@jar'
+  providedCompile 'org.slf4j:slf4j-api:1.7.5@jar'
 
 	// Needed for the JVM shutdown hook but needs to be put into red5/lib dir.
 	// Otherwise we get exception on aop utils class not found.
diff --git a/bbb-voice/src/main/java/org/bigbluebutton/voiceconf/red5/media/AudioBroadcastStream.java b/bbb-voice/src/main/java/org/bigbluebutton/voiceconf/red5/media/AudioBroadcastStream.java
index 37a27cf86b3cb39e31e23b637bd9620310b14998..9dcb4d578615b58861b20a1de2663066df10bbb5 100755
--- a/bbb-voice/src/main/java/org/bigbluebutton/voiceconf/red5/media/AudioBroadcastStream.java
+++ b/bbb-voice/src/main/java/org/bigbluebutton/voiceconf/red5/media/AudioBroadcastStream.java
@@ -26,7 +26,8 @@ import org.red5.logging.Red5LoggerFactory;
 import org.red5.server.api.event.IEvent;
 import org.red5.server.api.scope.IScope;
 import org.red5.server.api.stream.IBroadcastStream;
-import org.red5.server.api.stream.IStreamCodecInfo;
+import org.red5.codec.IStreamCodecInfo;
+import org.red5.codec.StreamCodecInfo;
 import org.red5.server.api.stream.IStreamListener;
 import org.red5.server.api.stream.ResourceExistException;
 import org.red5.server.api.stream.ResourceNotFoundException;
@@ -38,7 +39,7 @@ import org.red5.server.messaging.OOBControlMessage;
 import org.red5.server.messaging.PipeConnectionEvent;
 import org.red5.server.net.rtmp.event.IRTMPEvent;
 import org.red5.server.net.rtmp.event.Notify;
-import org.red5.server.stream.codec.StreamCodecInfo;
+
 import org.red5.server.stream.message.RTMPMessage;
 
 import org.slf4j.Logger;
diff --git a/bbb-voice/src/main/java/org/red5/app/sip/AudioStream.java b/bbb-voice/src/main/java/org/red5/app/sip/AudioStream.java
index 9239ad7ab11bd86149a98333e67a4454e457f261..9ae660ec13a66830fa64f868e8978e2e96fd7e10 100755
--- a/bbb-voice/src/main/java/org/red5/app/sip/AudioStream.java
+++ b/bbb-voice/src/main/java/org/red5/app/sip/AudioStream.java
@@ -8,7 +8,8 @@ import org.red5.logging.Red5LoggerFactory;
 import org.red5.server.api.event.IEvent;
 import org.red5.server.api.scope.IScope;
 import org.red5.server.api.stream.IBroadcastStream;
-import org.red5.server.api.stream.IStreamCodecInfo;
+import org.red5.codec.IStreamCodecInfo;
+import org.red5.codec.StreamCodecInfo;
 import org.red5.server.api.stream.IStreamListener;
 import org.red5.server.api.stream.ResourceExistException;
 import org.red5.server.api.stream.ResourceNotFoundException;
@@ -20,7 +21,6 @@ import org.red5.server.messaging.OOBControlMessage;
 import org.red5.server.messaging.PipeConnectionEvent;
 import org.red5.server.net.rtmp.event.IRTMPEvent;
 import org.red5.server.net.rtmp.event.Notify;
-import org.red5.server.stream.codec.StreamCodecInfo;
 import org.red5.server.stream.message.RTMPMessage;
 import org.slf4j.Logger;
 import org.red5.server.api.stream.IStreamPacket;;
diff --git a/bigbluebutton-apps/build.gradle b/bigbluebutton-apps/build.gradle
index 21c459809b720fedf581c1bd8cfad4cff8995c3e..6339329b12819a7ff903a7fc6d532abff4d44a18 100755
--- a/bigbluebutton-apps/build.gradle
+++ b/bigbluebutton-apps/build.gradle
@@ -67,46 +67,38 @@ dependencies {
 	providedCompile 'org.apache.mina:mina-integration-jmx:2.0.7@jar'
 	
 	// Spring 
-	providedCompile 'org.springframework:spring-web:3.1.1.RELEASE@jar' 
-	providedCompile  'org.springframework:spring-beans:3.1.1.RELEASE@jar'
-	providedCompile 'org.springframework:spring-context:3.1.1.RELEASE@jar'
-	providedCompile 'org.springframework:spring-core:3.1.1.RELEASE@jar'
+	providedCompile 'org.springframework:spring-web:4.0.0.RELEASE@jar' 
+	providedCompile  'org.springframework:spring-beans:4.0.0.RELEASE@jar'
+	providedCompile 'org.springframework:spring-context:4.0.0.RELEASE@jar'
+	providedCompile 'org.springframework:spring-core:4.0.0.RELEASE@jar'
 
-    compile 'org.springframework.amqp:spring-rabbit:1.2.0.RELEASE@jar'
-	compile 'org.springframework.integration:spring-integration-core:2.2.5.RELEASE@jar'
-	compile 'org.springframework.integration:spring-integration-amqp:2.2.5.RELEASE@jar'
-	compile 'org.springframework.integration:spring-integration-stream:2.2.5.RELEASE@jar'
-	
+  // Red5
+  providedCompile 'org/red5:red5:1.0.2-M1@jar'
+  
+  // Logging
+  providedCompile 'ch.qos.logback:logback-core:1.0.13@jar'
+  providedCompile 'ch.qos.logback:logback-classic:1.0.13@jar'
+  providedCompile 'org.slf4j:log4j-over-slf4j:1.7.5@jar' 
+  providedCompile 'org.slf4j:jcl-over-slf4j:1.7.5@jar'
+  providedCompile 'org.slf4j:jul-to-slf4j:1.7.5@jar'
+  providedCompile 'org.slf4j:slf4j-api:1.7.5@jar'
+  	
 	compile "redis.clients:jedis:2.1.0"
-    compile "org.codehaus.jackson:jackson-core-asl:$jacksonVersion"
-    compile "org.codehaus.jackson:jackson-mapper-asl:$jacksonVersion"
-    compile "javax.servlet:com.springsource.javax.servlet.jsp.jstl:1.2.0"
-    compile ("org.springframework.data:spring-data-redis:$springRedisVersion") {
-        exclude group: 'commons-logging'
-    }
+  compile "org.codehaus.jackson:jackson-core-asl:$jacksonVersion"
+  compile "org.codehaus.jackson:jackson-mapper-asl:$jacksonVersion"
+  compile "javax.servlet:com.springsource.javax.servlet.jsp.jstl:1.2.0"
+  compile ("org.springframework.data:spring-data-redis:$springRedisVersion") {
+      exclude group: 'commons-logging'
+  }
     
-	// Red5
-	providedCompile 'org/red5:red5:1.0r4643@jar'
-	
-	// Logging
-	providedCompile 'ch.qos.logback:logback-core:1.0.9@jar'
-	providedCompile 'ch.qos.logback:logback-classic:1.0.9@jar'
-	providedCompile 'org.slf4j:log4j-over-slf4j:1.7.2@jar' 
-	providedCompile 'org.slf4j:jcl-over-slf4j:1.7.2@jar'
-	providedCompile 'org.slf4j:jul-to-slf4j:1.7.2@jar'
-    providedCompile 'org.slf4j:slf4j-api:1.7.2@jar'
-
 	// Needed for the JVM shutdown hook but needs to be put into red5/lib dir.
 	// Otherwise we get exception on aop utils class not found.
-	providedCompile 'org.springframework:spring-aop:3.0.6.RELEASE@jar'
+	providedCompile 'org.springframework:spring-aop:4.0.0.RELEASE@jar'
 	compile 'aopalliance:aopalliance:1.0@jar'
-	
-    // Java Concurrency In Practice
-    providedCompile 'net.jcip:jcip-annotations:1.0@jar'
-        
-    // Testing
-    compile 'org.testng:testng:5.8@jar' 
-    compile 'org.easymock:easymock:2.4@jar'
+	     
+  // Testing
+  compile 'org.testng:testng:5.8@jar' 
+  compile 'org.easymock:easymock:2.4@jar'
   
 	//redis
 	//compile 'redis.clients:jedis:2.0.0'
@@ -122,15 +114,13 @@ dependencies {
 	// workaround for http://issues.gradle.org/browse/GRADLE-1273
 	//compileScala.classpath = sourceSets.main.compileClasspath + files(sourceSets.main.classesDir)
 	//compileTestScala.classpath = sourceSets.test.compileClasspath + files(sourceSets.test.classesDir)
-	
-	compile 'net.lag:configgy:2.0.0'
-	  
+		  
    // Freeswitch ESL Client
    compile 'org/freeswitch:fs-esl-client:0.8.2@jar'
    compile 'org.jboss.netty:netty:3.2.1.Final@jar'
    compile 'com.google.code.gson:gson:1.7.1'
    providedCompile 'org.apache.commons:commons-lang3:3.1'
-   compile 'commons-lang:commons-lang:2.5'
+   //compile 'commons-lang:commons-lang:2.5'
 }
 
 test {
diff --git a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationMessageListener.java b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationMessageListener.java
index bd63f4787db1286740cf8d1ca7942eea648d037f..d7ddc85f5775e8f1cd49f7d1ba3f4e5900f240c7 100755
--- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationMessageListener.java
+++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/service/presentation/PresentationMessageListener.java
@@ -2,7 +2,6 @@ package org.bigbluebutton.conference.service.presentation;
 
 import java.util.HashMap;
 import java.util.Map;
-import org.apache.commons.lang.StringEscapeUtils;
 import org.bigbluebutton.conference.service.messaging.MessagingConstants;
 import org.bigbluebutton.conference.service.messaging.redis.MessageHandler;
 import com.google.gson.Gson;
diff --git a/bigbluebutton-apps/src/main/resources/logback-bigbluebutton.xml b/bigbluebutton-apps/src/main/resources/logback-bigbluebutton.xml
index 9d2cf1f35f786cc7f3bd6b3af7afb72c8fc11b48..2bf26a1c56015012f8505fe2e4d23e342f28dd37 100755
--- a/bigbluebutton-apps/src/main/resources/logback-bigbluebutton.xml
+++ b/bigbluebutton-apps/src/main/resources/logback-bigbluebutton.xml
@@ -37,4 +37,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
 		<level value="DEBUG" />
 		<appender-ref ref="BIGBLUEBUTTON" />
 	</root>		
+	
+	<!-- LEVEL CAN NOT BE DEBUG -->
+  <logger name="org.apache" level="INFO"></logger>
 </configuration>
diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonActor.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonActor.scala
index bcb0dc0ef2cd88ad3dbcdecc5e92c389aa317dba..76669d953ee0981dd2fe6c3170dd79c0c586c6e0 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonActor.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonActor.scala
@@ -4,15 +4,12 @@ import scala.actors.Actor
 import scala.actors.Actor._
 import scala.collection.mutable.HashMap
 import org.bigbluebutton.core.api._
-import net.lag.logging.Logger
 
 class BigBlueButtonActor(outGW: MessageOutGateway) extends Actor {
-  private val log = Logger.get 
 
   private var meetings = new HashMap[String, MeetingActor]
   
-  log.debug("Starting up BigBlueButton Actor")
-  
+ 
   def act() = {
 	loop {
 		react {
diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonGateway.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonGateway.scala
index f46fa035ded794373d6d80e92b2e98619dee3b43..c9e0a5429ca50af204a6bc96b50a221c9cef2b16 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonGateway.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonGateway.scala
@@ -1,19 +1,11 @@
 package org.bigbluebutton.core
 
 import org.bigbluebutton.core.api._
-import net.lag.configgy.Configgy
 import java.util.concurrent.CountDownLatch
 import scala.actors.Actor
 import scala.actors.Actor._
 
 class BigBlueButtonGateway(outGW: MessageOutGateway, collGW: CollectorGateway) {
-  private val deathSwitch = new CountDownLatch(1)
-  // load our config file and configure logfiles.
-  Configgy.configure("webapps/bigbluebutton/WEB-INF/configgy-logger.conf")
-  // make sure there's always one actor running so scala 2.7.2 doesn't kill off the actors library.
-  actor {
-	deathSwitch.await
-  }
   
   private val bbbActor = new BigBlueButtonActor(outGW)
   bbbActor.start
diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala
index c11b17e774ce2fda300157b8d32ebc48e9da8d29..cdd04e9a46532ae1d88c4ee4af08a5db741ff638 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/BigBlueButtonInGW.scala
@@ -13,11 +13,9 @@ import java.util.ArrayList
 import scala.collection.mutable.ArrayBuffer
 import org.bigbluebutton.core.apps.presentation.Page
 import org.bigbluebutton.core.apps.presentation.Presentation
-import net.lag.logging.Logger
 
 class BigBlueButtonInGW(bbbGW: BigBlueButtonGateway) extends IBigBlueButtonInGW {
-  private val log = Logger.get
-  
+
   val presUtil = new PreuploadedPresentationsUtil()
    
   // Meeting
@@ -249,7 +247,6 @@ class BigBlueButtonInGW(bbbGW: BigBlueButtonGateway) extends IBigBlueButtonInGW
 	
 	def getPresentationInfo(meetingID: String, requesterID: String) {
 	  println("**** Forwarding GetPresentationInfo for meeting[" + meetingID + "] ****")
-	  log.debug("**** Forwarding GetPresentationInfo for meeting[{}] ****", meetingID)
 	  bbbGW.accept(new GetPresentationInfo(meetingID, requesterID))
 	}
 	
diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala
index e0e5780a35c70f71fc85e72c5f9f004cfabc5c4c..b913b51d5b02071cefb4af1e6cd72df5484e9286 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/MeetingActor.scala
@@ -11,7 +11,6 @@ import org.bigbluebutton.core.apps.presentation.PresentationApp
 import org.bigbluebutton.core.apps.layout.LayoutApp
 import org.bigbluebutton.core.apps.chat.ChatApp
 import org.bigbluebutton.core.apps.whiteboard.WhiteboardApp
-import net.lag.logging.Logger
 import scala.actors.TIMEOUT
 
 case object StopMeetingActor
@@ -21,8 +20,7 @@ class MeetingActor(val meetingID: String, meetingName: String, val recorded: Boo
                    extends Actor with UsersApp with PresentationApp
                    with PollApp with LayoutApp with ChatApp
                    with WhiteboardApp {  
-  private val log = Logger.get
-  
+
   var permissions = new PermissionsSetting(false, new Permissions())
   var recording = false;
   var muted = false;
diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/chat/ChatApp.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/chat/ChatApp.scala
index 678d8a07d5d174cf64decec95afd52f6006404f9..8e408eadb367328f65d3c36da9fcb68db46f716c 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/chat/ChatApp.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/chat/ChatApp.scala
@@ -2,13 +2,11 @@ package org.bigbluebutton.core.apps.chat
 
 import org.bigbluebutton.core.api._
 import scala.collection.mutable.ArrayBuffer
-import net.lag.logging.Logger
 import org.bigbluebutton.core.MeetingActor
 
 trait ChatApp {
   this : MeetingActor =>
   
-  private val log = Logger.get
   val outGW: MessageOutGateway
   
   val messages = new ArrayBuffer[Map[String, String]]()
diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/layout/LayoutApp.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/layout/LayoutApp.scala
index fc98ba58fc65c1a49e96b657b095754af2991f2c..355be4ac15703a94fea6a007b05338ab865fd748 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/layout/LayoutApp.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/layout/LayoutApp.scala
@@ -1,13 +1,11 @@
 package org.bigbluebutton.core.apps.layout
 
 import org.bigbluebutton.core.api._
-import net.lag.logging.Logger
 import org.bigbluebutton.core.MeetingActor
 
 trait LayoutApp {
   this : MeetingActor =>
   
-  private val log = Logger.get
   val outGW: MessageOutGateway
   
 	private var _locked:Boolean = false;
diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/layout/LayoutInGateway.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/layout/LayoutInGateway.scala
index 07632b178388553e9ec180518f46c689ce281c4e..1eba8f2fd8f3b333e2f3b5018153fbb11b3c796e 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/layout/LayoutInGateway.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/layout/LayoutInGateway.scala
@@ -2,14 +2,10 @@ package org.bigbluebutton.core.apps.layout
 
 import org.bigbluebutton.core.BigBlueButtonGateway
 import org.bigbluebutton.core.api._
-import net.lag.logging.Logger
 
 class LayoutInGateway(bbbGW: BigBlueButtonGateway) {
   
-  val log = Logger.get
-  
   def getCurrentLayout(meetingID: String, requesterID: String) {
-    log.debug("Received getCurrentLayout for meeting[{}]", meetingID)
     bbbGW.accept(new GetCurrentLayoutRequest(meetingID, requesterID))
   }
 	
diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/poll/PollApp.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/poll/PollApp.scala
index 3bb536cc93aed127136e025a4b322aabc455618d..1b66d216591dbdc996f8ffff8bfa765bf97adfae 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/poll/PollApp.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/poll/PollApp.scala
@@ -4,12 +4,10 @@ import scala.collection.mutable.HashMap
 import org.bigbluebutton.core.api._
 import scala.collection.mutable.ArrayBuffer
 import org.bigbluebutton.core.MeetingActor
-import net.lag.logging.Logger
 
 trait PollApp {
   this : MeetingActor =>
   
-  private val log = Logger.get
   val outGW: MessageOutGateway
     
   private val pollModel = new PollModel
diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/PresentationApp.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/PresentationApp.scala
index ee90815e0115c9191b0f357e0c8bea7cf905fa82..e0ccc53dc753b7b2dcf654398f4b3568fe73b6aa 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/PresentationApp.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/PresentationApp.scala
@@ -1,7 +1,6 @@
 package org.bigbluebutton.core.apps.presentation
 
 import org.bigbluebutton.core.api._
-import net.lag.logging.Logger
 import org.bigbluebutton.core.MeetingActor
 import com.google.gson.Gson
 
@@ -16,7 +15,6 @@ case class CursorLocation(xPercent: Double = 0D, yPercent: Double = 0D)
 trait PresentationApp {
   this : MeetingActor =>
   
-  private val log = Logger.get
   val outGW: MessageOutGateway
     	
   private var cursorLocation = new CursorLocation
@@ -85,7 +83,6 @@ trait PresentationApp {
     def handleGetPresentationInfo(msg: GetPresentationInfo) {
       println("PresentationApp : handleGetPresentationInfo GetPresentationInfo for meeting [" + msg.meetingID + "] [" + msg.requesterID + "]" )
       
-      log.debug("Received GetPresentationInfo for meeting [{}] [{}]", msg.meetingID, msg.requesterID)
       val curPresenter = getCurrentPresenter;
       val presenter = new CurrentPresenter(curPresenter.presenterID, 
 		                                   curPresenter.presenterName, 
diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/red5/PresentationClientMessageSender.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/red5/PresentationClientMessageSender.scala
index eebc24578826dd26dcb5a626b8b2a55aa1384ea6..b469f54eb8b3aad41b7e3a228668d27e5529f518 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/red5/PresentationClientMessageSender.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/presentation/red5/PresentationClientMessageSender.scala
@@ -9,12 +9,10 @@ import com.google.gson.Gson
 import java.util.ArrayList
 import org.bigbluebutton.core.apps.presentation.Page
 import org.bigbluebutton.core.apps.presentation.Presentation
-import net.lag.logging.Logger
+
 
 class PresentationClientMessageSender(service: ConnectionInvokerService) extends OutMessageListener2 {
   
-  private val log = Logger.get
-  
 	private val OFFICE_DOC_CONVERSION_SUCCESS_KEY = "OFFICE_DOC_CONVERSION_SUCCESS";
     private val OFFICE_DOC_CONVERSION_FAILED_KEY = "OFFICE_DOC_CONVERSION_FAILED";
     private val SUPPORTED_DOCUMENT_KEY = "SUPPORTED_DOCUMENT";
@@ -61,7 +59,7 @@ class PresentationClientMessageSender(service: ConnectionInvokerService) extends
   	message.put("msg", gson.toJson(args))
   	
   	println("PresentationClientMessageSender - handlePresentationConversionProgress \n" + message.get("msg") + "\n")
-  	log.debug("PresentationClientMessageSender - handlePresentationConversionProgress \n" + message.get("msg") + "\n")
+
     val m = new BroadcastClientMessage(msg.meetingID, "conversionUpdateMessageCallback", message);
 	service.sendMessage(m);	
   }
@@ -81,7 +79,7 @@ class PresentationClientMessageSender(service: ConnectionInvokerService) extends
   	message.put("msg", gson.toJson(args))
   	
   	println("PresentationClientMessageSender - handlePresentationConversionError \n" + message.get("msg") + "\n")
-  	log.debug("PresentationClientMessageSender - handlePresentationConversionError \n" + message.get("msg") + "\n")
+
 	val m = new BroadcastClientMessage(msg.meetingID, "pageCountExceededUpdateMessageCallback", message);
     service.sendMessage(m);    
   }
@@ -101,7 +99,7 @@ class PresentationClientMessageSender(service: ConnectionInvokerService) extends
   	message.put("msg", gson.toJson(args))
   	
   	println("PresentationClientMessageSender - handlePresentationPageGenerated \n" + message.get("msg") + "\n")
-  	log.debug("PresentationClientMessageSender - handlePresentationPageGenerated \n" + message.get("msg") + "\n")
+
 	val m = new BroadcastClientMessage(msg.meetingID, "generatedSlideUpdateMessageCallback", message);
     service.sendMessage(m);    
   }
@@ -132,7 +130,7 @@ class PresentationClientMessageSender(service: ConnectionInvokerService) extends
   	message.put("msg", gson.toJson(args))
   		
   	println("PresentationClientMessageSender - handlePresentationConversionDone \n" + message.get("msg") + "\n")
-  	log.debug("PresentationClientMessageSender - handlePresentationConversionDone \n" + message.get("msg") + "\n")
+
 	val m = new BroadcastClientMessage(msg.meetingID, "conversionCompletedUpdateMessageCallback", message);
     service.sendMessage(m);      
   }
@@ -190,9 +188,7 @@ class PresentationClientMessageSender(service: ConnectionInvokerService) extends
     val message = new java.util.HashMap[String, Object]() 
 	val gson = new Gson();
   	message.put("msg", gson.toJson(args))
-  	
-  	log.debug("PresentationClientMessageSender - handleGetPresentationInfoOutMsg to user[{}] \n [{}]", msg.requesterID, message.get("msg"))
-  	
+  	 	
   	println("***** PresentationClientMessageSender - handleGetPresentationInfoOutMsg to user[" +msg.requesterID + "] message[" + message.get("msg") + "]")
   	
 	val m = new DirectClientMessage(msg.meetingID, msg.requesterID, "getPresentationInfoReply", message);
@@ -207,9 +203,7 @@ class PresentationClientMessageSender(service: ConnectionInvokerService) extends
 	val message = new java.util.HashMap[String, Object]() 
 	val gson = new Gson();
   	message.put("msg", gson.toJson(args))
-  	
-  	log.debug("PresentationClientMessageSender - handleSendCursorUpdateOutMsg \n [{}]", message.get("msg"))
-  	
+  	  	
 	val m = new BroadcastClientMessage(msg.meetingID, "PresentationCursorUpdateCommand", message);
 	service.sendMessage(m);	    
   }
@@ -231,9 +225,7 @@ class PresentationClientMessageSender(service: ConnectionInvokerService) extends
 	val message = new java.util.HashMap[String, Object]() 
 	val gson = new Gson();
   	message.put("msg", gson.toJson(args))
-  	
-  	log.debug("PresentationClientMessageSender - handleResizeAndMoveSlideOutMsg \n [{}]", message.get("msg"))
-  	
+  	  	
 	val m = new BroadcastClientMessage(msg.meetingID, "moveCallback", message);
 	service.sendMessage(m);	    
   }
@@ -255,9 +247,7 @@ class PresentationClientMessageSender(service: ConnectionInvokerService) extends
 	val message = new java.util.HashMap[String, Object]() 
 	val gson = new Gson();
   	message.put("msg", gson.toJson(args))
-  	
-  	log.debug("PresentationClientMessageSender - handleGotoSlideOutMsg \n [{}]", message.get("msg"))
-		
+  		
 	val m = new BroadcastClientMessage(msg.meetingID, "goToSlideCallback", message);
 	service.sendMessage(m);	    
   }
@@ -283,9 +273,7 @@ class PresentationClientMessageSender(service: ConnectionInvokerService) extends
     val message = new java.util.HashMap[String, Object]() 
 	val gson = new Gson();
   	message.put("msg", gson.toJson(args))
-  	
-  	log.debug("PresentationClientMessageSender - handleSharePresentationOutMsg to presentation[{}] \n [{}]", msg.presentation.id, message.get("msg"))
-  	
+  	  	
 	val m = new BroadcastClientMessage(msg.meetingID, "sharePresentationCallback", message);
 	service.sendMessage(m);	    
   }
diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala
index 974ed5ef4300862cb7973ef35cf73867621eca09..0f31eae2726f8d5154258ac36d7a6b24868b580a 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/users/UsersApp.scala
@@ -4,13 +4,11 @@ import org.bigbluebutton.core.api._
 import scala.collection.mutable.HashMap
 import org.bigbluebutton.core.User
 import java.util.ArrayList
-import net.lag.logging.Logger
 import org.bigbluebutton.core.MeetingActor
 
 trait UsersApp {
   this : MeetingActor =>
   
-  private val log = Logger.get
   val outGW: MessageOutGateway
   
   private val users = new UsersModel
@@ -163,7 +161,6 @@ trait UsersApp {
   }
   
   def handleUserJoin(msg: UserJoining):Unit = {
-  	log.debug("UsersApp: init handleUserJoin")
     val vu = new VoiceUser(msg.userID, msg.userID, msg.name, msg.name,  
                            false, false, false, false)
     val uvo = new UserVO(msg.userID, msg.extUserID, msg.name, 
@@ -190,7 +187,7 @@ trait UsersApp {
 	  
 	 }
    else{
-    log.warning("This user is not here:" + msg.userID)
+
    }
   }
 
diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/voice/VoiceApp.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/voice/VoiceApp.scala
index 9e2b0212ef38937d0acaadee69602a8007e9761d..ab681791a8e0ce2fc03dc68c9290ceac7e9e7936 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/voice/VoiceApp.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/voice/VoiceApp.scala
@@ -1,13 +1,11 @@
 package org.bigbluebutton.core.apps.voice
 
 import org.bigbluebutton.core.api._
-import net.lag.logging.Logger
 import org.bigbluebutton.core.MeetingActor
 
 trait VoiceApp {
   this : MeetingActor =>
   
-  val log: Logger
   val outGW: MessageOutGateway
      
   def handleSendVoiceUsersRequest(msg: SendVoiceUsersRequest) {
diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/whiteboard/WhiteboardApp.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/whiteboard/WhiteboardApp.scala
index a1e45e8249fc31b992a52d606797a7f9538fc214..17a4d9fc3caa996c5d538cedaeeefd8f58359a75 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/whiteboard/WhiteboardApp.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/core/apps/whiteboard/WhiteboardApp.scala
@@ -2,7 +2,6 @@ package org.bigbluebutton.core.apps.whiteboard
 
 import org.bigbluebutton.core.api._
 import org.bigbluebutton.conference.service.whiteboard.WhiteboardKeyUtil
-import net.lag.logging.Logger
 import org.bigbluebutton.core.MeetingActor
 import org.bigbluebutton.core.apps.whiteboard.vo._
 
@@ -11,7 +10,6 @@ case class Whiteboard(id: String, shapes:Seq[AnnotationVO])
 trait WhiteboardApp {
   this : MeetingActor =>
   
-  private val log = Logger.get
   val outGW: MessageOutGateway
   
   private val wbModel = new WhiteboardModel
diff --git a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/freeswitch/FreeswitchConferenceActor.scala b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/freeswitch/FreeswitchConferenceActor.scala
index 08f416fc307454759f5a85de5112834409207356..e4b83245d2bfcadafc008ebf09e66d8cbd73a29b 100755
--- a/bigbluebutton-apps/src/main/scala/org/bigbluebutton/freeswitch/FreeswitchConferenceActor.scala
+++ b/bigbluebutton-apps/src/main/scala/org/bigbluebutton/freeswitch/FreeswitchConferenceActor.scala
@@ -3,7 +3,6 @@ package org.bigbluebutton.freeswitch
 import scala.actors.Actor
 import scala.actors.Actor._
 import org.bigbluebutton.core.api._
-import net.lag.logging.Logger
 
 case class FsVoiceUserJoined(userId: String, webUserId: String, 
                              conference: String, callerIdNum: String, 
@@ -18,7 +17,6 @@ case class FsRecording(conference: String, recordingFile: String,
                             timestamp: String, recording: Boolean)
 
 class FreeswitchConferenceActor(fsproxy: FreeswitchManagerProxy, bbbInGW: IBigBlueButtonInGW) extends Actor {
-  private val log = Logger.get
 
   private var confs = new scala.collection.immutable.HashMap[String, FreeswitchConference]
   
@@ -71,7 +69,6 @@ class FreeswitchConferenceActor(fsproxy: FreeswitchManagerProxy, bbbInGW: IBigBl
     val fsconf = confs.values find (c => c.meetingId == msg.meetingID)
     
     fsconf foreach {fc => 
-      log.debug("Web user id joining meeting id[" + fc.meetingId + "] wid=[" + msg.user.userID + "]")
       println("Web user has joined voice. mid[" + fc.meetingId + "] wid=[" + msg.user.userID + "], vid=[" + msg.user.voiceUser.userId + "]")
       fc.addUser(msg.user)
       if (fc.numUsersInVoiceConference == 1 && fc.recorded) {
@@ -88,7 +85,6 @@ class FreeswitchConferenceActor(fsproxy: FreeswitchManagerProxy, bbbInGW: IBigBl
     
     fsconf foreach {fc => 
       fc.addUser(msg.user)
-      log.debug("Web user id leaving meeting id[" + fc.meetingId + "] wid=[" + msg.user.userID + "]")
       println("Web user has left voice. mid[" + fc.meetingId + "] wid=[" + msg.user.userID + "], vid=[" + msg.user.voiceUser.userId + "]")
       if (fc.numUsersInVoiceConference == 0 && fc.recorded) {
         println("Meeting is recorded. No more users in voice conference. Tell FreeSWITCH to stop recording.")
@@ -101,7 +97,6 @@ class FreeswitchConferenceActor(fsproxy: FreeswitchManagerProxy, bbbInGW: IBigBl
     val fsconf = confs.values find (c => c.meetingId == msg.meetingID)
     
     fsconf foreach (fc => {
-      log.debug("Web user id joining meeting id[" + fc.meetingId + "] wid=[" + msg.user.userID + "]")
       println("Web user id joining meeting id[" + fc.meetingId + "] wid=[" + msg.user.userID + "]")
       fc.addUser(msg.user)
     })
@@ -117,7 +112,6 @@ class FreeswitchConferenceActor(fsproxy: FreeswitchManagerProxy, bbbInGW: IBigBl
   
   private def handleMuteVoiceUser(msg: MuteVoiceUser) {
     val fsconf = confs.values find (c => c.meetingId == msg.meetingID)
-    log.debug("Mute user request for wid[" + msg.userId + "] mute=[" + msg.mute + "]")
     println("Mute user request for wid[" + msg.userId + "] mute=[" + msg.mute + "]")    
     fsconf foreach (fc => {
       val user = fc.getWebUser(msg.userId)
@@ -186,7 +180,7 @@ class FreeswitchConferenceActor(fsproxy: FreeswitchManagerProxy, bbbInGW: IBigBl
   
   private def handleFsVoiceUserLeft(msg: FsVoiceUserLeft) {
     val fsconf = confs.values find (c => c.conferenceNum == msg.conference)
-    log.debug("Rx voice user left for cnum=[" + msg.conference + "] vid[" + msg.userId + "]")
+
     fsconf foreach (fc => {
       val user = fc.getVoiceUser(msg.userId) 
       user foreach (u => bbbInGW.voiceUserLeft(fc.meetingId, u.userID))
@@ -204,7 +198,7 @@ class FreeswitchConferenceActor(fsproxy: FreeswitchManagerProxy, bbbInGW: IBigBl
   
   private def handleFsVoiceUserMuted(msg: FsVoiceUserMuted) {
     val fsconf = confs.values find (c => c.conferenceNum == msg.conference)
-    log.debug("Rx voice user muted for cnum=[" + msg.conference + "] vid[" + msg.userId + "] mute=[" + msg.muted + "]")
+
     println("Rx voice user muted for cnum=[" + msg.conference + "] vid[" + msg.userId + "] mute=[" + msg.muted + "]")    
     fsconf foreach (fc => {
       val user = fc.getVoiceUser(msg.userId) 
diff --git a/bigbluebutton-apps/src/main/webapp/WEB-INF/configgy-logger.conf b/bigbluebutton-apps/src/main/webapp/WEB-INF/configgy-logger.conf
index 2a228e49eb070a9dc9bf769213f997f5043c2641..53fcebf01d019d00bbfb15932a69edbb06461af7 100755
--- a/bigbluebutton-apps/src/main/webapp/WEB-INF/configgy-logger.conf
+++ b/bigbluebutton-apps/src/main/webapp/WEB-INF/configgy-logger.conf
@@ -1,7 +1,7 @@
 log {
   filename = "/usr/share/red5/log/bigbluebutton-scala.log"
   roll = "daily"
-  level = "debug"
+  level = "info"
   use_full_package_names = on
 
   silence_net_sf_cache {
@@ -13,4 +13,9 @@ log {
     node = "sun.rmi"
     level = "error"
   }
+  
+  silence_org_apache {
+    node = "org.apache"
+    level = "error"    
+  }
 }
\ No newline at end of file
diff --git a/deskshare/app/build.gradle b/deskshare/app/build.gradle
index 28f9f6515e47d0d98c92eb3a0cba60e562e5f5db..31f31b8373a935274a689c2fa1be16f68ed2226f 100755
--- a/deskshare/app/build.gradle
+++ b/deskshare/app/build.gradle
@@ -8,75 +8,130 @@ jar.enabled = true
 
 archivesBaseName = 'bbb-deskshare-app' 
 
+task resolveDeps(type: Copy) {
+	into('lib')
+	from configurations.default
+	from configurations.default.allArtifacts.file
+}
+
+/*
+ * Seems like we need this here and in the sub-projects section for testng to resolve.
+ * (ralam Oct 4, 2009)
+ */
+repositories {
+	   add(new org.apache.ivy.plugins.resolver.ChainResolver()) {
+		 name = 'remote'
+		   returnFirst = true
+		   add(new org.apache.ivy.plugins.resolver.URLResolver()) {
+			   name = "googlecode"
+			   addArtifactPattern "http://red5.googlecode.com/svn/repository/[artifact](-[revision]).[ext]"
+			   addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[artifact](-[revision]).[ext]"
+		}
+		   add(new org.apache.ivy.plugins.resolver.URLResolver()) {
+			   name = "blindside-repos"
+			   addArtifactPattern "http://blindside.googlecode.com/svn/repository/[artifact](-[revision]).[ext]"
+			   addArtifactPattern "http://blindside.googlecode.com/svn/repository/[organisation]/[artifact](-[revision]).[ext]"
+		}
+	add(new org.apache.ivy.plugins.resolver.URLResolver()) {
+			   name = "maven2-central"
+			   m2compatible = true
+			   addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[module]/[revision]/[artifact](-[revision]).[ext]"
+			   addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[artifact]/[revision]/[artifact](-[revision]).[ext]"
+		}
+	add(new org.apache.ivy.plugins.resolver.URLResolver()) {
+			   name = "testng_ibiblio_maven2"
+			   m2compatible = true
+			   addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[module]/[revision]/[artifact](-[revision])-jdk15.[ext]"
+			   addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[artifact]/[revision]/[artifact](-[revision])-jdk15.[ext]"
+		}
+		add(new org.apache.ivy.plugins.resolver.URLResolver()) {
+			name = "netty-dependency"
+			m2compatible = true
+			addArtifactPattern "http://repository.jboss.org/nexus/content/groups/public-jboss/[organisation]/[module]/[revision]/[artifact](-[revision]).[ext]"
+			addArtifactPattern "http://repo1.maven.org/maven2/[organisation]/[artifact]/[revision]/[artifact](-[revision]).[ext]"
+	}
+		add(new org.apache.ivy.plugins.resolver.URLResolver()) {
+			name = "spring-bundles"
+			m2compatible = true
+			addArtifactPattern "http://repository.springsource.com/maven/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
+			addArtifactPattern "http://repository.springsource.com/maven/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
+		}
+		add(new org.apache.ivy.plugins.resolver.URLResolver()) {
+			name = "Red5"
+			m2compatible = true
+			addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
+			addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
+		}
+	   }
+}
+
 dependencies {	  
-	// Servlet
-	providedCompile 'javax.servlet:servlet-api:2.5@jar'
+  // Servlet
+  providedCompile 'javax.servlet:servlet-api:2.5@jar'
 	
-	// Mina
-	providedCompile 'org.apache.mina:mina-core:2.0.7@jar'
-	providedCompile 'org.apache.mina:mina-integration-beans:2.0.7@jar'
-	providedCompile 'org.apache.mina:mina-integration-jmx:2.0.7@jar'
+  // Mina  
+  providedCompile 'org.apache.mina:mina-core:2.0.7@jar'
+  providedCompile 'org.apache.mina:mina-integration-beans:2.0.7@jar'
+  providedCompile 'org.apache.mina:mina-integration-jmx:2.0.7@jar'
 	
-	// Spring 
-	providedCompile 'org.springframework:spring-web:3.1.1.RELEASE@jar' 
-	providedCompile  'org.springframework:spring-beans:3.1.1.RELEASE@jar'
-	providedCompile 'org.springframework:spring-context:3.1.1.RELEASE@jar'
-	providedCompile 'org.springframework:spring-core:3.1.1.RELEASE@jar'
-	
-	// Red5
-	providedCompile 'org/red5:red5:1.0r4643@jar'
-	
-	// Logging
-	providedCompile 'ch.qos.logback:logback-core:1.0.9@jar'
-	providedCompile 'ch.qos.logback:logback-classic:1.0.9@jar'
-	providedCompile 'org.slf4j:log4j-over-slf4j:1.7.2@jar' 
-	providedCompile 'org.slf4j:jcl-over-slf4j:1.7.2@jar'
-	providedCompile 'org.slf4j:jul-to-slf4j:1.7.2@jar'
-    providedCompile 'org.slf4j:slf4j-api:1.7.2@jar'
+  // Spring 
+  providedCompile 'org.springframework:spring-web:4.0.0.RELEASE@jar' 
+  providedCompile  'org.springframework:spring-beans:4.0.0.RELEASE@jar'
+  providedCompile 'org.springframework:spring-context:4.0.0.RELEASE@jar'
+  providedCompile 'org.springframework:spring-core:4.0.0.RELEASE@jar'
+  
+  // Red5
+  providedCompile 'org/red5:red5:1.0.2-M1@jar'
+  providedCompile 'org.red5:red5-io:1.0.3@jar'
+  
+  // Logging
+  providedCompile 'ch.qos.logback:logback-core:1.0.13@jar'
+  providedCompile 'ch.qos.logback:logback-classic:1.0.13@jar'
+  providedCompile 'org.slf4j:log4j-over-slf4j:1.7.5@jar' 
+  providedCompile 'org.slf4j:jcl-over-slf4j:1.7.5@jar'
+  providedCompile 'org.slf4j:jul-to-slf4j:1.7.5@jar'
+  providedCompile 'org.slf4j:slf4j-api:1.7.5@jar'
 
-	// Needed for the JVM shutdown hook but needs to be put into red5/lib dir.
-	// Otherwise we get exception on aop utils class not found.
-	providedCompile 'org.springframework:spring-aop:3.1.1.RELEASE@jar'
-	providedCompile 'aopalliance:aopalliance:1.0@jar'
-	
-    // Java Concurrency In Practice
-    providedCompile 'net.jcip:jcip-annotations:1.0@jar'
-        
-    // Testing
-    compile 'org.testng:testng:5.8@jar' 
-    compile 'org.easymock:easymock:2.4@jar'
+  // Needed for the JVM shutdown hook but needs to be put into red5/lib dir.
+  // Otherwise we get exception on aop utils class not found.
+  providedCompile 'org.springframework:spring-aop:4.0.0.RELEASE@jar'
+  providedCompile 'aopalliance:aopalliance:1.0@jar'
+	        
+  // Testing
+  compile 'org.testng:testng:5.8@jar' 
+  compile 'org.easymock:easymock:2.4@jar'
 	
-	// Testing
-	testRuntime 'org/testng:testng:5.8@jar'
-	testRuntime 'org.easymock:easymock:2.4@jar'
+  // Testing
+  testRuntime 'org/testng:testng:5.8@jar'
+  testRuntime 'org.easymock:easymock:2.4@jar'
 	
-	// Tunnelling servlet
-	compile 'org.springframework:spring-webmvc:3.1.1.RELEASE@jar'
+  // Tunnelling servlet
+  compile 'org.springframework:spring-webmvc:4.0.0.RELEASE@jar'
 		
-	compile project(':common')
+  compile project(':common')
 	
-	// Need to put commons-fileupload and commons-io in red5/lib dir. Otherwise, we get an
-	// java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory or
-        // java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
-	// ralam (Feb 27, 2013) 
-        providedCompile 'commons-fileupload:commons-fileupload:1.2.2@jar'
-	providedCompile 'commons-io:commons-io:2.1@jar' 
+  // Need to put commons-fileupload and commons-io in red5/lib dir. Otherwise, we get an
+  // java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactory or
+  // java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
+  // ralam (Feb 27, 2013) 
+  providedCompile 'commons-fileupload:commons-fileupload:1.2.2@jar'
+  providedCompile 'commons-io:commons-io:2.1@jar' 
     
-    // Libraries needed to run the scala tools
-    scalaTools 'org.scala-lang:scala-compiler:2.9.2'
-    scalaTools 'org.scala-lang:scala-library:2.9.2'
+  // Libraries needed to run the scala tools
+  scalaTools 'org.scala-lang:scala-compiler:2.9.2'
+  scalaTools 'org.scala-lang:scala-library:2.9.2'
 
-	// workaround for http://issues.gradle.org/browse/GRADLE-1273
-	//compileScala.classpath = sourceSets.main.compileClasspath + files(sourceSets.main.classesDir)
-	//compileTestScala.classpath = sourceSets.test.compileClasspath + files(sourceSets.test.classesDir)
+  // workaround for http://issues.gradle.org/browse/GRADLE-1273
+  //compileScala.classpath = sourceSets.main.compileClasspath + files(sourceSets.main.classesDir)
+  //compileTestScala.classpath = sourceSets.test.compileClasspath + files(sourceSets.test.classesDir)
 	
-    // Libraries needed for scala api
-    compile 'org.scala-lang:scala-library:2.9.2'   
-    compile 'net.lag:configgy:2.0.0'
+  // Libraries needed for scala api
+  compile 'org.scala-lang:scala-library:2.9.2'   
+  compile 'net.lag:configgy:2.0.0'
     
-        //redis
-	compile 'redis.clients:jedis:1.5.1'
-	providedCompile 'commons-pool:commons-pool:1.5.6'
+  //redis
+  compile 'redis.clients:jedis:1.5.1'
+  providedCompile 'commons-pool:commons-pool:1.5.6'
 }
 
 test {
diff --git a/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/ScreenVideo.java b/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/ScreenVideo.java
index cf8eb23e2f32f28c22c196ed8bab20891596cd2a..7ec07b3b85ca462fd8185a919d4fd9555c8432bb 100755
--- a/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/ScreenVideo.java
+++ b/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/ScreenVideo.java
@@ -20,7 +20,7 @@ package org.bigbluebutton.deskshare.server;
 
 import org.apache.mina.core.buffer.IoBuffer;
 import org.red5.logging.Red5LoggerFactory;
-import org.red5.server.api.stream.IVideoStreamCodec;
+import org.red5.codec.IVideoStreamCodec;
 import org.slf4j.Logger;
 
 public class ScreenVideo implements IVideoStreamCodec {
diff --git a/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/ScreenVideoBroadcastStream.java b/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/ScreenVideoBroadcastStream.java
index 7b57ea9a3a93d8561afb5b53658f2a0a1f01ee09..b1dff6873bdcc3f1c1d989b00342371cf739c227 100755
--- a/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/ScreenVideoBroadcastStream.java
+++ b/deskshare/app/src/main/java/org/bigbluebutton/deskshare/server/ScreenVideoBroadcastStream.java
@@ -26,9 +26,7 @@ import org.red5.logging.Red5LoggerFactory;
 import org.red5.server.api.event.IEvent;
 import org.red5.server.api.scope.IScope;
 import org.red5.server.api.stream.IBroadcastStream;
-import org.red5.server.api.stream.IStreamCodecInfo;
 import org.red5.server.api.stream.IStreamListener;
-import org.red5.server.api.stream.IVideoStreamCodec;
 import org.red5.server.api.stream.ResourceExistException;
 import org.red5.server.api.stream.ResourceNotFoundException;
 import org.red5.server.messaging.IMessageComponent;
@@ -40,8 +38,10 @@ import org.red5.server.messaging.PipeConnectionEvent;
 import org.red5.server.net.rtmp.event.IRTMPEvent;
 import org.red5.server.net.rtmp.event.Notify;
 import org.red5.server.net.rtmp.event.VideoData;
-import org.red5.server.stream.codec.StreamCodecInfo;
 import org.red5.server.stream.message.RTMPMessage;
+import org.red5.codec.IVideoStreamCodec;
+import org.red5.codec.IStreamCodecInfo;
+import org.red5.codec.StreamCodecInfo;
 import org.slf4j.Logger;
 
 import org.red5.server.api.stream.IStreamPacket;;
diff --git a/deskshare/app/src/main/resources/logback-deskshare.xml b/deskshare/app/src/main/resources/logback-deskshare.xml
index e233057f71e41e00ec521a37051f380ab3f996ec..4f2fdfe5d92fdd2d571bbb556ce892b67a90260d 100755
--- a/deskshare/app/src/main/resources/logback-deskshare.xml
+++ b/deskshare/app/src/main/resources/logback-deskshare.xml
@@ -18,4 +18,7 @@
 		<level value="DEBUG" />	
 		<appender-ref ref="deskshare" />
 	</root>		
+	
+	<!-- LEVEL CAN NOT BE DEBUG -->
+  <logger name="org.apache" level="INFO"></logger>
 </configuration>
diff --git a/deskshare/app/src/main/webapp/WEB-INF/deskshare.conf b/deskshare/app/src/main/webapp/WEB-INF/deskshare.conf
index 3b36253372616597c4d58938a70e541cc6ed2ee3..9a60c98b458361a70ab71fc923cba7caa482a116 100755
--- a/deskshare/app/src/main/webapp/WEB-INF/deskshare.conf
+++ b/deskshare/app/src/main/webapp/WEB-INF/deskshare.conf
@@ -1,7 +1,7 @@
 log {
   filename = "/usr/share/red5/log/deskshare.log"
   roll = "daily"
-  level = "debug"
+  level = "info"
   use_full_package_names = on
 
   silence_net_sf_cache {
@@ -13,4 +13,9 @@ log {
     node = "sun.rmi"
     level = "error"
   }
+  
+  silence_org_apache {
+    node = "org.apache"
+    level = "error"    
+  }
 }
\ No newline at end of file
diff --git a/deskshare/build.gradle b/deskshare/build.gradle
index ee483370415dcde1f8b67cb2cd5bf8bfae6ddccd..6bdacbb152ecfdf91022df7b359b9e23a689a56e 100755
--- a/deskshare/build.gradle
+++ b/deskshare/build.gradle
@@ -49,7 +49,13 @@ repositories {
             m2compatible = true
             addArtifactPattern "http://repository.springsource.com/maven/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
             addArtifactPattern "http://repository.springsource.com/maven/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
-        }        
+        }    
+		add(new org.apache.ivy.plugins.resolver.URLResolver()) {
+			name = "Red5"
+			m2compatible = true
+			addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
+			addArtifactPattern "http://red5.googlecode.com/svn/repository/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
+		}
    	}
 }
 
@@ -58,50 +64,45 @@ repositories {
  *  1. You cannot use provideCompile here as gradle will complain. But you can use it in the sub-projects.
  */
 dependencies {
-	// Servlet
-	compile 'javax.servlet:servlet-api:2.5@jar'
+  // Servlet
+  compile 'javax.servlet:servlet-api:2.5@jar'
 	
-	// Mina
-	compile 'org.apache.mina:mina-core:2.0.7@jar'
-	compile 'org.apache.mina:mina-integration-beans:2.0.7@jar'
-	compile 'org.apache.mina:mina-integration-jmx:2.0.7@jar'
+  // Mina
+  compile 'org.apache.mina:mina-core:2.0.7@jar'
+  compile 'org.apache.mina:mina-integration-beans:2.0.7@jar'
+  compile 'org.apache.mina:mina-integration-jmx:2.0.7@jar'
 	
-	// Spring 
-	compile 'org.springframework:spring-web:3.1.1.RELEASE@jar' 
-	compile  'org.springframework:spring-beans:3.1.1.RELEASE@jar'
-	compile 'org.springframework:spring-context:3.1.1.RELEASE@jar'
-	compile 'org.springframework:spring-core:3.1.1.RELEASE@jar'
+  // Spring 
+  compile 'org.springframework:spring-web:4.0.0.RELEASE@jar' 
+  compile  'org.springframework:spring-beans:4.0.0.RELEASE@jar'
+  compile 'org.springframework:spring-context:4.0.0.RELEASE@jar'
+  compile 'org.springframework:spring-core:4.0.0.RELEASE@jar'
 	
-	// Red5
-	compile 'org/red5:red5:1.0r4643@jar'
-	
-	// Logging
-	compile 'ch.qos.logback:logback-core:1.0.9@jar'
-	compile 'ch.qos.logback:logback-classic:1.0.9@jar'
-	compile 'org.slf4j:log4j-over-slf4j:1.7.2@jar' 
-	compile 'org.slf4j:jcl-over-slf4j:1.7.2@jar'
-	compile 'org.slf4j:jul-to-slf4j:1.7.2@jar'
-    compile 'org.slf4j:slf4j-api:1.7.2@jar'
+  // Red5
+  compile 'org/red5:red5:1.0.2-M1@jar'
+  compile 'org.red5:red5-io:1.0.3@jar'
+  
+  // Logging
+  compile 'ch.qos.logback:logback-core:1.0.13@jar'
+  compile 'ch.qos.logback:logback-classic:1.0.13@jar'
+  compile 'org.slf4j:log4j-over-slf4j:1.7.5@jar' 
+  compile 'org.slf4j:jcl-over-slf4j:1.7.5@jar'
+  compile 'org.slf4j:jul-to-slf4j:1.7.5@jar'
+  compile 'org.slf4j:slf4j-api:1.7.5@jar'
 
 	// Needed for the JVM shutdown hook but needs to be put into red5/lib dir.
 	// Otherwise we get exception on aop utils class not found.
-	compile 'org.springframework:spring-aop:3.0.6.RELEASE@jar'
+	compile 'org.springframework:spring-aop:4.0.0.RELEASE@jar'
 	compile 'aopalliance:aopalliance:1.0@jar'
-	
-    // Java Concurrency In Practice
-    compile 'net.jcip:jcip-annotations:1.0@jar'
-        
+	        
     // Testing
     compile 'org.testng:testng:5.8@jar' 
     compile 'org.easymock:easymock:2.4@jar'
 	
 	compile project(':common')
-    compile 'commons-fileupload:commons-fileupload:1.2.2@jar'
+  compile 'commons-fileupload:commons-fileupload:1.2.2@jar'
 	compile 'commons-io:commons-io:2.1@jar' 
-	
-	// Java Concurrency In Practice
-	compile 'net.jcip:jcip-annotations:1.0@jar'
-	
+		
 	// Libraries needed to run the scala tools
 	scalaTools 'org.scala-lang:scala-compiler:2.9.2'
 	scalaTools 'org.scala-lang:scala-library:2.9.2'