diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java
index acea01b72befa875a6c259dc85d8ae7ab08946bb..5687d1172bbc249d207eb0c62fff1cd586e087cb 100644
--- a/src/main/java/de/thm/arsnova/services/ISessionService.java
+++ b/src/main/java/de/thm/arsnova/services/ISessionService.java
@@ -20,6 +20,7 @@
 package de.thm.arsnova.services;
 
 import java.util.List;
+import java.util.UUID;
 
 import de.thm.arsnova.connector.model.Course;
 import de.thm.arsnova.entities.LoggedIn;
@@ -46,4 +47,6 @@ public interface ISessionService {
 	int countSessions(List<Course> courses);
 
 	Session setActive(String sessionkey, Boolean lock);
+
+	Session joinSession(String keyword, UUID socketId);
 }
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index 52343f340ec87dcba53cfbc308487bc8eabc4426..60915c60e968199f6742e1d379f2038b45d75a68 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -26,6 +26,7 @@ import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -61,9 +62,36 @@ public class SessionService implements ISessionService {
 		this.databaseDao = newDatabaseDao;
 	}
 
+	@Override
+	@Authenticated
+	public final Session joinSession(final String keyword, UUID socketId) {
+		/* Socket.IO solution */
+
+		Session session = databaseDao.getSession(keyword);
+		User user = userService.getUser2SocketId(socketId);
+
+		userService.addUserToSessionBySocketId(socketId, keyword);
+
+		if (session.getCreator().equals(user.getUsername())) {
+			databaseDao.updateSessionOwnerActivity(session);
+		}
+		databaseDao.registerAsOnlineUser(user, session);
+
+		if (connectorClient != null && session.isCourseSession()) {
+			String courseid = session.getCourseId();
+			if (!connectorClient.getMembership(user.getUsername(), courseid).isMember()) {
+				throw new ForbiddenException();
+			}
+		}
+
+		return session;
+	}
+
 	@Override
 	@Authenticated
 	public final Session joinSession(final String keyword) {
+		/* HTTP polling solution (legacy) */
+
 		userService.addCurrentUserToSessionMap(keyword);
 		socketIoServer.reportActiveUserCountForSession(keyword);
 
@@ -144,6 +172,8 @@ public class SessionService implements ISessionService {
 	@Override
 	@Authenticated
 	public final LoggedIn registerAsOnlineUser(final User user, final String sessionkey) {
+		/* HTTP polling solution (legacy) */
+		
 		Session session = this.joinSession(sessionkey);
 		if (session == null) {
 			return null;
diff --git a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
index 9ce63e7fe3568f80417b3307ec483663fe420afc..d62a882e5d377a20827e6fa63e942c7dff4b3fcb 100644
--- a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
+++ b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
@@ -103,7 +103,7 @@ public class ARSnovaSocketIOServer {
 		server.addEventListener("setSession", Session.class, new DataListener<Session>() {
 			@Override
 			public void onData(SocketIOClient client, Session session, AckRequest ackSender) {
-				userService.addUserToSessionBySocketId(client.getSessionId(), session.getKeyword());
+				sessionService.joinSession(session.getKeyword(), client.getSessionId());
 				reportActiveUserCountForSession(session.getKeyword());
 				reportSessionDataToClient(session.getKeyword(), client);
 			}
@@ -225,11 +225,9 @@ public class ARSnovaSocketIOServer {
 	 * @param client
 	 */
 	public void reportSessionDataToClient(String sessionKey, SocketIOClient client) {
+		broadcastInSession(sessionKey, "updateActiveUserCount", sessionService.countActiveUsers(sessionKey));
 		de.thm.arsnova.entities.Feedback fb = feedbackService.getFeedback(sessionKey);
 		client.sendEvent("updateFeedback", fb.getValues());
-
-		/* updateActiveUserCount does not need to be send since it is broadcasted
-		 * after the client joined the session */
 	}
 
 	public void reportUpdatedFeedbackForSession(String sessionKey) {