From c4ed2aa5e9d8aa0b0632bca0b2427327903b80fb Mon Sep 17 00:00:00 2001
From: Daniel Gerhardt <code@dgerhardt.net>
Date: Mon, 18 Sep 2017 14:45:01 +0200
Subject: [PATCH] Change occurences of 'Session' in class names to 'Room'

---
 ...SessionAspect.java => UserRoomAspect.java} |  22 +-
 .../de/thm/arsnova/cache/CacheBusterImpl.java |   8 +-
 .../arsnova/cache/ScheduledCacheBuster.java   |   2 +-
 .../thm/arsnova/config/PersistanceConfig.java |   4 +-
 .../arsnova/controller/CommentController.java |  12 +-
 .../arsnova/controller/LoginController.java   |  12 +-
 .../arsnova/controller/SessionController.java | 136 +++----
 .../arsnova/controller/SocketController.java  |   6 +-
 .../arsnova/controller/UserController.java    |   4 +-
 .../java/de/thm/arsnova/entities/Content.java |  10 +-
 .../entities/{Session.java => Room.java}      |   8 +-
 ...ionStatistics.java => RoomStatistics.java} |   4 +-
 .../arsnova/entities/UserAuthentication.java  |  10 +-
 .../de/thm/arsnova/entities/UserProfile.java  |  28 +-
 .../entities/migration/FromV2Migrator.java    |  14 +-
 .../entities/migration/ToV2Migrator.java      |  16 +-
 .../entities/migration/v2/LoggedIn.java       |  16 +-
 .../migration/v2/{Session.java => Room.java}  |  12 +-
 .../{SessionFeature.java => RoomFeature.java} |   6 +-
 .../v2/{SessionInfo.java => RoomInfo.java}    |  34 +-
 .../{VisitedSession.java => VisitedRoom.java} |   9 +-
 .../CouchDbTypeFieldConverter.java            |   4 +-
 .../transport/AnswerQueueElement.java         |  12 +-
 .../transport/ImportExportSession.java        |  32 +-
 .../arsnova/events/ArsnovaEventVisitor.java   |   8 +-
 .../thm/arsnova/events/ChangeScoreEvent.java  |   8 +-
 .../events/DeleteAllLectureAnswersEvent.java  |   8 +-
 .../DeleteAllPreparationAnswersEvent.java     |   8 +-
 .../DeleteAllQuestionsAnswersEvent.java       |   8 +-
 .../events/DeleteAllQuestionsEvent.java       |   8 +-
 .../thm/arsnova/events/DeleteAnswerEvent.java |   8 +-
 .../arsnova/events/DeleteCommentEvent.java    |   8 +-
 ....java => DeleteFeedbackForRoomsEvent.java} |  12 +-
 .../arsnova/events/DeleteQuestionEvent.java   |   8 +-
 ...SessionEvent.java => DeleteRoomEvent.java} |   8 +-
 .../arsnova/events/FeatureChangeEvent.java    |   8 +-
 .../arsnova/events/FlipFlashcardsEvent.java   |   8 +-
 .../thm/arsnova/events/LockFeedbackEvent.java |   8 +-
 .../thm/arsnova/events/LockQuestionEvent.java |   8 +-
 .../arsnova/events/LockQuestionsEvent.java    |   8 +-
 .../de/thm/arsnova/events/LockVoteEvent.java  |   8 +-
 .../de/thm/arsnova/events/LockVotesEvent.java |   8 +-
 .../de/thm/arsnova/events/NewAnswerEvent.java |   8 +-
 .../thm/arsnova/events/NewCommentEvent.java   |   8 +-
 .../thm/arsnova/events/NewFeedbackEvent.java  |   8 +-
 .../thm/arsnova/events/NewQuestionEvent.java  |   8 +-
 ...NewSessionEvent.java => NewRoomEvent.java} |   8 +-
 .../arsnova/events/PiRoundCancelEvent.java    |   6 +-
 .../events/PiRoundDelayedStartEvent.java      |   8 +-
 .../thm/arsnova/events/PiRoundEndEvent.java   |   8 +-
 .../thm/arsnova/events/PiRoundResetEvent.java |   8 +-
 .../{SessionEvent.java => RoomEvent.java}     |  16 +-
 ...SessionEvent.java => StatusRoomEvent.java} |   8 +-
 .../arsnova/events/UnlockQuestionEvent.java   |   8 +-
 .../arsnova/events/UnlockQuestionsEvent.java  |   8 +-
 .../thm/arsnova/events/UnlockVoteEvent.java   |   8 +-
 .../thm/arsnova/events/UnlockVotesEvent.java  |   8 +-
 ...ionRepository.java => RoomRepository.java} |  34 +-
 .../SessionStatisticsRepository.java          |   4 +-
 .../couchdb/CouchDbCommentRepository.java     |   4 +-
 ...sitory.java => CouchDbRoomRepository.java} | 170 ++++-----
 .../CouchDbSessionStatisticsRepository.java   |  12 +-
 .../CouchDbVisitedSessionRepository.java      |   6 +-
 .../ApplicationPermissionEvaluator.java       |  26 +-
 .../arsnova/services/CommentServiceImpl.java  |  60 +--
 .../arsnova/services/ContentServiceImpl.java  | 240 ++++++------
 .../arsnova/services/FeedbackServiceImpl.java |  72 ++--
 .../services/FeedbackStorageService.java      |  12 +-
 .../services/FeedbackStorageServiceImpl.java  |  48 +--
 .../thm/arsnova/services/MotdServiceImpl.java |  14 +-
 .../{SessionService.java => RoomService.java} |  52 +--
 ...nServiceImpl.java => RoomServiceImpl.java} | 348 +++++++++---------
 ...ssionService.java => UserRoomService.java} |  10 +-
 ...viceImpl.java => UserRoomServiceImpl.java} |  18 +-
 .../services/score/ScoreCalculator.java       |   6 +-
 .../score/ScoreCalculatorFactoryImpl.java     |  60 +--
 .../score/VariantScoreCalculator.java         |  18 +-
 .../websocket/ArsnovaSocketioServerImpl.java  | 148 ++++----
 .../message/{Session.java => Room.java}       |   2 +-
 src/main/resources/META-INF/aop.xml           |   2 +-
 src/site/markdown/development/caching.md      |   2 +-
 .../arsnova/config/TestPersistanceConfig.java |   4 +-
 .../DefaultEntityServiceImplTest.java         |  88 ++---
 .../thm/arsnova/services/StubUserService.java |   2 +-
 84 files changed, 1076 insertions(+), 1081 deletions(-)
 rename src/main/java/de/thm/arsnova/aop/{UserSessionAspect.java => UserRoomAspect.java} (67%)
 rename src/main/java/de/thm/arsnova/entities/{Session.java => Room.java} (91%)
 rename src/main/java/de/thm/arsnova/entities/{SessionStatistics.java => RoomStatistics.java} (95%)
 rename src/main/java/de/thm/arsnova/entities/migration/v2/{Session.java => Room.java} (97%)
 rename src/main/java/de/thm/arsnova/entities/migration/v2/{SessionFeature.java => RoomFeature.java} (98%)
 rename src/main/java/de/thm/arsnova/entities/migration/v2/{SessionInfo.java => RoomInfo.java} (89%)
 rename src/main/java/de/thm/arsnova/entities/migration/v2/{VisitedSession.java => VisitedRoom.java} (89%)
 rename src/main/java/de/thm/arsnova/events/{DeleteFeedbackForSessionsEvent.java => DeleteFeedbackForRoomsEvent.java} (79%)
 rename src/main/java/de/thm/arsnova/events/{DeleteSessionEvent.java => DeleteRoomEvent.java} (85%)
 rename src/main/java/de/thm/arsnova/events/{NewSessionEvent.java => NewRoomEvent.java} (84%)
 rename src/main/java/de/thm/arsnova/events/{SessionEvent.java => RoomEvent.java} (76%)
 rename src/main/java/de/thm/arsnova/events/{StatusSessionEvent.java => StatusRoomEvent.java} (84%)
 rename src/main/java/de/thm/arsnova/persistance/{SessionRepository.java => RoomRepository.java} (51%)
 rename src/main/java/de/thm/arsnova/persistance/couchdb/{CouchDbSessionRepository.java => CouchDbRoomRepository.java} (78%)
 rename src/main/java/de/thm/arsnova/services/{SessionService.java => RoomService.java} (55%)
 rename src/main/java/de/thm/arsnova/services/{SessionServiceImpl.java => RoomServiceImpl.java} (57%)
 rename src/main/java/de/thm/arsnova/services/{UserSessionService.java => UserRoomService.java} (87%)
 rename src/main/java/de/thm/arsnova/services/{UserSessionServiceImpl.java => UserRoomServiceImpl.java} (85%)
 rename src/main/java/de/thm/arsnova/websocket/message/{Session.java => Room.java} (97%)

diff --git a/src/main/java/de/thm/arsnova/aop/UserSessionAspect.java b/src/main/java/de/thm/arsnova/aop/UserRoomAspect.java
similarity index 67%
rename from src/main/java/de/thm/arsnova/aop/UserSessionAspect.java
rename to src/main/java/de/thm/arsnova/aop/UserRoomAspect.java
index 2ef9a36af..0c108f438 100644
--- a/src/main/java/de/thm/arsnova/aop/UserSessionAspect.java
+++ b/src/main/java/de/thm/arsnova/aop/UserRoomAspect.java
@@ -17,8 +17,8 @@
  */
 package de.thm.arsnova.aop;
 
-import de.thm.arsnova.entities.migration.v2.Session;
-import de.thm.arsnova.services.UserSessionService;
+import de.thm.arsnova.entities.migration.v2.Room;
+import de.thm.arsnova.services.UserRoomService;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.AfterReturning;
 import org.aspectj.lang.annotation.Aspect;
@@ -26,23 +26,23 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Configurable;
 
 /**
- * Assigns a session to the {@link de.thm.arsnova.services.UserSessionService} whenever a user joins a
- * session.
+ * Assigns a room to the {@link UserRoomService} whenever a user joins a
+ * room.
  */
 @Aspect
 @Configurable
-public class UserSessionAspect {
+public class UserRoomAspect {
 
 	@Autowired
-	private UserSessionService userSessionService;
+	private UserRoomService userRoomService;
 
-	/** Sets current user and ARSnova session in session scoped UserSessionService
+	/** Sets current user and ARSnova room in session scoped UserRoomService
 	 */
 	@AfterReturning(
-			pointcut = "execution(public * de.thm.arsnova.services.SessionService.join(..)) && args(keyword)",
-			returning = "session"
+			pointcut = "execution(public * de.thm.arsnova.services.RoomService.join(..)) && args(keyword)",
+			returning = "room"
 			)
-	public void joinSessionAdvice(final JoinPoint jp, final String keyword, final Session session) {
-		userSessionService.setSession(session);
+	public void joinSessionAdvice(final JoinPoint jp, final String keyword, final Room room) {
+		userRoomService.setRoom(room);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java b/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java
index 4e94d3efa..0d02684f6 100644
--- a/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java
+++ b/src/main/java/de/thm/arsnova/cache/CacheBusterImpl.java
@@ -77,10 +77,10 @@ public class CacheBusterImpl implements CacheBuster, ArsnovaEventVisitor {
 	public void visit(NewFeedbackEvent event) { }
 
 	@Override
-	public void visit(DeleteFeedbackForSessionsEvent event) { }
+	public void visit(DeleteFeedbackForRoomsEvent event) { }
 
 	@Override
-	public void visit(StatusSessionEvent event) { }
+	public void visit(StatusRoomEvent event) { }
 
 	@CacheEvict(value = "statistics", allEntries = true)
 	@Override
@@ -100,11 +100,11 @@ public class CacheBusterImpl implements CacheBuster, ArsnovaEventVisitor {
 
 	@CacheEvict(value = "statistics", allEntries = true)
 	@Override
-	public void visit(NewSessionEvent newSessionEvent) { }
+	public void visit(NewRoomEvent newSessionEvent) { }
 
 	@CacheEvict(value = "statistics", allEntries = true)
 	@Override
-	public void visit(DeleteSessionEvent deleteSessionEvent) { }
+	public void visit(DeleteRoomEvent deleteSessionEvent) { }
 
 	@Override
 	public void visit(LockVoteEvent lockVoteEvent) { }
diff --git a/src/main/java/de/thm/arsnova/cache/ScheduledCacheBuster.java b/src/main/java/de/thm/arsnova/cache/ScheduledCacheBuster.java
index 9d3ee0eac..c3ea951f4 100644
--- a/src/main/java/de/thm/arsnova/cache/ScheduledCacheBuster.java
+++ b/src/main/java/de/thm/arsnova/cache/ScheduledCacheBuster.java
@@ -34,7 +34,7 @@ import org.springframework.stereotype.Component;
 @Component
 public class ScheduledCacheBuster {
 
-	@CacheEvict(value = "sessions", allEntries = true)
+	@CacheEvict(value = "rooms", allEntries = true)
 	@Scheduled(initialDelay = 1000 * 25, fixedRate = 1000 * 60 * 60 * 6)
 	private void clearSessionCache() { }
 
diff --git a/src/main/java/de/thm/arsnova/config/PersistanceConfig.java b/src/main/java/de/thm/arsnova/config/PersistanceConfig.java
index 895577706..d278ee919 100644
--- a/src/main/java/de/thm/arsnova/config/PersistanceConfig.java
+++ b/src/main/java/de/thm/arsnova/config/PersistanceConfig.java
@@ -54,8 +54,8 @@ public class PersistanceConfig {
 	}
 
 	@Bean
-	public SessionRepository sessionRepository() throws Exception {
-		return new CouchDbSessionRepository(couchDbConnector(), false);
+	public RoomRepository sessionRepository() throws Exception {
+		return new CouchDbRoomRepository(couchDbConnector(), false);
 	}
 
 	@Bean
diff --git a/src/main/java/de/thm/arsnova/controller/CommentController.java b/src/main/java/de/thm/arsnova/controller/CommentController.java
index 33e0d2e94..f05f4e85f 100644
--- a/src/main/java/de/thm/arsnova/controller/CommentController.java
+++ b/src/main/java/de/thm/arsnova/controller/CommentController.java
@@ -56,7 +56,7 @@ public class CommentController extends PaginationController {
 	@RequestMapping(value = "/count", method = RequestMethod.GET)
 	@DeprecatedApi
 	@Deprecated
-	public int getInterposedCount(@ApiParam(value = "Session-Key from current session", required = true) @RequestParam final String sessionkey) {
+	public int getInterposedCount(@ApiParam(value = "Room-Key from current session", required = true) @RequestParam final String sessionkey) {
 		return commentService.count(sessionkey);
 	}
 
@@ -65,15 +65,15 @@ public class CommentController extends PaginationController {
 	@RequestMapping(value = "/readcount", method = RequestMethod.GET)
 	@DeprecatedApi
 	@Deprecated
-	public CommentReadingCount getUnreadInterposedCount(@ApiParam(value = "Session-Key from current session", required = true) @RequestParam("sessionkey") final String sessionkey, String user) {
+	public CommentReadingCount getUnreadInterposedCount(@ApiParam(value = "Room-Key from current session", required = true) @RequestParam("sessionkey") final String sessionkey, String user) {
 		return commentService.countRead(sessionkey, user);
 	}
 
-	@ApiOperation(value = "Retrieves all Comments for a Session",
+	@ApiOperation(value = "Retrieves all Comments for a Room",
 			nickname = "getInterposedQuestions")
 	@RequestMapping(value = "/", method = RequestMethod.GET)
 	@Pagination
-	public List<Comment> getInterposedQuestions(@ApiParam(value = "Session-Key from current session", required = true) @RequestParam final String sessionkey) {
+	public List<Comment> getInterposedQuestions(@ApiParam(value = "Room-Key from current session", required = true) @RequestParam final String sessionkey) {
 		return commentService.getBySessionKey(sessionkey, offset, limit);
 	}
 
@@ -84,7 +84,7 @@ public class CommentController extends PaginationController {
 		return commentService.getAndMarkRead(questionId);
 	}
 
-	@ApiOperation(value = "Creates a new Comment for a Session and returns the Comment's data",
+	@ApiOperation(value = "Creates a new Comment for a Room and returns the Comment's data",
 			nickname = "postInterposedQuestion")
 	@ApiResponses(value = {
 		@ApiResponse(code = 400, message = HTML_STATUS_400)
@@ -92,7 +92,7 @@ public class CommentController extends PaginationController {
 	@RequestMapping(value = "/", method = RequestMethod.POST)
 	@ResponseStatus(HttpStatus.CREATED)
 	public void postInterposedQuestion(
-			@ApiParam(value = "Session-Key from current session", required = true) @RequestParam final String sessionkey,
+			@ApiParam(value = "Room-Key from current session", required = true) @RequestParam final String sessionkey,
 			@ApiParam(value = "the body from the new comment", required = true) @RequestBody final Comment comment
 			) {
 		if (commentService.save(comment)) {
diff --git a/src/main/java/de/thm/arsnova/controller/LoginController.java b/src/main/java/de/thm/arsnova/controller/LoginController.java
index bd37b95d8..6f59e2861 100644
--- a/src/main/java/de/thm/arsnova/controller/LoginController.java
+++ b/src/main/java/de/thm/arsnova/controller/LoginController.java
@@ -19,10 +19,10 @@ package de.thm.arsnova.controller;
 
 import de.thm.arsnova.entities.ServiceDescription;
 import de.thm.arsnova.entities.UserAuthentication;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 import de.thm.arsnova.exceptions.UnauthorizedException;
+import de.thm.arsnova.services.UserRoomService;
 import de.thm.arsnova.services.UserService;
-import de.thm.arsnova.services.UserSessionService;
 import org.pac4j.core.context.J2EContext;
 import org.pac4j.core.exception.HttpAction;
 import org.pac4j.oauth.client.FacebookClient;
@@ -145,7 +145,7 @@ public class LoginController extends AbstractController {
 	private UserService userService;
 
 	@Autowired
-	private UserSessionService userSessionService;
+	private UserRoomService userRoomService;
 
 	private static final Logger logger = LoggerFactory.getLogger(LoginController.class);
 
@@ -161,7 +161,7 @@ public class LoginController extends AbstractController {
 			@RequestParam("type") final String type,
 			@RequestParam(value = "user", required = false) String username,
 			@RequestParam(required = false) final String password,
-			@RequestParam(value = "role", required = false) final UserSessionService.Role role,
+			@RequestParam(value = "role", required = false) final UserRoomService.Role role,
 			final HttpServletRequest request,
 			final HttpServletResponse response
 	) throws IOException {
@@ -172,7 +172,7 @@ public class LoginController extends AbstractController {
 			return;
 		}
 
-		userSessionService.setRole(role);
+		userRoomService.setRole(role);
 
 		if (dbAuthEnabled && "arsnova".equals(type)) {
 			Authentication authRequest = new UsernamePasswordAuthenticationToken(username, password);
@@ -300,7 +300,7 @@ public class LoginController extends AbstractController {
 	@RequestMapping(value = { "/auth/", "/whoami" }, method = RequestMethod.GET)
 	@ResponseBody
 	public UserAuthentication whoami() {
-		userSessionService.setUser(userService.getCurrentUser());
+		userRoomService.setUser(userService.getCurrentUser());
 		return userService.getCurrentUser();
 	}
 
diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java
index 98b1f6c1a..8f9944797 100644
--- a/src/main/java/de/thm/arsnova/controller/SessionController.java
+++ b/src/main/java/de/thm/arsnova/controller/SessionController.java
@@ -18,18 +18,18 @@
 package de.thm.arsnova.controller;
 
 import de.thm.arsnova.connector.model.Course;
-import de.thm.arsnova.entities.migration.v2.Session;
-import de.thm.arsnova.entities.migration.v2.SessionFeature;
-import de.thm.arsnova.entities.migration.v2.SessionInfo;
+import de.thm.arsnova.entities.migration.v2.Room;
+import de.thm.arsnova.entities.migration.v2.RoomFeature;
+import de.thm.arsnova.entities.migration.v2.RoomInfo;
 import de.thm.arsnova.entities.transport.ImportExportSession;
 import de.thm.arsnova.entities.transport.ScoreStatistics;
 import de.thm.arsnova.exceptions.UnauthorizedException;
-import de.thm.arsnova.services.SessionService;
+import de.thm.arsnova.services.RoomService;
 import de.thm.arsnova.services.UserService;
-import de.thm.arsnova.services.SessionServiceImpl.SessionInfoNameComparator;
-import de.thm.arsnova.services.SessionServiceImpl.SessionInfoShortNameComparator;
-import de.thm.arsnova.services.SessionServiceImpl.SessionNameComparator;
-import de.thm.arsnova.services.SessionServiceImpl.SessionShortNameComparator;
+import de.thm.arsnova.services.RoomServiceImpl.SessionInfoNameComparator;
+import de.thm.arsnova.services.RoomServiceImpl.SessionInfoShortNameComparator;
+import de.thm.arsnova.services.RoomServiceImpl.SessionNameComparator;
+import de.thm.arsnova.services.RoomServiceImpl.SessionShortNameComparator;
 import de.thm.arsnova.web.DeprecatedApi;
 import de.thm.arsnova.web.Pagination;
 import io.swagger.annotations.Api;
@@ -58,10 +58,10 @@ import java.util.List;
  */
 @RestController
 @RequestMapping("/session")
-@Api(value = "/session", description = "the Session Controller API")
+@Api(value = "/session", description = "the Room Controller API")
 public class SessionController extends PaginationController {
 	@Autowired
-	private SessionService sessionService;
+	private RoomService roomService;
 
 	@Autowired
 	private UserService userService;
@@ -71,23 +71,23 @@ public class SessionController extends PaginationController {
 	@DeprecatedApi
 	@Deprecated
 	@RequestMapping(value = "/{sessionkey}", method = RequestMethod.GET)
-	public Session joinSession(
-			@ApiParam(value = "Session-Key from current session", required = true) @PathVariable final String sessionkey,
+	public Room joinSession(
+			@ApiParam(value = "Room-Key from current session", required = true) @PathVariable final String sessionkey,
 			@ApiParam(value = "Adminflag", required = false) @RequestParam(value = "admin", defaultValue = "false")	final boolean admin
 			) {
 		if (admin) {
-			return sessionService.getForAdmin(sessionkey);
+			return roomService.getForAdmin(sessionkey);
 		} else {
-			return sessionService.getByKey(sessionkey);
+			return roomService.getByKey(sessionkey);
 		}
 	}
 
 	@ApiOperation(value = "deletes a session",
 			nickname = "deleteSession")
 	@RequestMapping(value = "/{sessionkey}", method = RequestMethod.DELETE)
-	public void deleteSession(@ApiParam(value = "Session-Key from current session", required = true) @PathVariable final String sessionkey) {
-		Session session = sessionService.getByKey(sessionkey);
-		sessionService.deleteCascading(session);
+	public void deleteSession(@ApiParam(value = "Room-Key from current session", required = true) @PathVariable final String sessionkey) {
+		Room room = roomService.getByKey(sessionkey);
+		roomService.deleteCascading(room);
 	}
 
 	@ApiOperation(value = "count active users",
@@ -95,11 +95,11 @@ public class SessionController extends PaginationController {
 	@DeprecatedApi
 	@Deprecated
 	@RequestMapping(value = "/{sessionkey}/activeusercount", method = RequestMethod.GET)
-	public int countActiveUsers(@ApiParam(value = "Session-Key from current session", required = true) @PathVariable final String sessionkey) {
-		return sessionService.activeUsers(sessionkey);
+	public int countActiveUsers(@ApiParam(value = "Room-Key from current session", required = true) @PathVariable final String sessionkey) {
+		return roomService.activeUsers(sessionkey);
 	}
 
-	@ApiOperation(value = "Creates a new Session and returns the Session's data",
+	@ApiOperation(value = "Creates a new Room and returns the Room's data",
 			nickname = "postNewSession")
 	@ApiResponses(value = {
 		@ApiResponse(code = 201, message = HTML_STATUS_201),
@@ -107,21 +107,21 @@ public class SessionController extends PaginationController {
 	})
 	@RequestMapping(value = "/", method = RequestMethod.POST)
 	@ResponseStatus(HttpStatus.CREATED)
-	public Session postNewSession(@ApiParam(value = "current session", required = true) @RequestBody final Session session, final HttpServletResponse response) {
-		if (session != null && session.isCourseSession()) {
+	public Room postNewSession(@ApiParam(value = "current session", required = true) @RequestBody final Room room, final HttpServletResponse response) {
+		if (room != null && room.isCourseSession()) {
 			final List<Course> courses = new ArrayList<>();
 			final Course course = new Course();
-			course.setId(session.getCourseId());
+			course.setId(room.getCourseId());
 			courses.add(course);
-			final int sessionCount = sessionService.countSessionsByCourses(courses);
+			final int sessionCount = roomService.countSessionsByCourses(courses);
 			if (sessionCount > 0) {
 				final String appendix = " (" + (sessionCount + 1) + ")";
-				session.setName(session.getName() + appendix);
-				session.setShortName(session.getShortName() + appendix);
+				room.setName(room.getName() + appendix);
+				room.setShortName(room.getShortName() + appendix);
 			}
 		}
 
-		final Session newSession = sessionService.save(session);
+		final Room newSession = roomService.save(room);
 
 		if (newSession == null) {
 			response.setStatus(HttpStatus.SERVICE_UNAVAILABLE.value());
@@ -134,20 +134,20 @@ public class SessionController extends PaginationController {
 	@ApiOperation(value = "updates a session",
 			nickname = "postNewSession")
 	@RequestMapping(value = "/{sessionkey}", method = RequestMethod.PUT)
-	public Session updateSession(
+	public Room updateSession(
 			@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
-			@ApiParam(value = "current session", required = true) @RequestBody final Session session
+			@ApiParam(value = "current session", required = true) @RequestBody final Room room
 			) {
-		return sessionService.update(sessionkey, session);
+		return roomService.update(sessionkey, room);
 	}
 
 	@ApiOperation(value = "change the session creator (owner)", nickname = "changeSessionCreator")
 	@RequestMapping(value = "/{sessionkey}/changecreator", method = RequestMethod.PUT)
-	public Session changeSessionCreator(
+	public Room changeSessionCreator(
 			@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
 			@ApiParam(value = "new session creator", required = true) @RequestBody final String newCreator
 			) {
-		return sessionService.updateCreator(sessionkey, newCreator);
+		return roomService.updateCreator(sessionkey, newCreator);
 	}
 
 	@ApiOperation(value = "Retrieves a list of Sessions",
@@ -158,7 +158,7 @@ public class SessionController extends PaginationController {
 	})
 	@RequestMapping(value = "/", method = RequestMethod.GET)
 	@Pagination
-	public List<Session> getSessions(
+	public List<Room> getSessions(
 			@ApiParam(value = "ownedOnly", required = true) @RequestParam(value = "ownedonly", defaultValue = "false") final boolean ownedOnly,
 			@ApiParam(value = "visitedOnly", required = true) @RequestParam(value = "visitedonly", defaultValue = "false") final boolean visitedOnly,
 			@ApiParam(value = "sortby", required = true) @RequestParam(value = "sortby", defaultValue = "name") final String sortby,
@@ -166,14 +166,14 @@ public class SessionController extends PaginationController {
 					"username", defaultValue = "") final String username,
 			final HttpServletResponse response
 			) {
-		List<Session> sessions;
+		List<Room> sessions;
 
 		if (!"".equals(username)) {
 			try {
 				if (ownedOnly && !visitedOnly) {
-					sessions = sessionService.getUserSessions(username);
+					sessions = roomService.getUserSessions(username);
 				} else if (visitedOnly && !ownedOnly) {
-					sessions = sessionService.getUserVisitedSessions(username);
+					sessions = roomService.getUserVisitedSessions(username);
 				} else {
 					response.setStatus(HttpStatus.NOT_IMPLEMENTED.value());
 					return null;
@@ -185,9 +185,9 @@ public class SessionController extends PaginationController {
 			/* TODO implement all parameter combinations, implement use of user parameter */
 			try {
 				if (ownedOnly && !visitedOnly) {
-					sessions = sessionService.getMySessions(offset, limit);
+					sessions = roomService.getMySessions(offset, limit);
 				} else if (visitedOnly && !ownedOnly) {
-					sessions = sessionService.getMyVisitedSessions(offset, limit);
+					sessions = roomService.getMyVisitedSessions(offset, limit);
 				} else {
 					response.setStatus(HttpStatus.NOT_IMPLEMENTED.value());
 					return null;
@@ -214,23 +214,23 @@ public class SessionController extends PaginationController {
 	/**
 	 * Returns a list of my own sessions with only the necessary information like name, keyword, or counters.
 	 */
-	@ApiOperation(value = "Retrieves a Session",
+	@ApiOperation(value = "Retrieves a Room",
 			nickname = "getMySessions")
 	@ApiResponses(value = {
 		@ApiResponse(code = 204, message = HTML_STATUS_204)
 	})
 	@RequestMapping(value = "/", method = RequestMethod.GET, params = "statusonly=true")
 	@Pagination
-	public List<SessionInfo> getMySessions(
+	public List<RoomInfo> getMySessions(
 			@ApiParam(value = "visitedOnly", required = true) @RequestParam(value = "visitedonly", defaultValue = "false") final boolean visitedOnly,
 			@ApiParam(value = "sort by", required = false) @RequestParam(value = "sortby", defaultValue = "name") final String sortby,
 			final HttpServletResponse response
 			) {
-		List<SessionInfo> sessions;
+		List<RoomInfo> sessions;
 		if (!visitedOnly) {
-			sessions = sessionService.getMySessionsInfo(offset, limit);
+			sessions = roomService.getMySessionsInfo(offset, limit);
 		} else {
-			sessions = sessionService.getMyVisitedSessionsInfo(offset, limit);
+			sessions = roomService.getMyVisitedSessionsInfo(offset, limit);
 		}
 
 		if (sessions == null || sessions.isEmpty()) {
@@ -252,10 +252,10 @@ public class SessionController extends PaginationController {
 		@ApiResponse(code = 204, message = HTML_STATUS_204)
 	})
 	@RequestMapping(value = "/publicpool", method = RequestMethod.GET, params = "statusonly=true")
-	public List<SessionInfo> getMyPublicPoolSessions(
+	public List<RoomInfo> getMyPublicPoolSessions(
 			final HttpServletResponse response
 			) {
-		List<SessionInfo> sessions = sessionService.getMyPublicPoolSessionsInfo();
+		List<RoomInfo> sessions = roomService.getMyPublicPoolSessionsInfo();
 
 		if (sessions == null || sessions.isEmpty()) {
 			response.setStatus(HttpServletResponse.SC_NO_CONTENT);
@@ -271,10 +271,10 @@ public class SessionController extends PaginationController {
 		@ApiResponse(code = 204, message = HTML_STATUS_204)
 	})
 	@RequestMapping(value = "/publicpool", method = RequestMethod.GET)
-	public List<SessionInfo> getPublicPoolSessions(
+	public List<RoomInfo> getPublicPoolSessions(
 			final HttpServletResponse response
 			) {
-		List<SessionInfo> sessions = sessionService.getPublicPoolSessionsInfo();
+		List<RoomInfo> sessions = roomService.getPublicPoolSessionsInfo();
 
 		if (sessions == null || sessions.isEmpty()) {
 			response.setStatus(HttpServletResponse.SC_NO_CONTENT);
@@ -287,11 +287,11 @@ public class SessionController extends PaginationController {
 	@ApiOperation(value = "imports a session",
 			nickname = "importSession")
 	@RequestMapping(value = "/import", method = RequestMethod.POST)
-	public SessionInfo importSession(
+	public RoomInfo importSession(
 			@ApiParam(value = "current session", required = true) @RequestBody final ImportExportSession session,
 			final HttpServletResponse response
 			) {
-		return sessionService.importSession(session);
+		return roomService.importSession(session);
 	}
 
 	@ApiOperation(value = "export sessions", nickname = "exportSession")
@@ -305,42 +305,42 @@ public class SessionController extends PaginationController {
 		List<ImportExportSession> sessions = new ArrayList<>();
 		ImportExportSession temp;
 		for (String key : sessionkey) {
-			sessionService.setActive(key, false);
-			temp = sessionService.exportSession(key, withAnswerStatistics, withFeedbackQuestions);
+			roomService.setActive(key, false);
+			temp = roomService.exportSession(key, withAnswerStatistics, withFeedbackQuestions);
 			if (temp != null) {
 				sessions.add(temp);
 			}
-			sessionService.setActive(key, true);
+			roomService.setActive(key, true);
 		}
 		return sessions;
 	}
 
 	@ApiOperation(value = "copy a session to the public pool if enabled")
 	@RequestMapping(value = "/{sessionkey}/copytopublicpool", method = RequestMethod.POST)
-	public SessionInfo copyToPublicPool(
+	public RoomInfo copyToPublicPool(
 			@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
 			@ApiParam(value = "public pool attributes for session", required = true) @RequestBody final de.thm.arsnova.entities.transport.ImportExportSession.PublicPool publicPool
 			) {
-		sessionService.setActive(sessionkey, false);
-		SessionInfo sessionInfo = sessionService.copySessionToPublicPool(sessionkey, publicPool);
-		sessionService.setActive(sessionkey, true);
+		roomService.setActive(sessionkey, false);
+		RoomInfo sessionInfo = roomService.copySessionToPublicPool(sessionkey, publicPool);
+		roomService.setActive(sessionkey, true);
 		return sessionInfo;
 	}
 
 
-	@ApiOperation(value = "Locks or unlocks a Session",
+	@ApiOperation(value = "Locks or unlocks a Room",
 			nickname = "lockSession")
 	@ApiResponses(value = {
 		@ApiResponse(code = 404, message = HTML_STATUS_404)
 	})
 	@RequestMapping(value = "/{sessionkey}/lock", method = RequestMethod.POST)
-	public Session lockSession(
+	public Room lockSession(
 			@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
 			@ApiParam(value = "lock", required = true) @RequestParam(required = false) final Boolean lock,
 			final HttpServletResponse response
 			) {
 		if (lock != null) {
-			return sessionService.setActive(sessionkey, lock);
+			return roomService.setActive(sessionkey, lock);
 		}
 		response.setStatus(HttpStatus.NOT_FOUND.value());
 		return null;
@@ -355,7 +355,7 @@ public class SessionController extends PaginationController {
 			@ApiParam(value = "question variant", required = false) @RequestParam(value = "questionVariant", required = false) final String questionVariant,
 			final HttpServletResponse response
 			) {
-		return sessionService.getLearningProgress(sessionkey, type, questionVariant);
+		return roomService.getLearningProgress(sessionkey, type, questionVariant);
 	}
 
 	@ApiOperation(value = "retrieves a value for the learning progress for the current user",
@@ -367,28 +367,28 @@ public class SessionController extends PaginationController {
 			@RequestParam(value = "questionVariant", required = false) final String questionVariant,
 			final HttpServletResponse response
 			) {
-		return sessionService.getMyLearningProgress(sessionkey, type, questionVariant);
+		return roomService.getMyLearningProgress(sessionkey, type, questionVariant);
 	}
 
 	@ApiOperation(value = "retrieves all session features",
 			nickname = "getSessionFeatures")
 	@RequestMapping(value = "/{sessionkey}/features", method = RequestMethod.GET)
-	public SessionFeature getSessionFeatures(
+	public RoomFeature getSessionFeatures(
 			@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
 			final HttpServletResponse response
 			) {
-		return sessionService.getFeatures(sessionkey);
+		return roomService.getFeatures(sessionkey);
 	}
 
 	@RequestMapping(value = "/{sessionkey}/features", method = RequestMethod.PUT)
 	@ApiOperation(value = "change all session features",
 			nickname = "changeSessionFeatures")
-	public SessionFeature changeSessionFeatures(
+	public RoomFeature changeSessionFeatures(
 			@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
-			@ApiParam(value = "session feature", required = true) @RequestBody final SessionFeature features,
+			@ApiParam(value = "session feature", required = true) @RequestBody final RoomFeature features,
 			final HttpServletResponse response
 			) {
-		return sessionService.updateFeatures(sessionkey, features);
+		return roomService.updateFeatures(sessionkey, features);
 	}
 
 	@RequestMapping(value = "/{sessionkey}/lockfeedbackinput", method = RequestMethod.POST)
@@ -399,7 +399,7 @@ public class SessionController extends PaginationController {
 			@ApiParam(value = "lock", required = true) @RequestParam(required = true) final Boolean lock,
 			final HttpServletResponse response
 			) {
-		return sessionService.lockFeedbackInput(sessionkey, lock);
+		return roomService.lockFeedbackInput(sessionkey, lock);
 	}
 
 	@RequestMapping(value = "/{sessionkey}/flipflashcards", method = RequestMethod.POST)
@@ -410,7 +410,7 @@ public class SessionController extends PaginationController {
 			@ApiParam(value = "flip", required = true) @RequestParam(required = true) final Boolean flip,
 			final HttpServletResponse response
 			) {
-		return sessionService.flipFlashcards(sessionkey, flip);
+		return roomService.flipFlashcards(sessionkey, flip);
 	}
 
 	/* internal redirections */
diff --git a/src/main/java/de/thm/arsnova/controller/SocketController.java b/src/main/java/de/thm/arsnova/controller/SocketController.java
index ac4ae2ecf..82e0f6657 100644
--- a/src/main/java/de/thm/arsnova/controller/SocketController.java
+++ b/src/main/java/de/thm/arsnova/controller/SocketController.java
@@ -19,7 +19,7 @@ package de.thm.arsnova.controller;
 
 import de.thm.arsnova.entities.UserAuthentication;
 import de.thm.arsnova.services.UserService;
-import de.thm.arsnova.services.UserSessionService;
+import de.thm.arsnova.services.UserRoomService;
 import de.thm.arsnova.websocket.ArsnovaSocketioServer;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -52,7 +52,7 @@ public class SocketController extends AbstractController {
 	private UserService userService;
 
 	@Autowired
-	private UserSessionService userSessionService;
+	private UserRoomService userRoomService;
 
 	@Autowired
 	private ArsnovaSocketioServer server;
@@ -81,7 +81,7 @@ public class SocketController extends AbstractController {
 			return;
 		}
 		userService.putUser2SocketId(UUID.fromString(socketid), u);
-		userSessionService.setSocketId(UUID.fromString(socketid));
+		userRoomService.setSocketId(UUID.fromString(socketid));
 		response.setStatus(HttpStatus.NO_CONTENT.value());
 	}
 
diff --git a/src/main/java/de/thm/arsnova/controller/UserController.java b/src/main/java/de/thm/arsnova/controller/UserController.java
index bef91bfcd..3d9fd16cc 100644
--- a/src/main/java/de/thm/arsnova/controller/UserController.java
+++ b/src/main/java/de/thm/arsnova/controller/UserController.java
@@ -19,7 +19,7 @@ package de.thm.arsnova.controller;
 
 import de.thm.arsnova.entities.migration.v2.DbUser;
 import de.thm.arsnova.services.UserService;
-import de.thm.arsnova.services.UserSessionService;
+import de.thm.arsnova.services.UserRoomService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
 import org.springframework.stereotype.Controller;
@@ -44,7 +44,7 @@ public class UserController extends AbstractController {
 	private UserService userService;
 
 	@Autowired
-	private UserSessionService userSessionService;
+	private UserRoomService userRoomService;
 
 	@RequestMapping(value = "/register", method = RequestMethod.POST)
 	public void register(@RequestParam final String username,
diff --git a/src/main/java/de/thm/arsnova/entities/Content.java b/src/main/java/de/thm/arsnova/entities/Content.java
index ccd5d839c..9996784d4 100644
--- a/src/main/java/de/thm/arsnova/entities/Content.java
+++ b/src/main/java/de/thm/arsnova/entities/Content.java
@@ -6,7 +6,7 @@ import de.thm.arsnova.entities.serialization.View;
 public class Content implements Entity {
 	private String id;
 	private String rev;
-	private String sessionId;
+	private String roomId;
 	private String subject;
 	private String body;
 	private String format;
@@ -37,13 +37,13 @@ public class Content implements Entity {
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public String getSessionId() {
-		return sessionId;
+	public String getRoomId() {
+		return roomId;
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public void setSessionId(final String sessionId) {
-		this.sessionId = sessionId;
+	public void setRoomId(final String roomId) {
+		this.roomId = roomId;
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
diff --git a/src/main/java/de/thm/arsnova/entities/Session.java b/src/main/java/de/thm/arsnova/entities/Room.java
similarity index 91%
rename from src/main/java/de/thm/arsnova/entities/Session.java
rename to src/main/java/de/thm/arsnova/entities/Room.java
index 409295505..b782afb6b 100644
--- a/src/main/java/de/thm/arsnova/entities/Session.java
+++ b/src/main/java/de/thm/arsnova/entities/Room.java
@@ -3,7 +3,7 @@ package de.thm.arsnova.entities;
 import com.fasterxml.jackson.annotation.JsonView;
 import de.thm.arsnova.entities.serialization.View;
 
-public class Session implements Entity {
+public class Room implements Entity {
 	private String id;
 	private String rev;
 	private String shortId;
@@ -11,7 +11,7 @@ public class Session implements Entity {
 	private String name;
 	private String abbreviation;
 	private boolean closed;
-	private SessionStatistics statistics;
+	private RoomStatistics statistics;
 
 	@Override
 	@JsonView({View.Persistence.class, View.Public.class})
@@ -88,11 +88,11 @@ public class Session implements Entity {
 	}
 
 	@JsonView(View.Public.class)
-	public SessionStatistics getStatistics() {
+	public RoomStatistics getStatistics() {
 		return statistics;
 	}
 
-	public void setStatistics(final SessionStatistics statistics) {
+	public void setStatistics(final RoomStatistics statistics) {
 		this.statistics = statistics;
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/entities/SessionStatistics.java b/src/main/java/de/thm/arsnova/entities/RoomStatistics.java
similarity index 95%
rename from src/main/java/de/thm/arsnova/entities/SessionStatistics.java
rename to src/main/java/de/thm/arsnova/entities/RoomStatistics.java
index 890be0bea..fdba8fb2b 100644
--- a/src/main/java/de/thm/arsnova/entities/SessionStatistics.java
+++ b/src/main/java/de/thm/arsnova/entities/RoomStatistics.java
@@ -3,14 +3,14 @@ package de.thm.arsnova.entities;
 import com.fasterxml.jackson.annotation.JsonView;
 import de.thm.arsnova.entities.serialization.View;
 
-public class SessionStatistics {
+public class RoomStatistics {
 	private int contentCount = 0;
 	private int answerCount = 0;
 	private int unreadAnswerCount = 0;
 	private int commentCount = 0;
 	private int unreadCommentCount = 0;
 
-	public SessionStatistics() {
+	public RoomStatistics() {
 
 	}
 
diff --git a/src/main/java/de/thm/arsnova/entities/UserAuthentication.java b/src/main/java/de/thm/arsnova/entities/UserAuthentication.java
index 2c711df26..f9ad955b2 100644
--- a/src/main/java/de/thm/arsnova/entities/UserAuthentication.java
+++ b/src/main/java/de/thm/arsnova/entities/UserAuthentication.java
@@ -19,7 +19,7 @@ package de.thm.arsnova.entities;
 
 import com.fasterxml.jackson.annotation.JsonView;
 import de.thm.arsnova.entities.serialization.View;
-import de.thm.arsnova.services.UserSessionService;
+import de.thm.arsnova.services.UserRoomService;
 import org.jasig.cas.client.authentication.AttributePrincipal;
 import org.pac4j.oauth.profile.facebook.FacebookProfile;
 import org.pac4j.oauth.profile.google2.Google2Profile;
@@ -45,7 +45,7 @@ public class UserAuthentication implements Serializable {
 	private static final long serialVersionUID = 1L;
 	private String username;
 	private String type;
-	private UserSessionService.Role role;
+	private UserRoomService.Role role;
 	private boolean isAdmin;
 
 	public UserAuthentication(Google2Profile profile) {
@@ -96,15 +96,15 @@ public class UserAuthentication implements Serializable {
 		this.type = type;
 	}
 
-	public UserSessionService.Role getRole() {
+	public UserRoomService.Role getRole() {
 		return role;
 	}
 
-	public void setRole(UserSessionService.Role role) {
+	public void setRole(UserRoomService.Role role) {
 		this.role = role;
 	}
 
-	public boolean hasRole(UserSessionService.Role role) {
+	public boolean hasRole(UserRoomService.Role role) {
 		return this.role == role;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/entities/UserProfile.java b/src/main/java/de/thm/arsnova/entities/UserProfile.java
index 8a9ae4289..dd932fc38 100644
--- a/src/main/java/de/thm/arsnova/entities/UserProfile.java
+++ b/src/main/java/de/thm/arsnova/entities/UserProfile.java
@@ -56,25 +56,25 @@ public class UserProfile implements Entity {
 		}
 	}
 
-	public class SessionHistoryEntry {
-		private String sessionId;
+	public class RoomHistoryEntry {
+		private String roomId;
 		private long lastVisit;
 
-		public SessionHistoryEntry() {
+		public RoomHistoryEntry() {
 
 		}
 
-		public SessionHistoryEntry(String sessionId, long lastVisit) {
-			this.sessionId = sessionId;
+		public RoomHistoryEntry(String roomId, long lastVisit) {
+			this.roomId = roomId;
 			this.lastVisit = lastVisit;
 		}
 
-		public String getSessionId() {
-			return sessionId;
+		public String getRoomId() {
+			return roomId;
 		}
 
-		public void setSessionId(String sessionId) {
-			this.sessionId = sessionId;
+		public void setRoomId(String roomId) {
+			this.roomId = roomId;
 		}
 
 		public long getLastVisit() {
@@ -93,7 +93,7 @@ public class UserProfile implements Entity {
 	private long creation;
 	private long lastLogin;
 	private Account account;
-	private List<SessionHistoryEntry> sessionHistory = new ArrayList<>();
+	private List<RoomHistoryEntry> roomHistory = new ArrayList<>();
 	private Set<String> acknowledgedMotds = new HashSet<>();
 
 	@Override
@@ -171,13 +171,13 @@ public class UserProfile implements Entity {
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public List<SessionHistoryEntry> getSessionHistory() {
-		return sessionHistory;
+	public List<RoomHistoryEntry> getRoomHistory() {
+		return roomHistory;
 	}
 
 	@JsonView(View.Persistence.class)
-	public void setSessionHistory(List<SessionHistoryEntry> sessionHistory) {
-		this.sessionHistory = sessionHistory;
+	public void setRoomHistory(List<RoomHistoryEntry> roomHistory) {
+		this.roomHistory = roomHistory;
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
diff --git a/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java b/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java
index deb6e3981..caa7e6565 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java
@@ -29,7 +29,7 @@ import de.thm.arsnova.entities.migration.v2.Content;
 import de.thm.arsnova.entities.migration.v2.DbUser;
 import de.thm.arsnova.entities.migration.v2.LoggedIn;
 import de.thm.arsnova.entities.migration.v2.MotdList;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -70,10 +70,10 @@ public class FromV2Migrator {
 		if (loggedIn != null) {
 			profile.setLoginId(loggedIn.getUser());
 			profile.setLastLogin(loggedIn.getTimestamp());
-			List<UserProfile.SessionHistoryEntry> sessionHistory = loggedIn.getVisitedSessions().stream()
-					.map(entry -> profile.new SessionHistoryEntry(entry.getId(), 0))
+			List<UserProfile.RoomHistoryEntry> sessionHistory = loggedIn.getVisitedSessions().stream()
+					.map(entry -> profile.new RoomHistoryEntry(entry.getId(), 0))
 					.collect(Collectors.toList());
-			profile.setSessionHistory(sessionHistory);
+			profile.setRoomHistory(sessionHistory);
 		}
 		if (motdList != null && motdList.getMotdkeys() != null) {
 			profile.setAcknowledgedMotds(Arrays.stream(motdList.getMotdkeys().split(",")).collect(Collectors.toSet()));
@@ -82,11 +82,11 @@ public class FromV2Migrator {
 		return profile;
 	}
 
-	public de.thm.arsnova.entities.Session migrate(final Session from, final DbUser owner) {
+	public de.thm.arsnova.entities.Room migrate(final Room from, final DbUser owner) {
 		if (!owner.getUsername().equals(from.getCreator())) {
 			throw new IllegalArgumentException("Username of owner object does not match session creator.");
 		}
-		final de.thm.arsnova.entities.Session to = new de.thm.arsnova.entities.Session();
+		final de.thm.arsnova.entities.Room to = new de.thm.arsnova.entities.Room();
 		copyCommonProperties(from, to);
 		to.setShortId(from.getKeyword());
 		to.setOwnerId(owner.getId());
@@ -119,7 +119,7 @@ public class FromV2Migrator {
 				throw new IllegalArgumentException("Unsupported content format.");
 		}
 		copyCommonProperties(from, to);
-		to.setSessionId(from.getSessionId());
+		to.setRoomId(from.getSessionId());
 		to.setSubject(from.getSubject());
 		to.setBody(from.getText());
 		to.setFormat(from.getQuestionType());
diff --git a/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java b/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java
index 1b3c4097b..0175a5d71 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java
@@ -17,10 +17,8 @@
  */
 package de.thm.arsnova.entities.migration;
 
-import de.thm.arsnova.entities.ChoiceAnswer;
 import de.thm.arsnova.entities.ChoiceQuestionContent;
 import de.thm.arsnova.entities.Entity;
-import de.thm.arsnova.entities.TextAnswer;
 import de.thm.arsnova.entities.UserProfile;
 import de.thm.arsnova.entities.migration.v2.Answer;
 import de.thm.arsnova.entities.migration.v2.AnswerOption;
@@ -28,8 +26,8 @@ import de.thm.arsnova.entities.migration.v2.Comment;
 import de.thm.arsnova.entities.migration.v2.Content;
 import de.thm.arsnova.entities.migration.v2.LoggedIn;
 import de.thm.arsnova.entities.migration.v2.MotdList;
-import de.thm.arsnova.entities.migration.v2.Session;
-import de.thm.arsnova.entities.migration.v2.VisitedSession;
+import de.thm.arsnova.entities.migration.v2.Room;
+import de.thm.arsnova.entities.migration.v2.VisitedRoom;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -51,8 +49,8 @@ public class ToV2Migrator {
 		copyCommonProperties(from, to);
 		to.setUser(from.getLoginId());
 		to.setTimestamp(from.getLastLogin());
-		to.setVisitedSessions(from.getSessionHistory().stream()
-				.map(entry -> new VisitedSession())
+		to.setVisitedSessions(from.getRoomHistory().stream()
+				.map(entry -> new VisitedRoom())
 				.collect(Collectors.toList()));
 
 		return to;
@@ -67,8 +65,8 @@ public class ToV2Migrator {
 		return to;
 	}
 
-	public Session migrate(final de.thm.arsnova.entities.Session from, final UserProfile owner) {
-		final Session to = new Session();
+	public Room migrate(final de.thm.arsnova.entities.Room from, final UserProfile owner) {
+		final Room to = new Room();
 		copyCommonProperties(from, to);
 		to.setKeyword(from.getShortId());
 		to.setCreator(owner.getLoginId());
@@ -82,7 +80,7 @@ public class ToV2Migrator {
 	public Content migrate(final de.thm.arsnova.entities.Content from) {
 		final Content to = new Content();
 		copyCommonProperties(from, to);
-		to.setSessionId(from.getSessionId());
+		to.setSessionId(from.getRoomId());
 		to.setSubject(from.getSubject());
 		to.setText(from.getBody());
 		to.setQuestionType(from.getFormat());
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/LoggedIn.java b/src/main/java/de/thm/arsnova/entities/migration/v2/LoggedIn.java
index 711d9c236..2a346db7c 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/LoggedIn.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/LoggedIn.java
@@ -19,8 +19,6 @@ package de.thm.arsnova.entities.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonView;
 import de.thm.arsnova.entities.Entity;
-import de.thm.arsnova.entities.migration.v2.Session;
-import de.thm.arsnova.entities.migration.v2.VisitedSession;
 import de.thm.arsnova.entities.serialization.View;
 
 import java.util.ArrayList;
@@ -35,20 +33,20 @@ public class LoggedIn implements Entity {
 	private String user;
 	private String sessionId;
 	private long timestamp;
-	private List<VisitedSession> visitedSessions = new ArrayList<>();
+	private List<VisitedRoom> visitedSessions = new ArrayList<>();
 
 	public LoggedIn() {
 		this.updateTimestamp();
 	}
 
-	public void addVisitedSession(Session s) {
+	public void addVisitedSession(Room s) {
 		if (!isAlreadyVisited(s)) {
-			this.visitedSessions.add(new VisitedSession(s));
+			this.visitedSessions.add(new VisitedRoom(s));
 		}
 	}
 
-	private boolean isAlreadyVisited(Session s) {
-		for (VisitedSession vs : this.visitedSessions) {
+	private boolean isAlreadyVisited(Room s) {
+		for (VisitedRoom vs : this.visitedSessions) {
 			if (vs.getId().equals(s.getId())) {
 				return true;
 			}
@@ -111,12 +109,12 @@ public class LoggedIn implements Entity {
 	}
 
 	@JsonView(View.Persistence.class)
-	public List<VisitedSession> getVisitedSessions() {
+	public List<VisitedRoom> getVisitedSessions() {
 		return visitedSessions;
 	}
 
 	@JsonView(View.Persistence.class)
-	public void setVisitedSessions(List<VisitedSession> visitedSessions) {
+	public void setVisitedSessions(List<VisitedRoom> visitedSessions) {
 		this.visitedSessions = visitedSessions;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Session.java b/src/main/java/de/thm/arsnova/entities/migration/v2/Room.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/Session.java
rename to src/main/java/de/thm/arsnova/entities/migration/v2/Room.java
index fe0ef8858..205c409cd 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/Session.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/Room.java
@@ -30,7 +30,7 @@ import io.swagger.annotations.ApiModelProperty;
  * Represents an ARSnova session.
  */
 @ApiModel(value = "session", description = "the session entity")
-public class Session implements Entity {
+public class Room implements Entity {
 	private String id;
 	private String rev;
 	private String name;
@@ -43,7 +43,7 @@ public class Session implements Entity {
 	private String courseId;
 	private long creationTime;
 	private ScoreOptions learningProgressOptions = new ScoreOptions();
-	private SessionFeature features = new SessionFeature();
+	private RoomFeature features = new RoomFeature();
 
 	private String ppAuthorName;
 	private String ppAuthorMail;
@@ -199,12 +199,12 @@ public class Session implements Entity {
 
 	@ApiModelProperty(required = true, value = "the enabled features (e.g. feedback, interposed, learning Progress, lecture)")
 	@JsonView({View.Persistence.class, View.Public.class})
-	public SessionFeature getFeatures() {
+	public RoomFeature getFeatures() {
 		return features;
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public void setFeatures(SessionFeature features) {
+	public void setFeatures(RoomFeature features) {
 		this.features = features;
 	}
 
@@ -342,7 +342,7 @@ public class Session implements Entity {
 
 	@Override
 	public String toString() {
-		return "Session [keyword=" + keyword + ", type=" + getType() + ", creator=" + creator + "]";
+		return "Room [keyword=" + keyword + ", type=" + getType() + ", creator=" + creator + "]";
 	}
 
 	@Override
@@ -359,7 +359,7 @@ public class Session implements Entity {
 		if (obj == null || !obj.getClass().equals(this.getClass())) {
 			return false;
 		}
-		Session other = (Session) obj;
+		Room other = (Room) obj;
 		return this.keyword.equals(other.keyword);
 	}
 
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/SessionFeature.java b/src/main/java/de/thm/arsnova/entities/migration/v2/RoomFeature.java
similarity index 98%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/SessionFeature.java
rename to src/main/java/de/thm/arsnova/entities/migration/v2/RoomFeature.java
index 554965000..1bab21bef 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/SessionFeature.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/RoomFeature.java
@@ -28,7 +28,7 @@ import java.io.Serializable;
  * Contains fields that describe which specific feature is activated for a session.
  */
 @ApiModel(value = "session feature", description = "the session feature entity")
-public class SessionFeature implements Serializable {
+public class RoomFeature implements Serializable {
 
 	private boolean custom = true;
 	private boolean clicker = false;
@@ -49,7 +49,7 @@ public class SessionFeature implements Serializable {
 	private boolean flashcardFeature = true;
 	private boolean slides = false;
 
-	public SessionFeature(SessionFeature features) {
+	public RoomFeature(RoomFeature features) {
 		this();
 		if (features != null) {
 			this.custom = features.custom;
@@ -72,7 +72,7 @@ public class SessionFeature implements Serializable {
 		}
 	}
 
-	public SessionFeature() { }
+	public RoomFeature() { }
 
 	@JsonView({View.Persistence.class, View.Public.class})
 	public boolean isLecture() {
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/SessionInfo.java b/src/main/java/de/thm/arsnova/entities/migration/v2/RoomInfo.java
similarity index 89%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/SessionInfo.java
rename to src/main/java/de/thm/arsnova/entities/migration/v2/RoomInfo.java
index d280d0455..741001f86 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/SessionInfo.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/RoomInfo.java
@@ -30,7 +30,7 @@ import java.util.List;
  * as 'my visited sessions'.
  */
 @ApiModel(value = "session/import", description = "the session info entity")
-public class SessionInfo {
+public class RoomInfo {
 
 	private String name;
 	private String shortName;
@@ -48,24 +48,24 @@ public class SessionInfo {
 	private int numUnreadComments;
 	private int numUnanswered;
 
-	public SessionInfo(Session session) {
-		this.name = session.getName();
-		this.shortName = session.getShortName();
-		this.keyword = session.getKeyword();
-		this.active = session.isActive();
-		this.courseType = session.getCourseType();
-		this.creationTime = session.getCreationTime();
-		this.sessionType = session.getSessionType();
-		this.ppLevel = session.getPpLevel();
-		this.ppSubject = session.getPpSubject();
+	public RoomInfo(Room room) {
+		this.name = room.getName();
+		this.shortName = room.getShortName();
+		this.keyword = room.getKeyword();
+		this.active = room.isActive();
+		this.courseType = room.getCourseType();
+		this.creationTime = room.getCreationTime();
+		this.sessionType = room.getSessionType();
+		this.ppLevel = room.getPpLevel();
+		this.ppSubject = room.getPpSubject();
 	}
 
-	public SessionInfo() { }
+	public RoomInfo() { }
 
-	public static List<SessionInfo> fromSessionList(List<Session> sessions) {
-		List<SessionInfo> infos = new ArrayList<>();
-		for (Session s : sessions) {
-			infos.add(new SessionInfo(s));
+	public static List<RoomInfo> fromSessionList(List<Room> sessions) {
+		List<RoomInfo> infos = new ArrayList<>();
+		for (Room s : sessions) {
+			infos.add(new RoomInfo(s));
 		}
 		return infos;
 	}
@@ -235,7 +235,7 @@ public class SessionInfo {
 		if (getClass() != obj.getClass()) {
 			return false;
 		}
-		SessionInfo other = (SessionInfo) obj;
+		RoomInfo other = (RoomInfo) obj;
 		if (keyword == null) {
 			if (other.keyword != null) {
 				return false;
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/VisitedSession.java b/src/main/java/de/thm/arsnova/entities/migration/v2/VisitedRoom.java
similarity index 89%
rename from src/main/java/de/thm/arsnova/entities/migration/v2/VisitedSession.java
rename to src/main/java/de/thm/arsnova/entities/migration/v2/VisitedRoom.java
index aa88ca64f..e4ef7c3cb 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/VisitedSession.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/VisitedRoom.java
@@ -18,21 +18,20 @@
 package de.thm.arsnova.entities.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonView;
-import de.thm.arsnova.entities.migration.v2.Session;
 import de.thm.arsnova.entities.serialization.View;
 
 /**
  * A session a user has visited previously.
  */
-public class VisitedSession {
+public class VisitedRoom {
 	private String id;
 	private String name;
 	private String keyword;
 
-	public VisitedSession() {
+	public VisitedRoom() {
 	}
 
-	public VisitedSession(Session s) {
+	public VisitedRoom(Room s) {
 		this.id = s.getId();
 		this.name = s.getName();
 		this.keyword = s.getKeyword();
@@ -70,7 +69,7 @@ public class VisitedSession {
 
 	@Override
 	public String toString() {
-		return "VisitedSession [id=" + id + ", name=" + name + ", keyword="
+		return "VisitedRoom [id=" + id + ", name=" + name + ", keyword="
 				+ keyword + "]";
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java b/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java
index 306e35656..e0d489539 100644
--- a/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java
+++ b/src/main/java/de/thm/arsnova/entities/serialization/CouchDbTypeFieldConverter.java
@@ -28,7 +28,7 @@ import de.thm.arsnova.entities.LogEntry;
 import de.thm.arsnova.entities.Motd;
 import de.thm.arsnova.entities.migration.v2.Content;
 import de.thm.arsnova.entities.migration.v2.MotdList;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -41,7 +41,7 @@ public class CouchDbTypeFieldConverter implements Converter<Class<? extends Enti
 		typeMapping.put(DbUser.class, "userdetails");
 		typeMapping.put(Motd.class, "motd");
 		typeMapping.put(MotdList.class, "motdlist");
-		typeMapping.put(Session.class, "session");
+		typeMapping.put(Room.class, "session");
 		typeMapping.put(Comment.class, "interposed_question");
 		typeMapping.put(Content.class, "skill_question");
 		typeMapping.put(Answer.class, "skill_question_answer");
diff --git a/src/main/java/de/thm/arsnova/entities/transport/AnswerQueueElement.java b/src/main/java/de/thm/arsnova/entities/transport/AnswerQueueElement.java
index 0fd326d63..17243c918 100644
--- a/src/main/java/de/thm/arsnova/entities/transport/AnswerQueueElement.java
+++ b/src/main/java/de/thm/arsnova/entities/transport/AnswerQueueElement.java
@@ -20,7 +20,7 @@ package de.thm.arsnova.entities.transport;
 import de.thm.arsnova.entities.UserAuthentication;
 import de.thm.arsnova.entities.migration.v2.Answer;
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * An answer that is about to get saved in the database. Answers are not saved immediately, they are instead stored
@@ -28,7 +28,7 @@ import de.thm.arsnova.entities.migration.v2.Session;
  */
 public class AnswerQueueElement {
 
-	private final Session session;
+	private final Room room;
 
 	private final Content content;
 
@@ -36,15 +36,15 @@ public class AnswerQueueElement {
 
 	private final UserAuthentication user;
 
-	public AnswerQueueElement(Session session, Content content, Answer answer, UserAuthentication user) {
-		this.session = session;
+	public AnswerQueueElement(Room room, Content content, Answer answer, UserAuthentication user) {
+		this.room = room;
 		this.content = content;
 		this.answer = answer;
 		this.user = user;
 	}
 
-	public Session getSession() {
-		return session;
+	public Room getRoom() {
+		return room;
 	}
 
 	public Content getQuestion() {
diff --git a/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java b/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
index 7ca248c6c..6bc382efc 100644
--- a/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
+++ b/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
@@ -22,9 +22,9 @@ import de.thm.arsnova.entities.migration.v2.Answer;
 import de.thm.arsnova.entities.migration.v2.Comment;
 import de.thm.arsnova.entities.migration.v2.Content;
 import de.thm.arsnova.entities.Motd;
-import de.thm.arsnova.entities.migration.v2.Session;
-import de.thm.arsnova.entities.migration.v2.SessionFeature;
-import de.thm.arsnova.entities.migration.v2.SessionInfo;
+import de.thm.arsnova.entities.migration.v2.Room;
+import de.thm.arsnova.entities.migration.v2.RoomFeature;
+import de.thm.arsnova.entities.migration.v2.RoomInfo;
 import de.thm.arsnova.entities.UserAuthentication;
 import de.thm.arsnova.entities.serialization.View;
 import io.swagger.annotations.ApiModel;
@@ -48,9 +48,9 @@ public class ImportExportSession {
 
 	private List<Motd> motds;
 
-	private SessionFeature sessionFeature = new SessionFeature();
+	private RoomFeature sessionFeature = new RoomFeature();
 
-	private SessionInfo sessionInfo;
+	private RoomInfo sessionInfo;
 
 	public ImportExportSession() {
 		questions = new ArrayList<>();
@@ -99,24 +99,24 @@ public class ImportExportSession {
 	}
 
 	@JsonView(View.Public.class)
-	public SessionFeature getSessionFeature() {
+	public RoomFeature getSessionFeature() {
 		return sessionFeature;
 	}
 
-	public void setSessionFeature(SessionFeature sF) {
+	public void setSessionFeature(RoomFeature sF) {
 		sessionFeature = sF;
 	}
 
 	@JsonView(View.Public.class)
-	public SessionInfo getSessionInfo() {
+	public RoomInfo getSessionInfo() {
 		return sessionInfo;
 	}
 
-	public void setSessionInfo(SessionInfo si) {
+	public void setSessionInfo(RoomInfo si) {
 		sessionInfo = si;
 	}
 
-	public void setSessionFromSessionObject(Session s) {
+	public void setSessionFromSessionObject(Room s) {
 		ImportExportSesssion iesession = new ImportExportSesssion();
 		iesession.setName(s.getName());
 		iesession.setShortName(s.getShortName());
@@ -134,8 +134,8 @@ public class ImportExportSession {
 		questions.add(ieq);
 	}
 
-	public Session generateSessionEntity(UserAuthentication user) {
-		final Session s = new Session();
+	public Room generateSessionEntity(UserAuthentication user) {
+		final Room s = new Room();
 		// import fields
 		s.setActive(session.isActive());
 		// overwrite name and shortname
@@ -249,7 +249,7 @@ public class ImportExportSession {
 
 		private PublicPool publicPool;
 
-		private SessionFeature sessionFeature;
+		private RoomFeature sessionFeature;
 
 		@ApiModelProperty(required = true, value = "used to display short name")
 		@JsonView(View.Public.class)
@@ -302,11 +302,11 @@ public class ImportExportSession {
 		}
 
 		@JsonView(View.Public.class)
-		public SessionFeature getSessionFeature() {
+		public RoomFeature getSessionFeature() {
 			return this.sessionFeature;
 		}
 
-		public void setSessionFeature(SessionFeature sF) {
+		public void setSessionFeature(RoomFeature sF) {
 			this.sessionFeature = sF;
 		}
 	}
@@ -335,7 +335,7 @@ public class ImportExportSession {
 
 		private String shortName;
 
-		public void setPpFromSession(Session s) {
+		public void setPpFromSession(Room s) {
 			ppAuthorName = s.getPpAuthorName();
 			ppAuthorMail = s.getPpAuthorMail();
 			ppUniversity = s.getPpUniversity();
diff --git a/src/main/java/de/thm/arsnova/events/ArsnovaEventVisitor.java b/src/main/java/de/thm/arsnova/events/ArsnovaEventVisitor.java
index 6f79e6413..1092994d9 100644
--- a/src/main/java/de/thm/arsnova/events/ArsnovaEventVisitor.java
+++ b/src/main/java/de/thm/arsnova/events/ArsnovaEventVisitor.java
@@ -52,9 +52,9 @@ public interface ArsnovaEventVisitor {
 
 	void visit(NewFeedbackEvent newFeedbackEvent);
 
-	void visit(DeleteFeedbackForSessionsEvent deleteFeedbackEvent);
+	void visit(DeleteFeedbackForRoomsEvent deleteFeedbackEvent);
 
-	void visit(StatusSessionEvent statusSessionEvent);
+	void visit(StatusRoomEvent statusSessionEvent);
 
 	void visit(ChangeScoreEvent changeLearningProgress);
 
@@ -66,9 +66,9 @@ public interface ArsnovaEventVisitor {
 
 	void visit(PiRoundResetEvent piRoundResetEvent);
 
-	void visit(NewSessionEvent newSessionEvent);
+	void visit(NewRoomEvent newSessionEvent);
 
-	void visit(DeleteSessionEvent deleteSessionEvent);
+	void visit(DeleteRoomEvent deleteSessionEvent);
 
 	void visit(LockVoteEvent lockVoteEvent);
 
diff --git a/src/main/java/de/thm/arsnova/events/ChangeScoreEvent.java b/src/main/java/de/thm/arsnova/events/ChangeScoreEvent.java
index 4a626fe55..df76ca4b7 100644
--- a/src/main/java/de/thm/arsnova/events/ChangeScoreEvent.java
+++ b/src/main/java/de/thm/arsnova/events/ChangeScoreEvent.java
@@ -17,17 +17,17 @@
  */
 package de.thm.arsnova.events;
 
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever a score related value changes.
  */
-public class ChangeScoreEvent extends SessionEvent {
+public class ChangeScoreEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
-	public ChangeScoreEvent(Object source, Session session) {
-		super(source, session);
+	public ChangeScoreEvent(Object source, Room room) {
+		super(source, room);
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/events/DeleteAllLectureAnswersEvent.java b/src/main/java/de/thm/arsnova/events/DeleteAllLectureAnswersEvent.java
index b7f4683fd..4865e7b7d 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteAllLectureAnswersEvent.java
+++ b/src/main/java/de/thm/arsnova/events/DeleteAllLectureAnswersEvent.java
@@ -17,17 +17,17 @@
  */
 package de.thm.arsnova.events;
 
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever all answers of all lecture questions of a session are deleted.
  */
-public class DeleteAllLectureAnswersEvent extends SessionEvent {
+public class DeleteAllLectureAnswersEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
-	public DeleteAllLectureAnswersEvent(Object source, Session session) {
-		super(source, session);
+	public DeleteAllLectureAnswersEvent(Object source, Room room) {
+		super(source, room);
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/events/DeleteAllPreparationAnswersEvent.java b/src/main/java/de/thm/arsnova/events/DeleteAllPreparationAnswersEvent.java
index a72e223a1..951e0cf1c 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteAllPreparationAnswersEvent.java
+++ b/src/main/java/de/thm/arsnova/events/DeleteAllPreparationAnswersEvent.java
@@ -17,17 +17,17 @@
  */
 package de.thm.arsnova.events;
 
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever all answers of all preparation questions of a session are deleted.
  */
-public class DeleteAllPreparationAnswersEvent extends SessionEvent {
+public class DeleteAllPreparationAnswersEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
-	public DeleteAllPreparationAnswersEvent(Object source, Session session) {
-		super(source, session);
+	public DeleteAllPreparationAnswersEvent(Object source, Room room) {
+		super(source, room);
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/events/DeleteAllQuestionsAnswersEvent.java b/src/main/java/de/thm/arsnova/events/DeleteAllQuestionsAnswersEvent.java
index fd4cf53c3..78161f0a0 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteAllQuestionsAnswersEvent.java
+++ b/src/main/java/de/thm/arsnova/events/DeleteAllQuestionsAnswersEvent.java
@@ -17,17 +17,17 @@
  */
 package de.thm.arsnova.events;
 
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever all answers of all questions of a session are deleted.
  */
-public class DeleteAllQuestionsAnswersEvent extends SessionEvent {
+public class DeleteAllQuestionsAnswersEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
-	public DeleteAllQuestionsAnswersEvent(Object source, Session session) {
-		super(source, session);
+	public DeleteAllQuestionsAnswersEvent(Object source, Room room) {
+		super(source, room);
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/events/DeleteAllQuestionsEvent.java b/src/main/java/de/thm/arsnova/events/DeleteAllQuestionsEvent.java
index 085896e14..82dc2a939 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteAllQuestionsEvent.java
+++ b/src/main/java/de/thm/arsnova/events/DeleteAllQuestionsEvent.java
@@ -17,18 +17,18 @@
  */
 package de.thm.arsnova.events;
 
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever all questions of a session are deleted. Note that this implies that all answers are deleted as well,
  * even though the specific answer events are not fired.
  */
-public class DeleteAllQuestionsEvent extends SessionEvent {
+public class DeleteAllQuestionsEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
-	public DeleteAllQuestionsEvent(Object source, Session session) {
-		super(source, session);
+	public DeleteAllQuestionsEvent(Object source, Room room) {
+		super(source, room);
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/events/DeleteAnswerEvent.java b/src/main/java/de/thm/arsnova/events/DeleteAnswerEvent.java
index db355a93d..99172851e 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteAnswerEvent.java
+++ b/src/main/java/de/thm/arsnova/events/DeleteAnswerEvent.java
@@ -18,19 +18,19 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever a single answer is deleted.
  */
-public class DeleteAnswerEvent extends SessionEvent {
+public class DeleteAnswerEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
 	private final Content content;
 
-	public DeleteAnswerEvent(Object source, Session session, Content content) {
-		super(source, session);
+	public DeleteAnswerEvent(Object source, Room room, Content content) {
+		super(source, room);
 		this.content = content;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/events/DeleteCommentEvent.java b/src/main/java/de/thm/arsnova/events/DeleteCommentEvent.java
index 44a5cb644..f0a2c378f 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteCommentEvent.java
+++ b/src/main/java/de/thm/arsnova/events/DeleteCommentEvent.java
@@ -18,19 +18,19 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Comment;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever an comment is deleted.
  */
-public class DeleteCommentEvent extends SessionEvent {
+public class DeleteCommentEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
 	private final Comment comment;
 
-	public DeleteCommentEvent(Object source, Session session, Comment comment) {
-		super(source, session);
+	public DeleteCommentEvent(Object source, Room room, Comment comment) {
+		super(source, room);
 		this.comment = comment;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/events/DeleteFeedbackForSessionsEvent.java b/src/main/java/de/thm/arsnova/events/DeleteFeedbackForRoomsEvent.java
similarity index 79%
rename from src/main/java/de/thm/arsnova/events/DeleteFeedbackForSessionsEvent.java
rename to src/main/java/de/thm/arsnova/events/DeleteFeedbackForRoomsEvent.java
index beb002ef6..5446bb178 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteFeedbackForSessionsEvent.java
+++ b/src/main/java/de/thm/arsnova/events/DeleteFeedbackForRoomsEvent.java
@@ -18,28 +18,28 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.UserAuthentication;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 import java.util.Set;
 
 /**
  * Fires whenever the feedback of a specific user has been reset.
  */
-public class DeleteFeedbackForSessionsEvent extends ArsnovaEvent {
+public class DeleteFeedbackForRoomsEvent extends ArsnovaEvent {
 
 	private static final long serialVersionUID = 1L;
 
-	private final Set<Session> sessions;
+	private final Set<Room> sessions;
 
 	private final UserAuthentication user;
 
-	public DeleteFeedbackForSessionsEvent(Object source, Set<Session> sessions, UserAuthentication user) {
+	public DeleteFeedbackForRoomsEvent(Object source, Set<Room> rooms, UserAuthentication user) {
 		super(source);
-		this.sessions = sessions;
+		this.sessions = rooms;
 		this.user = user;
 	}
 
-	public Set<Session> getSessions() {
+	public Set<Room> getSessions() {
 		return sessions;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/events/DeleteQuestionEvent.java b/src/main/java/de/thm/arsnova/events/DeleteQuestionEvent.java
index 2dffe285f..1e8175d22 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteQuestionEvent.java
+++ b/src/main/java/de/thm/arsnova/events/DeleteQuestionEvent.java
@@ -18,19 +18,19 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever a content is deleted.
  */
-public class DeleteQuestionEvent extends SessionEvent {
+public class DeleteQuestionEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
 	private final Content content;
 
-	public DeleteQuestionEvent(Object source, Session session, Content content) {
-		super(source, session);
+	public DeleteQuestionEvent(Object source, Room room, Content content) {
+		super(source, room);
 		this.content = content;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/events/DeleteSessionEvent.java b/src/main/java/de/thm/arsnova/events/DeleteRoomEvent.java
similarity index 85%
rename from src/main/java/de/thm/arsnova/events/DeleteSessionEvent.java
rename to src/main/java/de/thm/arsnova/events/DeleteRoomEvent.java
index d99e6a4be..460355701 100644
--- a/src/main/java/de/thm/arsnova/events/DeleteSessionEvent.java
+++ b/src/main/java/de/thm/arsnova/events/DeleteRoomEvent.java
@@ -17,18 +17,18 @@
  */
 package de.thm.arsnova.events;
 
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever a session is deleted. Note that this implies that all related data such as comments,
  * lecturer questions, and answers are deleted as well, even though those events are not fired.
  */
-public class DeleteSessionEvent extends SessionEvent {
+public class DeleteRoomEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
-	public DeleteSessionEvent(Object source, Session session) {
-		super(source, session);
+	public DeleteRoomEvent(Object source, Room room) {
+		super(source, room);
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/events/FeatureChangeEvent.java b/src/main/java/de/thm/arsnova/events/FeatureChangeEvent.java
index c117689c4..c24c1d3e4 100644
--- a/src/main/java/de/thm/arsnova/events/FeatureChangeEvent.java
+++ b/src/main/java/de/thm/arsnova/events/FeatureChangeEvent.java
@@ -17,17 +17,17 @@
  */
 package de.thm.arsnova.events;
 
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever a new session is created.
  */
-public class FeatureChangeEvent extends SessionEvent {
+public class FeatureChangeEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
-	public FeatureChangeEvent(Object source, Session session) {
-		super(source, session);
+	public FeatureChangeEvent(Object source, Room room) {
+		super(source, room);
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/events/FlipFlashcardsEvent.java b/src/main/java/de/thm/arsnova/events/FlipFlashcardsEvent.java
index 4681120f3..ada63c896 100644
--- a/src/main/java/de/thm/arsnova/events/FlipFlashcardsEvent.java
+++ b/src/main/java/de/thm/arsnova/events/FlipFlashcardsEvent.java
@@ -17,17 +17,17 @@
  */
 package de.thm.arsnova.events;
 
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever voting on a question is disabled.
  */
-public class FlipFlashcardsEvent extends SessionEvent {
+public class FlipFlashcardsEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
-	public FlipFlashcardsEvent(Object source, Session session) {
-		super(source, session);
+	public FlipFlashcardsEvent(Object source, Room room) {
+		super(source, room);
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/events/LockFeedbackEvent.java b/src/main/java/de/thm/arsnova/events/LockFeedbackEvent.java
index d196ceb85..80d106a26 100644
--- a/src/main/java/de/thm/arsnova/events/LockFeedbackEvent.java
+++ b/src/main/java/de/thm/arsnova/events/LockFeedbackEvent.java
@@ -17,17 +17,17 @@
  */
 package de.thm.arsnova.events;
 
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever voting on a question is disabled.
  */
-public class LockFeedbackEvent extends SessionEvent {
+public class LockFeedbackEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
-	public LockFeedbackEvent(Object source, Session session) {
-		super(source, session);
+	public LockFeedbackEvent(Object source, Room room) {
+		super(source, room);
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/events/LockQuestionEvent.java b/src/main/java/de/thm/arsnova/events/LockQuestionEvent.java
index 97dcfdd0a..72f51f8d3 100644
--- a/src/main/java/de/thm/arsnova/events/LockQuestionEvent.java
+++ b/src/main/java/de/thm/arsnova/events/LockQuestionEvent.java
@@ -18,19 +18,19 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever a content is disabled, i.e., it is hidden from students.
  */
-public class LockQuestionEvent extends SessionEvent {
+public class LockQuestionEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
 	private final Content content;
 
-	public LockQuestionEvent(Object source, Session session, Content content) {
-		super(source, session);
+	public LockQuestionEvent(Object source, Room room, Content content) {
+		super(source, room);
 		this.content = content;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/events/LockQuestionsEvent.java b/src/main/java/de/thm/arsnova/events/LockQuestionsEvent.java
index 58c001216..07d9cb4a2 100644
--- a/src/main/java/de/thm/arsnova/events/LockQuestionsEvent.java
+++ b/src/main/java/de/thm/arsnova/events/LockQuestionsEvent.java
@@ -18,21 +18,21 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 import java.util.List;
 
 /**
  * Fires whenever a set of contents are disabled, i.e., they are hidden from students.
  */
-public class LockQuestionsEvent extends SessionEvent {
+public class LockQuestionsEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
 	private List<Content> contents;
 
-	public LockQuestionsEvent(Object source, Session session, List<Content> contents) {
-		super(source, session);
+	public LockQuestionsEvent(Object source, Room room, List<Content> contents) {
+		super(source, room);
 		this.contents = contents;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/events/LockVoteEvent.java b/src/main/java/de/thm/arsnova/events/LockVoteEvent.java
index 303b647ea..c99c91545 100644
--- a/src/main/java/de/thm/arsnova/events/LockVoteEvent.java
+++ b/src/main/java/de/thm/arsnova/events/LockVoteEvent.java
@@ -18,7 +18,7 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -26,14 +26,14 @@ import java.util.Map;
 /**
  * Fires whenever voting on a content is disabled.
  */
-public class LockVoteEvent extends SessionEvent {
+public class LockVoteEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
 	private final Content content;
 
-	public LockVoteEvent(Object source, Session session, Content content) {
-		super(source, session);
+	public LockVoteEvent(Object source, Room room, Content content) {
+		super(source, room);
 		this.content = content;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/events/LockVotesEvent.java b/src/main/java/de/thm/arsnova/events/LockVotesEvent.java
index 7288fe96e..d90f6c366 100644
--- a/src/main/java/de/thm/arsnova/events/LockVotesEvent.java
+++ b/src/main/java/de/thm/arsnova/events/LockVotesEvent.java
@@ -18,21 +18,21 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 import java.util.List;
 
 /**
  * Fires whenever voting of multiple contents is disabled.
  */
-public class LockVotesEvent extends SessionEvent {
+public class LockVotesEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
 	private List<Content> contents;
 
-	public LockVotesEvent(Object source, Session session, List<Content> contents) {
-		super(source, session);
+	public LockVotesEvent(Object source, Room room, List<Content> contents) {
+		super(source, room);
 		this.contents = contents;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/events/NewAnswerEvent.java b/src/main/java/de/thm/arsnova/events/NewAnswerEvent.java
index 2f268e733..9b3139ad6 100644
--- a/src/main/java/de/thm/arsnova/events/NewAnswerEvent.java
+++ b/src/main/java/de/thm/arsnova/events/NewAnswerEvent.java
@@ -20,12 +20,12 @@ package de.thm.arsnova.events;
 import de.thm.arsnova.entities.UserAuthentication;
 import de.thm.arsnova.entities.migration.v2.Answer;
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever a new answer is added.
  */
-public class NewAnswerEvent extends SessionEvent {
+public class NewAnswerEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
@@ -35,8 +35,8 @@ public class NewAnswerEvent extends SessionEvent {
 
 	private final Content content;
 
-	public NewAnswerEvent(Object source, Session session, Answer answer, UserAuthentication user, Content content) {
-		super(source, session);
+	public NewAnswerEvent(Object source, Room room, Answer answer, UserAuthentication user, Content content) {
+		super(source, room);
 		this.answer = answer;
 		this.user = user;
 		this.content = content;
diff --git a/src/main/java/de/thm/arsnova/events/NewCommentEvent.java b/src/main/java/de/thm/arsnova/events/NewCommentEvent.java
index 345b54c3a..126e4f106 100644
--- a/src/main/java/de/thm/arsnova/events/NewCommentEvent.java
+++ b/src/main/java/de/thm/arsnova/events/NewCommentEvent.java
@@ -18,19 +18,19 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Comment;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever a new comment is added.
  */
-public class NewCommentEvent extends SessionEvent {
+public class NewCommentEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
 	private final Comment comment;
 
-	public NewCommentEvent(Object source, Session session, Comment comment) {
-		super(source, session);
+	public NewCommentEvent(Object source, Room room, Comment comment) {
+		super(source, room);
 		this.comment = comment;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/events/NewFeedbackEvent.java b/src/main/java/de/thm/arsnova/events/NewFeedbackEvent.java
index 9c807a788..fe8862534 100644
--- a/src/main/java/de/thm/arsnova/events/NewFeedbackEvent.java
+++ b/src/main/java/de/thm/arsnova/events/NewFeedbackEvent.java
@@ -17,17 +17,17 @@
  */
 package de.thm.arsnova.events;
 
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever the feedback changes.
  */
-public class NewFeedbackEvent extends SessionEvent {
+public class NewFeedbackEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
-	public NewFeedbackEvent(Object source, Session session) {
-		super(source, session);
+	public NewFeedbackEvent(Object source, Room room) {
+		super(source, room);
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/events/NewQuestionEvent.java b/src/main/java/de/thm/arsnova/events/NewQuestionEvent.java
index 7771ec181..a5b14842b 100644
--- a/src/main/java/de/thm/arsnova/events/NewQuestionEvent.java
+++ b/src/main/java/de/thm/arsnova/events/NewQuestionEvent.java
@@ -18,19 +18,19 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever a new content is added.
  */
-public class NewQuestionEvent extends SessionEvent {
+public class NewQuestionEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
 	private final Content content;
 
-	public NewQuestionEvent(Object source, Session session, Content content) {
-		super(source, session);
+	public NewQuestionEvent(Object source, Room room, Content content) {
+		super(source, room);
 		this.content = content;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/events/NewSessionEvent.java b/src/main/java/de/thm/arsnova/events/NewRoomEvent.java
similarity index 84%
rename from src/main/java/de/thm/arsnova/events/NewSessionEvent.java
rename to src/main/java/de/thm/arsnova/events/NewRoomEvent.java
index a61e9e0dd..601fefb4f 100644
--- a/src/main/java/de/thm/arsnova/events/NewSessionEvent.java
+++ b/src/main/java/de/thm/arsnova/events/NewRoomEvent.java
@@ -17,17 +17,17 @@
  */
 package de.thm.arsnova.events;
 
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever a new session is created.
  */
-public class NewSessionEvent extends SessionEvent {
+public class NewRoomEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
-	public NewSessionEvent(Object source, Session session) {
-		super(source, session);
+	public NewRoomEvent(Object source, Room room) {
+		super(source, room);
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/events/PiRoundCancelEvent.java b/src/main/java/de/thm/arsnova/events/PiRoundCancelEvent.java
index 83fb938ec..517b5ce33 100644
--- a/src/main/java/de/thm/arsnova/events/PiRoundCancelEvent.java
+++ b/src/main/java/de/thm/arsnova/events/PiRoundCancelEvent.java
@@ -18,7 +18,7 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever a peer instruction round is canceled.
@@ -27,8 +27,8 @@ public class PiRoundCancelEvent extends PiRoundEndEvent {
 
 	private static final long serialVersionUID = 1L;
 
-	public PiRoundCancelEvent(Object source, Session session, Content content) {
-		super(source, session, content);
+	public PiRoundCancelEvent(Object source, Room room, Content content) {
+		super(source, room, content);
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/events/PiRoundDelayedStartEvent.java b/src/main/java/de/thm/arsnova/events/PiRoundDelayedStartEvent.java
index fc53399d6..1e2430e54 100644
--- a/src/main/java/de/thm/arsnova/events/PiRoundDelayedStartEvent.java
+++ b/src/main/java/de/thm/arsnova/events/PiRoundDelayedStartEvent.java
@@ -18,7 +18,7 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -27,7 +27,7 @@ import java.util.Map;
  * Fires whenever a delayed peer instruction round is initiated. The delayed part denotes that this round might not
  * have been started yet.
  */
-public class PiRoundDelayedStartEvent extends SessionEvent {
+public class PiRoundDelayedStartEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 	private final String questionId;
@@ -36,8 +36,8 @@ public class PiRoundDelayedStartEvent extends SessionEvent {
 	private final String questionVariant;
 	private int piRound;
 
-	public PiRoundDelayedStartEvent(Object source, Session session, Content content) {
-		super(source, session);
+	public PiRoundDelayedStartEvent(Object source, Room room, Content content) {
+		super(source, room);
 		this.questionId = content.getId();
 		this.startTime = content.getPiRoundStartTime();
 		this.endTime = content.getPiRoundEndTime();
diff --git a/src/main/java/de/thm/arsnova/events/PiRoundEndEvent.java b/src/main/java/de/thm/arsnova/events/PiRoundEndEvent.java
index 366c92a71..471f3b73d 100644
--- a/src/main/java/de/thm/arsnova/events/PiRoundEndEvent.java
+++ b/src/main/java/de/thm/arsnova/events/PiRoundEndEvent.java
@@ -18,7 +18,7 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -26,15 +26,15 @@ import java.util.Map;
 /**
  * Fires whenever a peer instruction round has ended.
  */
-public class PiRoundEndEvent extends SessionEvent {
+public class PiRoundEndEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
 	private final String questionId;
 	private final String questionVariant;
 
-	public PiRoundEndEvent(Object source, Session session, Content content) {
-		super(source, session);
+	public PiRoundEndEvent(Object source, Room room, Content content) {
+		super(source, room);
 		questionId = content.getId();
 		questionVariant = content.getQuestionVariant();
 	}
diff --git a/src/main/java/de/thm/arsnova/events/PiRoundResetEvent.java b/src/main/java/de/thm/arsnova/events/PiRoundResetEvent.java
index 8a7cebfeb..293dd31b9 100644
--- a/src/main/java/de/thm/arsnova/events/PiRoundResetEvent.java
+++ b/src/main/java/de/thm/arsnova/events/PiRoundResetEvent.java
@@ -18,7 +18,7 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -26,15 +26,15 @@ import java.util.Map;
 /**
  * Fires whenever a peer instruction round is reset.
  */
-public class PiRoundResetEvent extends SessionEvent {
+public class PiRoundResetEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
 	private final String questionId;
 	private final String questionVariant;
 
-	public PiRoundResetEvent(Object source, Session session, Content content) {
-		super(source, session);
+	public PiRoundResetEvent(Object source, Room room, Content content) {
+		super(source, room);
 		questionId = content.getId();
 		questionVariant = content.getQuestionVariant();
 	}
diff --git a/src/main/java/de/thm/arsnova/events/SessionEvent.java b/src/main/java/de/thm/arsnova/events/RoomEvent.java
similarity index 76%
rename from src/main/java/de/thm/arsnova/events/SessionEvent.java
rename to src/main/java/de/thm/arsnova/events/RoomEvent.java
index ae85d3b10..a4fb5cdcb 100644
--- a/src/main/java/de/thm/arsnova/events/SessionEvent.java
+++ b/src/main/java/de/thm/arsnova/events/RoomEvent.java
@@ -17,23 +17,23 @@
  */
 package de.thm.arsnova.events;
 
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
- * Base class for all {@link ArsnovaEvent}s that are related to a session.
+ * Base class for all {@link ArsnovaEvent}s that are related to a room.
  */
-public abstract class SessionEvent extends ArsnovaEvent {
+public abstract class RoomEvent extends ArsnovaEvent {
 
 	private static final long serialVersionUID = 1L;
 
-	private final Session session;
+	private final Room room;
 
-	public SessionEvent(Object source, Session session) {
+	public RoomEvent(Object source, Room room) {
 		super(source);
-		this.session = session;
+		this.room = room;
 	}
 
-	public Session getSession() {
-		return session;
+	public Room getRoom() {
+		return room;
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/events/StatusSessionEvent.java b/src/main/java/de/thm/arsnova/events/StatusRoomEvent.java
similarity index 84%
rename from src/main/java/de/thm/arsnova/events/StatusSessionEvent.java
rename to src/main/java/de/thm/arsnova/events/StatusRoomEvent.java
index 17abf8c2d..6d4307db0 100644
--- a/src/main/java/de/thm/arsnova/events/StatusSessionEvent.java
+++ b/src/main/java/de/thm/arsnova/events/StatusRoomEvent.java
@@ -17,17 +17,17 @@
  */
 package de.thm.arsnova.events;
 
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever the status of a session changes, i.e., it is enabled or disabled.
  */
-public class StatusSessionEvent extends SessionEvent {
+public class StatusRoomEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
-	public StatusSessionEvent(Object source, Session session) {
-		super(source, session);
+	public StatusRoomEvent(Object source, Room room) {
+		super(source, room);
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/events/UnlockQuestionEvent.java b/src/main/java/de/thm/arsnova/events/UnlockQuestionEvent.java
index 7d545cd69..5a92add97 100644
--- a/src/main/java/de/thm/arsnova/events/UnlockQuestionEvent.java
+++ b/src/main/java/de/thm/arsnova/events/UnlockQuestionEvent.java
@@ -18,19 +18,19 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 /**
  * Fires whenever a content is enabled, i.e., it becomes visible to students.
  */
-public class UnlockQuestionEvent extends SessionEvent {
+public class UnlockQuestionEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
 	private final Content content;
 
-	public UnlockQuestionEvent(Object source, Session session, Content content) {
-		super(source, session);
+	public UnlockQuestionEvent(Object source, Room room, Content content) {
+		super(source, room);
 		this.content = content;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/events/UnlockQuestionsEvent.java b/src/main/java/de/thm/arsnova/events/UnlockQuestionsEvent.java
index f30a992df..76614913f 100644
--- a/src/main/java/de/thm/arsnova/events/UnlockQuestionsEvent.java
+++ b/src/main/java/de/thm/arsnova/events/UnlockQuestionsEvent.java
@@ -18,21 +18,21 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 import java.util.List;
 
 /**
  * Fires whenever a set of contents are enabled, i.e., they become visible to students.
  */
-public class UnlockQuestionsEvent extends SessionEvent {
+public class UnlockQuestionsEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
 	private List<Content> contents;
 
-	public UnlockQuestionsEvent(Object source, Session session, List<Content> contents) {
-		super(source, session);
+	public UnlockQuestionsEvent(Object source, Room room, List<Content> contents) {
+		super(source, room);
 		this.contents = contents;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/events/UnlockVoteEvent.java b/src/main/java/de/thm/arsnova/events/UnlockVoteEvent.java
index 1a2e875fd..f824b1901 100644
--- a/src/main/java/de/thm/arsnova/events/UnlockVoteEvent.java
+++ b/src/main/java/de/thm/arsnova/events/UnlockVoteEvent.java
@@ -18,7 +18,7 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -26,14 +26,14 @@ import java.util.Map;
 /**
  * Fires whenever voting on a content is enabled.
  */
-public class UnlockVoteEvent extends SessionEvent {
+public class UnlockVoteEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
 	private final Content content;
 
-	public UnlockVoteEvent(Object source, Session session, Content content) {
-		super(source, session);
+	public UnlockVoteEvent(Object source, Room room, Content content) {
+		super(source, room);
 		this.content = content;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/events/UnlockVotesEvent.java b/src/main/java/de/thm/arsnova/events/UnlockVotesEvent.java
index c7df28fa4..7f907cdb0 100644
--- a/src/main/java/de/thm/arsnova/events/UnlockVotesEvent.java
+++ b/src/main/java/de/thm/arsnova/events/UnlockVotesEvent.java
@@ -18,21 +18,21 @@
 package de.thm.arsnova.events;
 
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 import java.util.List;
 
 /**
  * Fires whenever voting of multiple contents is enabled.
  */
-public class UnlockVotesEvent extends SessionEvent {
+public class UnlockVotesEvent extends RoomEvent {
 
 	private static final long serialVersionUID = 1L;
 
 	private List<Content> contents;
 
-	public UnlockVotesEvent(Object source, Session session, List<Content> contents) {
-		super(source, session);
+	public UnlockVotesEvent(Object source, Room room, List<Content> contents) {
+		super(source, room);
 		this.contents = contents;
 	}
 
diff --git a/src/main/java/de/thm/arsnova/persistance/SessionRepository.java b/src/main/java/de/thm/arsnova/persistance/RoomRepository.java
similarity index 51%
rename from src/main/java/de/thm/arsnova/persistance/SessionRepository.java
rename to src/main/java/de/thm/arsnova/persistance/RoomRepository.java
index 66f0498e3..07cfe6ec6 100644
--- a/src/main/java/de/thm/arsnova/persistance/SessionRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/RoomRepository.java
@@ -20,27 +20,27 @@ package de.thm.arsnova.persistance;
 import de.thm.arsnova.connector.model.Course;
 import de.thm.arsnova.entities.migration.v2.LoggedIn;
 import de.thm.arsnova.entities.UserAuthentication;
-import de.thm.arsnova.entities.migration.v2.Session;
-import de.thm.arsnova.entities.migration.v2.SessionInfo;
+import de.thm.arsnova.entities.migration.v2.Room;
+import de.thm.arsnova.entities.migration.v2.RoomInfo;
 import de.thm.arsnova.entities.transport.ImportExportSession;
 import org.springframework.data.repository.CrudRepository;
 
 import java.util.List;
 
-public interface SessionRepository extends CrudRepository<Session, String> {
-	Session findByKeyword(String keyword);
-	List<Session> findInactiveGuestSessionsMetadata(long lastActivityBefore);
-	List<Session> findByUser(UserAuthentication user, int start, int limit);
-	List<Session> findByUsername(String username, int start, int limit);
-	List<Session> findAllForPublicPool();
-	List<Session> findForPublicPoolByUser(UserAuthentication user);
-	List<Session> findVisitedByUsername(String username, int start, int limit);
-	List<SessionInfo> getMySessionsInfo(UserAuthentication user, int start, int limit);
-	List<SessionInfo> findInfosForPublicPool();
-	List<SessionInfo> findInfosForPublicPoolByUser(UserAuthentication user);
-	List<SessionInfo> findInfoForVisitedByUser(UserAuthentication currentUser, int start, int limit);
-	List<Session> findSessionsByCourses(List<Course> courses);
-	SessionInfo importSession(UserAuthentication user, ImportExportSession importSession);
+public interface RoomRepository extends CrudRepository<Room, String> {
+	Room findByKeyword(String keyword);
+	List<Room> findInactiveGuestSessionsMetadata(long lastActivityBefore);
+	List<Room> findByUser(UserAuthentication user, int start, int limit);
+	List<Room> findByUsername(String username, int start, int limit);
+	List<Room> findAllForPublicPool();
+	List<Room> findForPublicPoolByUser(UserAuthentication user);
+	List<Room> findVisitedByUsername(String username, int start, int limit);
+	List<RoomInfo> getMySessionsInfo(UserAuthentication user, int start, int limit);
+	List<RoomInfo> findInfosForPublicPool();
+	List<RoomInfo> findInfosForPublicPoolByUser(UserAuthentication user);
+	List<RoomInfo> findInfoForVisitedByUser(UserAuthentication currentUser, int start, int limit);
+	List<Room> findSessionsByCourses(List<Course> courses);
+	RoomInfo importSession(UserAuthentication user, ImportExportSession importSession);
 	ImportExportSession exportSession(String sessionkey, Boolean withAnswer, Boolean withFeedbackQuestions);
-	LoggedIn registerAsOnlineUser(UserAuthentication user, Session session);
+	LoggedIn registerAsOnlineUser(UserAuthentication user, Room room);
 }
diff --git a/src/main/java/de/thm/arsnova/persistance/SessionStatisticsRepository.java b/src/main/java/de/thm/arsnova/persistance/SessionStatisticsRepository.java
index 4d8f729a0..cc0b890a7 100644
--- a/src/main/java/de/thm/arsnova/persistance/SessionStatisticsRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/SessionStatisticsRepository.java
@@ -1,8 +1,8 @@
 package de.thm.arsnova.persistance;
 
+import de.thm.arsnova.entities.migration.v2.Room;
 import de.thm.arsnova.services.score.Score;
-import de.thm.arsnova.entities.migration.v2.Session;
 
 public interface SessionStatisticsRepository {
-	Score getLearningProgress(Session session);
+	Score getLearningProgress(Room room);
 }
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCommentRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCommentRepository.java
index 3eb714da6..bf2ba838b 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCommentRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCommentRepository.java
@@ -116,7 +116,7 @@ public class CouchDbCommentRepository extends CouchDbCrudRepository<Comment> imp
 						.includeDocs(true),
 				Comment.class);
 //		for (Comment comment : comments) {
-//			comment.setSessionId(session.getKeyword());
+//			comment.setRoomId(session.getKeyword());
 //		}
 
 		return comments;
@@ -136,7 +136,7 @@ public class CouchDbCommentRepository extends CouchDbCrudRepository<Comment> imp
 						.includeDocs(true),
 				Comment.class);
 //		for (Comment comment : comments) {
-//			comment.setSessionId(session.getKeyword());
+//			comment.setRoomId(session.getKeyword());
 //		}
 
 		return comments;
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbSessionRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java
similarity index 78%
rename from src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbSessionRepository.java
rename to src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java
index 8b81adff8..1538ae893 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbSessionRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java
@@ -21,14 +21,14 @@ import de.thm.arsnova.connector.model.Course;
 import de.thm.arsnova.entities.UserAuthentication;
 import de.thm.arsnova.entities.migration.v2.Comment;
 import de.thm.arsnova.entities.migration.v2.LoggedIn;
-import de.thm.arsnova.entities.migration.v2.Session;
-import de.thm.arsnova.entities.migration.v2.SessionInfo;
-import de.thm.arsnova.entities.migration.v2.VisitedSession;
+import de.thm.arsnova.entities.migration.v2.Room;
+import de.thm.arsnova.entities.migration.v2.RoomInfo;
+import de.thm.arsnova.entities.migration.v2.VisitedRoom;
 import de.thm.arsnova.entities.transport.ImportExportSession;
 import de.thm.arsnova.exceptions.NotFoundException;
 import de.thm.arsnova.persistance.LogEntryRepository;
 import de.thm.arsnova.persistance.MotdRepository;
-import de.thm.arsnova.persistance.SessionRepository;
+import de.thm.arsnova.persistance.RoomRepository;
 import org.ektorp.ComplexKey;
 import org.ektorp.CouchDbConnector;
 import org.ektorp.DocumentNotFoundException;
@@ -50,8 +50,8 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> implements SessionRepository {
-	private static final Logger logger = LoggerFactory.getLogger(CouchDbSessionRepository.class);
+public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implements RoomRepository {
+	private static final Logger logger = LoggerFactory.getLogger(CouchDbRoomRepository.class);
 
 	@Autowired
 	private LogEntryRepository dbLogger;
@@ -59,40 +59,40 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 	@Autowired
 	private MotdRepository motdRepository;
 
-	public CouchDbSessionRepository(final CouchDbConnector db, final boolean createIfNotExists) {
-		super(Session.class, db, "by_keyword", createIfNotExists);
+	public CouchDbRoomRepository(final CouchDbConnector db, final boolean createIfNotExists) {
+		super(Room.class, db, "by_keyword", createIfNotExists);
 	}
 
 	@Override
-	@Cacheable("sessions")
-	public Session findByKeyword(final String keyword) {
-		final List<Session> session = queryView("by_keyword", keyword);
+	@Cacheable("rooms")
+	public Room findByKeyword(final String keyword) {
+		final List<Room> roomList = queryView("by_keyword", keyword);
 
-		return !session.isEmpty() ? session.get(0) : null;
+		return !roomList.isEmpty() ? roomList.get(0) : null;
 	}
 
 	/* TODO: Move to service layer. */
 	private String getSessionKeyword(final String internalSessionId) throws IOException {
-		final Session session = get(internalSessionId);
-		if (session == null) {
+		final Room room = get(internalSessionId);
+		if (room == null) {
 			logger.error("No session found for internal id {}.", internalSessionId);
 
 			return null;
 		}
 
-		return session.getKeyword();
+		return room.getKeyword();
 	}
 
 	@Override
-	public List<Session> findVisitedByUsername(final String username, final int start, final int limit) {
+	public List<Room> findVisitedByUsername(final String username, final int start, final int limit) {
 		final int qSkip = start > 0 ? start : -1;
 		final int qLimit = limit > 0 ? limit : -1;
 
 		try {
 			final ViewResult visitedSessionResult = db.queryView(createQuery("visited_sessions_by_user")
 					.designDocId("_design/LoggedIn").key(username));
-			final List<Session> visitedSessions = visitedSessionResult.getRows().stream().map(vs -> {
-				final Session s = new Session();
+			final List<Room> visitedSessions = visitedSessionResult.getRows().stream().map(vs -> {
+				final Room s = new Room();
 				s.setId(vs.getValueAsNode().get("_id").asText());
 				s.setKeyword(vs.getValueAsNode().get("keyword").asText());
 				s.setName(vs.getValueAsNode().get("name").asText());
@@ -105,14 +105,14 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 			}
 
 			// Filter sessions that don't exist anymore, also filter my own sessions
-			final List<Session> result = new ArrayList<>();
-			final List<Session> filteredSessions = new ArrayList<>();
-			for (final Session s : visitedSessions) {
+			final List<Room> result = new ArrayList<>();
+			final List<Room> filteredSessions = new ArrayList<>();
+			for (final Room s : visitedSessions) {
 				try {
 					/* FIXME: caching (getSessionFromKeyword) */
-					final Session session = findByKeyword(s.getKeyword());
-					if (session != null && !(session.getCreator().equals(username))) {
-						result.add(session);
+					final Room room = findByKeyword(s.getKeyword());
+					if (room != null && !(room.getCreator().equals(username))) {
+						result.add(room);
 					} else {
 						filteredSessions.add(s);
 					}
@@ -124,9 +124,9 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 				return result;
 			}
 			// Update document to remove sessions that don't exist anymore
-			final List<VisitedSession> newVisitedSessions = new ArrayList<>();
-			for (final Session s : result) {
-				newVisitedSessions.add(new VisitedSession(s));
+			final List<VisitedRoom> newVisitedSessions = new ArrayList<>();
+			for (final Room s : result) {
+				newVisitedSessions.add(new VisitedRoom(s));
 			}
 
 			try {
@@ -144,8 +144,8 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 	}
 
 	@Override
-	public List<SessionInfo> findInfoForVisitedByUser(final UserAuthentication user, final int start, final int limit) {
-		final List<Session> sessions = findVisitedByUsername(user.getUsername(), start, limit);
+	public List<RoomInfo> findInfoForVisitedByUser(final UserAuthentication user, final int start, final int limit) {
+		final List<Room> sessions = findVisitedByUsername(user.getUsername(), start, limit);
 		if (sessions.isEmpty()) {
 			return new ArrayList<>();
 		}
@@ -153,20 +153,20 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 	}
 
 	@Override
-	public List<Session> findSessionsByCourses(final List<Course> courses) {
+	public List<Room> findSessionsByCourses(final List<Course> courses) {
 		return queryView("by_courseid",
 				ComplexKey.of(courses.stream().map(Course::getId).collect(Collectors.toList())));
 	}
 
 	@Override
-	public List<Session> findInactiveGuestSessionsMetadata(final long lastActivityBefore) {
+	public List<Room> findInactiveGuestSessionsMetadata(final long lastActivityBefore) {
 		final ViewResult result = db.queryView(
 				createQuery("by_lastactivity_for_guests").endKey(lastActivityBefore));
 		final int[] count = new int[3];
 
-		List<Session> sessions = new ArrayList<>();
+		List<Room> sessions = new ArrayList<>();
 		for (final ViewResult.Row row : result.getRows()) {
-			final Session s = new Session();
+			final Room s = new Room();
 			s.setId(row.getId());
 			s.setRevision(row.getValueAsNode().get("_rev").asText());
 			sessions.add(s);
@@ -177,10 +177,10 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 
 	/* TODO: Move to service layer. */
 	@Override
-	public SessionInfo importSession(final UserAuthentication user, final ImportExportSession importSession) {
+	public RoomInfo importSession(final UserAuthentication user, final ImportExportSession importSession) {
 		/* FIXME: not yet migrated - move to service layer */
 		throw new UnsupportedOperationException();
-//		final Session session = this.saveSession(user, importSession.generateSessionEntity(user));
+//		final Room session = this.saveSession(user, importSession.generateSessionEntity(user));
 //		final List<Document> questions = new ArrayList<>();
 //		// We need to remember which answers belong to which question.
 //		// The answers need a questionId, so we first store the questions to get the IDs.
@@ -196,7 +196,7 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 //			// add session id to all questions and generate documents
 //			for (final ImportExportSession.ImportExportContent question : importSession.getQuestions()) {
 //				final Document doc = toQuestionDocument(session, question);
-//				question.setSessionId(session.getId());
+//				question.setRoomId(session.getId());
 //				questions.add(doc);
 //				mapping.put(doc, question);
 //			}
@@ -212,7 +212,7 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 //					final Answer a = answer.generateAnswerEntity(user, question);
 //					final Document answerDoc = new Document();
 //					answerDoc.put("type", "skill_question_answer");
-//					answerDoc.put("sessionId", a.getSessionId());
+//					answerDoc.put("sessionId", a.getRoomId());
 //					answerDoc.put("questionId", a.getQuestionId());
 //					answerDoc.put("answerSubject", a.getAnswerSubject());
 //					answerDoc.put("questionVariant", a.getQuestionVariant());
@@ -274,7 +274,7 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 		/* FIXME: not yet migrated - move to service layer */
 		throw new UnsupportedOperationException();
 //		final ImportExportSession importExportSession = new ImportExportSession();
-//		final Session session = getDatabaseDao().getSessionFromKeyword(sessionkey);
+//		final Room session = getDatabaseDao().getSessionFromKeyword(sessionkey);
 //		importExportSession.setSessionFromSessionObject(session);
 //		final List<Content> questionList = getDatabaseDao().getAllSkillQuestions(session);
 //		for (final Content question : questionList) {
@@ -313,7 +313,7 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 	}
 
 	/* TODO: Move to service layer. */
-	private SessionInfo calculateSessionInfo(final ImportExportSession importExportSession, final Session session) {
+	private RoomInfo calculateSessionInfo(final ImportExportSession importExportSession, final Room room) {
 		int unreadComments = 0;
 		int numUnanswered = 0;
 		int numAnswers = 0;
@@ -328,7 +328,7 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 				numUnanswered++;
 			}
 		}
-		final SessionInfo info = new SessionInfo(session);
+		final RoomInfo info = new RoomInfo(room);
 		info.setNumQuestions(importExportSession.getQuestions().size());
 		info.setNumUnanswered(numUnanswered);
 		info.setNumAnswers(numAnswers);
@@ -338,12 +338,12 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 	}
 
 	@Override
-	public List<Session> findByUser(final UserAuthentication user, final int start, final int limit) {
+	public List<Room> findByUser(final UserAuthentication user, final int start, final int limit) {
 		return findByUsername(user.getUsername(), start, limit);
 	}
 
 	@Override
-	public List<Session> findByUsername(final String username, final int start, final int limit) {
+	public List<Room> findByUsername(final String username, final int start, final int limit) {
 		final int qSkip = start > 0 ? start : -1;
 		final int qLimit = limit > 0 ? limit : -1;
 
@@ -355,36 +355,36 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 						.startKey(ComplexKey.of(null, username))
 						.endKey(ComplexKey.of(null, username, ComplexKey.emptyObject()))
 						.includeDocs(true),
-				Session.class);
+				Room.class);
 	}
 
 	@Override
-	public List<Session> findAllForPublicPool() {
+	public List<Room> findAllForPublicPool() {
 		// TODO replace with new view
 		return queryView("partial_by_ppsubject_name_for_publicpool");
 	}
 
 	@Override
-	public List<SessionInfo> findInfosForPublicPool() {
-		final List<Session> sessions = this.findAllForPublicPool();
+	public List<RoomInfo> findInfosForPublicPool() {
+		final List<Room> sessions = this.findAllForPublicPool();
 		return getInfosForSessions(sessions);
 	}
 
 	@Override
-	public List<Session> findForPublicPoolByUser(final UserAuthentication user) {
+	public List<Room> findForPublicPoolByUser(final UserAuthentication user) {
 		/* TODO: Only load IDs and check against cache for data. */
 		return db.queryView(
 				createQuery("partial_by_sessiontype_creator_name")
 						.startKey(ComplexKey.of("public_pool", user.getUsername()))
 						.endKey(ComplexKey.of("public_pool", user.getUsername(), ComplexKey.emptyObject()))
 						.includeDocs(true),
-				Session.class);
+				Room.class);
 	}
 
 	/* TODO: Move to service layer. */
 	@Override
-	public List<SessionInfo> findInfosForPublicPoolByUser(final UserAuthentication user) {
-		final List<Session> sessions = this.findForPublicPoolByUser(user);
+	public List<RoomInfo> findInfosForPublicPoolByUser(final UserAuthentication user) {
+		final List<Room> sessions = this.findForPublicPoolByUser(user);
 		if (sessions.isEmpty()) {
 			return new ArrayList<>();
 		}
@@ -393,8 +393,8 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 
 	/* TODO: Move to service layer. */
 	@Override
-	public List<SessionInfo> getMySessionsInfo(final UserAuthentication user, final int start, final int limit) {
-		final List<Session> sessions = this.findByUser(user, start, limit);
+	public List<RoomInfo> getMySessionsInfo(final UserAuthentication user, final int start, final int limit) {
+		final List<Room> sessions = this.findByUser(user, start, limit);
 		if (sessions.isEmpty()) {
 			return new ArrayList<>();
 		}
@@ -402,8 +402,8 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 	}
 
 	/* TODO: Move to service layer. */
-	private List<SessionInfo> getInfosForSessions(final List<Session> sessions) {
-		final List<String> sessionIds = sessions.stream().map(Session::getId).collect(Collectors.toList());
+	private List<RoomInfo> getInfosForSessions(final List<Room> sessions) {
+		final List<String> sessionIds = sessions.stream().map(Room::getId).collect(Collectors.toList());
 		final ViewQuery questionCountView = createQuery("by_sessionid").designDocId("_design/Content")
 				.group(true).keys(sessionIds);
 		final ViewQuery answerCountView = createQuery("by_sessionid").designDocId("_design/Answer")
@@ -417,18 +417,18 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 	}
 
 	/* TODO: Move to service layer. */
-	private List<SessionInfo> getInfosForVisitedSessions(final List<Session> sessions, final UserAuthentication user) {
+	private List<RoomInfo> getInfosForVisitedSessions(final List<Room> sessions, final UserAuthentication user) {
 		final ViewQuery answeredQuestionsView = createQuery("by_user_sessionid").designDocId("_design/Answer")
 				.keys(sessions.stream().map(session -> ComplexKey.of(user.getUsername(), session.getId())).collect(Collectors.toList()));
 		final ViewQuery contentIdsView = createQuery("by_sessionid").designDocId("_design/Content")
-				.keys(sessions.stream().map(Session::getId).collect(Collectors.toList()));
+				.keys(sessions.stream().map(Room::getId).collect(Collectors.toList()));
 
 		return getVisitedSessionInfoData(sessions, answeredQuestionsView, contentIdsView);
 	}
 
 	/* TODO: Move to service layer. */
-	private List<SessionInfo> getVisitedSessionInfoData(
-			final List<Session> sessions,
+	private List<RoomInfo> getVisitedSessionInfoData(
+			final List<Room> rooms,
 			final ViewQuery answeredQuestionsView,
 			final ViewQuery contentIdsView) {
 		final Map<String, Set<String>> answeredQuestionsMap = new HashMap<>();
@@ -460,7 +460,7 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 
 		// For each session, count the question IDs that are not yet answered
 		final Map<String, Integer> unansweredQuestionsCountMap = new HashMap<>();
-		for (final Session s : sessions) {
+		for (final Room s : rooms) {
 			if (!contentIdMap.containsKey(s.getId())) {
 				continue;
 			}
@@ -474,23 +474,23 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 			unansweredQuestionsCountMap.put(s.getId(), contentIdsInSession.size());
 		}
 
-		final List<SessionInfo> sessionInfos = new ArrayList<>();
-		for (final Session session : sessions) {
+		final List<RoomInfo> roomInfos = new ArrayList<>();
+		for (final Room room : rooms) {
 			int numUnanswered = 0;
 
-			if (unansweredQuestionsCountMap.containsKey(session.getId())) {
-				numUnanswered = unansweredQuestionsCountMap.get(session.getId());
+			if (unansweredQuestionsCountMap.containsKey(room.getId())) {
+				numUnanswered = unansweredQuestionsCountMap.get(room.getId());
 			}
-			final SessionInfo info = new SessionInfo(session);
+			final RoomInfo info = new RoomInfo(room);
 			info.setNumUnanswered(numUnanswered);
-			sessionInfos.add(info);
+			roomInfos.add(info);
 		}
-		return sessionInfos;
+		return roomInfos;
 	}
 
 	/* TODO: Move to service layer. */
-	private List<SessionInfo> getSessionInfoData(
-			final List<Session> sessions,
+	private List<RoomInfo> getSessionInfoData(
+			final List<Room> rooms,
 			final ViewQuery questionCountView,
 			final ViewQuery answerCountView,
 			final ViewQuery commentCountView,
@@ -508,38 +508,38 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 				.stream().map(row -> new AbstractMap.SimpleImmutableEntry<>(row.getKey(), row.getValueAsInt()))
 				.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
 
-		final List<SessionInfo> sessionInfos = new ArrayList<>();
-		for (final Session session : sessions) {
+		final List<RoomInfo> roomInfos = new ArrayList<>();
+		for (final Room room : rooms) {
 			int numQuestions = 0;
 			int numAnswers = 0;
 			int numComments = 0;
 			int numUnreadComments = 0;
-			if (questionCountMap.containsKey(session.getId())) {
-				numQuestions = questionCountMap.get(session.getId());
+			if (questionCountMap.containsKey(room.getId())) {
+				numQuestions = questionCountMap.get(room.getId());
 			}
-			if (answerCountMap.containsKey(session.getId())) {
-				numAnswers = answerCountMap.get(session.getId());
+			if (answerCountMap.containsKey(room.getId())) {
+				numAnswers = answerCountMap.get(room.getId());
 			}
-			if (commentCountMap.containsKey(session.getId())) {
-				numComments = commentCountMap.get(session.getId());
+			if (commentCountMap.containsKey(room.getId())) {
+				numComments = commentCountMap.get(room.getId());
 			}
-			if (unreadCommentCountMap.containsKey(session.getId())) {
-				numUnreadComments = unreadCommentCountMap.get(session.getId());
+			if (unreadCommentCountMap.containsKey(room.getId())) {
+				numUnreadComments = unreadCommentCountMap.get(room.getId());
 			}
 
-			final SessionInfo info = new SessionInfo(session);
+			final RoomInfo info = new RoomInfo(room);
 			info.setNumQuestions(numQuestions);
 			info.setNumAnswers(numAnswers);
 			info.setNumInterposed(numComments);
 			info.setNumUnredInterposed(numUnreadComments);
-			sessionInfos.add(info);
+			roomInfos.add(info);
 		}
-		return sessionInfos;
+		return roomInfos;
 	}
 
 	/* TODO: Move to service layer. */
 	@Override
-	public LoggedIn registerAsOnlineUser(final UserAuthentication user, final Session session) {
+	public LoggedIn registerAsOnlineUser(final UserAuthentication user, final Room room) {
 		LoggedIn loggedIn = new LoggedIn();
 		try {
 			final List<LoggedIn> loggedInList = db.queryView(createQuery("all").designDocId("_design/LoggedIn").key(user.getUsername()), LoggedIn.class);
@@ -548,14 +548,14 @@ public class CouchDbSessionRepository extends CouchDbCrudRepository<Session> imp
 				loggedIn = loggedInList.get(0);
 
 				/* Do not clutter CouchDB. Only update once every 3 hours per session. */
-				if (loggedIn.getSessionId().equals(session.getId()) && loggedIn.getTimestamp() > System.currentTimeMillis() - 3 * 3600000) {
+				if (loggedIn.getSessionId().equals(room.getId()) && loggedIn.getTimestamp() > System.currentTimeMillis() - 3 * 3600000) {
 					return loggedIn;
 				}
 			}
 
 			loggedIn.setUser(user.getUsername());
-			loggedIn.setSessionId(session.getId());
-			loggedIn.addVisitedSession(session);
+			loggedIn.setSessionId(room.getId());
+			loggedIn.addVisitedSession(room);
 			loggedIn.updateTimestamp();
 
 			if (loggedIn.getId() == null) {
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbSessionStatisticsRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbSessionStatisticsRepository.java
index 214c061b4..7e30cc936 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbSessionStatisticsRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbSessionStatisticsRepository.java
@@ -2,7 +2,7 @@ package de.thm.arsnova.persistance.couchdb;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import de.thm.arsnova.services.score.Score;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 import de.thm.arsnova.persistance.SessionStatisticsRepository;
 import org.ektorp.ComplexKey;
 import org.ektorp.CouchDbConnector;
@@ -15,13 +15,13 @@ public class CouchDbSessionStatisticsRepository extends CouchDbRepositorySupport
 	}
 
 	@Override
-	public Score getLearningProgress(final Session session) {
+	public Score getLearningProgress(final Room room) {
 		final ViewResult maximumValueResult = db.queryView(createQuery("maximum_value_of_question")
-				.startKey(ComplexKey.of(session.getId()))
-				.endKey(ComplexKey.of(session.getId(), ComplexKey.emptyObject())));
+				.startKey(ComplexKey.of(room.getId()))
+				.endKey(ComplexKey.of(room.getId(), ComplexKey.emptyObject())));
 		final ViewResult answerSumResult = db.queryView(createQuery("question_value_achieved_for_user")
-				.startKey(ComplexKey.of(session.getId()))
-				.endKey(ComplexKey.of(session.getId(), ComplexKey.emptyObject())));
+				.startKey(ComplexKey.of(room.getId()))
+				.endKey(ComplexKey.of(room.getId(), ComplexKey.emptyObject())));
 		final Score courseScore = new Score();
 
 		// no results found
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbVisitedSessionRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbVisitedSessionRepository.java
index 82a760743..9d8a256f4 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbVisitedSessionRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbVisitedSessionRepository.java
@@ -1,7 +1,7 @@
 package de.thm.arsnova.persistance.couchdb;
 
 import com.google.common.collect.Lists;
-import de.thm.arsnova.entities.migration.v2.VisitedSession;
+import de.thm.arsnova.entities.migration.v2.VisitedRoom;
 import de.thm.arsnova.persistance.LogEntryRepository;
 import de.thm.arsnova.persistance.VisitedSessionRepository;
 import org.ektorp.BulkDeleteDocument;
@@ -17,7 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import java.util.ArrayList;
 import java.util.List;
 
-public class CouchDbVisitedSessionRepository extends CouchDbRepositorySupport<VisitedSession> implements VisitedSessionRepository {
+public class CouchDbVisitedSessionRepository extends CouchDbRepositorySupport<VisitedRoom> implements VisitedSessionRepository {
 	private static final int BULK_PARTITION_SIZE = 500;
 
 	private static final Logger logger = LoggerFactory.getLogger(CouchDbVisitedSessionRepository.class);
@@ -26,7 +26,7 @@ public class CouchDbVisitedSessionRepository extends CouchDbRepositorySupport<Vi
 	private LogEntryRepository dbLogger;
 
 	public CouchDbVisitedSessionRepository(final CouchDbConnector db, final boolean createIfNotExists) {
-		super(VisitedSession.class, db, createIfNotExists);
+		super(VisitedRoom.class, db, createIfNotExists);
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
index 9dbe6af16..712d6f518 100644
--- a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
+++ b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
@@ -20,10 +20,10 @@ package de.thm.arsnova.security;
 import de.thm.arsnova.entities.UserAuthentication;
 import de.thm.arsnova.entities.migration.v2.Comment;
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 import de.thm.arsnova.persistance.CommentRepository;
 import de.thm.arsnova.persistance.ContentRepository;
-import de.thm.arsnova.persistance.SessionRepository;
+import de.thm.arsnova.persistance.RoomRepository;
 import org.pac4j.oauth.profile.facebook.FacebookProfile;
 import org.pac4j.oauth.profile.google2.Google2Profile;
 import org.pac4j.oauth.profile.twitter.TwitterProfile;
@@ -46,7 +46,7 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 	private String[] adminAccounts;
 
 	@Autowired
-	private SessionRepository sessionRepository;
+	private RoomRepository roomRepository;
 
 	@Autowired
 	private CommentRepository commentRepository;
@@ -66,8 +66,8 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 		final String username = getUsername(authentication);
 
 		return hasAdminRole(username)
-				|| (targetDomainObject instanceof Session
-						&& hasSessionPermission(username, ((Session) targetDomainObject), permission.toString()))
+				|| (targetDomainObject instanceof Room
+						&& hasSessionPermission(username, ((Room) targetDomainObject), permission.toString()))
 				|| (targetDomainObject instanceof Content
 						&& hasContentPermission(username, ((Content) targetDomainObject), permission.toString()))
 				|| (targetDomainObject instanceof Comment
@@ -91,7 +91,7 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 
 		switch (targetType) {
 			case "session":
-				final Session targetSession = sessionRepository.findByKeyword(targetId.toString());
+				final Room targetSession = roomRepository.findByKeyword(targetId.toString());
 				return targetSession != null && hasSessionPermission(username, targetSession, permission.toString());
 			case "content":
 				final Content targetContent = contentRepository.findOne(targetId.toString());
@@ -106,7 +106,7 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 
 	private boolean hasSessionPermission(
 			final String username,
-			final Session targetSession,
+			final Room targetSession,
 			final String permission) {
 		switch (permission) {
 			case "read":
@@ -128,13 +128,13 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 			final String permission) {
 		switch (permission) {
 			case "read":
-				return sessionRepository.findOne(targetContent.getSessionId()).isActive();
+				return roomRepository.findOne(targetContent.getSessionId()).isActive();
 			case "create":
 			case "owner":
 			case "update":
 			case "delete":
-				final Session session = sessionRepository.findOne(targetContent.getSessionId());
-				return session != null && session.getCreator().equals(username);
+				final Room room = roomRepository.findOne(targetContent.getSessionId());
+				return room != null && room.getCreator().equals(username);
 			default:
 				return false;
 		}
@@ -146,7 +146,7 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 			final String permission) {
 		switch (permission) {
 			case "create":
-				return !username.isEmpty() && sessionRepository.findOne(targetComment.getSessionId()).isActive();
+				return !username.isEmpty() && roomRepository.findOne(targetComment.getSessionId()).isActive();
 			case "owner":
 			case "update":
 				return targetComment.getCreator() != null && targetComment.getCreator().equals(username);
@@ -157,9 +157,9 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 				}
 
 				/* Allow reading & deletion by session owner */
-				final Session session = sessionRepository.findOne(targetComment.getSessionId());
+				final Room room = roomRepository.findOne(targetComment.getSessionId());
 
-				return session != null && session.getCreator().equals(username);
+				return room != null && room.getCreator().equals(username);
 			default:
 				return false;
 		}
diff --git a/src/main/java/de/thm/arsnova/services/CommentServiceImpl.java b/src/main/java/de/thm/arsnova/services/CommentServiceImpl.java
index 62141d4df..04d79af54 100644
--- a/src/main/java/de/thm/arsnova/services/CommentServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/CommentServiceImpl.java
@@ -3,14 +3,14 @@ package de.thm.arsnova.services;
 import de.thm.arsnova.entities.UserAuthentication;
 import de.thm.arsnova.entities.migration.v2.Comment;
 import de.thm.arsnova.entities.migration.v2.CommentReadingCount;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 import de.thm.arsnova.events.DeleteCommentEvent;
 import de.thm.arsnova.events.NewCommentEvent;
 import de.thm.arsnova.exceptions.ForbiddenException;
 import de.thm.arsnova.exceptions.NotFoundException;
 import de.thm.arsnova.exceptions.UnauthorizedException;
 import de.thm.arsnova.persistance.CommentRepository;
-import de.thm.arsnova.persistance.SessionRepository;
+import de.thm.arsnova.persistance.RoomRepository;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.ApplicationEventPublisherAware;
@@ -29,18 +29,18 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem
 
 	private CommentRepository commentRepository;
 
-	private SessionRepository sessionRepository;
+	private RoomRepository roomRepository;
 
 	private ApplicationEventPublisher publisher;
 
 	public CommentServiceImpl(
 			CommentRepository repository,
-			SessionRepository sessionRepository,
+			RoomRepository roomRepository,
 			UserService userService,
 			@Qualifier("defaultJsonMessageConverter") MappingJackson2HttpMessageConverter jackson2HttpMessageConverter) {
 		super(Comment.class, repository, jackson2HttpMessageConverter.getObjectMapper());
 		this.commentRepository = repository;
-		this.sessionRepository = sessionRepository;
+		this.roomRepository = roomRepository;
 		this.userService = userService;
 	}
 
@@ -52,9 +52,9 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public boolean save(final Comment comment) {
-		final Session session = sessionRepository.findByKeyword(comment.getSessionId());
+		final Room room = roomRepository.findByKeyword(comment.getSessionId());
 		final UserAuthentication user = userService.getCurrentUser();
-		comment.setSessionId(session.getId());
+		comment.setSessionId(room.getId());
 		comment.setCreator(user.getUsername());
 		comment.setRead(false);
 		if (comment.getTimestamp() == 0) {
@@ -63,7 +63,7 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem
 		final Comment result = super.create(comment);
 
 		if (null != result) {
-			final NewCommentEvent event = new NewCommentEvent(this, session, result);
+			final NewCommentEvent event = new NewCommentEvent(this, room, result);
 			this.publisher.publishEvent(event);
 			return true;
 		}
@@ -79,23 +79,23 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem
 		}
 		commentRepository.delete(comment);
 
-		final Session session = sessionRepository.findByKeyword(comment.getSessionId());
-		final DeleteCommentEvent event = new DeleteCommentEvent(this, session, comment);
+		final Room room = roomRepository.findByKeyword(comment.getSessionId());
+		final DeleteCommentEvent event = new DeleteCommentEvent(this, room, comment);
 		this.publisher.publishEvent(event);
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public void deleteBySessionKey(final String sessionKeyword) {
-		final Session session = sessionRepository.findByKeyword(sessionKeyword);
-		if (session == null) {
+		final Room room = roomRepository.findByKeyword(sessionKeyword);
+		if (room == null) {
 			throw new UnauthorizedException();
 		}
 		final UserAuthentication user = getCurrentUser();
-		if (session.isCreator(user)) {
-			commentRepository.deleteBySessionId(session.getId());
+		if (room.isCreator(user)) {
+			commentRepository.deleteBySessionId(room.getId());
 		} else {
-			commentRepository.deleteBySessionIdAndUser(session.getId(), user);
+			commentRepository.deleteBySessionIdAndUser(room.getId(), user);
 		}
 	}
 
@@ -108,31 +108,31 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public CommentReadingCount countRead(final String sessionKey, String username) {
-		final Session session = sessionRepository.findByKeyword(sessionKey);
-		if (session == null) {
+		final Room room = roomRepository.findByKeyword(sessionKey);
+		if (room == null) {
 			throw new NotFoundException();
 		}
 		if (username == null) {
-			return commentRepository.countReadingBySessionId(session.getId());
+			return commentRepository.countReadingBySessionId(room.getId());
 		} else {
 			UserAuthentication currentUser = userService.getCurrentUser();
 			if (!currentUser.getUsername().equals(username)) {
 				throw new ForbiddenException();
 			}
 
-			return commentRepository.countReadingBySessionIdAndUser(session.getId(), currentUser);
+			return commentRepository.countReadingBySessionIdAndUser(room.getId(), currentUser);
 		}
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public List<Comment> getBySessionKey(final String sessionKey, final int offset, final int limit) {
-		final Session session = this.getSession(sessionKey);
+		final Room room = this.getSession(sessionKey);
 		final UserAuthentication user = getCurrentUser();
-		if (session.isCreator(user)) {
-			return commentRepository.findBySessionId(session.getId(), offset, limit);
+		if (room.isCreator(user)) {
+			return commentRepository.findBySessionId(room.getId(), offset, limit);
 		} else {
-			return commentRepository.findBySessionIdAndUser(session.getId(), user, offset, limit);
+			return commentRepository.findBySessionIdAndUser(room.getId(), user, offset, limit);
 		}
 	}
 
@@ -153,11 +153,11 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem
 		if (comment == null) {
 			throw new NotFoundException();
 		}
-		final Session session = sessionRepository.findOne(comment.getSessionId());
-		if (!comment.isCreator(user) && !session.isCreator(user)) {
+		final Room room = roomRepository.findOne(comment.getSessionId());
+		if (!comment.isCreator(user) && !room.isCreator(user)) {
 			throw new UnauthorizedException();
 		}
-		if (session.isCreator(user)) {
+		if (room.isCreator(user)) {
 			comment.setRead(true);
 			save(comment);
 		}
@@ -172,11 +172,11 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem
 		return user;
 	}
 
-	private Session getSession(final String sessionkey) {
-		final Session session = sessionRepository.findByKeyword(sessionkey);
-		if (session == null) {
+	private Room getSession(final String sessionkey) {
+		final Room room = roomRepository.findByKeyword(sessionkey);
+		if (room == null) {
 			throw new NotFoundException();
 		}
-		return session;
+		return room;
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/services/ContentServiceImpl.java b/src/main/java/de/thm/arsnova/services/ContentServiceImpl.java
index d67b80237..e1220b27e 100644
--- a/src/main/java/de/thm/arsnova/services/ContentServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/ContentServiceImpl.java
@@ -18,19 +18,19 @@
 package de.thm.arsnova.services;
 
 import de.thm.arsnova.entities.UserAuthentication;
+import de.thm.arsnova.entities.migration.v2.Room;
 import de.thm.arsnova.entities.transport.AnswerQueueElement;
 import de.thm.arsnova.persistance.LogEntryRepository;
+import de.thm.arsnova.persistance.RoomRepository;
 import de.thm.arsnova.util.ImageUtils;
 import de.thm.arsnova.entities.migration.v2.Answer;
 import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.Session;
 import de.thm.arsnova.events.*;
 import de.thm.arsnova.exceptions.BadRequestException;
 import de.thm.arsnova.exceptions.NotFoundException;
 import de.thm.arsnova.exceptions.UnauthorizedException;
 import de.thm.arsnova.persistance.AnswerRepository;
 import de.thm.arsnova.persistance.ContentRepository;
-import de.thm.arsnova.persistance.SessionRepository;
 import org.ektorp.DbAccessException;
 import org.ektorp.DocumentNotFoundException;
 import org.slf4j.Logger;
@@ -68,7 +68,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	private LogEntryRepository dbLogger;
 
-	private SessionRepository sessionRepository;
+	private RoomRepository roomRepository;
 
 	private ContentRepository contentRepository;
 
@@ -90,7 +90,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	public ContentServiceImpl(
 			ContentRepository repository,
 			AnswerRepository answerRepository,
-			SessionRepository sessionRepository,
+			RoomRepository roomRepository,
 			LogEntryRepository dbLogger,
 			UserService userService,
 			ImageUtils imageUtils,
@@ -98,7 +98,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		super(Content.class, repository, jackson2HttpMessageConverter.getObjectMapper());
 		this.contentRepository = repository;
 		this.answerRepository = answerRepository;
-		this.sessionRepository = sessionRepository;
+		this.roomRepository = roomRepository;
 		this.dbLogger = dbLogger;
 		this.userService = userService;
 		this.imageUtils = imageUtils;
@@ -124,7 +124,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 			// Send NewAnswerEvents ...
 			for (AnswerQueueElement e : elements) {
-				this.publisher.publishEvent(new NewAnswerEvent(this, e.getSession(), e.getAnswer(), e.getUser(), e.getQuestion()));
+				this.publisher.publishEvent(new NewAnswerEvent(this, e.getRoom(), e.getAnswer(), e.getUser(), e.getQuestion()));
 			}
 		} catch (final DbAccessException e) {
 			logger.error("Could not bulk save answers from queue.", e);
@@ -141,7 +141,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 				content.setPiRound(1);
 			}
 			content.updateRoundManagementState();
-			//content.setSessionKeyword(sessionRepository.getSessionFromId(content.getSessionId()).getKeyword());
+			//content.setSessionKeyword(roomRepository.getSessionFromId(content.getRoomId()).getKeyword());
 
 			return content;
 		} catch (final DocumentNotFoundException e) {
@@ -185,8 +185,8 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 			throw new NotFoundException();
 		}
 
-		final Session session = sessionRepository.findOne(content.getSessionId());
-		if (user == null || session == null || !session.isCreator(user)) {
+		final Room room = roomRepository.findOne(content.getSessionId());
+		if (user == null || room == null || !room.isCreator(user)) {
 			throw new UnauthorizedException();
 		}
 
@@ -202,10 +202,10 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		contentRepository.save(content);
 
 		if (!oldContent.isActive() && content.isActive()) {
-			final UnlockQuestionEvent event = new UnlockQuestionEvent(this, session, content);
+			final UnlockQuestionEvent event = new UnlockQuestionEvent(this, room, content);
 			this.publisher.publishEvent(event);
 		} else if (oldContent.isActive() && !content.isActive()) {
-			final LockQuestionEvent event = new LockQuestionEvent(this, session, content);
+			final LockQuestionEvent event = new LockQuestionEvent(this, room, content);
 			this.publisher.publishEvent(event);
 		}
 		return content;
@@ -216,28 +216,28 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@PreAuthorize("isAuthenticated()")
 	//@Cacheable("contentlists")
 	public List<Content> getBySessionKey(final String sessionkey) {
-		final Session session = getSession(sessionkey);
+		final Room room = getSession(sessionkey);
 		final UserAuthentication user = userService.getCurrentUser();
-		if (session.isCreator(user)) {
-			return contentRepository.findBySessionIdForSpeaker(session.getId());
+		if (room.isCreator(user)) {
+			return contentRepository.findBySessionIdForSpeaker(room.getId());
 		} else {
-			return contentRepository.findBySessionIdForUsers(session.getId());
+			return contentRepository.findBySessionIdForUsers(room.getId());
 		}
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public int countBySessionKey(final String sessionkey) {
-		final Session session = sessionRepository.findByKeyword(sessionkey);
-		return contentRepository.countBySessionId(session.getId());
+		final Room room = roomRepository.findByKeyword(sessionkey);
+		return contentRepository.countBySessionId(room.getId());
 	}
 
 	/* FIXME: #content.getSessionKeyword() cannot be checked since keyword is no longer set for content. */
 	@Override
 	@PreAuthorize("hasPermission(#content.getSessionKeyword(), 'session', 'owner')")
 	public Content save(final Content content) {
-		final Session session = sessionRepository.findByKeyword(content.getSessionKeyword());
-		content.setSessionId(session.getId());
+		final Room room = roomRepository.findByKeyword(content.getSessionKeyword());
+		content.setSessionId(room.getId());
 		content.setTimestamp(System.currentTimeMillis() / 1000L);
 
 		if ("freetext".equals(content.getQuestionType())) {
@@ -256,9 +256,9 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 			}
 		}
 
-		final Content result = save(session.getId(), content);
+		final Content result = save(room.getId(), content);
 
-		final NewQuestionEvent event = new NewQuestionEvent(this, session, result);
+		final NewQuestionEvent event = new NewQuestionEvent(this, room, result);
 		this.publisher.publishEvent(event);
 
 		return result;
@@ -280,8 +280,8 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 			throw new NotFoundException();
 		}
 
-		final Session session = sessionRepository.findOne(content.getSessionId());
-		if (session == null) {
+		final Room room = roomRepository.findOne(content.getSessionId());
+		if (room == null) {
 			throw new UnauthorizedException();
 		}
 
@@ -293,67 +293,67 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 			logger.error("Could not delete content {}.", contentId, e);
 		}
 
-		final DeleteQuestionEvent event = new DeleteQuestionEvent(this, session, content);
+		final DeleteQuestionEvent event = new DeleteQuestionEvent(this, room, content);
 		this.publisher.publishEvent(event);
 	}
 
 	@PreAuthorize("hasPermission(#session, 'owner')")
 	@Caching(evict = {
 			@CacheEvict(value = "contents", allEntries = true),
-			@CacheEvict(value = "contentlists", key = "#session.getId()"),
-			@CacheEvict(value = "lecturecontentlists", key = "#session.getId()", condition = "'lecture'.equals(#variant)"),
-			@CacheEvict(value = "preparationcontentlists", key = "#session.getId()", condition = "'preparation'.equals(#variant)"),
-			@CacheEvict(value = "flashcardcontentlists", key = "#session.getId()", condition = "'flashcard'.equals(#variant)") })
-	private void deleteBySessionAndVariant(final Session session, final String variant) {
+			@CacheEvict(value = "contentlists", key = "#room.getId()"),
+			@CacheEvict(value = "lecturecontentlists", key = "#room.getId()", condition = "'lecture'.equals(#variant)"),
+			@CacheEvict(value = "preparationcontentlists", key = "#room.getId()", condition = "'preparation'.equals(#variant)"),
+			@CacheEvict(value = "flashcardcontentlists", key = "#room.getId()", condition = "'flashcard'.equals(#variant)") })
+	private void deleteBySessionAndVariant(final Room room, final String variant) {
 		final List<String> contentIds;
 		if ("all".equals(variant)) {
-			contentIds = contentRepository.findIdsBySessionId(session.getId());
+			contentIds = contentRepository.findIdsBySessionId(room.getId());
 		} else {
-			contentIds = contentRepository.findIdsBySessionIdAndVariant(session.getId(), variant);
+			contentIds = contentRepository.findIdsBySessionIdAndVariant(room.getId(), variant);
 		}
 
 		final int answerCount = answerRepository.deleteByContentIds(contentIds);
-		final int contentCount = contentRepository.deleteBySessionId(session.getId());
+		final int contentCount = contentRepository.deleteBySessionId(room.getId());
 		dbLogger.log("delete", "type", "question", "questionCount", contentCount);
 		dbLogger.log("delete", "type", "answer", "answerCount", answerCount);
 
-		final DeleteAllQuestionsEvent event = new DeleteAllQuestionsEvent(this, session);
+		final DeleteAllQuestionsEvent event = new DeleteAllQuestionsEvent(this, room);
 		this.publisher.publishEvent(event);
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public void deleteAllContent(final String sessionkey) {
-		final Session session = getSessionWithAuthCheck(sessionkey);
-		deleteBySessionAndVariant(session, "all");
+		final Room room = getSessionWithAuthCheck(sessionkey);
+		deleteBySessionAndVariant(room, "all");
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public void deleteLectureQuestions(final String sessionkey) {
-		final Session session = getSessionWithAuthCheck(sessionkey);
-		deleteBySessionAndVariant(session, "lecture");
+		final Room room = getSessionWithAuthCheck(sessionkey);
+		deleteBySessionAndVariant(room, "lecture");
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public void deletePreparationQuestions(final String sessionkey) {
-		final Session session = getSessionWithAuthCheck(sessionkey);
-		deleteBySessionAndVariant(session, "preparation");
+		final Room room = getSessionWithAuthCheck(sessionkey);
+		deleteBySessionAndVariant(room, "preparation");
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public void deleteFlashcards(final String sessionkey) {
-		final Session session = getSessionWithAuthCheck(sessionkey);
-		deleteBySessionAndVariant(session, "flashcard");
+		final Room room = getSessionWithAuthCheck(sessionkey);
+		deleteBySessionAndVariant(room, "flashcard");
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated() and hasPermission(#questionId, 'content', 'owner')")
 	public void startNewPiRound(final String questionId, UserAuthentication user) {
 		final Content content = contentRepository.findOne(questionId);
-		final Session session = sessionRepository.findOne(content.getSessionId());
+		final Room room = roomRepository.findOne(content.getSessionId());
 
 		if (null == user) {
 			user = userService.getCurrentUser();
@@ -366,7 +366,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		content.updateRoundManagementState();
 		update(content);
 
-		this.publisher.publishEvent(new PiRoundEndEvent(this, session, content));
+		this.publisher.publishEvent(new PiRoundEndEvent(this, room, content));
 	}
 
 	@Override
@@ -375,7 +375,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		final ContentService contentService = this;
 		final UserAuthentication user = userService.getCurrentUser();
 		final Content content = contentRepository.findOne(questionId);
-		final Session session = sessionRepository.findOne(content.getSessionId());
+		final Room room = roomRepository.findOne(content.getSessionId());
 
 		final Date date = new Date();
 		final Timer timer = new Timer();
@@ -383,7 +383,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		content.updateRoundStartVariables(date, endDate);
 		update(content);
 
-		this.publisher.publishEvent(new PiRoundDelayedStartEvent(this, session, content));
+		this.publisher.publishEvent(new PiRoundDelayedStartEvent(this, room, content));
 		timerList.put(questionId, timer);
 
 		timer.schedule(new TimerTask() {
@@ -398,7 +398,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@PreAuthorize("hasPermission(#questionId, 'content', 'owner')")
 	public void cancelPiRoundChange(final String questionId) {
 		final Content content = contentRepository.findOne(questionId);
-		final Session session = sessionRepository.findOne(content.getSessionId());
+		final Room room = roomRepository.findOne(content.getSessionId());
 
 		cancelDelayedPiRoundChange(questionId);
 		content.resetRoundManagementState();
@@ -411,7 +411,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		}
 
 		update(content);
-		this.publisher.publishEvent(new PiRoundCancelEvent(this, session, content));
+		this.publisher.publishEvent(new PiRoundCancelEvent(this, room, content));
 	}
 
 	@Override
@@ -430,7 +430,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@CacheEvict("answerlists")
 	public void resetPiRoundState(final String questionId) {
 		final Content content = contentRepository.findOne(questionId);
-		final Session session = sessionRepository.findOne(content.getSessionId());
+		final Room room = roomRepository.findOne(content.getSessionId());
 		cancelDelayedPiRoundChange(questionId);
 
 		if ("freetext".equals(content.getQuestionType())) {
@@ -442,14 +442,14 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		content.resetRoundManagementState();
 		answerRepository.deleteByContentId(content.getId());
 		update(content);
-		this.publisher.publishEvent(new PiRoundResetEvent(this, session, content));
+		this.publisher.publishEvent(new PiRoundResetEvent(this, room, content));
 	}
 
 	@Override
 	@PreAuthorize("hasPermission(#questionId, 'content', 'owner')")
 	public void setVotingAdmission(final String questionId, final boolean disableVoting) {
 		final Content content = contentRepository.findOne(questionId);
-		final Session session = sessionRepository.findOne(content.getSessionId());
+		final Room room = roomRepository.findOne(content.getSessionId());
 		content.setVotingDisabled(disableVoting);
 
 		if (!disableVoting && !content.isActive()) {
@@ -460,9 +460,9 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		}
 		ArsnovaEvent event;
 		if (disableVoting) {
-			event = new LockVoteEvent(this, session, content);
+			event = new LockVoteEvent(this, room, content);
 		} else {
-			event = new UnlockVoteEvent(this, session, content);
+			event = new UnlockVoteEvent(this, room, content);
 		}
 		this.publisher.publishEvent(event);
 	}
@@ -476,8 +476,8 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 			@CacheEvict(value = "flashcardcontentlists", key = "#sessionId") })
 	public void setVotingAdmissions(final String sessionkey, final boolean disableVoting, List<Content> contents) {
 		final UserAuthentication user = getCurrentUser();
-		final Session session = getSession(sessionkey);
-		if (!session.isCreator(user)) {
+		final Room room = getSession(sessionkey);
+		if (!room.isCreator(user)) {
 			throw new UnauthorizedException();
 		}
 		for (final Content q : contents) {
@@ -487,9 +487,9 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		}
 		ArsnovaEvent event;
 		if (disableVoting) {
-			event = new LockVotesEvent(this, session, contents);
+			event = new LockVotesEvent(this, room, contents);
 		} else {
-			event = new UnlockVotesEvent(this, session, contents);
+			event = new UnlockVotesEvent(this, room, contents);
 		}
 		this.publisher.publishEvent(event);
 	}
@@ -498,21 +498,21 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@PreAuthorize("isAuthenticated()")
 	public void setVotingAdmissionForAllQuestions(final String sessionkey, final boolean disableVoting) {
 		final UserAuthentication user = getCurrentUser();
-		final Session session = getSession(sessionkey);
-		if (!session.isCreator(user)) {
+		final Room room = getSession(sessionkey);
+		if (!room.isCreator(user)) {
 			throw new UnauthorizedException();
 		}
-		final List<Content> contents = contentRepository.findBySessionId(session.getId());
-		setVotingAdmissionForAllQuestions(session.getId(), disableVoting);
+		final List<Content> contents = contentRepository.findBySessionId(room.getId());
+		setVotingAdmissionForAllQuestions(room.getId(), disableVoting);
 	}
 
-	private Session getSessionWithAuthCheck(final String sessionKeyword) {
+	private Room getSessionWithAuthCheck(final String sessionKeyword) {
 		final UserAuthentication user = userService.getCurrentUser();
-		final Session session = sessionRepository.findByKeyword(sessionKeyword);
-		if (user == null || session == null || !session.isCreator(user)) {
+		final Room room = roomRepository.findByKeyword(sessionKeyword);
+		if (user == null || room == null || !room.isCreator(user)) {
 			throw new UnauthorizedException();
 		}
-		return session;
+		return room;
 	}
 
 	@Override
@@ -528,8 +528,8 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@PreAuthorize("isAuthenticated()")
 	public List<String> getUnAnsweredQuestionIds(final String sessionKey) {
 		final UserAuthentication user = getCurrentUser();
-		final Session session = getSession(sessionKey);
-		return contentRepository.findUnansweredIdsBySessionIdAndUser(session.getId(), user);
+		final Room room = getSession(sessionKey);
+		return contentRepository.findUnansweredIdsBySessionIdAndUser(room.getId(), user);
 	}
 
 	private UserAuthentication getCurrentUser() {
@@ -559,8 +559,8 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		if (answer.isRead()) {
 			return;
 		}
-		final Session session = sessionRepository.findOne(answer.getSessionId());
-		if (session.isCreator(user)) {
+		final Room room = roomRepository.findOne(answer.getSessionId());
+		if (room.isCreator(user)) {
 			answer.setRead(true);
 			answerRepository.save(answer);
 		}
@@ -672,7 +672,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public List<Answer> getMyAnswersBySessionKey(final String sessionKey) {
-		final Session session = getSession(sessionKey);
+		final Room room = getSession(sessionKey);
 		// Load contents first because we are only interested in answers of the latest piRound.
 		final List<Content> contents = getBySessionKey(sessionKey);
 		final Map<String, Content> questionIdToQuestion = new HashMap<>();
@@ -681,13 +681,13 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		}
 
 		/* filter answers by active piRound per question */
-		final List<Answer> answers = answerRepository.findByUserSessionId(userService.getCurrentUser(), session.getId());
+		final List<Answer> answers = answerRepository.findByUserSessionId(userService.getCurrentUser(), room.getId());
 		final List<Answer> filteredAnswers = new ArrayList<>();
 		for (final Answer answer : answers) {
 			final Content content = questionIdToQuestion.get(answer.getQuestionId());
 			if (content == null) {
 				// Content is not present. Most likely it has been locked by the
-				// Session's creator. Locked Questions do not appear in this list.
+				// Room's creator. Locked Questions do not appear in this list.
 				continue;
 			}
 			if (0 == answer.getPiRound() && !"freetext".equals(content.getQuestionType())) {
@@ -718,11 +718,11 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		if (content == null) {
 			throw new NotFoundException();
 		}
-		final Session session = sessionRepository.findOne(content.getSessionId());
+		final Room room = roomRepository.findOne(content.getSessionId());
 
 		answer.setUser(user.getUsername());
 		answer.setQuestionId(content.getId());
-		answer.setSessionId(session.getId());
+		answer.setSessionId(room.getId());
 		answer.setQuestionVariant(content.getQuestionVariant());
 		answer.setQuestionValue(content.calculateValue(answer));
 		answer.setTimestamp(new Date().getTime());
@@ -743,7 +743,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 			answer.setPiRound(content.getPiRound());
 		}
 
-		this.answerQueue.offer(new AnswerQueueElement(session, content, answer, user));
+		this.answerQueue.offer(new AnswerQueueElement(room, content, answer, user));
 
 		return answer;
 	}
@@ -763,12 +763,12 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 			imageUtils.generateThumbnailImage(realAnswer);
 			content.checkTextStrictOptions(realAnswer);
 		}
-		final Session session = sessionRepository.findOne(content.getSessionId());
+		final Room room = roomRepository.findOne(content.getSessionId());
 		answer.setUser(user.getUsername());
 		answer.setQuestionId(content.getId());
-		answer.setSessionId(session.getId());
+		answer.setSessionId(room.getId());
 		answerRepository.save(realAnswer);
-		this.publisher.publishEvent(new NewAnswerEvent(this, session, answer, user, content));
+		this.publisher.publishEvent(new NewAnswerEvent(this, room, answer, user, content));
 
 		return answer;
 	}
@@ -782,13 +782,13 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 			throw new NotFoundException();
 		}
 		final UserAuthentication user = userService.getCurrentUser();
-		final Session session = sessionRepository.findOne(content.getSessionId());
-		if (user == null || session == null || !session.isCreator(user)) {
+		final Room room = roomRepository.findOne(content.getSessionId());
+		if (user == null || room == null || !room.isCreator(user)) {
 			throw new UnauthorizedException();
 		}
 		answerRepository.delete(answerId);
 
-		this.publisher.publishEvent(new DeleteAnswerEvent(this, session, content));
+		this.publisher.publishEvent(new DeleteAnswerEvent(this, room, content));
 	}
 
 	/* FIXME: caching */
@@ -796,12 +796,12 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@PreAuthorize("isAuthenticated()")
 	//@Cacheable("lecturecontentlists")
 	public List<Content> getLectureQuestions(final String sessionkey) {
-		final Session session = getSession(sessionkey);
+		final Room room = getSession(sessionkey);
 		final UserAuthentication user = userService.getCurrentUser();
-		if (session.isCreator(user)) {
-			return contentRepository.findBySessionIdOnlyLectureVariant(session.getId());
+		if (room.isCreator(user)) {
+			return contentRepository.findBySessionIdOnlyLectureVariant(room.getId());
 		} else {
-			return contentRepository.findBySessionIdOnlyLectureVariantAndActive(session.getId());
+			return contentRepository.findBySessionIdOnlyLectureVariantAndActive(room.getId());
 		}
 	}
 
@@ -810,12 +810,12 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@PreAuthorize("isAuthenticated()")
 	//@Cacheable("flashcardcontentlists")
 	public List<Content> getFlashcards(final String sessionkey) {
-		final Session session = getSession(sessionkey);
+		final Room room = getSession(sessionkey);
 		final UserAuthentication user = userService.getCurrentUser();
-		if (session.isCreator(user)) {
-			return contentRepository.findBySessionIdOnlyFlashcardVariant(session.getId());
+		if (room.isCreator(user)) {
+			return contentRepository.findBySessionIdOnlyFlashcardVariant(room.getId());
 		} else {
-			return contentRepository.findBySessionIdOnlyFlashcardVariantAndActive(session.getId());
+			return contentRepository.findBySessionIdOnlyFlashcardVariantAndActive(room.getId());
 		}
 	}
 
@@ -824,12 +824,12 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@PreAuthorize("isAuthenticated()")
 	//@Cacheable("preparationcontentlists")
 	public List<Content> getPreparationQuestions(final String sessionkey) {
-		final Session session = getSession(sessionkey);
+		final Room room = getSession(sessionkey);
 		final UserAuthentication user = userService.getCurrentUser();
-		if (session.isCreator(user)) {
-			return contentRepository.findBySessionIdOnlyPreparationVariant(session.getId());
+		if (room.isCreator(user)) {
+			return contentRepository.findBySessionIdOnlyPreparationVariant(room.getId());
 		} else {
-			return contentRepository.findBySessionIdOnlyPreparationVariantAndActive(session.getId());
+			return contentRepository.findBySessionIdOnlyPreparationVariantAndActive(room.getId());
 		}
 	}
 
@@ -845,12 +845,12 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		return contents;
 	}
 
-	private Session getSession(final String sessionkey) {
-		final Session session = sessionRepository.findByKeyword(sessionkey);
-		if (session == null) {
+	private Room getSession(final String sessionkey) {
+		final Room room = roomRepository.findByKeyword(sessionkey);
+		if (room == null) {
 			throw new NotFoundException();
 		}
-		return session;
+		return room;
 	}
 
 	@Override
@@ -935,8 +935,8 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	@Override
 	public List<String> getUnAnsweredLectureQuestionIds(final String sessionkey, final UserAuthentication user) {
-		final Session session = getSession(sessionkey);
-		return contentRepository.findUnansweredIdsBySessionIdAndUserOnlyLectureVariant(session.getId(), user);
+		final Room room = getSession(sessionkey);
+		return contentRepository.findUnansweredIdsBySessionIdAndUserOnlyLectureVariant(room.getId(), user);
 	}
 
 	@Override
@@ -948,8 +948,8 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	@Override
 	public List<String> getUnAnsweredPreparationQuestionIds(final String sessionkey, final UserAuthentication user) {
-		final Session session = getSession(sessionkey);
-		return contentRepository.findUnansweredIdsBySessionIdAndUserOnlyPreparationVariant(session.getId(), user);
+		final Room room = getSession(sessionkey);
+		return contentRepository.findUnansweredIdsBySessionIdAndUserOnlyPreparationVariant(room.getId(), user);
 	}
 
 	@Override
@@ -957,11 +957,11 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	public void publishAll(final String sessionkey, final boolean publish) {
 		/* TODO: resolve redundancies */
 		final UserAuthentication user = getCurrentUser();
-		final Session session = getSession(sessionkey);
-		if (!session.isCreator(user)) {
+		final Room room = getSession(sessionkey);
+		if (!room.isCreator(user)) {
 			throw new UnauthorizedException();
 		}
-		final List<Content> contents = contentRepository.findBySessionId(session.getId());
+		final List<Content> contents = contentRepository.findBySessionId(room.getId());
 		publishQuestions(sessionkey, publish, contents);
 	}
 
@@ -974,8 +974,8 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 			@CacheEvict(value = "flashcardcontentlists", key = "#sessionId") })
 	public void publishQuestions(final String sessionkey, final boolean publish, List<Content> contents) {
 		final UserAuthentication user = getCurrentUser();
-		final Session session = getSession(sessionkey);
-		if (!session.isCreator(user)) {
+		final Room room = getSession(sessionkey);
+		if (!room.isCreator(user)) {
 			throw new UnauthorizedException();
 		}
 		for (final Content content : contents) {
@@ -984,9 +984,9 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		contentRepository.save(contents);
 		ArsnovaEvent event;
 		if (publish) {
-			event = new UnlockQuestionsEvent(this, session, contents);
+			event = new UnlockQuestionsEvent(this, room, contents);
 		} else {
-			event = new LockQuestionsEvent(this, session, contents);
+			event = new LockQuestionsEvent(this, room, contents);
 		}
 		this.publisher.publishEvent(event);
 	}
@@ -996,17 +996,17 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@CacheEvict(value = "answerlists", allEntries = true)
 	public void deleteAllQuestionsAnswers(final String sessionkey) {
 		final UserAuthentication user = getCurrentUser();
-		final Session session = getSession(sessionkey);
-		if (!session.isCreator(user)) {
+		final Room room = getSession(sessionkey);
+		if (!room.isCreator(user)) {
 			throw new UnauthorizedException();
 		}
 
-		final List<Content> contents = contentRepository.findBySessionIdAndVariantAndActive(session.getId());
-		resetContentsRoundState(session.getId(), contents);
+		final List<Content> contents = contentRepository.findBySessionIdAndVariantAndActive(room.getId());
+		resetContentsRoundState(room.getId(), contents);
 		final List<String> contentIds = contents.stream().map(Content::getId).collect(Collectors.toList());
 		answerRepository.deleteAllAnswersForQuestions(contentIds);
 
-		this.publisher.publishEvent(new DeleteAllQuestionsAnswersEvent(this, session));
+		this.publisher.publishEvent(new DeleteAllQuestionsAnswersEvent(this, room));
 	}
 
 	/* TODO: Only evict cache entry for the answer's question. This requires some refactoring. */
@@ -1014,14 +1014,14 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
 	@CacheEvict(value = "answerlists", allEntries = true)
 	public void deleteAllPreparationAnswers(String sessionkey) {
-		final Session session = getSession(sessionkey);
+		final Room room = getSession(sessionkey);
 
-		final List<Content> contents = contentRepository.findBySessionIdAndVariantAndActive(session.getId(), "preparation");
-		resetContentsRoundState(session.getId(), contents);
+		final List<Content> contents = contentRepository.findBySessionIdAndVariantAndActive(room.getId(), "preparation");
+		resetContentsRoundState(room.getId(), contents);
 		final List<String> contentIds = contents.stream().map(Content::getId).collect(Collectors.toList());
 		answerRepository.deleteAllAnswersForQuestions(contentIds);
 
-		this.publisher.publishEvent(new DeleteAllPreparationAnswersEvent(this, session));
+		this.publisher.publishEvent(new DeleteAllPreparationAnswersEvent(this, room));
 	}
 
 	/* TODO: Only evict cache entry for the answer's question. This requires some refactoring. */
@@ -1029,14 +1029,14 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
 	@CacheEvict(value = "answerlists", allEntries = true)
 	public void deleteAllLectureAnswers(String sessionkey) {
-		final Session session = getSession(sessionkey);
+		final Room room = getSession(sessionkey);
 
-		final List<Content> contents = contentRepository.findBySessionIdAndVariantAndActive(session.getId(), "lecture");
-		resetContentsRoundState(session.getId(), contents);
+		final List<Content> contents = contentRepository.findBySessionIdAndVariantAndActive(room.getId(), "lecture");
+		resetContentsRoundState(room.getId(), contents);
 		final List<String> contentIds = contents.stream().map(Content::getId).collect(Collectors.toList());
 		answerRepository.deleteAllAnswersForQuestions(contentIds);
 
-		this.publisher.publishEvent(new DeleteAllLectureAnswersEvent(this, session));
+		this.publisher.publishEvent(new DeleteAllLectureAnswersEvent(this, room));
 	}
 
 	@Caching(evict = {
diff --git a/src/main/java/de/thm/arsnova/services/FeedbackServiceImpl.java b/src/main/java/de/thm/arsnova/services/FeedbackServiceImpl.java
index ed8c3c088..6da2a0425 100644
--- a/src/main/java/de/thm/arsnova/services/FeedbackServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/FeedbackServiceImpl.java
@@ -19,12 +19,12 @@ package de.thm.arsnova.services;
 
 import de.thm.arsnova.entities.Feedback;
 import de.thm.arsnova.entities.UserAuthentication;
-import de.thm.arsnova.entities.migration.v2.Session;
-import de.thm.arsnova.events.DeleteFeedbackForSessionsEvent;
+import de.thm.arsnova.entities.migration.v2.Room;
+import de.thm.arsnova.events.DeleteFeedbackForRoomsEvent;
 import de.thm.arsnova.events.NewFeedbackEvent;
 import de.thm.arsnova.exceptions.NoContentException;
 import de.thm.arsnova.exceptions.NotFoundException;
-import de.thm.arsnova.persistance.SessionRepository;
+import de.thm.arsnova.persistance.RoomRepository;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.ApplicationEventPublisherAware;
@@ -52,76 +52,76 @@ public class FeedbackServiceImpl implements FeedbackService, ApplicationEventPub
 	@Value("${feedback.cleanup}")
 	private int cleanupFeedbackDelay;
 
-	private SessionRepository sessionRepository;
+	private RoomRepository roomRepository;
 
 	private FeedbackStorageService feedbackStorage;
 
 	private ApplicationEventPublisher publisher;
 
-	public FeedbackServiceImpl(FeedbackStorageService feedbackStorage, SessionRepository sessionRepository) {
+	public FeedbackServiceImpl(FeedbackStorageService feedbackStorage, RoomRepository roomRepository) {
 		this.feedbackStorage = feedbackStorage;
-		this.sessionRepository = sessionRepository;
+		this.roomRepository = roomRepository;
 	}
 
 	@Override
 	@Scheduled(fixedDelay = DEFAULT_SCHEDULER_DELAY)
 	public void cleanFeedbackVotes() {
-		Map<Session, List<UserAuthentication>> deletedFeedbackOfUsersInSession = feedbackStorage.cleanVotes(cleanupFeedbackDelay);
+		Map<Room, List<UserAuthentication>> deletedFeedbackOfUsersInSession = feedbackStorage.cleanVotes(cleanupFeedbackDelay);
 		/*
-		 * mapping (Session -> Users) is not suitable for web sockets, because we want to sent all affected
+		 * mapping (Room -> Users) is not suitable for web sockets, because we want to sent all affected
 		 * sessions to a single user in one go instead of sending multiple messages for each session. Hence,
 		 * we need the mapping (User -> Sessions)
 		 */
-		final Map<UserAuthentication, Set<Session>> affectedSessionsOfUsers = new HashMap<>();
+		final Map<UserAuthentication, Set<Room>> affectedSessionsOfUsers = new HashMap<>();
 
-		for (Map.Entry<Session, List<UserAuthentication>> entry : deletedFeedbackOfUsersInSession.entrySet()) {
-			final Session session = entry.getKey();
+		for (Map.Entry<Room, List<UserAuthentication>> entry : deletedFeedbackOfUsersInSession.entrySet()) {
+			final Room room = entry.getKey();
 			final List<UserAuthentication> users = entry.getValue();
 			for (UserAuthentication user : users) {
-				Set<Session> affectedSessions;
+				Set<Room> affectedSessions;
 				if (affectedSessionsOfUsers.containsKey(user)) {
 					affectedSessions = affectedSessionsOfUsers.get(user);
 				} else {
 					affectedSessions = new HashSet<>();
 				}
-				affectedSessions.add(session);
+				affectedSessions.add(room);
 				affectedSessionsOfUsers.put(user, affectedSessions);
 			}
 		}
 		// Send feedback reset event to all affected users
-		for (Map.Entry<UserAuthentication, Set<Session>> entry : affectedSessionsOfUsers.entrySet()) {
+		for (Map.Entry<UserAuthentication, Set<Room>> entry : affectedSessionsOfUsers.entrySet()) {
 			final UserAuthentication user = entry.getKey();
-			final Set<Session> arsSessions = entry.getValue();
-			this.publisher.publishEvent(new DeleteFeedbackForSessionsEvent(this, arsSessions, user));
+			final Set<Room> arsSessions = entry.getValue();
+			this.publisher.publishEvent(new DeleteFeedbackForRoomsEvent(this, arsSessions, user));
 		}
 		// For each session that has deleted feedback, send the new feedback to all clients
-		for (Session session : deletedFeedbackOfUsersInSession.keySet()) {
+		for (Room session : deletedFeedbackOfUsersInSession.keySet()) {
 			this.publisher.publishEvent(new NewFeedbackEvent(this, session));
 		}
 	}
 
 	@Override
 	public void cleanFeedbackVotesBySessionKey(final String keyword, final int cleanupFeedbackDelayInMins) {
-		final Session session = sessionRepository.findByKeyword(keyword);
-		List<UserAuthentication> affectedUsers = feedbackStorage.cleanVotesBySession(session, cleanupFeedbackDelayInMins);
-		Set<Session> sessionSet = new HashSet<>();
-		sessionSet.add(session);
+		final Room room = roomRepository.findByKeyword(keyword);
+		List<UserAuthentication> affectedUsers = feedbackStorage.cleanVotesByRoom(room, cleanupFeedbackDelayInMins);
+		Set<Room> sessionSet = new HashSet<>();
+		sessionSet.add(room);
 
 		// Send feedback reset event to all affected users
 		for (UserAuthentication user : affectedUsers) {
-			this.publisher.publishEvent(new DeleteFeedbackForSessionsEvent(this, sessionSet, user));
+			this.publisher.publishEvent(new DeleteFeedbackForRoomsEvent(this, sessionSet, user));
 		}
 		// send the new feedback to all clients in affected session
-		this.publisher.publishEvent(new NewFeedbackEvent(this, session));
+		this.publisher.publishEvent(new NewFeedbackEvent(this, room));
 	}
 
 	@Override
 	public Feedback getBySessionKey(final String keyword) {
-		final Session session = sessionRepository.findByKeyword(keyword);
-		if (session == null) {
+		final Room room = roomRepository.findByKeyword(keyword);
+		if (room == null) {
 			throw new NotFoundException();
 		}
-		return feedbackStorage.getBySession(session);
+		return feedbackStorage.getByRoom(room);
 	}
 
 	@Override
@@ -134,11 +134,11 @@ public class FeedbackServiceImpl implements FeedbackService, ApplicationEventPub
 
 	@Override
 	public double calculateAverageFeedback(final String sessionkey) {
-		final Session session = sessionRepository.findByKeyword(sessionkey);
-		if (session == null) {
+		final Room room = roomRepository.findByKeyword(sessionkey);
+		if (room == null) {
 			throw new NotFoundException();
 		}
-		final Feedback feedback = feedbackStorage.getBySession(session);
+		final Feedback feedback = feedbackStorage.getByRoom(room);
 		final List<Integer> values = feedback.getValues();
 		final double count = values.get(Feedback.FEEDBACK_FASTER) + values.get(Feedback.FEEDBACK_OK)
 				+ values.get(Feedback.FEEDBACK_SLOWER) + values.get(Feedback.FEEDBACK_AWAY);
@@ -158,23 +158,23 @@ public class FeedbackServiceImpl implements FeedbackService, ApplicationEventPub
 
 	@Override
 	public boolean save(final String keyword, final int value, final UserAuthentication user) {
-		final Session session = sessionRepository.findByKeyword(keyword);
-		if (session == null) {
+		final Room room = roomRepository.findByKeyword(keyword);
+		if (room == null) {
 			throw new NotFoundException();
 		}
-		feedbackStorage.save(session, value, user);
+		feedbackStorage.save(room, value, user);
 
-		this.publisher.publishEvent(new NewFeedbackEvent(this, session));
+		this.publisher.publishEvent(new NewFeedbackEvent(this, room));
 		return true;
 	}
 
 	@Override
 	public Integer getBySessionKeyAndUser(final String keyword, final UserAuthentication user) {
-		final Session session = sessionRepository.findByKeyword(keyword);
-		if (session == null) {
+		final Room room = roomRepository.findByKeyword(keyword);
+		if (room == null) {
 			throw new NotFoundException();
 		}
-		return feedbackStorage.getBySessionAndUser(session, user);
+		return feedbackStorage.getByRoomAndUser(room, user);
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/services/FeedbackStorageService.java b/src/main/java/de/thm/arsnova/services/FeedbackStorageService.java
index 4bef32e90..c6596607f 100644
--- a/src/main/java/de/thm/arsnova/services/FeedbackStorageService.java
+++ b/src/main/java/de/thm/arsnova/services/FeedbackStorageService.java
@@ -2,15 +2,15 @@ package de.thm.arsnova.services;
 
 import de.thm.arsnova.entities.Feedback;
 import de.thm.arsnova.entities.UserAuthentication;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 import java.util.List;
 import java.util.Map;
 
 public interface FeedbackStorageService {
-	Feedback getBySession(Session session);
-	Integer getBySessionAndUser(Session session, UserAuthentication u);
-	void save(Session session, int value, UserAuthentication user);
-	Map<Session, List<UserAuthentication>> cleanVotes(int cleanupFeedbackDelay);
-	List<UserAuthentication> cleanVotesBySession(Session session, int cleanupFeedbackDelayInMins);
+	Feedback getByRoom(Room room);
+	Integer getByRoomAndUser(Room room, UserAuthentication u);
+	void save(Room room, int value, UserAuthentication user);
+	Map<Room, List<UserAuthentication>> cleanVotes(int cleanupFeedbackDelay);
+	List<UserAuthentication> cleanVotesByRoom(Room room, int cleanupFeedbackDelayInMins);
 }
diff --git a/src/main/java/de/thm/arsnova/services/FeedbackStorageServiceImpl.java b/src/main/java/de/thm/arsnova/services/FeedbackStorageServiceImpl.java
index 3b912d60a..3dda7e425 100644
--- a/src/main/java/de/thm/arsnova/services/FeedbackStorageServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/FeedbackStorageServiceImpl.java
@@ -19,7 +19,7 @@ package de.thm.arsnova.services;
 
 import de.thm.arsnova.entities.Feedback;
 import de.thm.arsnova.entities.UserAuthentication;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
@@ -59,21 +59,21 @@ public class FeedbackStorageServiceImpl implements FeedbackStorageService {
 		}
 	}
 
-	private final Map<Session, Map<UserAuthentication, FeedbackStorageObject>> data =
+	private final Map<Room, Map<UserAuthentication, FeedbackStorageObject>> data =
 			new ConcurrentHashMap<>();
 
 	@Override
-	public Feedback getBySession(final Session session) {
+	public Feedback getByRoom(final Room room) {
 		int a = 0;
 		int b = 0;
 		int c = 0;
 		int d = 0;
 
-		if (data.get(session) == null) {
+		if (data.get(room) == null) {
 			return new Feedback(0, 0, 0, 0);
 		}
 
-		for (final FeedbackStorageObject fso : data.get(session).values()) {
+		for (final FeedbackStorageObject fso : data.get(room).values()) {
 			switch (fso.getValue()) {
 			case Feedback.FEEDBACK_FASTER:
 				a++;
@@ -95,12 +95,12 @@ public class FeedbackStorageServiceImpl implements FeedbackStorageService {
 	}
 
 	@Override
-	public Integer getBySessionAndUser(final Session session, final UserAuthentication u) {
-		if (data.get(session) == null) {
+	public Integer getByRoomAndUser(final Room room, final UserAuthentication u) {
+		if (data.get(room) == null) {
 			return null;
 		}
 
-		for (final FeedbackStorageObject fso : data.get(session).values()) {
+		for (final FeedbackStorageObject fso : data.get(room).values()) {
 			if (fso.fromUser(u)) {
 				return fso.getValue();
 			}
@@ -111,23 +111,23 @@ public class FeedbackStorageServiceImpl implements FeedbackStorageService {
 
 	@Override
 	@Transactional(isolation = Isolation.READ_COMMITTED)
-	public void save(final Session session, final int value, final UserAuthentication user) {
-		if (data.get(session) == null) {
-			data.put(session, new ConcurrentHashMap<UserAuthentication, FeedbackStorageObject>());
+	public void save(final Room room, final int value, final UserAuthentication user) {
+		if (data.get(room) == null) {
+			data.put(room, new ConcurrentHashMap<UserAuthentication, FeedbackStorageObject>());
 		}
 
-		data.get(session).put(user, new FeedbackStorageObject(value, user));
+		data.get(room).put(user, new FeedbackStorageObject(value, user));
 	}
 
 	@Override
 	@Transactional(isolation = Isolation.READ_COMMITTED)
-	public Map<Session, List<UserAuthentication>> cleanVotes(final int cleanupFeedbackDelay) {
-		final Map<Session, List<UserAuthentication>> removedFeedbackOfUsersInSession = new HashMap<>();
-		for (final Session session : data.keySet()) {
-			if (session.getFeatures() == null || !session.getFeatures().isLiveClicker()) {
-				List<UserAuthentication> affectedUsers = cleanVotesBySession(session, cleanupFeedbackDelay);
+	public Map<Room, List<UserAuthentication>> cleanVotes(final int cleanupFeedbackDelay) {
+		final Map<Room, List<UserAuthentication>> removedFeedbackOfUsersInSession = new HashMap<>();
+		for (final Room room : data.keySet()) {
+			if (room.getFeatures() == null || !room.getFeatures().isLiveClicker()) {
+				List<UserAuthentication> affectedUsers = cleanVotesByRoom(room, cleanupFeedbackDelay);
 				if (!affectedUsers.isEmpty()) {
-					removedFeedbackOfUsersInSession.put(session, affectedUsers);
+					removedFeedbackOfUsersInSession.put(room, affectedUsers);
 				}
 			}
 		}
@@ -136,22 +136,22 @@ public class FeedbackStorageServiceImpl implements FeedbackStorageService {
 
 	@Override
 	@Transactional(isolation = Isolation.READ_COMMITTED)
-	public List<UserAuthentication> cleanVotesBySession(final Session session, final int cleanupFeedbackDelayInMins) {
+	public List<UserAuthentication> cleanVotesByRoom(final Room room, final int cleanupFeedbackDelayInMins) {
 		final long timelimitInMillis = TimeUnit.MILLISECONDS.convert(cleanupFeedbackDelayInMins, TimeUnit.MINUTES);
 		final Date maxAllowedTime = new Date(System.currentTimeMillis() - timelimitInMillis);
 		final boolean forceClean = cleanupFeedbackDelayInMins == 0;
 
-		final Map<UserAuthentication, FeedbackStorageObject> sessionFeedbacks = data.get(session);
+		final Map<UserAuthentication, FeedbackStorageObject> roomFeedbacks = data.get(room);
 		final List<UserAuthentication> affectedUsers = new ArrayList<>();
 
-		if (sessionFeedbacks != null) {
-			for (final Map.Entry<UserAuthentication, FeedbackStorageObject> entry : sessionFeedbacks.entrySet()) {
+		if (roomFeedbacks != null) {
+			for (final Map.Entry<UserAuthentication, FeedbackStorageObject> entry : roomFeedbacks.entrySet()) {
 				final UserAuthentication user = entry.getKey();
 				final FeedbackStorageObject feedback = entry.getValue();
 				final boolean timeIsUp = feedback.getTimestamp().before(maxAllowedTime);
-				final boolean isAwayFeedback = getBySessionAndUser(session, user).equals(Feedback.FEEDBACK_AWAY);
+				final boolean isAwayFeedback = getByRoomAndUser(room, user).equals(Feedback.FEEDBACK_AWAY);
 				if (forceClean || timeIsUp && !isAwayFeedback) {
-					sessionFeedbacks.remove(user);
+					roomFeedbacks.remove(user);
 					affectedUsers.add(user);
 				}
 			}
diff --git a/src/main/java/de/thm/arsnova/services/MotdServiceImpl.java b/src/main/java/de/thm/arsnova/services/MotdServiceImpl.java
index 0c8156955..34abcf4b0 100644
--- a/src/main/java/de/thm/arsnova/services/MotdServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/MotdServiceImpl.java
@@ -19,7 +19,7 @@ package de.thm.arsnova.services;
 
 import de.thm.arsnova.entities.Motd;
 import de.thm.arsnova.entities.migration.v2.MotdList;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 import de.thm.arsnova.entities.UserAuthentication;
 import de.thm.arsnova.exceptions.BadRequestException;
 import de.thm.arsnova.persistance.MotdListRepository;
@@ -44,7 +44,7 @@ import java.util.StringTokenizer;
 public class MotdServiceImpl extends DefaultEntityServiceImpl<Motd> implements MotdService {
 	private UserService userService;
 
-	private SessionService sessionService;
+	private RoomService roomService;
 
 	private MotdRepository motdRepository;
 
@@ -54,13 +54,13 @@ public class MotdServiceImpl extends DefaultEntityServiceImpl<Motd> implements M
 			MotdRepository repository,
 			MotdListRepository motdListRepository,
 			UserService userService,
-			SessionService sessionService,
+			RoomService roomService,
 			@Qualifier("defaultJsonMessageConverter") MappingJackson2HttpMessageConverter jackson2HttpMessageConverter) {
 		super(Motd.class, repository, jackson2HttpMessageConverter.getObjectMapper());
 		this.motdRepository = repository;
 		this.motdListRepository = motdListRepository;
 		this.userService = userService;
-		this.sessionService = sessionService;
+		this.roomService = roomService;
 	}
 
   @Override
@@ -143,8 +143,8 @@ public class MotdServiceImpl extends DefaultEntityServiceImpl<Motd> implements M
 	@Override
 	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
 	public Motd save(final String sessionkey, final Motd motd) {
-		Session session = sessionService.getByKey(sessionkey);
-		motd.setSessionId(session.getId());
+		Room room = roomService.getByKey(sessionkey);
+		motd.setSessionId(room.getId());
 
 		return createOrUpdateMotd(motd);
 	}
@@ -175,7 +175,7 @@ public class MotdServiceImpl extends DefaultEntityServiceImpl<Motd> implements M
 			Motd oldMotd = get(motd.getId());
 			motd.setMotdkey(oldMotd.getMotdkey());
 		} else {
-			motd.setMotdkey(sessionService.generateKey());
+			motd.setMotdkey(roomService.generateKey());
 		}
 		save(motd);
 
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/RoomService.java
similarity index 55%
rename from src/main/java/de/thm/arsnova/services/SessionService.java
rename to src/main/java/de/thm/arsnova/services/RoomService.java
index f1d72edbf..9bce5c560 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/RoomService.java
@@ -19,9 +19,9 @@ package de.thm.arsnova.services;
 
 import de.thm.arsnova.connector.model.Course;
 import de.thm.arsnova.entities.UserAuthentication;
-import de.thm.arsnova.entities.migration.v2.Session;
-import de.thm.arsnova.entities.migration.v2.SessionFeature;
-import de.thm.arsnova.entities.migration.v2.SessionInfo;
+import de.thm.arsnova.entities.migration.v2.Room;
+import de.thm.arsnova.entities.migration.v2.RoomFeature;
+import de.thm.arsnova.entities.migration.v2.RoomInfo;
 import de.thm.arsnova.entities.transport.ImportExportSession;
 import de.thm.arsnova.entities.transport.ScoreStatistics;
 
@@ -31,64 +31,64 @@ import java.util.UUID;
 /**
  * The functionality the session service should provide.
  */
-public interface SessionService extends EntityService<Session> {
-	Session getByKey(String keyword);
+public interface RoomService extends EntityService<Room> {
+	Room getByKey(String keyword);
 
-	Session getForAdmin(final String keyword);
+	Room getForAdmin(final String keyword);
 
-	Session getInternal(String keyword, UserAuthentication user);
+	Room getInternal(String keyword, UserAuthentication user);
 
-	Session save(Session session);
+	Room save(Room session);
 
 	boolean isKeyAvailable(String keyword);
 
 	String generateKey();
 
-	List<Session> getUserSessions(String username);
+	List<Room> getUserSessions(String username);
 
-	List<Session> getUserVisitedSessions(String username);
+	List<Room> getUserVisitedSessions(String username);
 
-	List<Session> getMySessions(int offset, int limit);
+	List<Room> getMySessions(int offset, int limit);
 
-	List<Session> getMyVisitedSessions(int offset, int limit);
+	List<Room> getMyVisitedSessions(int offset, int limit);
 
 	int countSessionsByCourses(List<Course> courses);
 
 	int activeUsers(String sessionkey);
 
-	Session setActive(String sessionkey, Boolean lock);
+	Room setActive(String sessionkey, Boolean lock);
 
-	Session join(String keyword, UUID socketId);
+	Room join(String keyword, UUID socketId);
 
-	Session update(String sessionkey, Session session);
+	Room update(String sessionkey, Room session);
 
-	Session updateCreator(String sessionkey, String newCreator);
+	Room updateCreator(String sessionkey, String newCreator);
 
-	Session updateInternal(Session session, UserAuthentication user);
+	Room updateInternal(Room session, UserAuthentication user);
 
-	int[] deleteCascading(Session session);
+	int[] deleteCascading(Room session);
 
 	ScoreStatistics getLearningProgress(String sessionkey, String type, String questionVariant);
 
 	ScoreStatistics getMyLearningProgress(String sessionkey, String type, String questionVariant);
 
-	List<SessionInfo> getMySessionsInfo(int offset, int limit);
+	List<RoomInfo> getMySessionsInfo(int offset, int limit);
 
-	List<SessionInfo> getPublicPoolSessionsInfo();
+	List<RoomInfo> getPublicPoolSessionsInfo();
 
-	List<SessionInfo> getMyPublicPoolSessionsInfo();
+	List<RoomInfo> getMyPublicPoolSessionsInfo();
 
-	List<SessionInfo> getMyVisitedSessionsInfo(int offset, int limit);
+	List<RoomInfo> getMyVisitedSessionsInfo(int offset, int limit);
 
-	SessionInfo importSession(ImportExportSession session);
+	RoomInfo importSession(ImportExportSession session);
 
 	ImportExportSession exportSession(String sessionkey, Boolean withAnswerStatistics, Boolean withFeedbackQuestions);
 
-	SessionInfo copySessionToPublicPool(String sessionkey, de.thm.arsnova.entities.transport.ImportExportSession.PublicPool pp);
+	RoomInfo copySessionToPublicPool(String sessionkey, de.thm.arsnova.entities.transport.ImportExportSession.PublicPool pp);
 
-	SessionFeature getFeatures(String sessionkey);
+	RoomFeature getFeatures(String sessionkey);
 
-	SessionFeature updateFeatures(String sessionkey, SessionFeature features);
+	RoomFeature updateFeatures(String sessionkey, RoomFeature features);
 
 	boolean lockFeedbackInput(String sessionkey, Boolean lock);
 
diff --git a/src/main/java/de/thm/arsnova/services/SessionServiceImpl.java b/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java
similarity index 57%
rename from src/main/java/de/thm/arsnova/services/SessionServiceImpl.java
rename to src/main/java/de/thm/arsnova/services/RoomServiceImpl.java
index 35e9123f6..95798f00a 100644
--- a/src/main/java/de/thm/arsnova/services/SessionServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java
@@ -18,32 +18,32 @@
 package de.thm.arsnova.services;
 
 import de.thm.arsnova.entities.UserAuthentication;
+import de.thm.arsnova.entities.migration.v2.Room;
 import de.thm.arsnova.persistance.AnswerRepository;
 import de.thm.arsnova.persistance.CommentRepository;
 import de.thm.arsnova.persistance.ContentRepository;
 import de.thm.arsnova.persistance.LogEntryRepository;
+import de.thm.arsnova.persistance.RoomRepository;
 import de.thm.arsnova.util.ImageUtils;
 import de.thm.arsnova.connector.client.ConnectorClient;
 import de.thm.arsnova.connector.model.Course;
 import de.thm.arsnova.services.score.ScoreCalculatorFactory;
 import de.thm.arsnova.services.score.ScoreCalculator;
 import de.thm.arsnova.entities.ScoreOptions;
-import de.thm.arsnova.entities.migration.v2.Session;
-import de.thm.arsnova.entities.migration.v2.SessionFeature;
-import de.thm.arsnova.entities.migration.v2.SessionInfo;
+import de.thm.arsnova.entities.migration.v2.RoomFeature;
+import de.thm.arsnova.entities.migration.v2.RoomInfo;
 import de.thm.arsnova.entities.transport.ImportExportSession;
 import de.thm.arsnova.entities.transport.ScoreStatistics;
-import de.thm.arsnova.events.DeleteSessionEvent;
+import de.thm.arsnova.events.DeleteRoomEvent;
 import de.thm.arsnova.events.FeatureChangeEvent;
 import de.thm.arsnova.events.FlipFlashcardsEvent;
 import de.thm.arsnova.events.LockFeedbackEvent;
-import de.thm.arsnova.events.NewSessionEvent;
-import de.thm.arsnova.events.StatusSessionEvent;
+import de.thm.arsnova.events.NewRoomEvent;
+import de.thm.arsnova.events.StatusRoomEvent;
 import de.thm.arsnova.exceptions.BadRequestException;
 import de.thm.arsnova.exceptions.ForbiddenException;
 import de.thm.arsnova.exceptions.NotFoundException;
 import de.thm.arsnova.exceptions.PayloadTooLargeException;
-import de.thm.arsnova.persistance.SessionRepository;
 import de.thm.arsnova.persistance.VisitedSessionRepository;
 import org.ektorp.UpdateConflictException;
 import org.slf4j.Logger;
@@ -70,14 +70,14 @@ import java.util.UUID;
  * Performs all session related operations.
  */
 @Service
-public class SessionServiceImpl extends DefaultEntityServiceImpl<Session> implements SessionService, ApplicationEventPublisherAware {
+public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements RoomService, ApplicationEventPublisherAware {
 	private static final long SESSION_INACTIVITY_CHECK_INTERVAL_MS = 30 * 60 * 1000L;
 
-	private static final Logger logger = LoggerFactory.getLogger(SessionServiceImpl.class);
+	private static final Logger logger = LoggerFactory.getLogger(RoomServiceImpl.class);
 
 	private LogEntryRepository dbLogger;
 
-	private SessionRepository sessionRepository;
+	private RoomRepository roomRepository;
 
 	private ContentRepository contentRepository;
 
@@ -105,8 +105,8 @@ public class SessionServiceImpl extends DefaultEntityServiceImpl<Session> implem
 
 	private ApplicationEventPublisher publisher;
 
-	public SessionServiceImpl(
-			SessionRepository repository,
+	public RoomServiceImpl(
+			RoomRepository repository,
 			ContentRepository contentRepository,
 			AnswerRepository answerRepository,
 			CommentRepository commentRepository,
@@ -117,8 +117,8 @@ public class SessionServiceImpl extends DefaultEntityServiceImpl<Session> implem
 			ScoreCalculatorFactory scoreCalculatorFactory,
 			ImageUtils imageUtils,
 			@Qualifier("defaultJsonMessageConverter") MappingJackson2HttpMessageConverter jackson2HttpMessageConverter) {
-		super(Session.class, repository, jackson2HttpMessageConverter.getObjectMapper());
-		this.sessionRepository = repository;
+		super(Room.class, repository, jackson2HttpMessageConverter.getObjectMapper());
+		this.roomRepository = repository;
 		this.contentRepository = contentRepository;
 		this.answerRepository = answerRepository;
 		this.commentRepository = commentRepository;
@@ -130,39 +130,39 @@ public class SessionServiceImpl extends DefaultEntityServiceImpl<Session> implem
 		this.imageUtils = imageUtils;
 	}
 
-	public static class SessionNameComparator implements Comparator<Session>, Serializable {
+	public static class SessionNameComparator implements Comparator<Room>, Serializable {
 		private static final long serialVersionUID = 1L;
 
 		@Override
-		public int compare(final Session session1, final Session session2) {
-			return session1.getName().compareToIgnoreCase(session2.getName());
+		public int compare(final Room room1, final Room room2) {
+			return room1.getName().compareToIgnoreCase(room2.getName());
 		}
 	}
 
-	public static class SessionInfoNameComparator implements Comparator<SessionInfo>, Serializable {
+	public static class SessionInfoNameComparator implements Comparator<RoomInfo>, Serializable {
 		private static final long serialVersionUID = 1L;
 
 		@Override
-		public int compare(final SessionInfo session1, final SessionInfo session2) {
-			return session1.getName().compareToIgnoreCase(session2.getName());
+		public int compare(final RoomInfo roomInfo1, final RoomInfo roomInfo2) {
+			return roomInfo1.getName().compareToIgnoreCase(roomInfo2.getName());
 		}
 	}
 
-	public static class SessionShortNameComparator implements Comparator<Session>, Serializable {
+	public static class SessionShortNameComparator implements Comparator<Room>, Serializable {
 		private static final long serialVersionUID = 1L;
 
 		@Override
-		public int compare(final Session session1, final Session session2) {
-			return session1.getShortName().compareToIgnoreCase(session2.getShortName());
+		public int compare(final Room room1, final Room room2) {
+			return room1.getShortName().compareToIgnoreCase(room2.getShortName());
 		}
 	}
 
-	public static class SessionInfoShortNameComparator implements Comparator<SessionInfo>, Serializable {
+	public static class SessionInfoShortNameComparator implements Comparator<RoomInfo>, Serializable {
 		private static final long serialVersionUID = 1L;
 
 		@Override
-		public int compare(final SessionInfo session1, final SessionInfo session2) {
-			return session1.getShortName().compareToIgnoreCase(session2.getShortName());
+		public int compare(final RoomInfo roomInfo1, final RoomInfo roomInfo2) {
+			return roomInfo1.getShortName().compareToIgnoreCase(roomInfo2.getShortName());
 		}
 	}
 
@@ -178,18 +178,18 @@ public class SessionServiceImpl extends DefaultEntityServiceImpl<Session> implem
 			long unixTime = System.currentTimeMillis();
 			long lastActivityBefore = unixTime - guestSessionInactivityThresholdDays * 24 * 60 * 60 * 1000L;
 			int totalCount[] = new int[] {0, 0, 0};
-			List<Session> inactiveSessions = sessionRepository.findInactiveGuestSessionsMetadata(lastActivityBefore);
-			for (Session session : inactiveSessions) {
-				int[] count = deleteCascading(session);
+			List<Room> inactiveRooms = roomRepository.findInactiveGuestSessionsMetadata(lastActivityBefore);
+			for (Room room : inactiveRooms) {
+				int[] count = deleteCascading(room);
 				totalCount[0] += count[0];
 				totalCount[1] += count[1];
 				totalCount[2] += count[2];
 			}
 
-			if (!inactiveSessions.isEmpty()) {
-				logger.info("Deleted {} inactive guest sessions.", inactiveSessions.size());
+			if (!inactiveRooms.isEmpty()) {
+				logger.info("Deleted {} inactive guest sessions.", inactiveRooms.size());
 				dbLogger.log("cleanup", "type", "session",
-						"sessionCount", inactiveSessions.size(),
+						"sessionCount", inactiveRooms.size(),
 						"questionCount", totalCount[0],
 						"answerCount", totalCount[1],
 						"commentCount", totalCount[2]);
@@ -208,12 +208,12 @@ public class SessionServiceImpl extends DefaultEntityServiceImpl<Session> implem
 	}
 
 	@Override
-	public Session join(final String keyword, final UUID socketId) {
+	public Room join(final String keyword, final UUID socketId) {
 		/* Socket.IO solution */
 
-		Session session = null != keyword ? sessionRepository.findByKeyword(keyword) : null;
+		Room room = null != keyword ? roomRepository.findByKeyword(keyword) : null;
 
-		if (null == session) {
+		if (null == room) {
 			userService.removeUserFromSessionBySocketId(socketId);
 			return null;
 		}
@@ -221,23 +221,23 @@ public class SessionServiceImpl extends DefaultEntityServiceImpl<Session> implem
 
 		userService.addUserToSessionBySocketId(socketId, keyword);
 
-		if (session.getCreator().equals(user.getUsername())) {
-			updateSessionOwnerActivity(session);
+		if (room.getCreator().equals(user.getUsername())) {
+			updateSessionOwnerActivity(room);
 		}
-		sessionRepository.registerAsOnlineUser(user, session);
+		roomRepository.registerAsOnlineUser(user, room);
 
-		if (connectorClient != null && session.isCourseSession()) {
-			final String courseid = session.getCourseId();
+		if (connectorClient != null && room.isCourseSession()) {
+			final String courseid = room.getCourseId();
 			if (!connectorClient.getMembership(user.getUsername(), courseid).isMember()) {
 				throw new ForbiddenException("User is no course member.");
 			}
 		}
 
-		return session;
+		return room;
 	}
 
-	@CachePut(value = "sessions")
-	private Session updateSessionOwnerActivity(final Session session) {
+	@CachePut(value = "rooms")
+	private Room updateSessionOwnerActivity(final Room session) {
 		try {
 			/* Do not clutter CouchDB. Only update once every 3 hours. */
 			if (session.getLastOwnerActivity() > System.currentTimeMillis() - 3 * 3600000) {
@@ -256,14 +256,14 @@ public class SessionServiceImpl extends DefaultEntityServiceImpl<Session> implem
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public Session getByKey(final String keyword) {
+	public Room getByKey(final String keyword) {
 		final UserAuthentication user = userService.getCurrentUser();
 		return this.getInternal(keyword, user);
 	}
 
 	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
-	public Session getForAdmin(final String keyword) {
-		return sessionRepository.findByKeyword(keyword);
+	public Room getForAdmin(final String keyword) {
+		return roomRepository.findByKeyword(keyword);
 	}
 
 	/*
@@ -271,111 +271,111 @@ public class SessionServiceImpl extends DefaultEntityServiceImpl<Session> implem
 	 * TODO: Find a better way of doing this...
 	 */
 	@Override
-	public Session getInternal(final String keyword, final UserAuthentication user) {
-		final Session session = sessionRepository.findByKeyword(keyword);
-		if (session == null) {
+	public Room getInternal(final String keyword, final UserAuthentication user) {
+		final Room room = roomRepository.findByKeyword(keyword);
+		if (room == null) {
 			throw new NotFoundException();
 		}
-		if (!session.isActive()) {
-			if (user.hasRole(UserSessionService.Role.STUDENT)) {
+		if (!room.isActive()) {
+			if (user.hasRole(UserRoomService.Role.STUDENT)) {
 				throw new ForbiddenException("User is not session creator.");
-			} else if (user.hasRole(UserSessionService.Role.SPEAKER) && !session.isCreator(user)) {
+			} else if (user.hasRole(UserRoomService.Role.SPEAKER) && !room.isCreator(user)) {
 				throw new ForbiddenException("User is not session creator.");
 			}
 		}
-		if (connectorClient != null && session.isCourseSession()) {
-			final String courseid = session.getCourseId();
+		if (connectorClient != null && room.isCourseSession()) {
+			final String courseid = room.getCourseId();
 			if (!connectorClient.getMembership(user.getUsername(), courseid).isMember()) {
 				throw new ForbiddenException("User is no course member.");
 			}
 		}
-		return session;
+		return room;
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated() and hasPermission(#sessionkey, 'session', 'owner')")
-	public List<Session> getUserSessions(String username) {
-		return sessionRepository.findByUsername(username, 0, 0);
+	public List<Room> getUserSessions(String username) {
+		return roomRepository.findByUsername(username, 0, 0);
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<Session> getMySessions(final int offset, final int limit) {
-		return sessionRepository.findByUser(userService.getCurrentUser(), offset, limit);
+	public List<Room> getMySessions(final int offset, final int limit) {
+		return roomRepository.findByUser(userService.getCurrentUser(), offset, limit);
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<SessionInfo> getPublicPoolSessionsInfo() {
-		return sessionRepository.findInfosForPublicPool();
+	public List<RoomInfo> getPublicPoolSessionsInfo() {
+		return roomRepository.findInfosForPublicPool();
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<SessionInfo> getMyPublicPoolSessionsInfo() {
-		return sessionRepository.findInfosForPublicPoolByUser(userService.getCurrentUser());
+	public List<RoomInfo> getMyPublicPoolSessionsInfo() {
+		return roomRepository.findInfosForPublicPoolByUser(userService.getCurrentUser());
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<SessionInfo> getMySessionsInfo(final int offset, final int limit) {
+	public List<RoomInfo> getMySessionsInfo(final int offset, final int limit) {
 		final UserAuthentication user = userService.getCurrentUser();
-		return sessionRepository.getMySessionsInfo(user, offset, limit);
+		return roomRepository.getMySessionsInfo(user, offset, limit);
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<Session> getMyVisitedSessions(final int offset, final int limit) {
-		return sessionRepository.findVisitedByUsername(userService.getCurrentUser().getUsername(), offset, limit);
+	public List<Room> getMyVisitedSessions(final int offset, final int limit) {
+		return roomRepository.findVisitedByUsername(userService.getCurrentUser().getUsername(), offset, limit);
 	}
 
 	@Override
 	@PreAuthorize("hasPermission('', 'motd', 'admin')")
-	public List<Session> getUserVisitedSessions(String username) {
-		return sessionRepository.findVisitedByUsername(username, 0, 0);
+	public List<Room> getUserVisitedSessions(String username) {
+		return roomRepository.findVisitedByUsername(username, 0, 0);
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<SessionInfo> getMyVisitedSessionsInfo(final int offset, final int limit) {
-		return sessionRepository.findInfoForVisitedByUser(userService.getCurrentUser(), offset, limit);
+	public List<RoomInfo> getMyVisitedSessionsInfo(final int offset, final int limit) {
+		return roomRepository.findInfoForVisitedByUser(userService.getCurrentUser(), offset, limit);
 	}
 
 	@Override
 	@PreAuthorize("hasPermission('', 'session', 'create')")
-	@Caching(evict = @CacheEvict(cacheNames = "sessions", key = "#result.keyword"))
-	public Session save(final Session session) {
-		if (connectorClient != null && session.getCourseId() != null) {
+	@Caching(evict = @CacheEvict(cacheNames = "rooms", key = "#result.keyword"))
+	public Room save(final Room room) {
+		if (connectorClient != null && room.getCourseId() != null) {
 			if (!connectorClient.getMembership(
-					userService.getCurrentUser().getUsername(), session.getCourseId()).isMember()
+					userService.getCurrentUser().getUsername(), room.getCourseId()).isMember()
 					) {
 				throw new ForbiddenException();
 			}
 		}
-		handleLogo(session);
+		handleLogo(room);
 
 		// set some default values
 		ScoreOptions lpo = new ScoreOptions();
 		lpo.setType("questions");
-		session.setLearningProgressOptions(lpo);
+		room.setLearningProgressOptions(lpo);
 
-		SessionFeature sf = new SessionFeature();
+		RoomFeature sf = new RoomFeature();
 		sf.setLecture(true);
 		sf.setFeedback(true);
 		sf.setInterposed(true);
 		sf.setJitt(true);
 		sf.setLearningProgress(true);
 		sf.setPi(true);
-		session.setFeatures(sf);
+		room.setFeatures(sf);
 
-		session.setKeyword(generateKey());
-		session.setCreationTime(System.currentTimeMillis());
-		session.setCreator(userService.getCurrentUser().getUsername());
-		session.setActive(true);
-		session.setFeedbackLock(false);
+		room.setKeyword(generateKey());
+		room.setCreationTime(System.currentTimeMillis());
+		room.setCreator(userService.getCurrentUser().getUsername());
+		room.setActive(true);
+		room.setFeedbackLock(false);
 
-		final Session result = save(session);
-		this.publisher.publishEvent(new NewSessionEvent(this, result));
+		final Room result = save(room);
+		this.publisher.publishEvent(new NewRoomEvent(this, result));
 		return result;
 	}
 
@@ -399,7 +399,7 @@ public class SessionServiceImpl extends DefaultEntityServiceImpl<Session> implem
 
 	@Override
 	public int countSessionsByCourses(final List<Course> courses) {
-		final List<Session> sessions = sessionRepository.findSessionsByCourses(courses);
+		final List<Room> sessions = roomRepository.findSessionsByCourses(courses);
 		if (sessions == null) {
 			return 0;
 		}
@@ -413,57 +413,57 @@ public class SessionServiceImpl extends DefaultEntityServiceImpl<Session> implem
 
 	@Override
 	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
-	public Session setActive(final String sessionkey, final Boolean lock) {
-		final Session session = sessionRepository.findByKeyword(sessionkey);
-		session.setActive(lock);
-		this.publisher.publishEvent(new StatusSessionEvent(this, session));
-		sessionRepository.save(session);
+	public Room setActive(final String sessionkey, final Boolean lock) {
+		final Room room = roomRepository.findByKeyword(sessionkey);
+		room.setActive(lock);
+		this.publisher.publishEvent(new StatusRoomEvent(this, room));
+		roomRepository.save(room);
 
-		return session;
+		return room;
 	}
 
 	@Override
-	@PreAuthorize("hasPermission(#session, 'owner')")
-	@CachePut(value = "sessions", key = "#session")
-	public Session update(final String sessionkey, final Session session) {
-		final Session existingSession = sessionRepository.findByKeyword(sessionkey);
-
-		existingSession.setActive(session.isActive());
-		existingSession.setShortName(session.getShortName());
-		existingSession.setPpAuthorName(session.getPpAuthorName());
-		existingSession.setPpAuthorMail(session.getPpAuthorMail());
-		existingSession.setShortName(session.getShortName());
-		existingSession.setPpAuthorName(session.getPpAuthorName());
-		existingSession.setPpFaculty(session.getPpFaculty());
-		existingSession.setName(session.getName());
-		existingSession.setPpUniversity(session.getPpUniversity());
-		existingSession.setPpDescription(session.getPpDescription());
-		existingSession.setPpLevel(session.getPpLevel());
-		existingSession.setPpLicense(session.getPpLicense());
-		existingSession.setPpSubject(session.getPpSubject());
-		existingSession.setFeedbackLock(session.getFeedbackLock());
-
-		handleLogo(session);
-		existingSession.setPpLogo(session.getPpLogo());
-
-		sessionRepository.save(existingSession);
-
-		return session;
+	@PreAuthorize("hasPermission(#room, 'owner')")
+	@CachePut(value = "rooms", key = "#room")
+	public Room update(final String sessionkey, final Room room) {
+		final Room existingSession = roomRepository.findByKeyword(sessionkey);
+
+		existingSession.setActive(room.isActive());
+		existingSession.setShortName(room.getShortName());
+		existingSession.setPpAuthorName(room.getPpAuthorName());
+		existingSession.setPpAuthorMail(room.getPpAuthorMail());
+		existingSession.setShortName(room.getShortName());
+		existingSession.setPpAuthorName(room.getPpAuthorName());
+		existingSession.setPpFaculty(room.getPpFaculty());
+		existingSession.setName(room.getName());
+		existingSession.setPpUniversity(room.getPpUniversity());
+		existingSession.setPpDescription(room.getPpDescription());
+		existingSession.setPpLevel(room.getPpLevel());
+		existingSession.setPpLicense(room.getPpLicense());
+		existingSession.setPpSubject(room.getPpSubject());
+		existingSession.setFeedbackLock(room.getFeedbackLock());
+
+		handleLogo(room);
+		existingSession.setPpLogo(room.getPpLogo());
+
+		roomRepository.save(existingSession);
+
+		return room;
 	}
 
 	@Override
 	@PreAuthorize("hasPermission('', 'motd', 'admin')")
-	@Caching(evict = { @CacheEvict("sessions"), @CacheEvict(cacheNames = "sessions", key = "#sessionkey.keyword") })
-	public Session updateCreator(String sessionkey, String newCreator) {
-		final Session session = sessionRepository.findByKeyword(sessionkey);
-		if (session == null) {
+	@Caching(evict = { @CacheEvict("rooms"), @CacheEvict(cacheNames = "rooms", key = "#sessionkey.keyword") })
+	public Room updateCreator(String sessionkey, String newCreator) {
+		final Room room = roomRepository.findByKeyword(sessionkey);
+		if (room == null) {
 			throw new NullPointerException("Could not load session " + sessionkey + ".");
 		}
 
-		session.setCreator(newCreator);
-		save(session);
+		room.setCreator(newCreator);
+		save(room);
 
-		return save(session);
+		return save(room);
 	}
 
 	/*
@@ -471,28 +471,28 @@ public class SessionServiceImpl extends DefaultEntityServiceImpl<Session> implem
 	 * TODO: Find a better way of doing this...
 	 */
 	@Override
-	public Session updateInternal(final Session session, final UserAuthentication user) {
-		if (session.isCreator(user)) {
-			sessionRepository.save(session);
-			return session;
+	public Room updateInternal(final Room room, final UserAuthentication user) {
+		if (room.isCreator(user)) {
+			roomRepository.save(room);
+			return room;
 		}
 		return null;
 	}
 
 	@Override
-	@PreAuthorize("hasPermission(#session, 'owner')")
-	@CacheEvict("sessions")
-	public int[] deleteCascading(final Session session) {
+	@PreAuthorize("hasPermission(#room, 'owner')")
+	@CacheEvict("rooms")
+	public int[] deleteCascading(final Room room) {
 		int[] count = new int[] {0, 0, 0};
-		List<String> contentIds = contentRepository.findIdsBySessionId(session.getId());
-		count[2] = commentRepository.deleteBySessionId(session.getId());
+		List<String> contentIds = contentRepository.findIdsBySessionId(room.getId());
+		count[2] = commentRepository.deleteBySessionId(room.getId());
 		count[1] = answerRepository.deleteByContentIds(contentIds);
-		count[0] = contentRepository.deleteBySessionId(session.getId());
-		sessionRepository.delete(session);
-		logger.debug("Deleted session document {} and related data.", session.getId());
-		dbLogger.log("delete", "type", "session", "id", session.getId());
+		count[0] = contentRepository.deleteBySessionId(room.getId());
+		roomRepository.delete(room);
+		logger.debug("Deleted session document {} and related data.", room.getId());
+		dbLogger.log("delete", "type", "session", "id", room.getId());
 
-		this.publisher.publishEvent(new DeleteSessionEvent(this, session));
+		this.publisher.publishEvent(new DeleteRoomEvent(this, room));
 
 		return count;
 	}
@@ -500,25 +500,25 @@ public class SessionServiceImpl extends DefaultEntityServiceImpl<Session> implem
 	@Override
 	@PreAuthorize("hasPermission(#sessionkey, 'session', 'read')")
 	public ScoreStatistics getLearningProgress(final String sessionkey, final String type, final String questionVariant) {
-		final Session session = sessionRepository.findByKeyword(sessionkey);
+		final Room room = roomRepository.findByKeyword(sessionkey);
 		ScoreCalculator scoreCalculator = scoreCalculatorFactory.create(type, questionVariant);
-		return scoreCalculator.getCourseProgress(session);
+		return scoreCalculator.getCourseProgress(room);
 	}
 
 	@Override
 	@PreAuthorize("hasPermission(#sessionkey, 'session', 'read')")
 	public ScoreStatistics getMyLearningProgress(final String sessionkey, final String type, final String questionVariant) {
-		final Session session = sessionRepository.findByKeyword(sessionkey);
+		final Room room = roomRepository.findByKeyword(sessionkey);
 		final UserAuthentication user = userService.getCurrentUser();
 		ScoreCalculator scoreCalculator = scoreCalculatorFactory.create(type, questionVariant);
-		return scoreCalculator.getMyProgress(session, user);
+		return scoreCalculator.getMyProgress(room, user);
 	}
 
 	@Override
 	@PreAuthorize("hasPermission('', 'session', 'create')")
-	public SessionInfo importSession(ImportExportSession importSession) {
+	public RoomInfo importSession(ImportExportSession importSession) {
 		final UserAuthentication user = userService.getCurrentUser();
-		final SessionInfo info = sessionRepository.importSession(user, importSession);
+		final RoomInfo info = roomRepository.importSession(user, importSession);
 		if (info == null) {
 			throw new NullPointerException("Could not import session.");
 		}
@@ -528,17 +528,17 @@ public class SessionServiceImpl extends DefaultEntityServiceImpl<Session> implem
 	@Override
 	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
 	public ImportExportSession exportSession(String sessionkey, Boolean withAnswerStatistics, Boolean withFeedbackQuestions) {
-		return sessionRepository.exportSession(sessionkey, withAnswerStatistics, withFeedbackQuestions);
+		return roomRepository.exportSession(sessionkey, withAnswerStatistics, withFeedbackQuestions);
 	}
 
 	@Override
 	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
-	public SessionInfo copySessionToPublicPool(String sessionkey, de.thm.arsnova.entities.transport.ImportExportSession.PublicPool pp) {
-		ImportExportSession temp = sessionRepository.exportSession(sessionkey, false, false);
+	public RoomInfo copySessionToPublicPool(String sessionkey, de.thm.arsnova.entities.transport.ImportExportSession.PublicPool pp) {
+		ImportExportSession temp = roomRepository.exportSession(sessionkey, false, false);
 		temp.getSession().setPublicPool(pp);
 		temp.getSession().setSessionType("public_pool");
 		final UserAuthentication user = userService.getCurrentUser();
-		return sessionRepository.importSession(user, temp);
+		return roomRepository.importSession(user, temp);
 	}
 
 	@Override
@@ -548,62 +548,62 @@ public class SessionServiceImpl extends DefaultEntityServiceImpl<Session> implem
 
 	@Override
 	@PreAuthorize("hasPermission(#sessionkey, 'session', 'read')")
-	public SessionFeature getFeatures(String sessionkey) {
-		return sessionRepository.findByKeyword(sessionkey).getFeatures();
+	public RoomFeature getFeatures(String sessionkey) {
+		return roomRepository.findByKeyword(sessionkey).getFeatures();
 	}
 
 	@Override
 	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
-	public SessionFeature updateFeatures(String sessionkey, SessionFeature features) {
-		final Session session = sessionRepository.findByKeyword(sessionkey);
+	public RoomFeature updateFeatures(String sessionkey, RoomFeature features) {
+		final Room room = roomRepository.findByKeyword(sessionkey);
 		final UserAuthentication user = userService.getCurrentUser();
-		session.setFeatures(features);
-		this.publisher.publishEvent(new FeatureChangeEvent(this, session));
-		sessionRepository.save(session);
+		room.setFeatures(features);
+		this.publisher.publishEvent(new FeatureChangeEvent(this, room));
+		roomRepository.save(room);
 
-		return session.getFeatures();
+		return room.getFeatures();
 	}
 
 	@Override
 	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
 	public boolean lockFeedbackInput(String sessionkey, Boolean lock) {
-		final Session session = sessionRepository.findByKeyword(sessionkey);
+		final Room room = roomRepository.findByKeyword(sessionkey);
 		final UserAuthentication user = userService.getCurrentUser();
 		if (!lock) {
 			feedbackService.cleanFeedbackVotesBySessionKey(sessionkey, 0);
 		}
 
-		session.setFeedbackLock(lock);
-		this.publisher.publishEvent(new LockFeedbackEvent(this, session));
-		sessionRepository.save(session);
+		room.setFeedbackLock(lock);
+		this.publisher.publishEvent(new LockFeedbackEvent(this, room));
+		roomRepository.save(room);
 
-		return session.getFeedbackLock();
+		return room.getFeedbackLock();
 	}
 
 	@Override
 	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
 	public boolean flipFlashcards(String sessionkey, Boolean flip) {
-		final Session session = sessionRepository.findByKeyword(sessionkey);
+		final Room room = roomRepository.findByKeyword(sessionkey);
 		final UserAuthentication user = userService.getCurrentUser();
-		session.setFlipFlashcards(flip);
-		this.publisher.publishEvent(new FlipFlashcardsEvent(this, session));
-		sessionRepository.save(session);
+		room.setFlipFlashcards(flip);
+		this.publisher.publishEvent(new FlipFlashcardsEvent(this, room));
+		roomRepository.save(room);
 
-		return session.getFlipFlashcards();
+		return room.getFlipFlashcards();
 	}
 
-	private void handleLogo(Session session) {
-		if (session.getPpLogo() != null) {
-			if (session.getPpLogo().startsWith("http")) {
-				final String base64ImageString = imageUtils.encodeImageToString(session.getPpLogo());
+	private void handleLogo(Room room) {
+		if (room.getPpLogo() != null) {
+			if (room.getPpLogo().startsWith("http")) {
+				final String base64ImageString = imageUtils.encodeImageToString(room.getPpLogo());
 				if (base64ImageString == null) {
 					throw new BadRequestException("Could not encode image.");
 				}
-				session.setPpLogo(base64ImageString);
+				room.setPpLogo(base64ImageString);
 			}
 
 			// base64 adds offset to filesize, formula taken from: http://en.wikipedia.org/wiki/Base64#MIME
-			final int fileSize = (int) ((session.getPpLogo().length() - 814) / 1.37);
+			final int fileSize = (int) ((room.getPpLogo().length() - 814) / 1.37);
 			if (fileSize > uploadFileSizeByte) {
 				throw new PayloadTooLargeException("Could not save file. File is too large with " + fileSize + " Byte.");
 			}
diff --git a/src/main/java/de/thm/arsnova/services/UserSessionService.java b/src/main/java/de/thm/arsnova/services/UserRoomService.java
similarity index 87%
rename from src/main/java/de/thm/arsnova/services/UserSessionService.java
rename to src/main/java/de/thm/arsnova/services/UserRoomService.java
index 4cca18bde..972a075f8 100644
--- a/src/main/java/de/thm/arsnova/services/UserSessionService.java
+++ b/src/main/java/de/thm/arsnova/services/UserRoomService.java
@@ -18,14 +18,14 @@
 package de.thm.arsnova.services;
 
 import de.thm.arsnova.entities.UserAuthentication;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 
 import java.util.UUID;
 
 /**
  * The functionality the user-session service should provide.
  */
-public interface UserSessionService {
+public interface UserRoomService {
 
 	enum Role {
 		STUDENT,
@@ -35,8 +35,8 @@ public interface UserSessionService {
 	void setUser(UserAuthentication user);
 	UserAuthentication getUser();
 
-	void setSession(Session session);
-	Session getSession();
+	void setRoom(Room room);
+	Room getRoom();
 
 	void setSocketId(UUID socketId);
 	UUID getSocketId();
@@ -44,6 +44,6 @@ public interface UserSessionService {
 	void setRole(Role role);
 	Role getRole();
 
-	boolean inSession();
+	boolean inRoom();
 	boolean isAuthenticated();
 }
diff --git a/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java b/src/main/java/de/thm/arsnova/services/UserRoomServiceImpl.java
similarity index 85%
rename from src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java
rename to src/main/java/de/thm/arsnova/services/UserRoomServiceImpl.java
index 593f68152..847dbd2ac 100644
--- a/src/main/java/de/thm/arsnova/services/UserSessionServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/UserRoomServiceImpl.java
@@ -18,7 +18,7 @@
 package de.thm.arsnova.services;
 
 import de.thm.arsnova.entities.UserAuthentication;
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 import org.springframework.context.annotation.Scope;
 import org.springframework.context.annotation.ScopedProxyMode;
 import org.springframework.stereotype.Component;
@@ -31,11 +31,11 @@ import java.util.UUID;
  */
 @Component
 @Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
-public class UserSessionServiceImpl implements UserSessionService, Serializable {
+public class UserRoomServiceImpl implements UserRoomService, Serializable {
 	private static final long serialVersionUID = 1L;
 
 	private UserAuthentication user;
-	private Session session;
+	private Room room;
 	private UUID socketId;
 	private Role role;
 
@@ -51,13 +51,13 @@ public class UserSessionServiceImpl implements UserSessionService, Serializable
 	}
 
 	@Override
-	public void setSession(final Session s) {
-		session = s;
+	public void setRoom(final Room room) {
+		this.room = room;
 	}
 
 	@Override
-	public Session getSession() {
-		return session;
+	public Room getRoom() {
+		return room;
 	}
 
 	@Override
@@ -71,9 +71,9 @@ public class UserSessionServiceImpl implements UserSessionService, Serializable
 	}
 
 	@Override
-	public boolean inSession() {
+	public boolean inRoom() {
 		return isAuthenticated()
-				&& getSession() != null;
+				&& getRoom() != null;
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/services/score/ScoreCalculator.java b/src/main/java/de/thm/arsnova/services/score/ScoreCalculator.java
index 936d4486d..09560574f 100644
--- a/src/main/java/de/thm/arsnova/services/score/ScoreCalculator.java
+++ b/src/main/java/de/thm/arsnova/services/score/ScoreCalculator.java
@@ -17,7 +17,7 @@
  */
 package de.thm.arsnova.services.score;
 
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 import de.thm.arsnova.entities.UserAuthentication;
 import de.thm.arsnova.entities.transport.ScoreStatistics;
 
@@ -26,7 +26,7 @@ import de.thm.arsnova.entities.transport.ScoreStatistics;
  */
 public interface ScoreCalculator {
 
-	ScoreStatistics getCourseProgress(Session session);
+	ScoreStatistics getCourseProgress(Room room);
 
-	ScoreStatistics getMyProgress(Session session, UserAuthentication user);
+	ScoreStatistics getMyProgress(Room room, UserAuthentication user);
 }
diff --git a/src/main/java/de/thm/arsnova/services/score/ScoreCalculatorFactoryImpl.java b/src/main/java/de/thm/arsnova/services/score/ScoreCalculatorFactoryImpl.java
index 44925d744..d6816d4ee 100644
--- a/src/main/java/de/thm/arsnova/services/score/ScoreCalculatorFactoryImpl.java
+++ b/src/main/java/de/thm/arsnova/services/score/ScoreCalculatorFactoryImpl.java
@@ -56,92 +56,92 @@ public class ScoreCalculatorFactoryImpl implements ArsnovaEventVisitor, ScoreCal
 	@Override
 	public void visit(DeleteCommentEvent deleteCommentEvent) { }
 
-	@CacheEvict(value = "score", key = "#event.Session")
+	@CacheEvict(value = "score", key = "#event.Room")
 	@Override
 	public void visit(NewQuestionEvent event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSession()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getRoom()));
 	}
 
-	@CacheEvict(value = "score", key = "#event.Session")
+	@CacheEvict(value = "score", key = "#event.Room")
 	@Override
 	public void visit(UnlockQuestionEvent event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSession()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getRoom()));
 	}
 
-	@CacheEvict(value = "score", key = "#event.Session")
+	@CacheEvict(value = "score", key = "#event.Room")
 	@Override
 	public void visit(UnlockQuestionsEvent event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSession()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getRoom()));
 	}
 
-	@CacheEvict(value = "score", key = "#event.Session")
+	@CacheEvict(value = "score", key = "#event.Room")
 	@Override
 	public void visit(LockQuestionEvent event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSession()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getRoom()));
 	}
 
-	@CacheEvict(value = "score", key = "#event.Session")
+	@CacheEvict(value = "score", key = "#event.Room")
 	@Override
 	public void visit(LockQuestionsEvent event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSession()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getRoom()));
 	}
 
-	@CacheEvict(value = "score", key = "#event.Session")
+	@CacheEvict(value = "score", key = "#event.Room")
 	@Override
 	public void visit(NewAnswerEvent event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSession()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getRoom()));
 	}
 
-	@CacheEvict(value = "score", key = "#event.Session")
+	@CacheEvict(value = "score", key = "#event.Room")
 	@Override
 	public void visit(DeleteAnswerEvent event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSession()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getRoom()));
 	}
 
-	@CacheEvict(value = "score", key = "#event.Session")
+	@CacheEvict(value = "score", key = "#event.Room")
 	@Override
 	public void visit(DeleteQuestionEvent event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSession()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getRoom()));
 	}
 
-	@CacheEvict(value = "score", key = "#event.Session")
+	@CacheEvict(value = "score", key = "#event.Room")
 	@Override
 	public void visit(DeleteAllQuestionsEvent event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSession()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getRoom()));
 	}
 
-	@CacheEvict(value = "score", key = "#event.Session")
+	@CacheEvict(value = "score", key = "#event.Room")
 	@Override
 	public void visit(DeleteAllQuestionsAnswersEvent event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSession()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getRoom()));
 	}
 
-	@CacheEvict(value = "score", key = "#event.Session")
+	@CacheEvict(value = "score", key = "#event.Room")
 	@Override
 	public void visit(DeleteAllPreparationAnswersEvent event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSession()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getRoom()));
 	}
 
-	@CacheEvict(value = "score", key = "#event.Session")
+	@CacheEvict(value = "score", key = "#event.Room")
 	@Override
 	public void visit(DeleteAllLectureAnswersEvent event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSession()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getRoom()));
 	}
 
-	@CacheEvict(value = "score", key = "#event.Session")
+	@CacheEvict(value = "score", key = "#event.Room")
 	@Override
 	public void visit(PiRoundResetEvent event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSession()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getRoom()));
 	}
 
 	@Override
 	public void visit(NewFeedbackEvent newFeedbackEvent) { }
 
 	@Override
-	public void visit(DeleteFeedbackForSessionsEvent deleteFeedbackEvent) { }
+	public void visit(DeleteFeedbackForRoomsEvent deleteFeedbackEvent) { }
 
 	@Override
-	public void visit(StatusSessionEvent statusSessionEvent) { }
+	public void visit(StatusRoomEvent statusSessionEvent) { }
 
 	@Override
 	public void visit(ChangeScoreEvent changeLearningProgress) { }
@@ -156,10 +156,10 @@ public class ScoreCalculatorFactoryImpl implements ArsnovaEventVisitor, ScoreCal
 	public void visit(PiRoundCancelEvent piRoundCancelEvent) { }
 
 	@Override
-	public void visit(NewSessionEvent event) { }
+	public void visit(NewRoomEvent event) { }
 
 	@Override
-	public void visit(DeleteSessionEvent event) { }
+	public void visit(DeleteRoomEvent event) { }
 
 	@Override
 	public void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
diff --git a/src/main/java/de/thm/arsnova/services/score/VariantScoreCalculator.java b/src/main/java/de/thm/arsnova/services/score/VariantScoreCalculator.java
index 0d7c877ce..bbe619e63 100644
--- a/src/main/java/de/thm/arsnova/services/score/VariantScoreCalculator.java
+++ b/src/main/java/de/thm/arsnova/services/score/VariantScoreCalculator.java
@@ -17,7 +17,7 @@
  */
 package de.thm.arsnova.services.score;
 
-import de.thm.arsnova.entities.migration.v2.Session;
+import de.thm.arsnova.entities.migration.v2.Room;
 import de.thm.arsnova.entities.UserAuthentication;
 import de.thm.arsnova.entities.transport.ScoreStatistics;
 import de.thm.arsnova.persistance.SessionStatisticsRepository;
@@ -39,12 +39,12 @@ abstract class VariantScoreCalculator implements ScoreCalculator {
 	}
 
 	@Cacheable("score")
-	private Score loadProgress(final Session session) {
-		return sessionStatisticsRepository.getLearningProgress(session);
+	private Score loadProgress(final Room room) {
+		return sessionStatisticsRepository.getLearningProgress(room);
 	}
 
-	private void refreshProgress(final Session session) {
-		this.courseScore = sessionStatisticsRepository.getLearningProgress(session);
+	private void refreshProgress(final Room room) {
+		this.courseScore = sessionStatisticsRepository.getLearningProgress(room);
 	}
 
 	public void setQuestionVariant(final String variant) {
@@ -52,8 +52,8 @@ abstract class VariantScoreCalculator implements ScoreCalculator {
 	}
 
 	@Override
-	public ScoreStatistics getCourseProgress(Session session) {
-		this.refreshProgress(session);
+	public ScoreStatistics getCourseProgress(Room room) {
+		this.refreshProgress(room);
 		this.filterVariant();
 		return this.createCourseProgress();
 	}
@@ -61,8 +61,8 @@ abstract class VariantScoreCalculator implements ScoreCalculator {
 	protected abstract ScoreStatistics createCourseProgress();
 
 	@Override
-	public ScoreStatistics getMyProgress(Session session, UserAuthentication user) {
-		this.refreshProgress(session);
+	public ScoreStatistics getMyProgress(Room room, UserAuthentication user) {
+		this.refreshProgress(room);
 		this.filterVariant();
 		return this.createMyProgress(user);
 	}
diff --git a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
index bf4ef3f1c..acec042ab 100644
--- a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
+++ b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
@@ -31,7 +31,7 @@ import com.corundumstudio.socketio.protocol.PacketType;
 import de.thm.arsnova.entities.UserAuthentication;
 import de.thm.arsnova.entities.migration.v2.Comment;
 import de.thm.arsnova.entities.ScoreOptions;
-import de.thm.arsnova.entities.migration.v2.SessionFeature;
+import de.thm.arsnova.entities.migration.v2.RoomFeature;
 import de.thm.arsnova.events.*;
 import de.thm.arsnova.exceptions.NoContentException;
 import de.thm.arsnova.exceptions.NotFoundException;
@@ -39,11 +39,11 @@ import de.thm.arsnova.exceptions.UnauthorizedException;
 import de.thm.arsnova.services.CommentService;
 import de.thm.arsnova.services.FeedbackService;
 import de.thm.arsnova.services.ContentService;
-import de.thm.arsnova.services.SessionService;
+import de.thm.arsnova.services.RoomService;
 import de.thm.arsnova.services.UserService;
 import de.thm.arsnova.websocket.message.Feedback;
 import de.thm.arsnova.websocket.message.Content;
-import de.thm.arsnova.websocket.message.Session;
+import de.thm.arsnova.websocket.message.Room;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -80,7 +80,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 	private UserService userService;
 
 	@Autowired
-	private SessionService sessionService;
+	private RoomService roomService;
 
 	@Autowired
 	private ContentService contentService;
@@ -150,9 +150,9 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 					return;
 				}
 				final String sessionKey = userService.getSessionByUsername(u.getUsername());
-				final de.thm.arsnova.entities.migration.v2.Session session = sessionService.getInternal(sessionKey, u);
+				final de.thm.arsnova.entities.migration.v2.Room room = roomService.getInternal(sessionKey, u);
 
-				if (session.getFeedbackLock()) {
+				if (room.getFeedbackLock()) {
 					logger.debug("Feedback save blocked: {}", u, sessionKey, data.getValue());
 				} else {
 					logger.debug("Feedback recieved: {}", u, sessionKey, data.getValue());
@@ -163,26 +163,26 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 			}
 		});
 
-		server.addEventListener("setSession", Session.class, new DataListener<Session>() {
+		server.addEventListener("setSession", Room.class, new DataListener<Room>() {
 			@Override
 			@Timed(name = "setSessionEvent.onData")
-			public void onData(final SocketIOClient client, final Session session, final AckRequest ackSender) {
+			public void onData(final SocketIOClient client, final Room room, final AckRequest ackSender) {
 				final UserAuthentication u = userService.getUser2SocketId(client.getSessionId());
 				if (null == u) {
-					logger.info("Client {} requested to join session but is not mapped to a user", client.getSessionId());
+					logger.info("Client {} requested to join room but is not mapped to a user", client.getSessionId());
 
 					return;
 				}
 				final String oldSessionKey = userService.getSessionByUsername(u.getUsername());
-				if (null != session.getKeyword() && session.getKeyword().equals(oldSessionKey)) {
+				if (null != room.getKeyword() && room.getKeyword().equals(oldSessionKey)) {
 					return;
 				}
 
-				if (null != sessionService.join(session.getKeyword(), client.getSessionId())) {
+				if (null != roomService.join(room.getKeyword(), client.getSessionId())) {
 					/* active user count has to be sent to the client since the broadcast is
 					 * not always sent as long as the polling solution is active simultaneously */
-					reportActiveUserCountForSession(session.getKeyword());
-					reportSessionDataToClient(session.getKeyword(), u, client);
+					reportActiveUserCountForSession(room.getKeyword());
+					reportSessionDataToClient(room.getKeyword(), u, client);
 				}
 				if (null != oldSessionKey) {
 					reportActiveUserCountForSession(oldSessionKey);
@@ -231,11 +231,11 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 			public void onData(SocketIOClient client, ScoreOptions scoreOptions, AckRequest ack) {
 				final UserAuthentication user = userService.getUser2SocketId(client.getSessionId());
 				final String sessionKey = userService.getSessionByUsername(user.getUsername());
-				final de.thm.arsnova.entities.migration.v2.Session session = sessionService.getInternal(sessionKey, user);
-				if (session.isCreator(user)) {
-					session.setLearningProgressOptions(scoreOptions);
-					sessionService.updateInternal(session, user);
-					broadcastInSession(session.getKeyword(), "learningProgressOptions", scoreOptions);
+				final de.thm.arsnova.entities.migration.v2.Room room = roomService.getInternal(sessionKey, user);
+				if (room.isCreator(user)) {
+					room.setLearningProgressOptions(scoreOptions);
+					roomService.updateInternal(room, user);
+					broadcastInSession(room.getKeyword(), "learningProgressOptions", scoreOptions);
 				}
 			}
 		});
@@ -335,10 +335,10 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		this.useSSL = useSSL;
 	}
 
-	public void reportDeletedFeedback(final UserAuthentication user, final Set<de.thm.arsnova.entities.migration.v2.Session> arsSessions) {
+	public void reportDeletedFeedback(final UserAuthentication user, final Set<de.thm.arsnova.entities.migration.v2.Room> arsRooms) {
 		final List<String> keywords = new ArrayList<>();
-		for (final de.thm.arsnova.entities.migration.v2.Session session : arsSessions) {
-			keywords.add(session.getKeyword());
+		for (final de.thm.arsnova.entities.migration.v2.Room room : arsRooms) {
+			keywords.add(room.getKeyword());
 		}
 		this.sendToUser(user, "feedbackReset", keywords);
 	}
@@ -372,21 +372,21 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 	 * relevant Socket.IO data, the client needs to know after joining a session.
 	 */
 	public void reportSessionDataToClient(final String sessionKey, final UserAuthentication user, final SocketIOClient client) {
-		final de.thm.arsnova.entities.migration.v2.Session session = sessionService.getInternal(sessionKey, user);
-		final SessionFeature features = sessionService.getFeatures(sessionKey);
+		final de.thm.arsnova.entities.migration.v2.Room room = roomService.getInternal(sessionKey, user);
+		final RoomFeature features = roomService.getFeatures(sessionKey);
 
 		client.sendEvent("unansweredLecturerQuestions", contentService.getUnAnsweredLectureQuestionIds(sessionKey, user));
 		client.sendEvent("unansweredPreparationQuestions", contentService.getUnAnsweredPreparationQuestionIds(sessionKey, user));
 		client.sendEvent("countLectureQuestionAnswers", contentService.countLectureQuestionAnswersInternal(sessionKey));
 		client.sendEvent("countPreparationQuestionAnswers", contentService.countPreparationQuestionAnswersInternal(sessionKey));
-		client.sendEvent("activeUserCountData", sessionService.activeUsers(sessionKey));
-		client.sendEvent("learningProgressOptions", session.getLearningProgressOptions());
+		client.sendEvent("activeUserCountData", roomService.activeUsers(sessionKey));
+		client.sendEvent("learningProgressOptions", room.getLearningProgressOptions());
 		final de.thm.arsnova.entities.Feedback fb = feedbackService.getBySessionKey(sessionKey);
 		client.sendEvent("feedbackData", fb.getValues());
 
 		if (features.isFlashcard() || features.isFlashcardFeature()) {
 			client.sendEvent("countFlashcards", contentService.countFlashcardsForUserInternal(sessionKey));
-			client.sendEvent("flipFlashcards", session.getFlipFlashcards());
+			client.sendEvent("flipFlashcards", room.getFlipFlashcards());
 		}
 
 		try {
@@ -398,22 +398,22 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		}
 	}
 
-	public void reportUpdatedFeedbackForSession(final de.thm.arsnova.entities.migration.v2.Session session) {
-		final de.thm.arsnova.entities.Feedback fb = feedbackService.getBySessionKey(session.getKeyword());
-		broadcastInSession(session.getKeyword(), "feedbackData", fb.getValues());
+	public void reportUpdatedFeedbackForSession(final de.thm.arsnova.entities.migration.v2.Room room) {
+		final de.thm.arsnova.entities.Feedback fb = feedbackService.getBySessionKey(room.getKeyword());
+		broadcastInSession(room.getKeyword(), "feedbackData", fb.getValues());
 		try {
-			final long averageFeedback = feedbackService.calculateRoundedAverageFeedback(session.getKeyword());
-			broadcastInSession(session.getKeyword(), "feedbackDataRoundedAverage", averageFeedback);
+			final long averageFeedback = feedbackService.calculateRoundedAverageFeedback(room.getKeyword());
+			broadcastInSession(room.getKeyword(), "feedbackDataRoundedAverage", averageFeedback);
 		} catch (final NoContentException e) {
-			broadcastInSession(session.getKeyword(), "feedbackDataRoundedAverage", null);
+			broadcastInSession(room.getKeyword(), "feedbackDataRoundedAverage", null);
 		}
 	}
 
-	public void reportFeedbackForUserInSession(final de.thm.arsnova.entities.migration.v2.Session session, final UserAuthentication user) {
-		final de.thm.arsnova.entities.Feedback fb = feedbackService.getBySessionKey(session.getKeyword());
+	public void reportFeedbackForUserInSession(final de.thm.arsnova.entities.migration.v2.Room room, final UserAuthentication user) {
+		final de.thm.arsnova.entities.Feedback fb = feedbackService.getBySessionKey(room.getKeyword());
 		Long averageFeedback;
 		try {
-			averageFeedback = feedbackService.calculateRoundedAverageFeedback(session.getKeyword());
+			averageFeedback = feedbackService.calculateRoundedAverageFeedback(room.getKeyword());
 		} catch (final NoContentException e) {
 			averageFeedback = null;
 		}
@@ -436,16 +436,16 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		broadcastInSession(sessionKey, "activeUserCountData", count);
 	}
 
-	public void reportAnswersToLecturerQuestionAvailable(final de.thm.arsnova.entities.migration.v2.Session session, final Content content) {
-		broadcastInSession(session.getKeyword(), "answersToLecQuestionAvail", content.get_id());
+	public void reportAnswersToLecturerQuestionAvailable(final de.thm.arsnova.entities.migration.v2.Room room, final Content content) {
+		broadcastInSession(room.getKeyword(), "answersToLecQuestionAvail", content.get_id());
 	}
 
-	public void reportAudienceQuestionAvailable(final de.thm.arsnova.entities.migration.v2.Session session, final Comment audienceQuestion) {
+	public void reportAudienceQuestionAvailable(final de.thm.arsnova.entities.migration.v2.Room room, final Comment audienceQuestion) {
 		/* TODO role handling implementation, send this only to users with role lecturer */
-		broadcastInSession(session.getKeyword(), "audQuestionAvail", audienceQuestion.getId());
+		broadcastInSession(room.getKeyword(), "audQuestionAvail", audienceQuestion.getId());
 	}
 
-	public void reportLecturerQuestionAvailable(final de.thm.arsnova.entities.migration.v2.Session session, final List<de.thm.arsnova.entities.migration.v2.Content> qs) {
+	public void reportLecturerQuestionAvailable(final de.thm.arsnova.entities.migration.v2.Room room, final List<de.thm.arsnova.entities.migration.v2.Content> qs) {
 		List<Content> contents = new ArrayList<>();
 		for (de.thm.arsnova.entities.migration.v2.Content q : qs) {
 			contents.add(new Content(q));
@@ -453,17 +453,17 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 
 		/* TODO role handling implementation, send this only to users with role audience */
 		if (!qs.isEmpty()) {
-			broadcastInSession(session.getKeyword(), "lecQuestionAvail", contents.get(0).get_id()); // deprecated!
+			broadcastInSession(room.getKeyword(), "lecQuestionAvail", contents.get(0).get_id()); // deprecated!
 		}
-		broadcastInSession(session.getKeyword(), "lecturerQuestionAvailable", contents);
+		broadcastInSession(room.getKeyword(), "lecturerQuestionAvailable", contents);
 	}
 
-	public void reportLecturerQuestionsLocked(final de.thm.arsnova.entities.migration.v2.Session session, final List<de.thm.arsnova.entities.migration.v2.Content> qs) {
+	public void reportLecturerQuestionsLocked(final de.thm.arsnova.entities.migration.v2.Room room, final List<de.thm.arsnova.entities.migration.v2.Content> qs) {
 		List<Content> contents = new ArrayList<>();
 		for (de.thm.arsnova.entities.migration.v2.Content q : qs) {
 			contents.add(new Content(q));
 		}
-		broadcastInSession(session.getKeyword(), "lecturerQuestionLocked", contents);
+		broadcastInSession(room.getKeyword(), "lecturerQuestionLocked", contents);
 	}
 
 	public void reportSessionStatus(final String sessionKey, final boolean active) {
@@ -487,40 +487,40 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 
 	@Override
 	public void visit(NewQuestionEvent event) {
-		this.reportLecturerQuestionAvailable(event.getSession(), Collections.singletonList(event.getQuestion()));
+		this.reportLecturerQuestionAvailable(event.getRoom(), Collections.singletonList(event.getQuestion()));
 	}
 
 	@Override
 	public void visit(UnlockQuestionEvent event) {
-		this.reportLecturerQuestionAvailable(event.getSession(), Collections.singletonList(event.getQuestion()));
+		this.reportLecturerQuestionAvailable(event.getRoom(), Collections.singletonList(event.getQuestion()));
 	}
 
 	@Override
 	public void visit(LockQuestionEvent event) {
-		this.reportLecturerQuestionsLocked(event.getSession(), Collections.singletonList(event.getQuestion()));
+		this.reportLecturerQuestionsLocked(event.getRoom(), Collections.singletonList(event.getQuestion()));
 	}
 
 	@Override
 	public void visit(UnlockQuestionsEvent event) {
-		this.reportLecturerQuestionAvailable(event.getSession(), event.getQuestions());
+		this.reportLecturerQuestionAvailable(event.getRoom(), event.getQuestions());
 	}
 
 	@Override
 	public void visit(LockQuestionsEvent event) {
-		this.reportLecturerQuestionsLocked(event.getSession(), event.getQuestions());
+		this.reportLecturerQuestionsLocked(event.getRoom(), event.getQuestions());
 	}
 
 	@Override
 	public void visit(NewCommentEvent event) {
-		this.reportAudienceQuestionAvailable(event.getSession(), event.getQuestion());
+		this.reportAudienceQuestionAvailable(event.getRoom(), event.getQuestion());
 	}
 
 	@Async
 	@Override
 	@Timed(name = "visit.NewAnswerEvent")
 	public void visit(NewAnswerEvent event) {
-		final String sessionKey = event.getSession().getKeyword();
-		this.reportAnswersToLecturerQuestionAvailable(event.getSession(), new Content(event.getContent()));
+		final String sessionKey = event.getRoom().getKeyword();
+		this.reportAnswersToLecturerQuestionAvailable(event.getRoom(), new Content(event.getContent()));
 		broadcastInSession(sessionKey, "countQuestionAnswersByQuestionId", contentService.countAnswersAndAbstentionsInternal(event.getContent().getId()));
 		broadcastInSession(sessionKey, "countLectureQuestionAnswers", contentService.countLectureQuestionAnswersInternal(sessionKey));
 		broadcastInSession(sessionKey, "countPreparationQuestionAnswers", contentService.countPreparationQuestionAnswersInternal(sessionKey));
@@ -538,8 +538,8 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 	@Override
 	@Timed(name = "visit.DeleteAnswerEvent")
 	public void visit(DeleteAnswerEvent event) {
-		final String sessionKey = event.getSession().getKeyword();
-		this.reportAnswersToLecturerQuestionAvailable(event.getSession(), new Content(event.getQuestion()));
+		final String sessionKey = event.getRoom().getKeyword();
+		this.reportAnswersToLecturerQuestionAvailable(event.getRoom(), new Content(event.getQuestion()));
 		// We do not know which user's answer was deleted, so we can't update his 'unanswered' list of questions...
 		broadcastInSession(sessionKey, "countLectureQuestionAnswers", contentService.countLectureQuestionAnswersInternal(sessionKey));
 		broadcastInSession(sessionKey, "countPreparationQuestionAnswers", contentService.countPreparationQuestionAnswersInternal(sessionKey));
@@ -549,7 +549,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 	@Override
 	@Timed(name = "visit.PiRoundDelayedStartEvent")
 	public void visit(PiRoundDelayedStartEvent event) {
-		final String sessionKey = event.getSession().getKeyword();
+		final String sessionKey = event.getRoom().getKeyword();
 		broadcastInSession(sessionKey, "startDelayedPiRound", event.getPiRoundInformations());
 	}
 
@@ -557,7 +557,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 	@Override
 	@Timed(name = "visit.PiRoundEndEvent")
 	public void visit(PiRoundEndEvent event) {
-		final String sessionKey = event.getSession().getKeyword();
+		final String sessionKey = event.getRoom().getKeyword();
 		broadcastInSession(sessionKey, "endPiRound", event.getPiRoundEndInformations());
 	}
 
@@ -565,25 +565,25 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 	@Override
 	@Timed(name = "visit.PiRoundCancelEvent")
 	public void visit(PiRoundCancelEvent event) {
-		final String sessionKey = event.getSession().getKeyword();
+		final String sessionKey = event.getRoom().getKeyword();
 		broadcastInSession(sessionKey, "cancelPiRound", event.getQuestionId());
 	}
 
 	@Override
 	public void visit(PiRoundResetEvent event) {
-		final String sessionKey = event.getSession().getKeyword();
+		final String sessionKey = event.getRoom().getKeyword();
 		broadcastInSession(sessionKey, "resetPiRound", event.getPiRoundResetInformations());
 	}
 
 	@Override
 	public void visit(LockVoteEvent event) {
-		final String sessionKey = event.getSession().getKeyword();
+		final String sessionKey = event.getRoom().getKeyword();
 		broadcastInSession(sessionKey, "lockVote", event.getVotingAdmission());
 	}
 
 	@Override
 	public void visit(UnlockVoteEvent event) {
-		final String sessionKey = event.getSession().getKeyword();
+		final String sessionKey = event.getRoom().getKeyword();
 		broadcastInSession(sessionKey, "unlockVote", event.getVotingAdmission());
 	}
 
@@ -593,7 +593,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		for (de.thm.arsnova.entities.migration.v2.Content q : event.getQuestions()) {
 			contents.add(new Content(q));
 		}
-		broadcastInSession(event.getSession().getKeyword(), "lockVotes", contents);
+		broadcastInSession(event.getRoom().getKeyword(), "lockVotes", contents);
 	}
 
 	@Override
@@ -602,29 +602,29 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		for (de.thm.arsnova.entities.migration.v2.Content q : event.getQuestions()) {
 			contents.add(new Content(q));
 		}
-		broadcastInSession(event.getSession().getKeyword(), "unlockVotes", contents);
+		broadcastInSession(event.getRoom().getKeyword(), "unlockVotes", contents);
 	}
 
 	@Override
 	public void visit(FeatureChangeEvent event) {
-		final String sessionKey = event.getSession().getKeyword();
-		final SessionFeature features = event.getSession().getFeatures();
+		final String sessionKey = event.getRoom().getKeyword();
+		final RoomFeature features = event.getRoom().getFeatures();
 		broadcastInSession(sessionKey, "featureChange", features);
 
 		if (features.isFlashcard() || features.isFlashcardFeature()) {
 			broadcastInSession(sessionKey, "countFlashcards", contentService.countFlashcardsForUserInternal(sessionKey));
-			broadcastInSession(sessionKey, "flipFlashcards", event.getSession().getFlipFlashcards());
+			broadcastInSession(sessionKey, "flipFlashcards", event.getRoom().getFlipFlashcards());
 		}
 	}
 
 	@Override
 	public void visit(LockFeedbackEvent event) {
-		broadcastInSession(event.getSession().getKeyword(), "lockFeedback", event.getSession().getFeedbackLock());
+		broadcastInSession(event.getRoom().getKeyword(), "lockFeedback", event.getRoom().getFeedbackLock());
 	}
 
 	@Override
 	public void visit(FlipFlashcardsEvent event) {
-		broadcastInSession(event.getSession().getKeyword(), "flipFlashcards", event.getSession().getFlipFlashcards());
+		broadcastInSession(event.getRoom().getKeyword(), "flipFlashcards", event.getRoom().getFlipFlashcards());
 	}
 
 	@Override
@@ -665,30 +665,30 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 
 	@Override
 	public void visit(NewFeedbackEvent event) {
-		this.reportUpdatedFeedbackForSession(event.getSession());
+		this.reportUpdatedFeedbackForSession(event.getRoom());
 	}
 
 	@Override
-	public void visit(DeleteFeedbackForSessionsEvent event) {
+	public void visit(DeleteFeedbackForRoomsEvent event) {
 		this.reportDeletedFeedback(event.getUser(), event.getSessions());
 
 	}
 
 	@Override
-	public void visit(StatusSessionEvent event) {
-		this.reportSessionStatus(event.getSession().getKeyword(), event.getSession().isActive());
+	public void visit(StatusRoomEvent event) {
+		this.reportSessionStatus(event.getRoom().getKeyword(), event.getRoom().isActive());
 	}
 
 	@Override
 	public void visit(ChangeScoreEvent event) {
-		broadcastInSession(event.getSession().getKeyword(), "learningProgressChange", null);
+		broadcastInSession(event.getRoom().getKeyword(), "learningProgressChange", null);
 	}
 
 	@Override
-	public void visit(NewSessionEvent event) { }
+	public void visit(NewRoomEvent event) { }
 
 	@Override
-	public void visit(DeleteSessionEvent event) { }
+	public void visit(DeleteRoomEvent event) { }
 
 	private void initializeSecurity() {
 		Authentication auth = new AnonymousAuthenticationToken("websocket", "websocket",
diff --git a/src/main/java/de/thm/arsnova/websocket/message/Session.java b/src/main/java/de/thm/arsnova/websocket/message/Room.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/websocket/message/Session.java
rename to src/main/java/de/thm/arsnova/websocket/message/Room.java
index 8afccd951..efa221648 100644
--- a/src/main/java/de/thm/arsnova/websocket/message/Session.java
+++ b/src/main/java/de/thm/arsnova/websocket/message/Room.java
@@ -20,7 +20,7 @@ package de.thm.arsnova.websocket.message;
 /**
  * Represents a session.
  */
-public class Session {
+public class Room {
 	private String keyword;
 
 	public String getKeyword() {
diff --git a/src/main/resources/META-INF/aop.xml b/src/main/resources/META-INF/aop.xml
index 6681890d4..5b05bbbe0 100644
--- a/src/main/resources/META-INF/aop.xml
+++ b/src/main/resources/META-INF/aop.xml
@@ -7,6 +7,6 @@
 
 	<aspects>
 		<aspect name="de.thm.arsnova.aop.RangeAspect"/>
-		<aspect name="de.thm.arsnova.aop.UserSessionAspect"/>
+		<aspect name="de.thm.arsnova.aop.UserRoomAspect"/>
 	</aspects>
 </aspectj>
diff --git a/src/site/markdown/development/caching.md b/src/site/markdown/development/caching.md
index eaa833021..59e0b7134 100644
--- a/src/site/markdown/development/caching.md
+++ b/src/site/markdown/development/caching.md
@@ -16,7 +16,7 @@ Caching should only be used with domain objects where the `hashCode` and `equals
 
 ```java
 @Cacheable(value = "notverycacheable", key = "#p0.concat('-').concat(#p1).concat('-').concat(#p2)")
-public ResultObject notVeryCacheable(String sessionId, String questionVariant, String subject) { ... }
+public ResultObject notVeryCacheable(String roomId, String questionVariant, String subject) { ... }
 ```
 
 Therefore, you should always work with domain objects like `Session`, `Content`, or even your own, newly defined objects:
diff --git a/src/test/java/de/thm/arsnova/config/TestPersistanceConfig.java b/src/test/java/de/thm/arsnova/config/TestPersistanceConfig.java
index 4801a8548..b58d944f0 100644
--- a/src/test/java/de/thm/arsnova/config/TestPersistanceConfig.java
+++ b/src/test/java/de/thm/arsnova/config/TestPersistanceConfig.java
@@ -20,8 +20,8 @@ public class TestPersistanceConfig {
 	}
 
 	@Bean
-	public SessionRepository sessionRepository() {
-		return Mockito.mock(SessionRepository.class);
+	public RoomRepository sessionRepository() {
+		return Mockito.mock(RoomRepository.class);
 	}
 
 	@Bean
diff --git a/src/test/java/de/thm/arsnova/services/DefaultEntityServiceImplTest.java b/src/test/java/de/thm/arsnova/services/DefaultEntityServiceImplTest.java
index 7fff5e143..41fc67bf7 100644
--- a/src/test/java/de/thm/arsnova/services/DefaultEntityServiceImplTest.java
+++ b/src/test/java/de/thm/arsnova/services/DefaultEntityServiceImplTest.java
@@ -5,8 +5,8 @@ import de.thm.arsnova.config.AppConfig;
 import de.thm.arsnova.config.TestAppConfig;
 import de.thm.arsnova.config.TestPersistanceConfig;
 import de.thm.arsnova.config.TestSecurityConfig;
-import de.thm.arsnova.entities.migration.v2.Session;
-import de.thm.arsnova.persistance.SessionRepository;
+import de.thm.arsnova.entities.migration.v2.Room;
+import de.thm.arsnova.persistance.RoomRepository;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,72 +39,72 @@ public class DefaultEntityServiceImplTest {
 	private MappingJackson2HttpMessageConverter jackson2HttpMessageConverter;
 
 	@Autowired
-	private SessionRepository sessionRepository;
+	private RoomRepository roomRepository;
 
 	@Test
 	@WithMockUser(username="TestUser")
 	public void testPatch() throws IOException {
 		final ObjectMapper objectMapper = jackson2HttpMessageConverter.getObjectMapper();
-		final DefaultEntityServiceImpl<Session> entityService = new DefaultEntityServiceImpl<>(Session.class, sessionRepository, objectMapper);
+		final DefaultEntityServiceImpl<Room> entityService = new DefaultEntityServiceImpl<>(Room.class, roomRepository, objectMapper);
 
-		when(sessionRepository.save(any(Session.class))).then(returnsFirstArg());
+		when(roomRepository.save(any(Room.class))).then(returnsFirstArg());
 
 		final String originalId = "d8833f0d78964a9487ded02ba2dfbbad";
-		final String originalName = "Test Session";
+		final String originalName = "Test Room";
 		final String originalCreator = "TestUser";
 		final boolean originalActive = false;
-		final Session session = new Session();
-		session.setId(originalId);
-		session.setName(originalName);
-		session.setActive(originalActive);
-		session.setCreator(originalCreator);
+		final Room room = new Room();
+		room.setId(originalId);
+		room.setName(originalName);
+		room.setActive(originalActive);
+		room.setCreator(originalCreator);
 
-		final String patchedName = "Patched Session";
+		final String patchedName = "Patched Room";
 		final boolean patchedActive = true;
 		final Map<String, Object> patchedValues = new HashMap<>();
 		patchedValues.put("name", patchedName);
 		patchedValues.put("active", patchedActive);
 		patchedValues.put("creator", "Should not be changeable.");
 
-		entityService.patch(session, patchedValues);
+		entityService.patch(room, patchedValues);
 
-		assertEquals(originalId, session.getId());
-		assertEquals(patchedName, session.getName());
-		assertEquals(patchedActive, session.isActive());
-		assertEquals(originalCreator, session.getCreator());
+		assertEquals(originalId, room.getId());
+		assertEquals(patchedName, room.getName());
+		assertEquals(patchedActive, room.isActive());
+		assertEquals(originalCreator, room.getCreator());
 	}
 
 	@Test
 	@WithMockUser(username="TestUser")
 	public void testPatchWithList() throws IOException {
 		final ObjectMapper objectMapper = jackson2HttpMessageConverter.getObjectMapper();
-		final DefaultEntityServiceImpl<Session> entityService = new DefaultEntityServiceImpl<>(Session.class, sessionRepository, objectMapper);
+		final DefaultEntityServiceImpl<Room> entityService = new DefaultEntityServiceImpl<>(Room.class, roomRepository, objectMapper);
 
-		when(sessionRepository.save(any(Session.class))).then(returnsFirstArg());
+		when(roomRepository.save(any(Room.class))).then(returnsFirstArg());
 
-		List<Session> sessions = new ArrayList<>();
+		List<Room> sessions = new ArrayList<>();
 		final String originalId1 = "d8833f0d78964a9487ded02ba2dfbbad";
-		final String originalName1 = "Test Session 1";
+		final String originalName1 = "Test Room 1";
 		final String originalCreator1 = "TestUser";
 		final boolean originalActive1 = false;
-		final Session session1 = new Session();
-		session1.setId(originalId1);
-		session1.setName(originalName1);
-		session1.setActive(originalActive1);
-		session1.setCreator(originalCreator1);
-		sessions.add(session1);
+		final Room room1 = new Room();
+		room1.setId(originalId1);
+		room1.setName(originalName1);
+		room1.setActive(originalActive1);
+		room1.setCreator(originalCreator1);
+		sessions.add(room1);
 		final String originalId2 = "3dc8cbff05da49d5980f6c001a6ea867";
-		final String originalName2 = "Test Session 2";
+		final String originalName2 = "Test Room 2";
 		final String originalCreator2 = "TestUser";
 		final boolean originalActive2 = false;
-		final Session session2 = new Session();
-		session2.setId(originalId2);
-		session2.setName(originalName2);
-		session2.setActive(originalActive2);
-		session2.setCreator(originalCreator2);
-		sessions.add(session2);
-
-		final String patchedName = "Patched Session";
+		final Room room2 = new Room();
+		room2.setId(originalId2);
+		room2.setName(originalName2);
+		room2.setActive(originalActive2);
+		room2.setCreator(originalCreator2);
+		sessions.add(room2);
+
+		final String patchedName = "Patched Room";
 		final boolean patchedActive = true;
 		final Map<String, Object> patchedValues = new HashMap<>();
 		patchedValues.put("name", patchedName);
@@ -113,13 +113,13 @@ public class DefaultEntityServiceImplTest {
 
 		entityService.patch(sessions, patchedValues);
 
-		assertEquals(originalId1, session1.getId());
-		assertEquals(patchedName, session1.getName());
-		assertEquals(patchedActive, session1.isActive());
-		assertEquals(originalCreator1, session1.getCreator());
-		assertEquals(originalId2, session2.getId());
-		assertEquals(patchedName, session2.getName());
-		assertEquals(patchedActive, session2.isActive());
-		assertEquals(originalCreator2, session2.getCreator());
+		assertEquals(originalId1, room1.getId());
+		assertEquals(patchedName, room1.getName());
+		assertEquals(patchedActive, room1.isActive());
+		assertEquals(originalCreator1, room1.getCreator());
+		assertEquals(originalId2, room2.getId());
+		assertEquals(patchedName, room2.getName());
+		assertEquals(patchedActive, room2.isActive());
+		assertEquals(originalCreator2, room2.getCreator());
 	}
 }
diff --git a/src/test/java/de/thm/arsnova/services/StubUserService.java b/src/test/java/de/thm/arsnova/services/StubUserService.java
index bc87ad902..c2b8ec157 100644
--- a/src/test/java/de/thm/arsnova/services/StubUserService.java
+++ b/src/test/java/de/thm/arsnova/services/StubUserService.java
@@ -51,7 +51,7 @@ public class StubUserService extends UserServiceImpl {
 		return stubUser;
 	}
 
-	public void setRole(UserSessionService.Role role) {
+	public void setRole(UserRoomService.Role role) {
 		stubUser.setRole(role);
 	}
 }
-- 
GitLab