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 f87b6f4123313838c26e915c4ee556fe452e6efb..93dd30622fd169ac3962c30b9bbad837ae90c364 100755
--- a/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/BigBlueButtonApplication.java
+++ b/bigbluebutton-apps/src/main/java/org/bigbluebutton/conference/BigBlueButtonApplication.java
@@ -28,8 +28,12 @@ import org.red5.logging.Red5LoggerFactory;
 import org.red5.server.adapter.IApplication;
 import org.red5.server.adapter.MultiThreadedApplicationAdapter;
 import org.red5.server.api.IConnection;
+import org.red5.server.api.IContext;
 import org.red5.server.api.IScope;
 import org.slf4j.Logger;
+import org.springframework.context.ApplicationEvent;
+import org.springframework.context.ApplicationListener;
+import org.springframework.context.support.AbstractApplicationContext;
 
 public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter {
 
@@ -38,12 +42,17 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter {
 	private static final String APP = "BigBlueButtonApplication";
 	private ParticipantsApplication participantsApplication;
 	private RecorderApplication recorderApplication;
+	private AbstractApplicationContext appCtx;
 	
 	private String version;
 	
 	@Override
     public boolean appStart(IScope app) {
         log.debug("Starting BigBlueButton version {}", version); 
+        IContext context = app.getContext();
+        appCtx = (AbstractApplicationContext) context.getApplicationContext();
+        appCtx.addApplicationListener(new ShutdownHookListener());
+        appCtx.registerShutdownHook();
         return super.appStart(app);
     }
     
@@ -157,4 +166,16 @@ public class BigBlueButtonApplication extends MultiThreadedApplicationAdapter {
 	private BigBlueButtonSession getBbbSession() {
 		return (BigBlueButtonSession) Red5.getConnectionLocal().getAttribute(Constants.SESSION);
 	}
+	
+	private class ShutdownHookListener implements ApplicationListener<ApplicationEvent> {
+
+		@Override
+		public void onApplicationEvent(ApplicationEvent event) {
+			if (event instanceof org.springframework.context.event.ContextStoppedEvent) {
+				log.info("Received shutdown event. Destroying all rooms.");
+				participantsApplication.destroyAllRooms();
+			}			
+		}
+		
+	}
 }