diff --git a/src/main/java/de/thm/arsnova/aop/UserSessionAspect.java b/src/main/java/de/thm/arsnova/aop/UserSessionAspect.java
index a54a912746fbc836bb833c71a0f0526c410df01f..581409fd5b398d5f0fdc62070f11c273361f07ac 100644
--- a/src/main/java/de/thm/arsnova/aop/UserSessionAspect.java
+++ b/src/main/java/de/thm/arsnova/aop/UserSessionAspect.java
@@ -5,26 +5,25 @@ import java.util.UUID;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.AfterReturning;
 import org.aspectj.lang.annotation.Aspect;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import de.thm.arsnova.controller.SessionController;
 import de.thm.arsnova.entities.Session;
+import de.thm.arsnova.events.Publisher;
 import de.thm.arsnova.services.IUserService;
 import de.thm.arsnova.services.UserSessionService;
 
 @Aspect
 public class UserSessionAspect {
 
-	public static final Logger LOGGER = LoggerFactory.getLogger(SessionController.class);
-	
 	@Autowired
 	private UserSessionService userSessionService;
 	
 	@Autowired
 	private IUserService userService;
 	
+	@Autowired
+	private Publisher publisher;
+	
 	/** Sets current user and ARSnova session in session scoped UserSessionService 
 	 * 
 	 * @param jp
diff --git a/src/main/java/de/thm/arsnova/controller/SocketController.java b/src/main/java/de/thm/arsnova/controller/SocketController.java
index 5ec8b58843e0ab8300c0c7809a8b6343b10e2483..5a7eab5dad1ed569e01e5bf5bca71f3f04dcbaf1 100644
--- a/src/main/java/de/thm/arsnova/controller/SocketController.java
+++ b/src/main/java/de/thm/arsnova/controller/SocketController.java
@@ -35,6 +35,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
 
 import de.thm.arsnova.entities.User;
 import de.thm.arsnova.services.IUserService;
+import de.thm.arsnova.services.UserSessionService;
 import de.thm.arsnova.socket.ARSnovaSocketIOServer;
 
 @Controller
@@ -44,6 +45,9 @@ public class SocketController extends AbstractController {
 	@Autowired
 	private IUserService userService;
 
+	@Autowired
+	private UserSessionService userSessionService;
+
 	@Autowired
 	private ARSnovaSocketIOServer server;
 
@@ -57,6 +61,7 @@ public class SocketController extends AbstractController {
 		response.setStatus(u != null ? HttpStatus.NO_CONTENT.value() : HttpStatus.UNAUTHORIZED.value());
 		if (u != null) {
 			userService.putUser2SocketId(UUID.fromString(socketid), u);
+			userSessionService.setSocketId(UUID.fromString(socketid));
 		}
 	}
 
diff --git a/src/main/java/de/thm/arsnova/events/ARSnovaEvent.java b/src/main/java/de/thm/arsnova/events/ARSnovaEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..0b6e983ed7b4095b885ccf8c442135cdb5b9e914
--- /dev/null
+++ b/src/main/java/de/thm/arsnova/events/ARSnovaEvent.java
@@ -0,0 +1,31 @@
+package de.thm.arsnova.events;
+
+import org.springframework.context.ApplicationEvent;
+
+public class ARSnovaEvent extends ApplicationEvent {
+	
+	private static final long serialVersionUID = 1L;
+	
+	private String sessionKey;
+	private String eventName;
+	private Object data;
+	
+	public ARSnovaEvent(Object source, String sKey, String eName, Object d) {
+		super(source);
+		this.data = d;
+		this.eventName = eName;
+		this.sessionKey = sKey;
+	}
+
+	public String getSessionKey() {
+		return sessionKey;
+	}
+
+	public String getEventName() {
+		return eventName;
+	}
+
+	public Object getData() {
+		return data;
+	}
+}
diff --git a/src/main/java/de/thm/arsnova/events/ARSnovaEventListener.java b/src/main/java/de/thm/arsnova/events/ARSnovaEventListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..9d124239e7b5605df0d648e6194935d5f5fbf211
--- /dev/null
+++ b/src/main/java/de/thm/arsnova/events/ARSnovaEventListener.java
@@ -0,0 +1,27 @@
+package de.thm.arsnova.events;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationListener;
+import org.springframework.stereotype.Component;
+
+import de.thm.arsnova.services.UserSessionService;
+import de.thm.arsnova.socket.ARSnovaSocketIOServer;
+
+@Component
+public class ARSnovaEventListener implements ApplicationListener<ARSnovaEvent> {
+
+	public static final Logger LOGGER = LoggerFactory.getLogger(ARSnovaEventListener.class);
+	
+	@Autowired
+	private ARSnovaSocketIOServer socketIoServer;
+	
+	@Autowired
+	private UserSessionService userSessionService;
+	
+	@Override
+	public void onApplicationEvent(ARSnovaEvent event) {
+		userSessionService.sendEventViaWebSocket(socketIoServer, event);
+	}
+}
diff --git a/src/main/java/de/thm/arsnova/events/Publisher.java b/src/main/java/de/thm/arsnova/events/Publisher.java
new file mode 100644
index 0000000000000000000000000000000000000000..17819a8148330191c54bc941035fe8251d9a5bb7
--- /dev/null
+++ b/src/main/java/de/thm/arsnova/events/Publisher.java
@@ -0,0 +1,23 @@
+package de.thm.arsnova.events;
+
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Service;
+
+@Service
+public class Publisher implements ApplicationContextAware {
+
+	@Autowired
+	private ApplicationContext context;
+	
+	@Override
+	public void setApplicationContext(ApplicationContext c) throws BeansException {
+		this.context = c;
+	}
+
+	public void publish(ARSnovaEvent event) {
+		this.context.publishEvent(event);
+	}
+}
diff --git a/src/main/java/de/thm/arsnova/services/UserSessionService.java b/src/main/java/de/thm/arsnova/services/UserSessionService.java
index d26a8f181cbf18e5d279c9ed0574958870c8bdf2..84f2885033b88772db4c74d34c4f831b6530982d 100644
--- a/src/main/java/de/thm/arsnova/services/UserSessionService.java
+++ b/src/main/java/de/thm/arsnova/services/UserSessionService.java
@@ -4,6 +4,8 @@ import java.util.UUID;
 
 import de.thm.arsnova.entities.Session;
 import de.thm.arsnova.entities.User;
+import de.thm.arsnova.events.ARSnovaEvent;
+import de.thm.arsnova.socket.ARSnovaSocketIOServer;
 
 public interface UserSessionService {
 
@@ -15,4 +17,6 @@ public interface UserSessionService {
 	
 	void setSocketId(UUID socketId);
 	UUID getSocketId();
+
+	void sendEventViaWebSocket(ARSnovaSocketIOServer server, ARSnovaEvent event);
 }
\ No newline at end of file
diff --git a/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java b/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java
index 69a51cae619e7eefe773167e9e2af7a476c1924d..c40553642f10af313d222dc88eced5520c5e6dfd 100644
--- a/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java
@@ -8,6 +8,8 @@ import org.springframework.stereotype.Component;
 
 import de.thm.arsnova.entities.Session;
 import de.thm.arsnova.entities.User;
+import de.thm.arsnova.events.ARSnovaEvent;
+import de.thm.arsnova.socket.ARSnovaSocketIOServer;
 
 @Component
 @Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
@@ -46,4 +48,19 @@ public class UserSessionServiceImpl implements UserSessionService {
 	public UUID getSocketId() {
 		return this.socketId;
 	}
+	
+	private boolean hasConnectedWebSocket() {
+		return getSocketId() != null;
+	}
+	
+	@Override
+	public void sendEventViaWebSocket(ARSnovaSocketIOServer server, ARSnovaEvent event) {
+		if (
+				hasConnectedWebSocket()
+				&& event != null && session != null
+				&& event.getSessionKey().equals(session.getKeyword())
+		) {
+			server.sendToClient(getSocketId(), event);
+		}
+	}
 }
diff --git a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
index 9524058daf8f39bebd0afdb697eb27409d393169..6b50cfbbe76d27eb4d46b303b5b1104cd31bc139 100644
--- a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
+++ b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
@@ -23,6 +23,7 @@ import com.corundumstudio.socketio.listener.DataListener;
 import com.corundumstudio.socketio.listener.DisconnectListener;
 
 import de.thm.arsnova.entities.User;
+import de.thm.arsnova.events.ARSnovaEvent;
 import de.thm.arsnova.exceptions.NoContentException;
 import de.thm.arsnova.services.IFeedbackService;
 import de.thm.arsnova.services.IQuestionService;
@@ -281,6 +282,20 @@ public class ARSnovaSocketIOServer {
 		broadcastInSession(sessionKey, "lecQuestionAvail", lecturerQuestionId);
 	}
 
+	/** Sends event to a websocket connection identified by UUID 
+	 * 
+	 * @param sessionId The UUID of the websocket ID
+	 * @param event The event to be send to client
+	 */
+	public void sendToClient(UUID sessionId, ARSnovaEvent event) {
+		for (SocketIOClient c : server.getAllClients()) {
+			if (c.getSessionId().equals(sessionId)) {
+				System.out.println(sessionId);
+				break;
+			}
+		}
+	}
+	
 	public void broadcastInSession(String sessionKey, String eventName, Object data) {
 		/**
 		 * collect a list of users which are in the current session iterate over