diff --git a/src/main/java/de/thm/arsnova/controller/CommentController.java b/src/main/java/de/thm/arsnova/controller/CommentController.java
index d4e8047d5b53fb3f6d18db2e6649a990dae0d0bc..7d60e94462b0c0ab5e0c3dc2ba1450741d9dc05e 100644
--- a/src/main/java/de/thm/arsnova/controller/CommentController.java
+++ b/src/main/java/de/thm/arsnova/controller/CommentController.java
@@ -45,53 +45,53 @@ import java.util.List;
  */
 @RestController
 @RequestMapping("/audiencequestion")
-@Api(value = "/audiencequestion", description = "the Audience Content API")
+@Api(value = "/audiencequestion", description = "Comment (Interposed/Audience Question) API")
 public class CommentController extends PaginationController {
 
 	@Autowired
 	private CommentService commentService;
 
 	@ApiOperation(value = "Count all the comments in current session",
-			nickname = "getAudienceQuestionCount")
+			nickname = "getCommentCount")
 	@RequestMapping(value = "/count", method = RequestMethod.GET)
 	@DeprecatedApi
 	@Deprecated
-	public int getInterposedCount(@ApiParam(value = "Room-Key from current session", required = true) @RequestParam final String sessionkey) {
+	public int getCommentCount(@ApiParam(value = "Room-Key from current session", required = true) @RequestParam final String sessionkey) {
 		return commentService.count(sessionkey);
 	}
 
 	@ApiOperation(value = "count all unread comments",
-			nickname = "getUnreadInterposedCount")
+			nickname = "getUnreadCommentCount")
 	@RequestMapping(value = "/readcount", method = RequestMethod.GET)
 	@DeprecatedApi
 	@Deprecated
-	public CommentReadingCount getUnreadInterposedCount(@ApiParam(value = "Room-Key from current session", required = true) @RequestParam("sessionkey") final String sessionkey, String user) {
+	public CommentReadingCount getUnreadCommentCount(@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 Room",
-			nickname = "getInterposedQuestions")
+			nickname = "getComments")
 	@RequestMapping(value = "/", method = RequestMethod.GET)
 	@Pagination
-	public List<Comment> getInterposedQuestions(@ApiParam(value = "Room-Key from current session", required = true) @RequestParam final String sessionkey) {
-		return commentService.getBySessionKey(sessionkey, offset, limit);
+	public List<Comment> getComments(@ApiParam(value = "Room-Key from current session", required = true) @RequestParam final String sessionkey) {
+		return commentService.getByRoomShortId(sessionkey, offset, limit);
 	}
 
 	@ApiOperation(value = "Retrieves an Comment",
-			nickname = "getInterposedQuestion")
+			nickname = "getComment")
 	@RequestMapping(value = "/{questionId}", method = RequestMethod.GET)
-	public Comment getInterposedQuestion(@ApiParam(value = "ID of the Comment that needs to be deleted", required = true) @PathVariable final String questionId) {
+	public Comment getComment(@ApiParam(value = "ID of the Comment that needs to be deleted", required = true) @PathVariable final String questionId) {
 		return commentService.getAndMarkRead(questionId);
 	}
 
 	@ApiOperation(value = "Creates a new Comment for a Room and returns the Comment's data",
-			nickname = "postInterposedQuestion")
+			nickname = "postComment")
 	@ApiResponses(value = {
 		@ApiResponse(code = 400, message = HTML_STATUS_400)
 	})
 	@RequestMapping(value = "/", method = RequestMethod.POST)
 	@ResponseStatus(HttpStatus.CREATED)
-	public void postInterposedQuestion(
+	public void postComment(
 			@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
 			) {
@@ -103,9 +103,9 @@ public class CommentController extends PaginationController {
 	}
 
 	@ApiOperation(value = "Deletes a Comment",
-			nickname = "deleteInterposedQuestion")
+			nickname = "deleteComment")
 	@RequestMapping(value = "/{questionId}", method = RequestMethod.DELETE)
-	public void deleteInterposedQuestion(@ApiParam(value = "ID of the comment that needs to be deleted", required = true) @PathVariable final String questionId) {
+	public void deleteComment(@ApiParam(value = "ID of the comment that needs to be deleted", required = true) @PathVariable final String questionId) {
 		commentService.delete(questionId);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/controller/ConfigurationController.java b/src/main/java/de/thm/arsnova/controller/ConfigurationController.java
index bd310bd4b9310be95c2d3f0154c056a1d6715bdb..36909b5da4d7ee42f4de762b03c976ef5bbdb95f 100644
--- a/src/main/java/de/thm/arsnova/controller/ConfigurationController.java
+++ b/src/main/java/de/thm/arsnova/controller/ConfigurationController.java
@@ -92,7 +92,7 @@ public class ConfigurationController extends AbstractController {
 	private String gridSquareEnabled;
 
 	@Value("${features.session-import-export.enabled:false}")
-	private String sessionImportExportEnabled;
+	private String roomImportExportEnabled;
 
 	@Value("${features.public-pool.enabled:false}")
 	private String publicPoolEnabled;
@@ -131,7 +131,7 @@ public class ConfigurationController extends AbstractController {
 	private String trackingSiteId;
 
 	@Value("${session.demo-id:}")
-	private String demoSessionKey;
+	private String demoRoomShortId;
 
 	@Value("${ui.slogan:}")
 	private String arsnovaSlogan;
@@ -209,8 +209,8 @@ public class ConfigurationController extends AbstractController {
 		if (!"".equals(privacyPolicyUrl)) {
 			config.put("privacyPolicyUrl", privacyPolicyUrl);
 		}
-		if (!"".equals(demoSessionKey)) {
-			config.put("demoSessionKey", demoSessionKey);
+		if (!"".equals(demoRoomShortId)) {
+			config.put("demoRoomShortId", demoRoomShortId);
 		}
 		if (!"".equals(arsnovaSlogan)) {
 			config.put("arsnovaSlogan", arsnovaSlogan);
@@ -233,7 +233,7 @@ public class ConfigurationController extends AbstractController {
 		features.put("markdown", true);
 		features.put("imageAnswer", "true".equals(imageAnswerEnabled));
 		features.put("gridSquare", "true".equals(gridSquareEnabled));
-		features.put("sessionImportExport", "true".equals(sessionImportExportEnabled));
+		features.put("sessionImportExport", "true".equals(roomImportExportEnabled));
 		features.put("publicPool", "true".equals(publicPoolEnabled));
 		features.put("exportToClick", "true".equals(exportToClickEnabled));
 
diff --git a/src/main/java/de/thm/arsnova/controller/ContentController.java b/src/main/java/de/thm/arsnova/controller/ContentController.java
index 87cb2f44ac8ed57ca3cd643117104231ee2c9306..bd0e486789cc9243484bee05b9ba0cad56f82dd3 100644
--- a/src/main/java/de/thm/arsnova/controller/ContentController.java
+++ b/src/main/java/de/thm/arsnova/controller/ContentController.java
@@ -53,7 +53,7 @@ import java.util.List;
  */
 @RestController
 @RequestMapping("/lecturerquestion")
-@Api(value = "/lecturerquestion", description = "Operations for Lecture Questions")
+@Api(value = "/lecturerquestion", description = "Content (Skill/Lecturer Question) API")
 public class ContentController extends PaginationController {
 	@Autowired
 	private ContentService contentService;
@@ -140,9 +140,9 @@ public class ContentController extends PaginationController {
 			) {
 
 		if (time == 0) {
-			timerService.startNewPiRound(questionId, null);
+			timerService.startNewRound(questionId, null);
 		} else {
-			timerService.startNewPiRoundDelayed(questionId, time);
+			timerService.startNewRoundDelayed(questionId, time);
 		}
 	}
 
@@ -152,7 +152,7 @@ public class ContentController extends PaginationController {
 	public void cancelPiRound(
 			@PathVariable final String questionId
 			) {
-		timerService.cancelPiRoundChange(questionId);
+		timerService.cancelRoundChange(questionId);
 	}
 
 	@RequestMapping(value = "/{questionId}/resetpiroundstate", method = RequestMethod.POST)
@@ -161,7 +161,7 @@ public class ContentController extends PaginationController {
 	public void resetPiQuestion(
 			@PathVariable final String questionId
 			) {
-		timerService.resetPiRoundState(questionId);
+		timerService.resetRoundState(questionId);
 	}
 
 	@ApiOperation(value = "Set voting admission on question, identified by provided id",
@@ -203,7 +203,7 @@ public class ContentController extends PaginationController {
 			contents = contentService.getPreparationQuestions(sessionkey);
 			contentService.setVotingAdmissions(sessionkey, disable, contents);
 		} else {
-			contentService.setVotingAdmissionForAllQuestions(sessionkey, disable);
+			contentService.setVotingAdmissionForAllContents(sessionkey, disable);
 		}
 	}
 
@@ -292,7 +292,7 @@ public class ContentController extends PaginationController {
 		} else if (preparationQuestionsOnly) {
 			contents = contentService.getPreparationQuestions(sessionkey);
 		} else {
-			contents = contentService.getBySessionKey(sessionkey);
+			contents = contentService.getByRoomShortId(sessionkey);
 		}
 		if (contents == null || contents.isEmpty()) {
 			response.setStatus(HttpStatus.NO_CONTENT.value());
@@ -341,7 +341,7 @@ public class ContentController extends PaginationController {
 		} else if (flashcardsOnly) {
 			return contentService.countFlashcards(sessionkey);
 		} else {
-			return contentService.countBySessionKey(sessionkey);
+			return contentService.countByRoomShortId(sessionkey);
 		}
 	}
 
@@ -543,7 +543,7 @@ public class ContentController extends PaginationController {
 	@Deprecated
 	@RequestMapping(value = "/{questionId}/answercount", method = RequestMethod.GET)
 	public int getAnswerCount(@PathVariable final String questionId) {
-		return contentService.countAnswersByQuestionIdAndRound(questionId);
+		return contentService.countAnswersByContentIdAndRound(questionId);
 	}
 
 	@ApiOperation(value = "Get the amount of answers for a question, identified by the question ID",
@@ -551,8 +551,8 @@ public class ContentController extends PaginationController {
 	@RequestMapping(value = "/{questionId}/allroundanswercount", method = RequestMethod.GET)
 	public List<Integer> getAllAnswerCount(@PathVariable final String questionId) {
 		return Arrays.asList(
-			contentService.countAnswersByQuestionIdAndRound(questionId, 1),
-			contentService.countAnswersByQuestionIdAndRound(questionId, 2)
+			contentService.countAnswersByContentIdAndRound(questionId, 1),
+			contentService.countAnswersByContentIdAndRound(questionId, 2)
 		);
 	}
 
@@ -560,7 +560,7 @@ public class ContentController extends PaginationController {
 			nickname = "getTotalAnswerCountByQuestion")
 	@RequestMapping(value = "/{questionId}/totalanswercount", method = RequestMethod.GET)
 	public int getTotalAnswerCountByQuestion(@PathVariable final String questionId) {
-		return contentService.countTotalAnswersByQuestionId(questionId);
+		return contentService.countTotalAnswersByContentId(questionId);
 	}
 
 	@ApiOperation(value = "Get the amount of answers and abstention answers by a question, identified by the question ID",
@@ -568,8 +568,8 @@ public class ContentController extends PaginationController {
 	@RequestMapping(value = "/{questionId}/answerandabstentioncount", method = RequestMethod.GET)
 	public List<Integer> getAnswerAndAbstentionCount(@PathVariable final String questionId) {
 		return Arrays.asList(
-			contentService.countAnswersByQuestionIdAndRound(questionId),
-			contentService.countTotalAbstentionsByQuestionId(questionId)
+			contentService.countAnswersByContentIdAndRound(questionId),
+			contentService.countTotalAbstentionsByContentId(questionId)
 		);
 	}
 
@@ -578,7 +578,7 @@ public class ContentController extends PaginationController {
 	@RequestMapping(value = "/{questionId}/freetextanswer/", method = RequestMethod.GET)
 	@Pagination
 	public List<Answer> getFreetextAnswers(@PathVariable final String questionId) {
-		return contentService.getFreetextAnswersByQuestionId(questionId, offset, limit);
+		return contentService.getFreetextAnswersByContentId(questionId, offset, limit);
 	}
 
 	@ApiOperation(value = "Get my answers of an session, identified by the sessionkey",
@@ -587,7 +587,7 @@ public class ContentController extends PaginationController {
 	@Deprecated
 	@RequestMapping(value = "/myanswers", method = RequestMethod.GET)
 	public List<Answer> getMyAnswers(@RequestParam final String sessionkey) {
-		return contentService.getMyAnswersBySessionKey(sessionkey);
+		return contentService.getMyAnswersByRoomShortId(sessionkey);
 	}
 
 	@ApiOperation(value = "Get the total amount of answers of an session, identified by the sessionkey",
@@ -605,7 +605,7 @@ public class ContentController extends PaginationController {
 		} else if (preparationQuestionsOnly) {
 			return contentService.countPreparationQuestionAnswers(sessionkey);
 		} else {
-			return contentService.countTotalAnswersBySessionKey(sessionkey);
+			return contentService.countTotalAnswersByRoomShortId(sessionkey);
 		}
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/controller/FeedbackController.java b/src/main/java/de/thm/arsnova/controller/FeedbackController.java
index 80c94ba002cbc21b072839af078b7bfb7cbd4ff3..440685d6329560da58b7eb7f15b58b354ceb51a5 100644
--- a/src/main/java/de/thm/arsnova/controller/FeedbackController.java
+++ b/src/main/java/de/thm/arsnova/controller/FeedbackController.java
@@ -49,16 +49,16 @@ public class FeedbackController extends AbstractController {
 
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/session/{sessionkey}/feedback", method = RequestMethod.GET)
-	public Feedback getFeedback(@PathVariable final String sessionkey) {
-		return feedbackService.getBySessionKey(sessionkey);
+	@RequestMapping(value = "/session/{shortId}/feedback", method = RequestMethod.GET)
+	public Feedback getFeedback(@PathVariable final String shortId) {
+		return feedbackService.getByRoomShortId(shortId);
 	}
 
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/session/{sessionkey}/myfeedback", method = RequestMethod.GET)
-	public Integer getMyFeedback(@PathVariable final String sessionkey) {
-		Integer value = feedbackService.getBySessionKeyAndUser(sessionkey, userService.getCurrentUser());
+	@RequestMapping(value = "/session/{shortId}/myfeedback", method = RequestMethod.GET)
+	public Integer getMyFeedback(@PathVariable final String shortId) {
+		Integer value = feedbackService.getByRoomShortIdAndUser(shortId, userService.getCurrentUser());
 		if (value != null && value >= Feedback.MIN_FEEDBACK_TYPE && value <= Feedback.MAX_FEEDBACK_TYPE) {
 			return value;
 		}
@@ -67,36 +67,36 @@ public class FeedbackController extends AbstractController {
 
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/session/{sessionkey}/feedbackcount", method = RequestMethod.GET)
-	public int getFeedbackCount(@PathVariable final String sessionkey) {
-		return feedbackService.countFeedbackBySessionKey(sessionkey);
+	@RequestMapping(value = "/session/{shortId}/feedbackcount", method = RequestMethod.GET)
+	public int getFeedbackCount(@PathVariable final String shortId) {
+		return feedbackService.countFeedbackByRoomShortId(shortId);
 	}
 
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/session/{sessionkey}/roundedaveragefeedback", method = RequestMethod.GET)
-	public long getAverageFeedbackRounded(@PathVariable final String sessionkey) {
-		return feedbackService.calculateRoundedAverageFeedback(sessionkey);
+	@RequestMapping(value = "/session/{shortId}/roundedaveragefeedback", method = RequestMethod.GET)
+	public long getAverageFeedbackRounded(@PathVariable final String shortId) {
+		return feedbackService.calculateRoundedAverageFeedback(shortId);
 	}
 
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/session/{sessionkey}/averagefeedback", method = RequestMethod.GET)
-	public double getAverageFeedback(@PathVariable final String sessionkey) {
-		return feedbackService.calculateAverageFeedback(sessionkey);
+	@RequestMapping(value = "/session/{shortId}/averagefeedback", method = RequestMethod.GET)
+	public double getAverageFeedback(@PathVariable final String shortId) {
+		return feedbackService.calculateAverageFeedback(shortId);
 	}
 
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/session/{sessionkey}/feedback", method = RequestMethod.POST)
+	@RequestMapping(value = "/session/{shortId}/feedback", method = RequestMethod.POST)
 	@ResponseStatus(HttpStatus.CREATED)
 	public Feedback postFeedback(
-			@PathVariable final String sessionkey,
+			@PathVariable final String shortId,
 			@RequestBody final int value
 			) {
 		UserAuthentication user = userService.getCurrentUser();
-		feedbackService.save(sessionkey, value, user);
-		Feedback feedback = feedbackService.getBySessionKey(sessionkey);
+		feedbackService.save(shortId, value, user);
+		Feedback feedback = feedbackService.getByRoomShortId(shortId);
 
 		return feedback;
 	}
diff --git a/src/main/java/de/thm/arsnova/controller/MotdController.java b/src/main/java/de/thm/arsnova/controller/MotdController.java
index b915e5d2074eaebf0827e60696eac45dc42ad5bb..8aa9e20764581720bb7cc6071f8933de34a862e9 100644
--- a/src/main/java/de/thm/arsnova/controller/MotdController.java
+++ b/src/main/java/de/thm/arsnova/controller/MotdController.java
@@ -43,7 +43,7 @@ import java.util.List;
  */
 @RestController
 @RequestMapping("/motd")
-@Api(value = "/motd", description = "the Motd Controller API")
+@Api(value = "/motd", description = "Message of the Day API")
 public class MotdController extends AbstractController {
 	@Autowired
 	private MotdService motdService;
@@ -58,20 +58,24 @@ public class MotdController extends AbstractController {
 		@ApiParam(value = "clientdate", required = false) @RequestParam(value = "clientdate", defaultValue = "") final String clientdate,
 		@ApiParam(value = "adminview", required = false) @RequestParam(value = "adminview", defaultValue = "false") final Boolean adminview,
 		@ApiParam(value = "audience", required = false) @RequestParam(value = "audience", defaultValue = "all") final String audience,
-		@ApiParam(value = "sessionkey", required = false) @RequestParam(value = "sessionkey", defaultValue = "null") final String sessionkey
+		@ApiParam(value = "sessionkey", required = false) @RequestParam(value = "sessionkey", defaultValue = "null") final String roomShortId
 	) {
 		List<Motd> motds;
 		Date date = new Date(System.currentTimeMillis());
 		if (!clientdate.isEmpty()) {
 			date.setTime(Long.parseLong(clientdate));
 		}
+		String roomId = "";
+		if (roomShortId != null) {
+			// roomId = ; // FIXME
+		}
 		if (adminview) {
 			motds = "session".equals(audience) ?
-					motdService.getAllSessionMotds(sessionkey) :
+					motdService.getAllRoomMotds(roomId) :
 					motdService.getAdminMotds();
 		} else {
 			motds = "session".equals(audience) ?
-					motdService.getCurrentSessionMotds(date, sessionkey) :
+					motdService.getCurrentRoomMotds(date, roomId) :
 					motdService.getCurrentMotds(date, audience);
 		}
 		return motds;
@@ -90,8 +94,8 @@ public class MotdController extends AbstractController {
 			) {
 		if (motd != null) {
 			Motd newMotd;
-			if ("session".equals(motd.getAudience()) && motd.getSessionId() != null) {
-				newMotd = motdService.save(motd.getSessionId(), motd);
+			if ("session".equals(motd.getAudience()) && motd.getRoomId() != null) {
+				newMotd = motdService.save(motd.getRoomId(), motd);
 			} else {
 				newMotd = motdService.save(motd);
 			}
@@ -112,8 +116,8 @@ public class MotdController extends AbstractController {
 			@ApiParam(value = "motdkey from current motd", required = true) @PathVariable final String motdId,
 			@ApiParam(value = "current motd", required = true) @RequestBody final Motd motd
 			) {
-		if ("session".equals(motd.getAudience()) && motd.getSessionId() != null) {
-			return motdService.update(motd.getSessionId(), motd);
+		if ("session".equals(motd.getAudience()) && motd.getRoomId() != null) {
+			return motdService.update(motd.getRoomId(), motd);
 		} else {
 			return motdService.update(motd);
 		}
@@ -124,7 +128,7 @@ public class MotdController extends AbstractController {
 	public void deleteMotd(@ApiParam(value = "Motd-key from the message that shall be deleted", required = true) @PathVariable final String motdId) {
 		Motd motd = motdService.get(motdId);
 		if ("session".equals(motd.getAudience())) {
-			motdService.deleteBySessionKey(motd.getSessionId(), motd);
+			motdService.deleteByRoomId(motd.getRoomId(), motd);
 		} else {
 			motdService.delete(motd);
 		}
diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/RoomController.java
similarity index 57%
rename from src/main/java/de/thm/arsnova/controller/SessionController.java
rename to src/main/java/de/thm/arsnova/controller/RoomController.java
index bf8526cf4145b2e67f75152ce5e15656bbf87618..957e9be7dfe5588e39023506960ff17ecec6a399 100644
--- a/src/main/java/de/thm/arsnova/controller/SessionController.java
+++ b/src/main/java/de/thm/arsnova/controller/RoomController.java
@@ -17,14 +17,14 @@
  */
 package de.thm.arsnova.controller;
 
-import de.thm.arsnova.connector.model.Course;
 import de.thm.arsnova.entities.Room;
-import de.thm.arsnova.entities.transport.ImportExportSession;
+import de.thm.arsnova.entities.transport.ImportExportContainer;
 import de.thm.arsnova.entities.transport.ScoreStatistics;
 import de.thm.arsnova.exceptions.UnauthorizedException;
 import de.thm.arsnova.services.RoomService;
-import de.thm.arsnova.services.RoomServiceImpl.SessionNameComparator;
-import de.thm.arsnova.services.RoomServiceImpl.SessionShortNameComparator;
+import de.thm.arsnova.services.RoomServiceImpl;
+import de.thm.arsnova.services.RoomServiceImpl.RoomNameComparator;
+import de.thm.arsnova.services.RoomServiceImpl.RoomShortNameComparator;
 import de.thm.arsnova.services.UserService;
 import de.thm.arsnova.web.DeprecatedApi;
 import de.thm.arsnova.web.Pagination;
@@ -50,39 +50,39 @@ import java.util.Collections;
 import java.util.List;
 
 /**
- * Handles requests related to ARSnova rooms.
+ * Handles requests related to ARSnova Rooms.
  */
 @RestController
 @RequestMapping("/session")
-@Api(value = "/session", description = "the Room Controller API")
-public class SessionController extends PaginationController {
+@Api(value = "/session", description = "Room (Session) API")
+public class RoomController extends PaginationController {
 	@Autowired
 	private RoomService roomService;
 
 	@Autowired
 	private UserService userService;
 
-	@ApiOperation(value = "join a session",
-			nickname = "joinSession")
+	@ApiOperation(value = "join a Room",
+			nickname = "joinRoom")
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/{sessionkey}", method = RequestMethod.GET)
-	public Room joinSession(
-			@ApiParam(value = "Room-Key from current session", required = true) @PathVariable final String sessionkey,
+	@RequestMapping(value = "/{shortId}", method = RequestMethod.GET)
+	public Room joinRoom(
+			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId,
 			@ApiParam(value = "Adminflag", required = false) @RequestParam(value = "admin", defaultValue = "false")	final boolean admin
 			) {
 		if (admin) {
-			return roomService.getForAdmin(sessionkey);
+			return roomService.getForAdmin(shortId);
 		} else {
-			return roomService.getByKey(sessionkey);
+			return roomService.getByShortId(shortId);
 		}
 	}
 
-	@ApiOperation(value = "deletes a session",
-			nickname = "deleteSession")
-	@RequestMapping(value = "/{sessionkey}", method = RequestMethod.DELETE)
-	public void deleteSession(@ApiParam(value = "Room-Key from current session", required = true) @PathVariable final String sessionkey) {
-		Room room = roomService.getByKey(sessionkey);
+	@ApiOperation(value = "deletes a Room",
+			nickname = "deleteRoom")
+	@RequestMapping(value = "/{shortId}", method = RequestMethod.DELETE)
+	public void deleteRoom(@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId) {
+		Room room = roomService.getByShortId(shortId);
 		roomService.deleteCascading(room);
 	}
 
@@ -90,20 +90,20 @@ public class SessionController extends PaginationController {
 			nickname = "countActiveUsers")
 	@DeprecatedApi
 	@Deprecated
-	@RequestMapping(value = "/{sessionkey}/activeusercount", method = RequestMethod.GET)
-	public int countActiveUsers(@ApiParam(value = "Room-Key from current session", required = true) @PathVariable final String sessionkey) {
-		return roomService.activeUsers(sessionkey);
+	@RequestMapping(value = "/{shortId}/activeusercount", method = RequestMethod.GET)
+	public int countActiveUsers(@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId) {
+		return roomService.activeUsers(shortId);
 	}
 
 	@ApiOperation(value = "Creates a new Room and returns the Room's data",
-			nickname = "postNewSession")
+			nickname = "postNewRoom")
 	@ApiResponses(value = {
 		@ApiResponse(code = 201, message = HTML_STATUS_201),
 		@ApiResponse(code = 503, message = HTML_STATUS_503)
 	})
 	@RequestMapping(value = "/", method = RequestMethod.POST)
 	@ResponseStatus(HttpStatus.CREATED)
-	public Room postNewSession(@ApiParam(value = "current session", required = true) @RequestBody final Room room, final HttpServletResponse response) {
+	public Room postNewRoom(@ApiParam(value = "current Room", required = true) @RequestBody final Room room, final HttpServletResponse response) {
 		/* FIXME: migrate LMS course support
 		if (room != null && room.isCourseSession()) {
 			final List<Course> courses = new ArrayList<>();
@@ -124,34 +124,34 @@ public class SessionController extends PaginationController {
 		return room;
 	}
 
-	@ApiOperation(value = "updates a session",
-			nickname = "postNewSession")
-	@RequestMapping(value = "/{sessionkey}", method = RequestMethod.PUT)
-	public Room updateSession(
-			@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
+	@ApiOperation(value = "updates a Room",
+			nickname = "postNewRoom")
+	@RequestMapping(value = "/{shortId}", method = RequestMethod.PUT)
+	public Room updateRoom(
+			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId,
 			@ApiParam(value = "current session", required = true) @RequestBody final Room room
 			) {
-		return roomService.update(sessionkey, room);
+		return roomService.update(shortId, room);
 	}
 
-	@ApiOperation(value = "change the session creator (owner)", nickname = "changeSessionCreator")
-	@RequestMapping(value = "/{sessionkey}/changecreator", method = RequestMethod.PUT)
-	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
+	@ApiOperation(value = "change the Room creator (owner)", nickname = "changeRoomCreator")
+	@RequestMapping(value = "/{shortId}/changecreator", method = RequestMethod.PUT)
+	public Room changeRoomCreator(
+			@ApiParam(value = "Room-key from current Room", required = true) @PathVariable final String shortId,
+			@ApiParam(value = "new Room creator", required = true) @RequestBody final String newCreator
 			) {
-		return roomService.updateCreator(sessionkey, newCreator);
+		return roomService.updateCreator(shortId, newCreator);
 	}
 
-	@ApiOperation(value = "Retrieves a list of Sessions",
-			nickname = "getSessions")
+	@ApiOperation(value = "Retrieves a list of Rooms",
+			nickname = "getRooms")
 	@ApiResponses(value = {
 		@ApiResponse(code = 204, message = HTML_STATUS_204),
 		@ApiResponse(code = 501, message = HTML_STATUS_501)
 	})
 	@RequestMapping(value = "/", method = RequestMethod.GET)
 	@Pagination
-	public List<Room> getSessions(
+	public List<Room> getRooms(
 			@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,
@@ -165,9 +165,9 @@ public class SessionController extends PaginationController {
 			final String userId = userService.getByUsername(username).getId();
 			try {
 				if (ownedOnly && !visitedOnly) {
-					rooms = roomService.getUserSessions(userId);
+					rooms = roomService.getUserRooms(userId);
 				} else if (visitedOnly && !ownedOnly) {
-					rooms = roomService.getUserVisitedSessions(username);
+					rooms = roomService.getUserVisitedRooms(username);
 				} else {
 					response.setStatus(HttpStatus.NOT_IMPLEMENTED.value());
 					return null;
@@ -179,9 +179,9 @@ public class SessionController extends PaginationController {
 			/* TODO implement all parameter combinations, implement use of user parameter */
 			try {
 				if (ownedOnly && !visitedOnly) {
-					rooms = roomService.getMySessions(offset, limit);
+					rooms = roomService.getMyRooms(offset, limit);
 				} else if (visitedOnly && !ownedOnly) {
-					rooms = roomService.getMyVisitedSessions(offset, limit);
+					rooms = roomService.getMyVisitedRooms(offset, limit);
 				} else {
 					response.setStatus(HttpStatus.NOT_IMPLEMENTED.value());
 					return null;
@@ -197,34 +197,34 @@ public class SessionController extends PaginationController {
 		}
 
 		if ("shortname".equals(sortby)) {
-			Collections.sort(rooms, new SessionShortNameComparator());
+			Collections.sort(rooms, new RoomShortNameComparator());
 		} else {
-			Collections.sort(rooms, new SessionNameComparator());
+			Collections.sort(rooms, new RoomServiceImpl.RoomNameComparator());
 		}
 
 		return rooms;
 	}
 
 	/**
-	 * Returns a list of my own sessions with only the necessary information like name, keyword, or counters.
+	 * Returns a list of my own Rooms with only the necessary information like name, keyword, or counters.
 	 */
 	@ApiOperation(value = "Retrieves a Room",
-			nickname = "getMySessions")
+			nickname = "getMyRooms")
 	@ApiResponses(value = {
 		@ApiResponse(code = 204, message = HTML_STATUS_204)
 	})
 	@RequestMapping(value = "/", method = RequestMethod.GET, params = "statusonly=true")
 	@Pagination
-	public List<Room> getMySessions(
+	public List<Room> getMyRooms(
 			@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<Room> rooms;
 		if (!visitedOnly) {
-			rooms = roomService.getMySessionsInfo(offset, limit);
+			rooms = roomService.getMyRoomsInfo(offset, limit);
 		} else {
-			rooms = roomService.getMyVisitedSessionsInfo(offset, limit);
+			rooms = roomService.getMyVisitedRoomsInfo(offset, limit);
 		}
 
 		if (rooms == null || rooms.isEmpty()) {
@@ -233,42 +233,42 @@ public class SessionController extends PaginationController {
 		}
 
 		if ("shortname".equals(sortby)) {
-			Collections.sort(rooms, new SessionShortNameComparator());
+			Collections.sort(rooms, new RoomShortNameComparator());
 		} else {
-			Collections.sort(rooms, new SessionNameComparator());
+			Collections.sort(rooms, new RoomNameComparator());
 		}
 		return rooms;
 	}
 
-	@ApiOperation(value = "Retrieves all public pool sessions for the current user",
-			nickname = "getMyPublicPoolSessions")
+	@ApiOperation(value = "Retrieves all public pool Rooms for the current user",
+			nickname = "getMyPublicPoolRooms")
 	@ApiResponses(value = {
 		@ApiResponse(code = 204, message = HTML_STATUS_204)
 	})
 	@RequestMapping(value = "/publicpool", method = RequestMethod.GET, params = "statusonly=true")
-	public List<Room> getMyPublicPoolSessions(
+	public List<Room> getMyPublicPoolRooms(
 			final HttpServletResponse response
 			) {
-		List<Room> sessions = roomService.getMyPublicPoolSessionsInfo();
+		List<Room> rooms = roomService.getMyPublicPoolRoomsInfo();
 
-		if (sessions == null || sessions.isEmpty()) {
+		if (rooms == null || rooms.isEmpty()) {
 			response.setStatus(HttpServletResponse.SC_NO_CONTENT);
 			return null;
 		}
 
-		return sessions;
+		return rooms;
 	}
 
-	@ApiOperation(value = "Retrieves all public pool sessions",
-			nickname = "getMyPublicPoolSessions")
+	@ApiOperation(value = "Retrieves all public pool Rooms",
+			nickname = "getMyPublicPoolRooms")
 	@ApiResponses(value = {
 		@ApiResponse(code = 204, message = HTML_STATUS_204)
 	})
 	@RequestMapping(value = "/publicpool", method = RequestMethod.GET)
-	public List<Room> getPublicPoolSessions(
+	public List<Room> getPublicPoolRooms(
 			final HttpServletResponse response
 			) {
-		List<Room> rooms = roomService.getPublicPoolSessionsInfo();
+		List<Room> rooms = roomService.getPublicPoolRoomsInfo();
 
 		if (rooms == null || rooms.isEmpty()) {
 			response.setStatus(HttpServletResponse.SC_NO_CONTENT);
@@ -278,63 +278,63 @@ public class SessionController extends PaginationController {
 		return rooms;
 	}
 
-	@ApiOperation(value = "imports a session",
-			nickname = "importSession")
+	@ApiOperation(value = "imports a Room",
+			nickname = "importRoom")
 	@RequestMapping(value = "/import", method = RequestMethod.POST)
-	public Room importSession(
-			@ApiParam(value = "current session", required = true) @RequestBody final ImportExportSession session,
+	public Room importRoom(
+			@ApiParam(value = "current Room", required = true) @RequestBody final ImportExportContainer room,
 			final HttpServletResponse response
 			) {
-		return roomService.importSession(session);
+		return roomService.importRooms(room);
 	}
 
-	@ApiOperation(value = "export sessions", nickname = "exportSession")
+	@ApiOperation(value = "export Rooms", nickname = "exportRoom")
 	@RequestMapping(value = "/export", method = RequestMethod.GET)
-	public List<ImportExportSession> getExport(
-			@ApiParam(value = "sessionkey", required = true) @RequestParam(value = "sessionkey", defaultValue = "") final List<String> sessionkey,
+	public List<ImportExportContainer> getExport(
+			@ApiParam(value = "Room-Key", required = true) @RequestParam(value = "sessionkey", defaultValue = "") final List<String> shortIds,
 			@ApiParam(value = "wether statistics shall be exported", required = true) @RequestParam(value = "withAnswerStatistics", defaultValue = "false") final Boolean withAnswerStatistics,
 			@ApiParam(value = "wether comments shall be exported", required = true) @RequestParam(value = "withFeedbackQuestions", defaultValue = "false") final Boolean withFeedbackQuestions,
 			final HttpServletResponse response
 		) {
-		List<ImportExportSession> sessions = new ArrayList<>();
-		ImportExportSession temp;
-		for (String key : sessionkey) {
-			roomService.setActive(key, false);
-			temp = roomService.exportSession(key, withAnswerStatistics, withFeedbackQuestions);
+		List<ImportExportContainer> sessions = new ArrayList<>();
+		ImportExportContainer temp;
+		for (String shortId : shortIds) {
+			roomService.setActive(shortId, false);
+			temp = roomService.exportRoom(shortId, withAnswerStatistics, withFeedbackQuestions);
 			if (temp != null) {
 				sessions.add(temp);
 			}
-			roomService.setActive(key, true);
+			roomService.setActive(shortId, true);
 		}
 		return sessions;
 	}
 
-	@ApiOperation(value = "copy a session to the public pool if enabled")
-	@RequestMapping(value = "/{sessionkey}/copytopublicpool", method = RequestMethod.POST)
+	@ApiOperation(value = "copy a Rooms to the public pool if enabled")
+	@RequestMapping(value = "/{shortId}/copytopublicpool", method = RequestMethod.POST)
 	public Room 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
+			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId,
+			@ApiParam(value = "public pool attributes for Room", required = true) @RequestBody final ImportExportContainer.PublicPool publicPool
 			) {
-		roomService.setActive(sessionkey, false);
-		Room roomInfo = roomService.copySessionToPublicPool(sessionkey, publicPool);
-		roomService.setActive(sessionkey, true);
+		roomService.setActive(shortId, false);
+		Room roomInfo = roomService.copyRoomToPublicPool(shortId, publicPool);
+		roomService.setActive(shortId, true);
 		return roomInfo;
 	}
 
 
 	@ApiOperation(value = "Locks or unlocks a Room",
-			nickname = "lockSession")
+			nickname = "lockRoom")
 	@ApiResponses(value = {
 		@ApiResponse(code = 404, message = HTML_STATUS_404)
 	})
-	@RequestMapping(value = "/{sessionkey}/lock", method = RequestMethod.POST)
-	public Room lockSession(
-			@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
+	@RequestMapping(value = "/{shortId}/lock", method = RequestMethod.POST)
+	public Room lockRoom(
+			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId,
 			@ApiParam(value = "lock", required = true) @RequestParam(required = false) final Boolean lock,
 			final HttpServletResponse response
 			) {
 		if (lock != null) {
-			return roomService.setActive(sessionkey, lock);
+			return roomService.setActive(shortId, lock);
 		}
 		response.setStatus(HttpStatus.NOT_FOUND.value());
 		return null;
@@ -342,109 +342,109 @@ public class SessionController extends PaginationController {
 
 	@ApiOperation(value = "retrieves a value for the score",
 			nickname = "getLearningProgress")
-	@RequestMapping(value = "/{sessionkey}/learningprogress", method = RequestMethod.GET)
+	@RequestMapping(value = "/{shortId}/learningprogress", method = RequestMethod.GET)
 	public ScoreStatistics getLearningProgress(
-			@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
+			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId,
 			@ApiParam(value = "type", required = false) @RequestParam(value = "type", defaultValue = "questions") final String type,
 			@ApiParam(value = "question variant", required = false) @RequestParam(value = "questionVariant", required = false) final String questionVariant,
 			final HttpServletResponse response
 			) {
-		return roomService.getLearningProgress(sessionkey, type, questionVariant);
+		return roomService.getLearningProgress(shortId, type, questionVariant);
 	}
 
 	@ApiOperation(value = "retrieves a value for the learning progress for the current user",
 			nickname = "getMyLearningProgress")
-	@RequestMapping(value = "/{sessionkey}/mylearningprogress", method = RequestMethod.GET)
+	@RequestMapping(value = "/{shortId}/mylearningprogress", method = RequestMethod.GET)
 	public ScoreStatistics getMyLearningProgress(
-			@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
+			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId,
 			@RequestParam(value = "type", defaultValue = "questions") final String type,
 			@RequestParam(value = "questionVariant", required = false) final String questionVariant,
 			final HttpServletResponse response
 			) {
-		return roomService.getMyLearningProgress(sessionkey, type, questionVariant);
+		return roomService.getMyLearningProgress(shortId, type, questionVariant);
 	}
 
-	@ApiOperation(value = "retrieves all session features",
-			nickname = "getSessionFeatures")
-	@RequestMapping(value = "/{sessionkey}/features", method = RequestMethod.GET)
-	public Room.Settings getSessionFeatures(
-			@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
+	@ApiOperation(value = "retrieves all Room features",
+			nickname = "getRoomFeatures")
+	@RequestMapping(value = "/{shortId}/features", method = RequestMethod.GET)
+	public Room.Settings getRoomFeatures(
+			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId,
 			final HttpServletResponse response
 			) {
-		return roomService.getFeatures(sessionkey);
+		return roomService.getFeatures(shortId);
 	}
 
-	@RequestMapping(value = "/{sessionkey}/features", method = RequestMethod.PUT)
-	@ApiOperation(value = "change all session features",
-			nickname = "changeSessionFeatures")
-	public Room.Settings changeSessionFeatures(
-			@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
-			@ApiParam(value = "session feature", required = true) @RequestBody final Room.Settings features,
+	@RequestMapping(value = "/{shortId}/features", method = RequestMethod.PUT)
+	@ApiOperation(value = "change all Room features",
+			nickname = "changeRoomFeatures")
+	public Room.Settings changeRoomFeatures(
+			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId,
+			@ApiParam(value = "Room feature", required = true) @RequestBody final Room.Settings features,
 			final HttpServletResponse response
 			) {
-		return roomService.updateFeatures(sessionkey, features);
+		return roomService.updateFeatures(shortId, features);
 	}
 
-	@RequestMapping(value = "/{sessionkey}/lockfeedbackinput", method = RequestMethod.POST)
+	@RequestMapping(value = "/{shortId}/lockfeedbackinput", method = RequestMethod.POST)
 	@ApiOperation(value = "locks input of user live feedback",
 			nickname = "lockFeedbackInput")
 	public boolean lockFeedbackInput(
-			@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
+			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId,
 			@ApiParam(value = "lock", required = true) @RequestParam(required = true) final Boolean lock,
 			final HttpServletResponse response
 			) {
-		return roomService.lockFeedbackInput(sessionkey, lock);
+		return roomService.lockFeedbackInput(shortId, lock);
 	}
 
-	@RequestMapping(value = "/{sessionkey}/flipflashcards", method = RequestMethod.POST)
-	@ApiOperation(value = "flip all flashcards in session",
+	@RequestMapping(value = "/{shortId}/flipflashcards", method = RequestMethod.POST)
+	@ApiOperation(value = "flip all flashcards in Room",
 			nickname = "lockFeedbackInput")
 	public boolean flipFlashcards(
-			@ApiParam(value = "session-key from current session", required = true) @PathVariable final String sessionkey,
+			@ApiParam(value = "Room-Key from current Room", required = true) @PathVariable final String shortId,
 			@ApiParam(value = "flip", required = true) @RequestParam(required = true) final Boolean flip,
 			final HttpServletResponse response
 			) {
-		return roomService.flipFlashcards(sessionkey, flip);
+		return roomService.flipFlashcards(shortId, flip);
 	}
 
 	/* internal redirections */
 
-	@RequestMapping(value = "/{sessionKey}/lecturerquestion")
+	@RequestMapping(value = "/{shortId}/lecturerquestion")
 	public String redirectLecturerQuestion(
-			@PathVariable final String sessionKey,
+			@PathVariable final String shortId,
 			final HttpServletResponse response
 			) {
 		response.addHeader(X_FORWARDED, "1");
 
-		return String.format("forward:/lecturerquestion/?sessionkey=%s", sessionKey);
+		return String.format("forward:/lecturerquestion/?sessionkey=%s", shortId);
 	}
 
-	@RequestMapping(value = "/{sessionKey}/lecturerquestion/{arg1}")
+	@RequestMapping(value = "/{shortId}/lecturerquestion/{arg1}")
 	public String redirectLecturerQuestionWithOneArgument(
-			@PathVariable final String sessionKey,
+			@PathVariable final String shortId,
 			@PathVariable final String arg1,
 			final HttpServletResponse response
 			) {
 		response.addHeader(X_FORWARDED, "1");
 
-		return String.format("forward:/lecturerquestion/%s/?sessionkey=%s", arg1, sessionKey);
+		return String.format("forward:/lecturerquestion/%s/?sessionkey=%s", arg1, shortId);
 	}
 
-	@RequestMapping(value = "/{sessionKey}/lecturerquestion/{arg1}/{arg2}")
+	@RequestMapping(value = "/{shortId}/lecturerquestion/{arg1}/{arg2}")
 	public String redirectLecturerQuestionWithTwoArguments(
-			@PathVariable final String sessionKey,
+			@PathVariable final String shortId,
 			@PathVariable final String arg1,
 			@PathVariable final String arg2,
 			final HttpServletResponse response
 			) {
 		response.addHeader(X_FORWARDED, "1");
 
-		return String.format("forward:/lecturerquestion/%s/%s/?sessionkey=%s", arg1, arg2, sessionKey);
+		return String.format("forward:/lecturerquestion/%s/%s/?sessionkey=%s", arg1, arg2, shortId);
 	}
 
-	@RequestMapping(value = "/{sessionKey}/lecturerquestion/{arg1}/{arg2}/{arg3}")
+	@RequestMapping(value = "/{shortId}/lecturerquestion/{arg1}/{arg2}/{arg3}")
 	public String redirectLecturerQuestionWithThreeArguments(
-			@PathVariable final String sessionKey,
+			@PathVariable final String shortId,
 			@PathVariable final String arg1,
 			@PathVariable final String arg2,
 			@PathVariable final String arg3,
@@ -452,45 +452,45 @@ public class SessionController extends PaginationController {
 			) {
 		response.addHeader(X_FORWARDED, "1");
 
-		return String.format("forward:/lecturerquestion/%s/%s/%s/?sessionkey=%s", arg1, arg2, arg3, sessionKey);
+		return String.format("forward:/lecturerquestion/%s/%s/%s/?sessionkey=%s", arg1, arg2, arg3, shortId);
 	}
 
-	@RequestMapping(value = "/{sessionKey}/audiencequestion")
+	@RequestMapping(value = "/{shortId}/audiencequestion")
 	public String redirectAudienceQuestion(
-			@PathVariable final String sessionKey,
+			@PathVariable final String shortId,
 			final HttpServletResponse response
 			) {
 		response.addHeader(X_FORWARDED, "1");
 
-		return String.format("forward:/audiencequestion/?sessionkey=%s", sessionKey);
+		return String.format("forward:/audiencequestion/?sessionkey=%s", shortId);
 	}
 
-	@RequestMapping(value = "/{sessionKey}/audiencequestion/{arg1}")
+	@RequestMapping(value = "/{shortId}/audiencequestion/{arg1}")
 	public String redirectAudienceQuestionWithOneArgument(
-			@PathVariable final String sessionKey,
+			@PathVariable final String shortId,
 			@PathVariable final String arg1,
 			final HttpServletResponse response
 			) {
 		response.addHeader(X_FORWARDED, "1");
 
-		return String.format("forward:/audiencequestion/%s/?sessionkey=%s", arg1, sessionKey);
+		return String.format("forward:/audiencequestion/%s/?sessionkey=%s", arg1, shortId);
 	}
 
-	@RequestMapping(value = "/{sessionKey}/audiencequestion/{arg1}/{arg2}")
+	@RequestMapping(value = "/{shortId}/audiencequestion/{arg1}/{arg2}")
 	public String redirectAudienceQuestionWithTwoArguments(
-			@PathVariable final String sessionKey,
+			@PathVariable final String shortId,
 			@PathVariable final String arg1,
 			@PathVariable final String arg2,
 			final HttpServletResponse response
 			) {
 		response.addHeader(X_FORWARDED, "1");
 
-		return String.format("forward:/audiencequestion/%s/%s/?sessionkey=%s", arg1, arg2, sessionKey);
+		return String.format("forward:/audiencequestion/%s/%s/?sessionkey=%s", arg1, arg2, shortId);
 	}
 
-	@RequestMapping(value = "/{sessionKey}/audiencequestion/{arg1}/{arg2}/{arg3}")
+	@RequestMapping(value = "/{shortId}/audiencequestion/{arg1}/{arg2}/{arg3}")
 	public String redirectAudienceQuestionWithThreeArguments(
-			@PathVariable final String sessionKey,
+			@PathVariable final String shortId,
 			@PathVariable final String arg1,
 			@PathVariable final String arg2,
 			@PathVariable final String arg3,
@@ -498,6 +498,6 @@ public class SessionController extends PaginationController {
 			) {
 		response.addHeader(X_FORWARDED, "1");
 
-		return String.format("forward:/audiencequestion/%s/%s/%s/?sessionkey=%s", arg1, arg2, arg3, sessionKey);
+		return String.format("forward:/audiencequestion/%s/%s/%s/?sessionkey=%s", arg1, arg2, arg3, shortId);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/controller/SocketController.java b/src/main/java/de/thm/arsnova/controller/SocketController.java
index 3c0bd4922ce9930b61eae60b19f08eddc9f12953..33c58e357b7eb026b8fef13a822bac7d9397908b 100644
--- a/src/main/java/de/thm/arsnova/controller/SocketController.java
+++ b/src/main/java/de/thm/arsnova/controller/SocketController.java
@@ -45,7 +45,7 @@ import java.util.UUID;
  */
 @RestController
 @RequestMapping("/socket")
-@Api(value = "/socket", description = "the Socket API")
+@Api(value = "/socket", description = "WebSocket Initialization API")
 public class SocketController extends AbstractController {
 
 	@Autowired
@@ -80,7 +80,7 @@ public class SocketController extends AbstractController {
 			response.setStatus(HttpStatus.FORBIDDEN.value());
 			return;
 		}
-		userService.putUser2SocketId(UUID.fromString(socketid), u);
+		userService.putUserToSocketId(UUID.fromString(socketid), u);
 		userRoomService.setSocketId(UUID.fromString(socketid));
 		response.setStatus(HttpStatus.NO_CONTENT.value());
 	}
diff --git a/src/main/java/de/thm/arsnova/controller/StatisticsController.java b/src/main/java/de/thm/arsnova/controller/StatisticsController.java
index 2f0962cc0943eda0b91002d0968d15c2e4c0f20e..d30a237a7a752e952c1825467031d32f622fbbd2 100644
--- a/src/main/java/de/thm/arsnova/controller/StatisticsController.java
+++ b/src/main/java/de/thm/arsnova/controller/StatisticsController.java
@@ -32,7 +32,7 @@ import org.springframework.web.bind.annotation.RestController;
  * Allows retrieval of several statistics such as the number of active users.
  */
 @RestController
-@Api(value = "/statistics", description = "the Statistic API")
+@Api(value = "/statistics", description = "Statistics API")
 public class StatisticsController extends AbstractController {
 
 	@Autowired
diff --git a/src/main/java/de/thm/arsnova/controller/v2/LegacyController.java b/src/main/java/de/thm/arsnova/controller/v2/LegacyController.java
index 3e85689954b82c5d8eebf7730d4d26876ce39df1..c792ab226b8ba62fadffefec7f429a676198c9ce 100644
--- a/src/main/java/de/thm/arsnova/controller/v2/LegacyController.java
+++ b/src/main/java/de/thm/arsnova/controller/v2/LegacyController.java
@@ -56,105 +56,105 @@ public class LegacyController extends AbstractController {
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{sessionKey}/question")
-	public String redirectQuestionByLecturer(@PathVariable final String sessionKey) {
-		return String.format("forward:/v2/lecturerquestion/?sessionkey=%s", sessionKey);
+	@RequestMapping(value = "/session/{shortId}/question")
+	public String redirectQuestionByLecturer(@PathVariable final String shortId) {
+		return String.format("forward:/v2/lecturerquestion/?sessionkey=%s", shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{sessionKey}/skillquestions", method = RequestMethod.GET)
-	public String redirectQuestionByLecturerList(@PathVariable final String sessionKey) {
-		return String.format("forward:/v2/lecturerquestion/?sessionkey=%s", sessionKey);
+	@RequestMapping(value = "/session/{shortId}/skillquestions", method = RequestMethod.GET)
+	public String redirectQuestionByLecturerList(@PathVariable final String shortId) {
+		return String.format("forward:/v2/lecturerquestion/?sessionkey=%s", shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{sessionKey}/skillquestioncount", method = RequestMethod.GET)
-	public String redirectQuestionByLecturerCount(@PathVariable final String sessionKey) {
-		return String.format("forward:/v2/lecturerquestion/count?sessionkey=%s", sessionKey);
+	@RequestMapping(value = "/session/{shortId}/skillquestioncount", method = RequestMethod.GET)
+	public String redirectQuestionByLecturerCount(@PathVariable final String shortId) {
+		return String.format("forward:/v2/lecturerquestion/count?sessionkey=%s", shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{sessionKey}/answercount", method = RequestMethod.GET)
-	public String redirectQuestionByLecturerAnswerCount(@PathVariable final String sessionKey) {
-		return String.format("forward:/v2/lecturerquestion/answercount?sessionkey=%s", sessionKey);
+	@RequestMapping(value = "/session/{shortId}/answercount", method = RequestMethod.GET)
+	public String redirectQuestionByLecturerAnswerCount(@PathVariable final String shortId) {
+		return String.format("forward:/v2/lecturerquestion/answercount?sessionkey=%s", shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{sessionKey}/unanswered", method = RequestMethod.GET)
-	public String redirectQuestionByLecturerUnnsweredCount(@PathVariable final String sessionKey) {
-		return String.format("forward:/v2/lecturerquestion/answercount?sessionkey=%s", sessionKey);
+	@RequestMapping(value = "/session/{shortId}/unanswered", method = RequestMethod.GET)
+	public String redirectQuestionByLecturerUnnsweredCount(@PathVariable final String shortId) {
+		return String.format("forward:/v2/lecturerquestion/answercount?sessionkey=%s", shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{sessionKey}/myanswers", method = RequestMethod.GET)
-	public String redirectQuestionByLecturerMyAnswers(@PathVariable final String sessionKey) {
-		return String.format("forward:/v2/lecturerquestion/myanswers?sessionkey=%s", sessionKey);
+	@RequestMapping(value = "/session/{shortId}/myanswers", method = RequestMethod.GET)
+	public String redirectQuestionByLecturerMyAnswers(@PathVariable final String shortId) {
+		return String.format("forward:/v2/lecturerquestion/myanswers?sessionkey=%s", shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{sessionKey}/interposed")
-	public String redirectQuestionByAudience(@PathVariable final String sessionKey) {
-		return String.format("forward:/v2/audiencequestion/?sessionkey=%s", sessionKey);
+	@RequestMapping(value = "/session/{shortId}/interposed")
+	public String redirectQuestionByAudience(@PathVariable final String shortId) {
+		return String.format("forward:/v2/audiencequestion/?sessionkey=%s", shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{sessionKey}/interposed", method = RequestMethod.DELETE)
+	@RequestMapping(value = "/session/{shortId}/interposed", method = RequestMethod.DELETE)
 	@ResponseBody
-	public void deleteAllInterposedQuestions(@PathVariable final String sessionKey) {
-		commentService.deleteBySessionKey(sessionKey);
+	public void deleteAllInterposedQuestions(@PathVariable final String shortId) {
+		commentService.deleteByRoomShortId(shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{sessionKey}/interposedcount", method = RequestMethod.GET)
-	public String redirectQuestionByAudienceCount(@PathVariable final String sessionKey) {
-		return String.format("forward:/v2/audiencequestion/count?sessionkey=%s", sessionKey);
+	@RequestMapping(value = "/session/{shortId}/interposedcount", method = RequestMethod.GET)
+	public String redirectQuestionByAudienceCount(@PathVariable final String shortId) {
+		return String.format("forward:/v2/audiencequestion/count?sessionkey=%s", shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{sessionKey}/interposedreadingcount", method = RequestMethod.GET)
-	public String redirectQuestionByAudienceReadCount(@PathVariable final String sessionKey) {
-		return String.format("forward:/v2/audiencequestion/readcount?sessionkey=%s", sessionKey);
+	@RequestMapping(value = "/session/{shortId}/interposedreadingcount", method = RequestMethod.GET)
+	public String redirectQuestionByAudienceReadCount(@PathVariable final String shortId) {
+		return String.format("forward:/v2/audiencequestion/readcount?sessionkey=%s", shortId);
 	}
 
 	/* generalized routes */
 
 	@DeprecatedApi
-	@RequestMapping(value = { "/session/{sessionKey}/question/{arg1}", "/session/{sessionKey}/questions/{arg1}" })
+	@RequestMapping(value = { "/session/{shortId}/question/{arg1}", "/session/{shortId}/questions/{arg1}" })
 	public String redirectQuestionByLecturerWithOneArgument(
-			@PathVariable final String sessionKey,
+			@PathVariable final String shortId,
 			@PathVariable final String arg1
 			) {
-		return String.format("forward:/v2/lecturerquestion/%s/?sessionkey=%s", arg1, sessionKey);
+		return String.format("forward:/v2/lecturerquestion/%s/?sessionkey=%s", arg1, shortId);
 	}
 
 	@DeprecatedApi
 	@RequestMapping(
-			value = { "/session/{sessionKey}/question/{arg1}/{arg2}", "/session/{sessionKey}/questions/{arg1}/{arg2}" }
+			value = { "/session/{shortId}/question/{arg1}/{arg2}", "/session/{shortId}/questions/{arg1}/{arg2}" }
 			)
 	public String redirectQuestionByLecturerWithTwoArguments(
-			@PathVariable final String sessionKey,
+			@PathVariable final String shortId,
 			@PathVariable final String arg1,
 			@PathVariable final String arg2
 			) {
-		return String.format("forward:/v2/lecturerquestion/%s/%s/?sessionkey=%s", arg1, arg2, sessionKey);
+		return String.format("forward:/v2/lecturerquestion/%s/%s/?sessionkey=%s", arg1, arg2, shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{sessionKey}/interposed/{arg1}")
+	@RequestMapping(value = "/session/{shortId}/interposed/{arg1}")
 	public String redirectQuestionByAudienceWithOneArgument(
-			@PathVariable final String sessionKey,
+			@PathVariable final String shortId,
 			@PathVariable final String arg1
 			) {
-		return String.format("forward:/v2/audiencequestion/%s/?sessionkey=%s", arg1, sessionKey);
+		return String.format("forward:/v2/audiencequestion/%s/?sessionkey=%s", arg1, shortId);
 	}
 
 	@DeprecatedApi
-	@RequestMapping(value = "/session/{sessionKey}/interposed/{arg1}/{arg2}")
+	@RequestMapping(value = "/session/{shortId}/interposed/{arg1}/{arg2}")
 	public String redirectQuestionByAudienceWithTwoArguments(
-			@PathVariable final String sessionKey,
+			@PathVariable final String shortId,
 			@PathVariable final String arg1,
 			@PathVariable final String arg2
 			) {
-		return String.format("forward:/v2/audiencequestion/%s/%s/?sessionkey=%s", arg1, arg2, sessionKey);
+		return String.format("forward:/v2/audiencequestion/%s/%s/?sessionkey=%s", arg1, arg2, shortId);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/entities/Comment.java b/src/main/java/de/thm/arsnova/entities/Comment.java
index 414a3969a9f84da9396bd730194b6e1dfbd9165a..932b75e0d5a8081312004edc419b3a8834a3b870 100644
--- a/src/main/java/de/thm/arsnova/entities/Comment.java
+++ b/src/main/java/de/thm/arsnova/entities/Comment.java
@@ -11,7 +11,7 @@ public class Comment implements Entity {
 	private String rev;
 	private Date creationTimestamp;
 	private Date updateTimestamp;
-	private String sessionId;
+	private String roomId;
 	private String creatorId;
 	private String subject;
 	private String body;
@@ -68,13 +68,13 @@ public class Comment implements Entity {
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public String getSessionId() {
-		return sessionId;
+	public String getRoomId() {
+		return roomId;
 	}
 
 	@JsonView(View.Persistence.class)
-	public void setSessionId(final String sessionId) {
-		this.sessionId = sessionId;
+	public void setRoomId(final String roomId) {
+		this.roomId = roomId;
 	}
 
 	@JsonView(View.Persistence.class)
diff --git a/src/main/java/de/thm/arsnova/entities/Motd.java b/src/main/java/de/thm/arsnova/entities/Motd.java
index 2c6bbfa12ad96fca9950ba6ecc0751f9e04424a6..aa4f94032621a2ae897cc18cae88435334966583 100644
--- a/src/main/java/de/thm/arsnova/entities/Motd.java
+++ b/src/main/java/de/thm/arsnova/entities/Motd.java
@@ -6,16 +6,24 @@ import de.thm.arsnova.entities.serialization.View;
 import java.util.Date;
 
 public class Motd implements Entity {
+	public enum Audience {
+		ALL,
+		AUTHENTICATED,
+		AUTHORS,
+		PARTICIPANTS,
+		ROOM
+	}
+
 	private String id;
 	private String rev;
 	private Date creationTimestamp;
 	private Date updateTimestamp;
-	private String sessionId;
-	private Date startdate;
-	private Date enddate;
+	private String roomId;
+	private Date startDate;
+	private Date endDate;
 	private String title;
 	private String body;
-	private String audience;
+	private Audience audience;
 
 	@JsonView({View.Persistence.class, View.Public.class})
 	public String getId() {
@@ -62,33 +70,33 @@ public class Motd 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})
-	public Date getStartdate() {
-		return startdate;
+	public Date getStartDate() {
+		return startDate;
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public void setStartdate(final Date timestamp) {
-		startdate = timestamp;
+	public void setStartDate(final Date startDate) {
+		this.startDate = startDate;
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public Date getEnddate() {
-		return enddate;
+	public Date getEndDate() {
+		return endDate;
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public void setEnddate(final Date timestamp) {
-		enddate = timestamp;
+	public void setEndDate(final Date endDate) {
+		this.endDate = endDate;
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
@@ -97,8 +105,8 @@ public class Motd implements Entity {
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public void setTitle(final String ttitle) {
-		title = ttitle;
+	public void setTitle(final String title) {
+		this.title = title;
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
@@ -107,17 +115,17 @@ public class Motd implements Entity {
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public void setBody(final String ttext) {
-		body = ttext;
+	public void setBody(final String body) {
+		this.body = body;
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public String getAudience() {
+	public Audience getAudience() {
 		return audience;
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public void setAudience(final String a) {
-		audience = a;
+	public void setAudience(final Audience audience) {
+		this.audience = audience;
 	}
 }
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 e9866dae02e54087c59cdb0aab6998bed839cbb2..9b2ec27c5d8428c463f066471a57d918650503d3 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/FromV2Migrator.java
@@ -21,15 +21,7 @@ import de.thm.arsnova.entities.ChoiceAnswer;
 import de.thm.arsnova.entities.ChoiceQuestionContent;
 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;
-import de.thm.arsnova.entities.migration.v2.Comment;
-import de.thm.arsnova.entities.migration.v2.Content;
-import de.thm.arsnova.entities.migration.v2.DbUser;
-import de.thm.arsnova.entities.migration.v2.Entity;
-import de.thm.arsnova.entities.migration.v2.LoggedIn;
-import de.thm.arsnova.entities.migration.v2.MotdList;
-import de.thm.arsnova.entities.migration.v2.Room;
+import de.thm.arsnova.entities.migration.v2.*;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -202,7 +194,7 @@ public class FromV2Migrator {
 		}
 		final de.thm.arsnova.entities.Comment to = new de.thm.arsnova.entities.Comment();
 		copyCommonProperties(from, to);
-		to.setSessionId(from.getSessionId());
+		to.setRoomId(from.getSessionId());
 		to.setCreatorId(creator.getId());
 		to.setSubject(from.getSubject());
 		to.setBody(from.getText());
@@ -212,6 +204,34 @@ public class FromV2Migrator {
 		return to;
 	}
 
+	public de.thm.arsnova.entities.Motd migrate(final Motd from) {
+		final de.thm.arsnova.entities.Motd to = new de.thm.arsnova.entities.Motd();
+		copyCommonProperties(from, to);
+		to.setCreationTimestamp(from.getStartdate());
+		to.setUpdateTimestamp(new Date());
+		to.setStartDate(from.getStartdate());
+		to.setEndDate(from.getEnddate());
+		switch (from.getAudience()) {
+			case "all":
+				to.setAudience(de.thm.arsnova.entities.Motd.Audience.ALL);
+				break;
+			case "tutors":
+				to.setAudience(de.thm.arsnova.entities.Motd.Audience.AUTHORS);
+				break;
+			case "students":
+				to.setAudience(de.thm.arsnova.entities.Motd.Audience.PARTICIPANTS);
+				break;
+			case "session":
+				to.setAudience(de.thm.arsnova.entities.Motd.Audience.ROOM);
+				break;
+		}
+		to.setTitle(from.getTitle());
+		to.setBody(from.getText());
+		to.setRoomId(from.getSessionId());
+
+		return to;
+	}
+
 	private UserProfile.AuthProvider detectAuthProvider(final String loginId) {
 		if (loginId.length() == 15 && loginId.startsWith("Guest")) {
 			return UserProfile.AuthProvider.ARSNOVA_GUEST;
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 58fdb37274e83292e7b0e545129ecd75a2c25dd3..0458eb0c69db53a1cfcf27ecfba7633c423199a7 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/ToV2Migrator.java
@@ -124,7 +124,7 @@ public class ToV2Migrator {
 	public Comment migrate(final de.thm.arsnova.entities.Comment from, final UserProfile creator) {
 		final Comment to = new Comment();
 		copyCommonProperties(from, to);
-		to.setSessionId(from.getSessionId());
+		to.setSessionId(from.getRoomId());
 		to.setCreator(creator.getLoginId());
 		to.setSubject(from.getSubject());
 		to.setText(from.getBody());
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Answer.java b/src/main/java/de/thm/arsnova/entities/migration/v2/Answer.java
index 44bbab41951db65f9118120ee3c38866ec321874..d160a6afb18ab4833ed615e9bd6d23ad6f1bd39d 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/Answer.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/Answer.java
@@ -28,7 +28,7 @@ import io.swagger.annotations.ApiModelProperty;
  *
  * This class has additional fields to transport generated answer statistics.
  */
-@ApiModel(value = "Answer", description = "the answer entity")
+@ApiModel(value = "Answer", description = "Answer entity - Can represent a single answer or summarized statistics")
 public class Answer implements Entity {
 	private String id;
 	private String rev;
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/AnswerOption.java b/src/main/java/de/thm/arsnova/entities/migration/v2/AnswerOption.java
index 5bd8b152b4cafbdab40ad615a46d2075bfa84306..b655008a71c83bcc70bbd3030d08941470d25842 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/AnswerOption.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/AnswerOption.java
@@ -25,9 +25,9 @@ import io.swagger.annotations.ApiModelProperty;
 import java.io.Serializable;
 
 /**
- * This class represents an answer option of a question.
+ * Represents an Answer (Possible Answer) of Content.
  */
-@ApiModel(value = "session/answer", description = "the possible answer entity")
+@ApiModel(value = "AnswerOption", description = "Answer Option (Possible Answer) entity")
 public class AnswerOption implements Serializable {
 
 	private String id;
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Comment.java b/src/main/java/de/thm/arsnova/entities/migration/v2/Comment.java
index 224a8adaaf96bc4ec139a74002b244ed01767b0f..3aa5afc1cc0c53f8bf97116984304f29531843cf 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/Comment.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/Comment.java
@@ -24,9 +24,9 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 /**
- * A question the user is asking the teacher. Also known as comment, feedback or audience question.
+ * A Comment (Interposed/Feedback/Audience question) from a attendee in a Room.
  */
-@ApiModel(value = "comment", description = "the comment entity")
+@ApiModel(value = "Comment", description = "Comment (Interposed/Feedback/Audience Question) entity")
 public class Comment implements Entity {
 	private String id;
 	private String rev;
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/CommentReadingCount.java b/src/main/java/de/thm/arsnova/entities/migration/v2/CommentReadingCount.java
index ef6d4daf59d4a36684c510eb36b459348f2a8e30..79271bad0eae4cf7bba61baf15b857e75104c61c 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/CommentReadingCount.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/CommentReadingCount.java
@@ -23,9 +23,9 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 /**
- * Wrapper class for counting read and unread comments for a session or a single user.
+ * Wrapper class for counting read and unread Comments for a Room or a single user.
  */
-@ApiModel(value = "audiencequestion/readcount", description = "the comment reading count entity")
+@ApiModel(value = "Comment Reading Count", description = "Comment Reading Count statistics entity")
 public class CommentReadingCount {
 
 	private int read;
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Content.java b/src/main/java/de/thm/arsnova/entities/migration/v2/Content.java
index 30f1ce7a4d7b9cfbb9b9013d10d6aea375e340a4..3a27c9fe268342cb1f6b58fa8458a82cf7c3aa5c 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/Content.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/Content.java
@@ -26,9 +26,9 @@ import java.util.Date;
 import java.util.List;
 
 /**
- * A question the teacher is asking.
+ * Represents Content (Skill/Lecturer Question) in a Room.
  */
-@ApiModel(value = "content", description = "the content entity")
+@ApiModel(value = "Content", description = "Content (Skill/Lecturer Question) entity")
 public class Content implements Entity {
 	private String id;
 	private String rev;
@@ -216,7 +216,7 @@ public class Content implements Entity {
 		sessionId = session;
 	}
 
-	@ApiModelProperty(required = true, value = "the session keyword, the question is assigned to")
+	@ApiModelProperty(required = true, value = "the room keyword, the question is assigned to")
 	public final String getSessionKeyword() {
 		return sessionKeyword;
 	}
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 c70e7354b5ddda32440d13787394472caa0228a7..d4b6e0a03a5edcc15495d37e6747b722356df18f 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,6 +19,7 @@ package de.thm.arsnova.entities.migration.v2;
 
 import com.fasterxml.jackson.annotation.JsonView;
 import de.thm.arsnova.entities.serialization.View;
+import io.swagger.annotations.ApiModel;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -26,6 +27,7 @@ import java.util.List;
 /**
  * Once a user joins a session, this class is used to identify a returning user.
  */
+@ApiModel(value = "LoggedIn", description = "Logged In entity - Contains the Room History (Visited Sessions)")
 public class LoggedIn implements Entity {
 	private String id;
 	private String rev;
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Motd.java b/src/main/java/de/thm/arsnova/entities/migration/v2/Motd.java
index 176f12c2a3ccf848edea6dc8928b86448869c485..2a3a80a94c2efe49e4b8e0dd3f4e43514d201088 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/Motd.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/Motd.java
@@ -25,9 +25,9 @@ import io.swagger.annotations.ApiModelProperty;
 import java.util.Date;
 
 /**
- * This class represents a message of the day.
+ * Represents a Message of the Day.
  */
-@ApiModel(value = "motd", description = "the message of the day entity")
+@ApiModel(value = "Motd", description = "Message of the Day entity")
 public class Motd implements Entity {
 
 	private String motdkey; //ID
@@ -81,8 +81,8 @@ public class Motd implements Entity {
 	}
 
 	@JsonView({View.Persistence.class, View.Public.class})
-	public void setTitle(final String ttitle) {
-		title = ttitle;
+	public void setTitle(final String title) {
+		this.title = title;
 	}
 
 	@ApiModelProperty(required = true, value = "text of the message")
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/MotdList.java b/src/main/java/de/thm/arsnova/entities/migration/v2/MotdList.java
index c817113c5fd3614a1205ebb33e65fca9401d748a..d044b7b060da6f78f563b57088853997e8f5dfb8 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/MotdList.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/MotdList.java
@@ -23,9 +23,9 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 /**
- * This class represents a list of motdkeys for a user.
+ * Contains a list of MotD IDs a user has acknowledged.
  */
-@ApiModel(value = "motdlist", description = "the motdlist to save the messages a user has confirmed to be read")
+@ApiModel(value = "MotdList", description = "Motd List entity - Contains IDs of MotDs a user has acknowledged")
 public class MotdList implements Entity {
 	private String id;
 	private String rev;
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/Room.java b/src/main/java/de/thm/arsnova/entities/migration/v2/Room.java
index 86e1c9382ae13a2dcadfec38061b6f8d75858077..4c1ed23871a644d1ae86f3f1c3ada90b33a41556 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/Room.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/Room.java
@@ -26,9 +26,9 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 /**
- * Represents an ARSnova session.
+ * Represents a Room (Session).
  */
-@ApiModel(value = "session", description = "the session entity")
+@ApiModel(value = "Room", description = "Room (Session) entity")
 public class Room implements Entity {
 	private String id;
 	private String rev;
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/RoomFeature.java b/src/main/java/de/thm/arsnova/entities/migration/v2/RoomFeature.java
index 1bab21bef0b5fc72dffe1de2115530cea89ce946..bee794c7fecb1022e9c14904984662aa5f3e80f1 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/RoomFeature.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/RoomFeature.java
@@ -25,9 +25,9 @@ import io.swagger.annotations.ApiModelProperty;
 import java.io.Serializable;
 
 /**
- * Contains fields that describe which specific feature is activated for a session.
+ * Contains fields that describe which specific Feature is activated for a Room.
  */
-@ApiModel(value = "session feature", description = "the session feature entity")
+@ApiModel(value = "RoomFeature", description = "Room (Session) Feature entity - Represents feature/use case settings of a Room")
 public class RoomFeature implements Serializable {
 
 	private boolean custom = true;
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/RoomInfo.java b/src/main/java/de/thm/arsnova/entities/migration/v2/RoomInfo.java
index 741001f86c1dc9ce29afc4b4aa86195d46c7d7b8..e2251660652b757f80ff5cef78c02a1ba9c1e874 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/RoomInfo.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/RoomInfo.java
@@ -26,10 +26,10 @@ import java.util.ArrayList;
 import java.util.List;
 
 /**
- * Summary information of a specific session. For example, this is used to display list entries of 'my sessions' as well
- * as 'my visited sessions'.
+ * Summary information of a specific Room. For example, this is used to display list entries of a user's Rooms as well
+ * as a user's Room History (Visited Rooms).
  */
-@ApiModel(value = "session/import", description = "the session info entity")
+@ApiModel(value = "RoomInfo", description = "Room (Session) Info entity")
 public class RoomInfo {
 
 	private String name;
diff --git a/src/main/java/de/thm/arsnova/entities/migration/v2/VisitedRoom.java b/src/main/java/de/thm/arsnova/entities/migration/v2/VisitedRoom.java
index 5c9064d7539d2c0b419e85c57c070e297bfe7f6b..4434d33d24d1333e591240baf34416d0357da98a 100644
--- a/src/main/java/de/thm/arsnova/entities/migration/v2/VisitedRoom.java
+++ b/src/main/java/de/thm/arsnova/entities/migration/v2/VisitedRoom.java
@@ -20,10 +20,12 @@ package de.thm.arsnova.entities.migration.v2;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonView;
 import de.thm.arsnova.entities.serialization.View;
+import io.swagger.annotations.ApiModel;
 
 /**
- * A session a user has visited previously.
+ * A Room (Session) a user has visited previously.
  */
+@ApiModel(value = "VisitedRoom", description = "Visited Room (Session) entity - An entry of the Room History for the Logged In entity")
 public class VisitedRoom {
 	@JsonProperty("_id")
 	private String id;
diff --git a/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java b/src/main/java/de/thm/arsnova/entities/transport/ImportExportContainer.java
similarity index 97%
rename from src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
rename to src/main/java/de/thm/arsnova/entities/transport/ImportExportContainer.java
index 6798c9e990c3b6a25589b72ff256e87f254a11b2..6b7cccd05254cae4ffb3c5b646067217db320b6c 100644
--- a/src/main/java/de/thm/arsnova/entities/transport/ImportExportSession.java
+++ b/src/main/java/de/thm/arsnova/entities/transport/ImportExportContainer.java
@@ -38,9 +38,9 @@ import java.util.List;
  * This class is used to allow the import and export of a session.
  */
 @ApiModel(value = "session/import and export", description = "the import export session API")
-public class ImportExportSession {
+public class ImportExportContainer {
 
-	private ImportExportSesssion session;
+	private ImportExportRoom session;
 
 	private List<ImportExportContent> questions;
 
@@ -52,7 +52,7 @@ public class ImportExportSession {
 
 	private RoomInfo sessionInfo;
 
-	public ImportExportSession() {
+	public ImportExportContainer() {
 		questions = new ArrayList<>();
 		feedbackQuestions = new ArrayList<>();
 		motds = new ArrayList<>();
@@ -61,11 +61,11 @@ public class ImportExportSession {
 
 	@ApiModelProperty(required = true, value = "used to display session")
 	@JsonView(View.Public.class)
-	public ImportExportSesssion getSession() {
+	public ImportExportRoom getSession() {
 		return session;
 	}
 
-	public void setSession(ImportExportSesssion session) {
+	public void setSession(ImportExportRoom session) {
 		this.session = session;
 	}
 
@@ -117,7 +117,7 @@ public class ImportExportSession {
 	}
 
 	public void setSessionFromSessionObject(Room s) {
-		ImportExportSesssion iesession = new ImportExportSesssion();
+		ImportExportRoom iesession = new ImportExportRoom();
 		iesession.setName(s.getName());
 		iesession.setShortName(s.getShortName());
 		iesession.setActive(s.isActive());
@@ -237,7 +237,7 @@ public class ImportExportSession {
 		}
 	}
 
-	public static class ImportExportSesssion {
+	public static class ImportExportRoom {
 
 		private String name;
 
diff --git a/src/main/java/de/thm/arsnova/entities/transport/ScoreStatistics.java b/src/main/java/de/thm/arsnova/entities/transport/ScoreStatistics.java
index 09c700ee94d175f0c216b089ffbafc08962c2b8e..ee81344703345b96660bdcf4d0b4698ecc221a9f 100644
--- a/src/main/java/de/thm/arsnova/entities/transport/ScoreStatistics.java
+++ b/src/main/java/de/thm/arsnova/entities/transport/ScoreStatistics.java
@@ -25,7 +25,7 @@ import io.swagger.annotations.ApiModelProperty;
 /**
  * The calculated score along with meta-data.
  */
-@ApiModel(value = "session/{sessionkey}/learningprogress", description = "the score API")
+@ApiModel(value = "session/{shortId}/learningprogress", description = "the score API")
 public class ScoreStatistics {
 
 	private int courseProgress;
diff --git a/src/main/java/de/thm/arsnova/persistance/AnswerRepository.java b/src/main/java/de/thm/arsnova/persistance/AnswerRepository.java
index 1f658bd92e32e6aea4b47d98cb5abcdebbd1573e..610c1453777e56d7a9c8345c52622f86101468d6 100644
--- a/src/main/java/de/thm/arsnova/persistance/AnswerRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/AnswerRepository.java
@@ -25,16 +25,16 @@ import org.springframework.data.repository.CrudRepository;
 import java.util.List;
 
 public interface AnswerRepository extends CrudRepository<Answer, String> {
-	Answer findByQuestionIdUserPiRound(String questionId, UserAuthentication user, int piRound);
+	Answer findByContentIdUserPiRound(String contentId, UserAuthentication user, int piRound);
 	AnswerStatistics findByContentIdPiRound(String contentId, int piRound);
 	int countByContentIdRound(String contentId, int round);
 	int countByContentId(String contentId);
 	List<Answer> findByContentId(String contentId, int start, int limit);
-	List<Answer> findByUserSessionId(UserAuthentication user, String sessionId);
-	int countBySessionKey(String sessionKey);
+	List<Answer> findByUserRoomId(UserAuthentication user, String roomId);
+	int countByRoomShortId(String roomShortId);
 	int deleteByContentId(String contentId);
-	int countBySessionIdLectureVariant(String sessionId);
-	int countBySessionIdPreparationVariant(String sessionId);
+	int countByRoomIdOnlyLectureVariant(String roomId);
+	int countByRoomIdOnlyPreparationVariant(String roomId);
 	int deleteAllAnswersForQuestions(List<String> contentIds);
 	int deleteByContentIds(List<String> contentIds);
 }
diff --git a/src/main/java/de/thm/arsnova/persistance/CommentRepository.java b/src/main/java/de/thm/arsnova/persistance/CommentRepository.java
index dea65095f38db593ce81220283edcca60ccf9d0e..c5a396006478bbfbadd02f0700d8016284c1baea 100644
--- a/src/main/java/de/thm/arsnova/persistance/CommentRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/CommentRepository.java
@@ -8,12 +8,12 @@ import org.springframework.data.repository.CrudRepository;
 import java.util.List;
 
 public interface CommentRepository extends CrudRepository<Comment, String> {
-	int countBySessionId(String sessionKey);
-	CommentReadingCount countReadingBySessionId(String sessionId);
-	CommentReadingCount countReadingBySessionIdAndUser(String sessionId, UserAuthentication user);
-	List<Comment> findBySessionId(String sessionId, int start, int limit);
-	List<Comment> findBySessionIdAndUser(String sessionId, UserAuthentication user, int start, int limit);
+	int countByRoomId(String roomId);
+	CommentReadingCount countReadingByRoomId(String roomId);
+	CommentReadingCount countReadingByRoomIdAndUser(String roomId, UserAuthentication user);
+	List<Comment> findByRoomId(String roomId, int start, int limit);
+	List<Comment> findByRoomIdAndUser(String roomId, UserAuthentication user, int start, int limit);
 	Comment findOne(String commentId);
-	int deleteBySessionId(String sessionId);
-	int deleteBySessionIdAndUser(String sessionId, UserAuthentication user);
+	int deleteByRoomId(String roomId);
+	int deleteByRoomIdAndUser(String roomId, UserAuthentication user);
 }
diff --git a/src/main/java/de/thm/arsnova/persistance/ContentRepository.java b/src/main/java/de/thm/arsnova/persistance/ContentRepository.java
index 3212b43c1fed6529e632f6e4457b26f57b6eccf8..a96f5c6b79f0e113e3190c688954c5ada340ecc7 100644
--- a/src/main/java/de/thm/arsnova/persistance/ContentRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/ContentRepository.java
@@ -7,26 +7,26 @@ import org.springframework.data.repository.CrudRepository;
 import java.util.List;
 
 public interface ContentRepository extends CrudRepository<Content, String> {
-	List<Content> findBySessionIdAndVariantAndActive(Object... keys);
-	List<Content> findBySessionIdForUsers(String sessionId);
-	List<Content> findBySessionIdForSpeaker(String sessionId);
-	int countBySessionId(String sessionId);
-	List<String> findIdsBySessionId(String sessionId);
-	List<String> findIdsBySessionIdAndVariant(String sessionId, String variant);
-	int deleteBySessionId(String sessionId);
-	List<String> findUnansweredIdsBySessionIdAndUser(String sessionId, UserAuthentication user);
-	List<Content> findBySessionIdOnlyLectureVariantAndActive(String sessionId);
-	List<Content> findBySessionIdOnlyLectureVariant(String sessionId);
-	List<Content> findBySessionIdOnlyFlashcardVariantAndActive(String sessionId);
-	List<Content> findBySessionIdOnlyFlashcardVariant(String sessionId);
-	List<Content> findBySessionIdOnlyPreparationVariantAndActive(String sessionId);
-	List<Content> findBySessionIdOnlyPreparationVariant(String sessionId);
-	List<Content> findBySessionId(String sessionId);
-	int countLectureVariantBySessionId(String sessionId);
-	int countFlashcardVariantBySessionId(String sessionId);
-	int countPreparationVariantBySessionId(String sessionId);
-	List<String> findIdsBySessionIdAndVariantAndSubject(String sessionId, String questionVariant, String subject);
-	List<String> findSubjectsBySessionIdAndVariant(String sessionId, String questionVariant);
-	List<String> findUnansweredIdsBySessionIdAndUserOnlyLectureVariant(String sessionId, UserAuthentication user);
-	List<String> findUnansweredIdsBySessionIdAndUserOnlyPreparationVariant(String sessionId, UserAuthentication user);
+	List<Content> findByRoomIdAndVariantAndActive(Object... keys);
+	List<Content> findByRoomIdForUsers(String roomId);
+	List<Content> findByRoomIdForSpeaker(String roomId);
+	int countByRoomId(String roomId);
+	List<String> findIdsByRoomId(String roomId);
+	List<String> findIdsByRoomIdAndVariant(String roomId, String variant);
+	int deleteByRoomId(String roomId);
+	List<String> findUnansweredIdsByRoomIdAndUser(String roomId, UserAuthentication user);
+	List<Content> findByRoomIdOnlyLectureVariantAndActive(String roomId);
+	List<Content> findByRoomIdOnlyLectureVariant(String roomId);
+	List<Content> findByRoomIdOnlyFlashcardVariantAndActive(String roomId);
+	List<Content> findByRoomIdOnlyFlashcardVariant(String roomId);
+	List<Content> findByRoomIdOnlyPreparationVariantAndActive(String roomId);
+	List<Content> findByRoomIdOnlyPreparationVariant(String roomId);
+	List<Content> findByRoomId(String roomId);
+	int countLectureVariantByRoomId(String roomId);
+	int countFlashcardVariantRoomId(String roomId);
+	int countPreparationVariantByRoomId(String roomId);
+	List<String> findIdsByRoomIdAndVariantAndSubject(String roomId, String questionVariant, String subject);
+	List<String> findSubjectsByRoomIdAndVariant(String roomId, String questionVariant);
+	List<String> findUnansweredIdsByRoomIdAndUserOnlyLectureVariant(String roomId, UserAuthentication user);
+	List<String> findUnansweredIdsByRoomIdAndUserOnlyPreparationVariant(String roomId, UserAuthentication user);
 }
diff --git a/src/main/java/de/thm/arsnova/persistance/MotdRepository.java b/src/main/java/de/thm/arsnova/persistance/MotdRepository.java
index f403ccb271ee40c73f8685f4ee7551c097bc571e..59662bbd17c7ba95d1586af7dfe7a14f1f8b986c 100644
--- a/src/main/java/de/thm/arsnova/persistance/MotdRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/MotdRepository.java
@@ -28,6 +28,5 @@ public interface MotdRepository extends CrudRepository<Motd, String> {
 	List<Motd> findGlobalForLoggedIn();
 	List<Motd> findGlobalForTutors();
 	List<Motd> findForStudents();
-	List<Motd> findBySessionKey(String sessionkey);
-	Motd findByKey(String key);
+	List<Motd> findByRoomId(String roomId);
 }
diff --git a/src/main/java/de/thm/arsnova/persistance/RoomRepository.java b/src/main/java/de/thm/arsnova/persistance/RoomRepository.java
index d7b5d111d0e5c25dcd20bf10c4c0b3ac1003f915..ae77422a4774979a2cb1d1c5fa810b6eb0427636 100644
--- a/src/main/java/de/thm/arsnova/persistance/RoomRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/RoomRepository.java
@@ -21,14 +21,14 @@ import de.thm.arsnova.connector.model.Course;
 import de.thm.arsnova.entities.Room;
 import de.thm.arsnova.entities.UserAuthentication;
 import de.thm.arsnova.entities.migration.v2.LoggedIn;
-import de.thm.arsnova.entities.transport.ImportExportSession;
+import de.thm.arsnova.entities.transport.ImportExportContainer;
 import org.springframework.data.repository.CrudRepository;
 
 import java.util.List;
 
 public interface RoomRepository extends CrudRepository<Room, String> {
-	Room findByKeyword(String keyword);
-	List<Room> findInactiveGuestSessionsMetadata(long lastActivityBefore);
+	Room findByShortId(String shortId);
+	List<Room> findInactiveGuestRoomsMetadata(long lastActivityBefore);
 	List<Room> findByOwner(UserAuthentication owner, int start, int limit);
 	List<Room> findByOwnerId(String ownerId, int start, int limit);
 	List<Room> findAllForPublicPool();
@@ -37,8 +37,8 @@ public interface RoomRepository extends CrudRepository<Room, String> {
 	List<Room> getVisitedRoomsWithStatsForOwner(List<Room> rooms, UserAuthentication owner);
 	List<Room> findInfosForPublicPool();
 	List<Room> findInfosForPublicPoolByOwner(UserAuthentication owner);
-	List<Room> findSessionsByCourses(List<Course> courses);
-	Room importSession(UserAuthentication user, ImportExportSession importSession);
-	ImportExportSession exportSession(String sessionkey, Boolean withAnswer, Boolean withFeedbackQuestions);
+	List<Room> findRoomsByCourses(List<Course> courses);
+	Room importRoom(UserAuthentication user, ImportExportContainer importRoom);
+	ImportExportContainer exportRoom(String shortId, Boolean withAnswer, Boolean withFeedbackQuestions);
 	LoggedIn registerAsOnlineUser(UserAuthentication user, Room room);
 }
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbAnswerRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbAnswerRepository.java
index fc664a67c8231c55ef3ccd27b8c0f8b3a1db4ebd..52f25bc6e2361dc9d4395b0e3b9fe9c8baed3f98 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbAnswerRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbAnswerRepository.java
@@ -31,7 +31,7 @@ public class CouchDbAnswerRepository extends CouchDbCrudRepository<Answer> imple
 	private ApplicationEventPublisher publisher;
 
 	public CouchDbAnswerRepository(final CouchDbConnector db, final boolean createIfNotExists) {
-		super(Answer.class, db, "by_sessionid", createIfNotExists);
+		super(Answer.class, db, "by_roomid", createIfNotExists);
 	}
 
 	@Override
@@ -42,7 +42,7 @@ public class CouchDbAnswerRepository extends CouchDbCrudRepository<Answer> imple
 	@Override
 	public int deleteByContentId(final String contentId) {
 		try {
-			final ViewResult result = db.queryView(createQuery("by_questionid")
+			final ViewResult result = db.queryView(createQuery("by_contentid")
 					.key(contentId));
 			final List<List<ViewResult.Row>> partitions = Lists.partition(result.getRows(), BULK_PARTITION_SIZE);
 
@@ -70,15 +70,15 @@ public class CouchDbAnswerRepository extends CouchDbCrudRepository<Answer> imple
 	}
 
 	@Override
-	public Answer findByQuestionIdUserPiRound(final String contentId, final UserAuthentication user, final int piRound) {
-		final List<Answer> answerList = queryView("by_questionid_user_piround",
+	public Answer findByContentIdUserPiRound(final String contentId, final UserAuthentication user, final int piRound) {
+		final List<Answer> answerList = queryView("by_contentid_creatorid_round",
 				ComplexKey.of(contentId, user.getUsername(), piRound));
 		return answerList.isEmpty() ? null : answerList.get(0);
 	}
 
 	@Override
 	public AnswerStatistics findByContentIdPiRound(final String contentId, final int piRound) {
-		final ViewResult result = db.queryView(createQuery("by_questionid_piround_text_subject")
+		final ViewResult result = db.queryView(createQuery("by_contentid_round_body_subject")
 						.group(true)
 						.startKey(ComplexKey.of(contentId, piRound))
 						.endKey(ComplexKey.of(contentId, piRound, ComplexKey.emptyObject())));
@@ -109,7 +109,7 @@ public class CouchDbAnswerRepository extends CouchDbCrudRepository<Answer> imple
 
 	@Override
 	public int countByContentId(final String contentId) {
-		final ViewResult result = db.queryView(createQuery("by_questionid_piround_text_subject")
+		final ViewResult result = db.queryView(createQuery("by_contentid_round_body_subject")
 				.reduce(true)
 				.startKey(ComplexKey.of(contentId))
 				.endKey(ComplexKey.of(contentId, ComplexKey.emptyObject())));
@@ -119,7 +119,7 @@ public class CouchDbAnswerRepository extends CouchDbCrudRepository<Answer> imple
 
 	@Override
 	public int countByContentIdRound(final String contentId, final int round) {
-		final ViewResult result = db.queryView(createQuery("by_questionid_piround_text_subject")
+		final ViewResult result = db.queryView(createQuery("by_contentid_round_body_subject")
 				.reduce(true)
 				.startKey(ComplexKey.of(contentId, round))
 				.endKey(ComplexKey.of(contentId, round, ComplexKey.emptyObject())));
@@ -132,7 +132,7 @@ public class CouchDbAnswerRepository extends CouchDbCrudRepository<Answer> imple
 		final int qSkip = start > 0 ? start : -1;
 		final int qLimit = limit > 0 ? limit : -1;
 
-		final List<Answer> answers = db.queryView(createQuery("by_questionid_timestamp")
+		final List<Answer> answers = db.queryView(createQuery("by_contentid_creationtimestamp")
 						.skip(qSkip)
 						.limit(qLimit)
 						//.includeDocs(true)
@@ -145,29 +145,29 @@ public class CouchDbAnswerRepository extends CouchDbCrudRepository<Answer> imple
 	}
 
 	@Override
-	public List<Answer> findByUserSessionId(final UserAuthentication user, final String sessionId) {
-		return queryView("by_user_sessionid", ComplexKey.of(user.getUsername(), sessionId));
+	public List<Answer> findByUserRoomId(final UserAuthentication user, final String roomId) {
+		return queryView("by_user_sessionid", ComplexKey.of(user.getUsername(), roomId));
 	}
 
 	@Override
-	public int countBySessionKey(final String sessionKey) {
-		final ViewResult result = db.queryView(createQuery("by_sessionid_variant").key(sessionKey));
+	public int countByRoomShortId(final String roomShortId) {
+		final ViewResult result = db.queryView(createQuery("by_roomid_variant").key(roomShortId));
 
 		return result.isEmpty() ? 0 : result.getRows().get(0).getValueAsInt();
 	}
 
 	@Override
-	public int countBySessionIdLectureVariant(final String sessionId) {
-		return countBySessionIdVariant(sessionId, "lecture");
+	public int countByRoomIdOnlyLectureVariant(final String roomId) {
+		return countBySessionIdVariant(roomId, "lecture");
 	}
 
 	@Override
-	public int countBySessionIdPreparationVariant(final String sessionId) {
-		return countBySessionIdVariant(sessionId, "preparation");
+	public int countByRoomIdOnlyPreparationVariant(final String roomId) {
+		return countBySessionIdVariant(roomId, "preparation");
 	}
 
 	private int countBySessionIdVariant(final String sessionId, final String variant) {
-		final ViewResult result = db.queryView(createQuery("by_sessionid_variant")
+		final ViewResult result = db.queryView(createQuery("by_roomid_variant")
 				.key(ComplexKey.of(sessionId, variant)));
 
 		return result.isEmpty() ? 0 : result.getRows().get(0).getValueAsInt();
@@ -175,7 +175,7 @@ public class CouchDbAnswerRepository extends CouchDbCrudRepository<Answer> imple
 
 	@Override
 	public int deleteAllAnswersForQuestions(final List<String> contentIds) {
-		final ViewResult result = db.queryView(createQuery("by_questionid")
+		final ViewResult result = db.queryView(createQuery("by_contentid")
 				.keys(contentIds));
 		final List<BulkDeleteDocument> allAnswers = new ArrayList<>();
 		for (final ViewResult.Row a : result.getRows()) {
@@ -195,7 +195,7 @@ public class CouchDbAnswerRepository extends CouchDbCrudRepository<Answer> imple
 
 	@Override
 	public int deleteByContentIds(final List<String> contentIds) {
-		final ViewResult result = db.queryView(createQuery("by_questionid")
+		final ViewResult result = db.queryView(createQuery("by_contentid")
 				.keys(contentIds));
 		final List<BulkDeleteDocument> deleteDocs = new ArrayList<>();
 		for (final ViewResult.Row a : result.getRows()) {
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 7541a3379aabc3013c2633c7beee0ccb470c873f..56c314fbe964939e3965feacacc6158c9878c1fc 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCommentRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbCommentRepository.java
@@ -23,12 +23,12 @@ public class CouchDbCommentRepository extends CouchDbCrudRepository<Comment> imp
 	private LogEntryRepository dbLogger;
 
 	public CouchDbCommentRepository(final CouchDbConnector db, final boolean createIfNotExists) {
-		super(Comment.class, db, "by_sessionid", createIfNotExists);
+		super(Comment.class, db, "by_roomid", createIfNotExists);
 	}
 
 	@Override
-	public int countBySessionId(final String sessionId) {
-		final ViewResult result = db.queryView(createQuery("by_sessionid")
+	public int countByRoomId(final String sessionId) {
+		final ViewResult result = db.queryView(createQuery("by_roomid")
 				.key(sessionId)
 				.reduce(true)
 				.group(true));
@@ -40,20 +40,20 @@ public class CouchDbCommentRepository extends CouchDbCrudRepository<Comment> imp
 	}
 
 	@Override
-	public CommentReadingCount countReadingBySessionId(final String sessionId) {
-		final ViewResult result = db.queryView(createQuery("by_sessionid_read")
-				.startKey(ComplexKey.of(sessionId))
-				.endKey(ComplexKey.of(sessionId, ComplexKey.emptyObject()))
+	public CommentReadingCount countReadingByRoomId(final String roomId) {
+		final ViewResult result = db.queryView(createQuery("by_roomid_read")
+				.startKey(ComplexKey.of(roomId))
+				.endKey(ComplexKey.of(roomId, ComplexKey.emptyObject()))
 				.reduce(true)
 				.group(true));
 		return calculateReadingCount(result);
 	}
 
 	@Override
-	public CommentReadingCount countReadingBySessionIdAndUser(final String sessionId, final UserAuthentication user) {
-		final ViewResult result = db.queryView(createQuery("by_sessionid_creator_read")
-				.startKey(ComplexKey.of(sessionId, user.getUsername()))
-				.endKey(ComplexKey.of(sessionId, user.getUsername(), ComplexKey.emptyObject()))
+	public CommentReadingCount countReadingByRoomIdAndUser(final String roomId, final UserAuthentication user) {
+		final ViewResult result = db.queryView(createQuery("by_roomid_creatorid_read")
+				.startKey(ComplexKey.of(roomId, user.getUsername()))
+				.endKey(ComplexKey.of(roomId, user.getUsername(), ComplexKey.emptyObject()))
 				.reduce(true)
 				.group(true));
 		return calculateReadingCount(result);
@@ -103,16 +103,16 @@ public class CouchDbCommentRepository extends CouchDbCrudRepository<Comment> imp
 	}
 
 	@Override
-	public List<Comment> findBySessionId(final String sessionId, final int start, final int limit) {
+	public List<Comment> findByRoomId(final String roomId, final int start, final int limit) {
 		final int qSkip = start > 0 ? start : -1;
 		final int qLimit = limit > 0 ? limit : -1;
 
-		final List<Comment> comments = db.queryView(createQuery("by_sessionid_timestamp")
+		final List<Comment> comments = db.queryView(createQuery("by_roomid_creationtimestamp")
 						.skip(qSkip)
 						.limit(qLimit)
 						.descending(true)
-						.startKey(ComplexKey.of(sessionId, ComplexKey.emptyObject()))
-						.endKey(ComplexKey.of(sessionId))
+						.startKey(ComplexKey.of(roomId, ComplexKey.emptyObject()))
+						.endKey(ComplexKey.of(roomId))
 						.includeDocs(true),
 				Comment.class);
 //		for (Comment comment : comments) {
@@ -123,16 +123,16 @@ public class CouchDbCommentRepository extends CouchDbCrudRepository<Comment> imp
 	}
 
 	@Override
-	public List<Comment> findBySessionIdAndUser(final String sessionId, final UserAuthentication user, final int start, final int limit) {
+	public List<Comment> findByRoomIdAndUser(final String roomId, final UserAuthentication user, final int start, final int limit) {
 		final int qSkip = start > 0 ? start : -1;
 		final int qLimit = limit > 0 ? limit : -1;
 
-		final List<Comment> comments = db.queryView(createQuery("by_sessionid_creator_timestamp")
+		final List<Comment> comments = db.queryView(createQuery("by_roomid_creatorid_creationtimestamp")
 						.skip(qSkip)
 						.limit(qLimit)
 						.descending(true)
-						.startKey(ComplexKey.of(sessionId, user.getUsername(), ComplexKey.emptyObject()))
-						.endKey(ComplexKey.of(sessionId, user.getUsername()))
+						.startKey(ComplexKey.of(roomId, user.getUsername(), ComplexKey.emptyObject()))
+						.endKey(ComplexKey.of(roomId, user.getUsername()))
 						.includeDocs(true),
 				Comment.class);
 //		for (Comment comment : comments) {
@@ -143,17 +143,17 @@ public class CouchDbCommentRepository extends CouchDbCrudRepository<Comment> imp
 	}
 
 	@Override
-	public int deleteBySessionId(final String sessionId) {
-		final ViewResult result = db.queryView(createQuery("by_sessionid").key(sessionId));
+	public int deleteByRoomId(final String roomId) {
+		final ViewResult result = db.queryView(createQuery("by_roomid").key(roomId));
 
 		return delete(result);
 	}
 
 	@Override
-	public int deleteBySessionIdAndUser(final String sessionId, final UserAuthentication user) {
-		final ViewResult result = db.queryView(createQuery("by_sessionid_creator_read")
-				.startKey(ComplexKey.of(sessionId, user.getUsername()))
-				.endKey(ComplexKey.of(sessionId, user.getUsername(), ComplexKey.emptyObject())));
+	public int deleteByRoomIdAndUser(final String roomId, final UserAuthentication user) {
+		final ViewResult result = db.queryView(createQuery("by_roomid_creatorid_read")
+				.startKey(ComplexKey.of(roomId, user.getUsername()))
+				.endKey(ComplexKey.of(roomId, user.getUsername(), ComplexKey.emptyObject())));
 
 		return delete(result);
 	}
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbContentRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbContentRepository.java
index a53e47eda868b9bce169c7b97a125745f1eaae78..bf49803be26dddf59c9c9c2af392d6825f76305a 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbContentRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbContentRepository.java
@@ -28,15 +28,15 @@ public class CouchDbContentRepository extends CouchDbCrudRepository<Content> imp
 	private LogEntryRepository dbLogger;
 
 	public CouchDbContentRepository(final CouchDbConnector db, final boolean createIfNotExists) {
-		super(Content.class, db, "by_sessionid", createIfNotExists);
+		super(Content.class, db, "by_roomid", createIfNotExists);
 	}
 
 	@Override
-	public List<Content> findBySessionIdForUsers(final String sessionId) {
+	public List<Content> findByRoomIdForUsers(final String roomId) {
 		final List<Content> contents = new ArrayList<>();
-		final List<Content> questions1 = findBySessionIdAndVariantAndActive(sessionId, "lecture", true);
-		final List<Content> questions2 = findBySessionIdAndVariantAndActive(sessionId, "preparation", true);
-		final List<Content> questions3 = findBySessionIdAndVariantAndActive(sessionId, "flashcard", true);
+		final List<Content> questions1 = findByRoomIdAndVariantAndActive(roomId, "lecture", true);
+		final List<Content> questions2 = findByRoomIdAndVariantAndActive(roomId, "preparation", true);
+		final List<Content> questions3 = findByRoomIdAndVariantAndActive(roomId, "flashcard", true);
 		contents.addAll(questions1);
 		contents.addAll(questions2);
 		contents.addAll(questions3);
@@ -45,38 +45,38 @@ public class CouchDbContentRepository extends CouchDbCrudRepository<Content> imp
 	}
 
 	@Override
-	public List<Content> findBySessionIdForSpeaker(final String sessionId) {
-		return findBySessionIdAndVariantAndActive(new Object[] {sessionId}, sessionId);
+	public List<Content> findByRoomIdForSpeaker(final String roomId) {
+		return findByRoomIdAndVariantAndActive(new Object[] {roomId}, roomId);
 	}
 
 	@Override
-	public int countBySessionId(final String sessionId) {
-		final ViewResult result = db.queryView(createQuery("by_sessionid_variant_active")
-				.startKey(ComplexKey.of(sessionId))
-				.endKey(ComplexKey.of(sessionId, ComplexKey.emptyObject())));
+	public int countByRoomId(final String roomId) {
+		final ViewResult result = db.queryView(createQuery("by_roomid_group_locked")
+				.startKey(ComplexKey.of(roomId))
+				.endKey(ComplexKey.of(roomId, ComplexKey.emptyObject())));
 
 		return result.getSize();
 	}
 
 	@Override
-	public List<String> findIdsBySessionId(final String sessionId) {
-		return collectQuestionIds(db.queryView(createQuery("by_sessionid_variant_active")
-				.startKey(ComplexKey.of(sessionId))
-				.endKey(ComplexKey.of(sessionId, ComplexKey.emptyObject()))));
+	public List<String> findIdsByRoomId(final String roomId) {
+		return collectQuestionIds(db.queryView(createQuery("by_roomid_group_locked")
+				.startKey(ComplexKey.of(roomId))
+				.endKey(ComplexKey.of(roomId, ComplexKey.emptyObject()))));
 	}
 
 	@Override
-	public List<String> findIdsBySessionIdAndVariant(final String sessionId, final String variant) {
-		return collectQuestionIds(db.queryView(createQuery("by_sessionid_variant_active")
-				.startKey(ComplexKey.of(sessionId, variant))
-				.endKey(ComplexKey.of(sessionId, variant, ComplexKey.emptyObject()))));
+	public List<String> findIdsByRoomIdAndVariant(final String roomId, final String variant) {
+		return collectQuestionIds(db.queryView(createQuery("by_roomid_group_locked")
+				.startKey(ComplexKey.of(roomId, variant))
+				.endKey(ComplexKey.of(roomId, variant, ComplexKey.emptyObject()))));
 	}
 
 	@Override
-	public int deleteBySessionId(final String sessionId) {
-		final ViewResult result = db.queryView(createQuery("by_sessionid_variant_active")
-				.startKey(ComplexKey.of(sessionId))
-				.endKey(ComplexKey.of(sessionId, ComplexKey.emptyObject()))
+	public int deleteByRoomId(final String roomId) {
+		final ViewResult result = db.queryView(createQuery("by_roomid_group_locked")
+				.startKey(ComplexKey.of(roomId))
+				.endKey(ComplexKey.of(roomId, ComplexKey.emptyObject()))
 				.reduce(false));
 
 		final List<BulkDeleteDocument> deleteDocs = new ArrayList<>();
@@ -90,85 +90,85 @@ public class CouchDbContentRepository extends CouchDbCrudRepository<Content> imp
 	}
 
 	@Override
-	public List<String> findUnansweredIdsBySessionIdAndUser(final String sessionId, final UserAuthentication user) {
-		final ViewResult result = db.queryView(createQuery("questionid_by_user_sessionid_variant")
+	public List<String> findUnansweredIdsByRoomIdAndUser(final String roomId, final UserAuthentication user) {
+		final ViewResult result = db.queryView(createQuery("contentid_by_creatorid_roomid_variant")
 				.designDocId("_design/Answer")
-				.startKey(ComplexKey.of(user.getUsername(), sessionId))
-				.endKey(ComplexKey.of(user.getUsername(), sessionId, ComplexKey.emptyObject())));
+				.startKey(ComplexKey.of(user.getId(), roomId))
+				.endKey(ComplexKey.of(user.getUsername(), roomId, ComplexKey.emptyObject())));
 		final List<String> answeredIds = new ArrayList<>();
 		for (final ViewResult.Row row : result.getRows()) {
 			answeredIds.add(row.getId());
 		}
-		return collectUnansweredQuestionIds(findIdsBySessionId(sessionId), answeredIds);
+		return collectUnansweredQuestionIds(findIdsByRoomId(roomId), answeredIds);
 	}
 
 	@Override
-	public List<String> findUnansweredIdsBySessionIdAndUserOnlyLectureVariant(final String sessionId, final UserAuthentication user) {
-		final ViewResult result = db.queryView(createQuery("questionid_piround_by_user_sessionid_variant")
+	public List<String> findUnansweredIdsByRoomIdAndUserOnlyLectureVariant(final String roomId, final UserAuthentication user) {
+		final ViewResult result = db.queryView(createQuery("contentid_round_by_creatorid_roomid_variant")
 				.designDocId("_design/Answer")
-				.key(ComplexKey.of(user.getUsername(), sessionId, "lecture")));
+				.key(ComplexKey.of(user.getId(), roomId, "lecture")));
 		final Map<String, Integer> answeredQuestions = new HashMap<>();
 		for (final ViewResult.Row row : result.getRows()) {
 			answeredQuestions.put(row.getId(), row.getKeyAsNode().get(2).asInt());
 		}
 
-		return collectUnansweredQuestionIdsByPiRound(findBySessionIdOnlyLectureVariantAndActive(sessionId), answeredQuestions);
+		return collectUnansweredQuestionIdsByPiRound(findByRoomIdOnlyLectureVariantAndActive(roomId), answeredQuestions);
 	}
 
 	@Override
-	public List<String> findUnansweredIdsBySessionIdAndUserOnlyPreparationVariant(final String sessionId, final UserAuthentication user) {
-		final ViewResult result = db.queryView(createQuery("questionid_piround_by_user_sessionid_variant")
+	public List<String> findUnansweredIdsByRoomIdAndUserOnlyPreparationVariant(final String roomId, final UserAuthentication user) {
+		final ViewResult result = db.queryView(createQuery("contentid_round_by_creatorid_roomid_variant")
 				.designDocId("_design/Answer")
-				.key(ComplexKey.of(user.getUsername(), sessionId, "preparation")));
+				.key(ComplexKey.of(user.getId(), roomId, "preparation")));
 		final Map<String, Integer> answeredQuestions = new HashMap<>();
 		for (final ViewResult.Row row : result.getRows()) {
 			answeredQuestions.put(row.getId(), row.getKeyAsNode().get(2).asInt());
 		}
 
-		return collectUnansweredQuestionIdsByPiRound(findBySessionIdOnlyPreparationVariantAndActive(sessionId), answeredQuestions);
+		return collectUnansweredQuestionIdsByPiRound(findByRoomIdOnlyPreparationVariantAndActive(roomId), answeredQuestions);
 	}
 
 	@Override
-	public List<Content> findBySessionIdOnlyLectureVariantAndActive(final String sessionId) {
-		return findBySessionIdAndVariantAndActive(sessionId, "lecture", true);
+	public List<Content> findByRoomIdOnlyLectureVariantAndActive(final String roomId) {
+		return findByRoomIdAndVariantAndActive(roomId, "lecture", true);
 	}
 
 	@Override
-	public List<Content> findBySessionIdOnlyLectureVariant(final String sessionId) {
-		return findBySessionIdAndVariantAndActive(sessionId, "lecture");
+	public List<Content> findByRoomIdOnlyLectureVariant(final String roomId) {
+		return findByRoomIdAndVariantAndActive(roomId, "lecture");
 	}
 
 	@Override
-	public List<Content> findBySessionIdOnlyFlashcardVariantAndActive(final String sessionId) {
-		return findBySessionIdAndVariantAndActive(sessionId, "flashcard", true);
+	public List<Content> findByRoomIdOnlyFlashcardVariantAndActive(final String roomId) {
+		return findByRoomIdAndVariantAndActive(roomId, "flashcard", true);
 	}
 
 	@Override
-	public List<Content> findBySessionIdOnlyFlashcardVariant(final String sessionId) {
-		return findBySessionIdAndVariantAndActive(sessionId, "flashcard");
+	public List<Content> findByRoomIdOnlyFlashcardVariant(final String roomId) {
+		return findByRoomIdAndVariantAndActive(roomId, "flashcard");
 	}
 
 	@Override
-	public List<Content> findBySessionIdOnlyPreparationVariantAndActive(final String sessionId) {
-		return findBySessionIdAndVariantAndActive(sessionId, "preparation", true);
+	public List<Content> findByRoomIdOnlyPreparationVariantAndActive(final String roomId) {
+		return findByRoomIdAndVariantAndActive(roomId, "preparation", true);
 	}
 
 	@Override
-	public List<Content> findBySessionIdOnlyPreparationVariant(final String sessionId) {
-		return findBySessionIdAndVariantAndActive(sessionId, "preparation");
+	public List<Content> findByRoomIdOnlyPreparationVariant(final String roomId) {
+		return findByRoomIdAndVariantAndActive(roomId, "preparation");
 	}
 
 	@Override
-	public List<Content> findBySessionId(final String sessionId) {
-		return findBySessionIdAndVariantAndActive(sessionId);
+	public List<Content> findByRoomId(final String roomId) {
+		return findByRoomIdAndVariantAndActive(roomId);
 	}
 
 	@Override
-	public List<Content> findBySessionIdAndVariantAndActive(final Object... keys) {
+	public List<Content> findByRoomIdAndVariantAndActive(final Object... keys) {
 		final Object[] endKeys = Arrays.copyOf(keys, keys.length + 1);
 		endKeys[keys.length] = ComplexKey.emptyObject();
 
-		return db.queryView(createQuery("by_sessionid_variant_active")
+		return db.queryView(createQuery("by_roomid_group_locked")
 						.includeDocs(true)
 						.reduce(false)
 						.startKey(ComplexKey.of(keys))
@@ -177,31 +177,31 @@ public class CouchDbContentRepository extends CouchDbCrudRepository<Content> imp
 	}
 
 	@Override
-	public int countLectureVariantBySessionId(final String sessionId) {
+	public int countLectureVariantByRoomId(final String roomId) {
 		/* TODO: reduce code duplication */
-		final ViewResult result = db.queryView(createQuery("by_sessionid_variant_active")
-				.startKey(ComplexKey.of(sessionId, "lecture"))
-				.endKey(ComplexKey.of(sessionId, "lecture", ComplexKey.emptyObject())));
+		final ViewResult result = db.queryView(createQuery("by_roomid_group_locked")
+				.startKey(ComplexKey.of(roomId, "lecture"))
+				.endKey(ComplexKey.of(roomId, "lecture", ComplexKey.emptyObject())));
 
 		return result.isEmpty() ? 0 : result.getRows().get(0).getValueAsInt();
 	}
 
 	@Override
-	public int countFlashcardVariantBySessionId(final String sessionId) {
+	public int countFlashcardVariantRoomId(final String roomId) {
 		/* TODO: reduce code duplication */
-		final ViewResult result = db.queryView(createQuery("by_sessionid_variant_active")
-				.startKey(ComplexKey.of(sessionId, "flashcard"))
-				.endKey(ComplexKey.of(sessionId, "flashcard", ComplexKey.emptyObject())));
+		final ViewResult result = db.queryView(createQuery("by_roomid_group_locked")
+				.startKey(ComplexKey.of(roomId, "flashcard"))
+				.endKey(ComplexKey.of(roomId, "flashcard", ComplexKey.emptyObject())));
 
 		return result.isEmpty() ? 0 : result.getRows().get(0).getValueAsInt();
 	}
 
 	@Override
-	public int countPreparationVariantBySessionId(final String sessionId) {
+	public int countPreparationVariantByRoomId(final String roomId) {
 		/* TODO: reduce code duplication */
-		final ViewResult result = db.queryView(createQuery("by_sessionid_variant_active")
-				.startKey(ComplexKey.of(sessionId, "preparation"))
-				.endKey(ComplexKey.of(sessionId, "preparation", ComplexKey.emptyObject())));
+		final ViewResult result = db.queryView(createQuery("by_roomid_group_locked")
+				.startKey(ComplexKey.of(roomId, "preparation"))
+				.endKey(ComplexKey.of(roomId, "preparation", ComplexKey.emptyObject())));
 
 		return result.isEmpty() ? 0 : result.getRows().get(0).getValueAsInt();
 	}
@@ -245,10 +245,10 @@ public class CouchDbContentRepository extends CouchDbCrudRepository<Content> imp
 
 	/* TODO: remove if this method is no longer used */
 	@Override
-	public List<String> findIdsBySessionIdAndVariantAndSubject(final String sessionId, final String questionVariant, final String subject) {
-		final ViewResult result = db.queryView(createQuery("by_sessionid_variant_active")
-				.startKey(ComplexKey.of(sessionId, questionVariant, 1, subject))
-				.endKey(ComplexKey.of(sessionId, questionVariant, 1, subject, ComplexKey.emptyObject())));
+	public List<String> findIdsByRoomIdAndVariantAndSubject(final String roomId, final String questionVariant, final String subject) {
+		final ViewResult result = db.queryView(createQuery("by_roomid_group_locked")
+				.startKey(ComplexKey.of(roomId, questionVariant, false, subject))
+				.endKey(ComplexKey.of(roomId, questionVariant, false, subject, ComplexKey.emptyObject())));
 
 		final List<String> qids = new ArrayList<>();
 
@@ -261,10 +261,10 @@ public class CouchDbContentRepository extends CouchDbCrudRepository<Content> imp
 	}
 
 	@Override
-	public List<String> findSubjectsBySessionIdAndVariant(final String sessionId, final String questionVariant) {
-		final ViewResult result = db.queryView(createQuery("by_sessionid_variant_active")
-				.startKey(ComplexKey.of(sessionId, questionVariant))
-				.endKey(ComplexKey.of(sessionId, questionVariant, ComplexKey.emptyObject())));
+	public List<String> findSubjectsByRoomIdAndVariant(final String roomId, final String questionVariant) {
+		final ViewResult result = db.queryView(createQuery("by_roomid_group_locked")
+				.startKey(ComplexKey.of(roomId, questionVariant))
+				.endKey(ComplexKey.of(roomId, questionVariant, ComplexKey.emptyObject())));
 
 		final Set<String> uniqueSubjects = new HashSet<>();
 
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbMotdRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbMotdRepository.java
index d7c5317b9d981df8dbcae5a6684cdfe504fd9979..0830118c56ae9320c4be1154aae9f51c9620bb26 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbMotdRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbMotdRepository.java
@@ -30,29 +30,29 @@ public class CouchDbMotdRepository extends CouchDbCrudRepository<Motd> implement
 	private static final Logger logger = LoggerFactory.getLogger(CouchDbMotdRepository.class);
 
 	public CouchDbMotdRepository(final CouchDbConnector db, final boolean createIfNotExists) {
-		super(Motd.class, db, "by_sessionkey", createIfNotExists);
+		super(Motd.class, db, "by_id", createIfNotExists);
 	}
 
 	@Override
 	public List<Motd> findGlobalForAdmin() {
-		return find("by_audience_for_global", null);
+		return find(null);
 	}
 
 	@Override
 	public List<Motd> findGlobalForAll() {
-		return find("by_audience_for_global", "all");
+		return find(Motd.Audience.ALL);
 	}
 
 	@Override
 	public List<Motd> findGlobalForLoggedIn() {
-		return find("by_audience_for_global", "loggedIn");
+		return find(Motd.Audience.AUTHENTICATED);
 	}
 
 	@Override
 	public List<Motd> findGlobalForTutors() {
 		final List<Motd> union = new ArrayList<>();
-		union.addAll(find("by_audience_for_global", "loggedIn"));
-		union.addAll(find("by_audience_for_global", "tutors"));
+		union.addAll(find(Motd.Audience.AUTHENTICATED));
+		union.addAll(find(Motd.Audience.AUTHORS));
 
 		return union;
 	}
@@ -60,25 +60,22 @@ public class CouchDbMotdRepository extends CouchDbCrudRepository<Motd> implement
 	@Override
 	public List<Motd> findForStudents() {
 		final List<Motd> union = new ArrayList<>();
-		union.addAll(find("by_audience_for_global", "loggedIn"));
-		union.addAll(find("by_audience_for_global", "students"));
+		union.addAll(find(Motd.Audience.AUTHENTICATED));
+		union.addAll(find(Motd.Audience.PARTICIPANTS));
 
 		return union;
 	}
 
 	@Override
-	public List<Motd> findBySessionKey(final String sessionkey) {
-		return find("by_sessionkey", sessionkey);
+	public List<Motd> findByRoomId(final String roomId) {
+		return find("by_roomid", roomId);
 	}
 
-	private List<Motd> find(final String viewName, final String key) {
-		return queryView(viewName, key);
+	private List<Motd> find(final Motd.Audience audience) {
+		return queryView("by_audience_for_global", audience.toString());
 	}
 
-	@Override
-	public Motd findByKey(final String key) {
-		final List<Motd> motd = queryView("by_motdkey", key);
-
-		return motd.get(0);
+	private List<Motd> find(final String viewName, final String key) {
+		return queryView(viewName, key);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java
index af61629e09880398f4067b72217a031afef102a6..89998496618c512fc3a9fa7a69675d69ae765966 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java
+++ b/src/main/java/de/thm/arsnova/persistance/couchdb/CouchDbRoomRepository.java
@@ -22,7 +22,7 @@ import de.thm.arsnova.entities.Room;
 import de.thm.arsnova.entities.RoomStatistics;
 import de.thm.arsnova.entities.UserAuthentication;
 import de.thm.arsnova.entities.migration.v2.LoggedIn;
-import de.thm.arsnova.entities.transport.ImportExportSession;
+import de.thm.arsnova.entities.transport.ImportExportContainer;
 import de.thm.arsnova.persistance.LogEntryRepository;
 import de.thm.arsnova.persistance.MotdRepository;
 import de.thm.arsnova.persistance.RoomRepository;
@@ -56,22 +56,22 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement
 	private MotdRepository motdRepository;
 
 	public CouchDbRoomRepository(final CouchDbConnector db, final boolean createIfNotExists) {
-		super(Room.class, db, "by_keyword", createIfNotExists);
+		super(Room.class, db, "by_shortid", createIfNotExists);
 	}
 
 	@Override
 	@Cacheable("rooms")
-	public Room findByKeyword(final String keyword) {
-		final List<Room> roomList = queryView("by_keyword", keyword);
+	public Room findByShortId(final String shortId) {
+		final List<Room> roomList = queryView("by_shortid", shortId);
 
 		return !roomList.isEmpty() ? roomList.get(0) : null;
 	}
 
 	/* TODO: Move to service layer. */
-	private String getSessionKeyword(final String internalSessionId) throws IOException {
-		final Room room = get(internalSessionId);
+	private String getShortId(final String id) throws IOException {
+		final Room room = get(id);
 		if (room == null) {
-			logger.error("No session found for internal id {}.", internalSessionId);
+			logger.error("No room found for id {}.", id);
 
 			return null;
 		}
@@ -80,39 +80,39 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement
 	}
 
 	@Override
-	public List<Room> findSessionsByCourses(final List<Course> courses) {
+	public List<Room> findRoomsByCourses(final List<Course> courses) {
 		return queryView("by_courseid",
 				ComplexKey.of(courses.stream().map(Course::getId).collect(Collectors.toList())));
 	}
 
 	@Override
-	public List<Room> findInactiveGuestSessionsMetadata(final long lastActivityBefore) {
+	public List<Room> findInactiveGuestRoomsMetadata(final long lastActivityBefore) {
 		final ViewResult result = db.queryView(
 				createQuery("by_lastactivity_for_guests").endKey(lastActivityBefore));
 		final int[] count = new int[3];
 
-		List<Room> sessions = new ArrayList<>();
+		List<Room> rooms = new ArrayList<>();
 		for (final ViewResult.Row row : result.getRows()) {
 			final Room s = new Room();
 			s.setId(row.getId());
 			s.setRevision(row.getValueAsNode().get("_rev").asText());
-			sessions.add(s);
+			rooms.add(s);
 		}
 
-		return sessions;
+		return rooms;
 	}
 
 	/* TODO: Move to service layer. */
 	@Override
-	public Room importSession(final UserAuthentication user, final ImportExportSession importSession) {
+	public Room importRoom(final UserAuthentication user, final ImportExportContainer importRoom) {
 		/* FIXME: not yet migrated - move to service layer */
 		throw new UnsupportedOperationException();
-//		final Room session = this.saveSession(user, importSession.generateSessionEntity(user));
+//		final Room session = this.saveSession(user, importRoom.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.
 //		// Then we update the answer objects and store them as well.
-//		final Map<Document, ImportExportSession.ImportExportContent> mapping = new HashMap<>();
+//		final Map<Document, ImportExportContainer.ImportExportContent> mapping = new HashMap<>();
 //		// Later, generate all answer documents
 //		List<Document> answers = new ArrayList<>();
 //		// We can then push answers together with comments in one large bulk request
@@ -121,7 +121,7 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement
 //		List<Document> motds = new ArrayList<>();
 //		try {
 //			// add session id to all questions and generate documents
-//			for (final ImportExportSession.ImportExportContent question : importSession.getQuestions()) {
+//			for (final ImportExportContainer.ImportExportContent question : importRoom.getQuestions()) {
 //				final Document doc = toQuestionDocument(session, question);
 //				question.setRoomId(session.getId());
 //				questions.add(doc);
@@ -130,9 +130,9 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement
 //			database.bulkSaveDocuments(questions.toArray(new Document[questions.size()]));
 //
 //			// bulk import answers together with interposed questions
-//			for (Map.Entry<Document, ImportExportSession.ImportExportContent> entry : mapping.entrySet()) {
+//			for (Map.Entry<Document, ImportExportContainer.ImportExportContent> entry : mapping.entrySet()) {
 //				final Document doc = entry.getKey();
-//				final ImportExportSession.ImportExportContent question = entry.getValue();
+//				final ImportExportContainer.ImportExportContent question = entry.getValue();
 //				question.setId(doc.getId());
 //				question.setRevision(doc.getRev());
 //				for (final de.thm.arsnova.entities.transport.Answer answer : question.getAnswers()) {
@@ -155,7 +155,7 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement
 //					answers.add(answerDoc);
 //				}
 //			}
-//			for (final de.thm.arsnova.entities.transport.Comment i : importSession.getFeedbackQuestions()) {
+//			for (final de.thm.arsnova.entities.transport.Comment i : importRoom.getFeedbackQuestions()) {
 //				final Document q = new Document();
 //				q.put("type", "interposed_question");
 //				q.put("sessionId", session.getId());
@@ -167,7 +167,7 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement
 //				q.put("creator", "");
 //				interposedQuestions.add(q);
 //			}
-//			for (final Motd m : importSession.getMotds()) {
+//			for (final Motd m : importRoom.getMotds()) {
 //				final Document d = new Document();
 //				d.put("type", "motd");
 //				d.put("motdkey", m.getMotdkey());
@@ -175,8 +175,8 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement
 //				d.put("text", m.getText());
 //				d.put("audience", m.getAudience());
 //				d.put("sessionkey", session.getKeyword());
-//				d.put("startdate", String.valueOf(m.getStartdate().getTime()));
-//				d.put("enddate", String.valueOf(m.getEnddate().getTime()));
+//				d.put("startdate", String.valueOf(m.getStartDate().getTime()));
+//				d.put("enddate", String.valueOf(m.getEndDate().getTime()));
 //				motds.add(d);
 //			}
 //			final List<Document> documents = new ArrayList<>(answers);
@@ -186,21 +186,21 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement
 //		} catch (final IOException e) {
 //			logger.error("Could not import session.", e);
 //			// Something went wrong, delete this session since we do not want a partial import
-//			this.deleteSession(session);
+//			this.delete(session);
 //			return null;
 //		}
-//		return this.calculateSessionInfo(importSession, session);
+//		return this.calculateSessionInfo(importRoom, session);
 	}
 
 	/* TODO: Move to service layer. */
 	@Override
-	public ImportExportSession exportSession(
-			final String sessionkey,
+	public ImportExportContainer exportRoom(
+			final String shortId,
 			final Boolean withAnswers,
 			final Boolean withFeedbackQuestions) {
 		/* FIXME: not yet migrated - move to service layer */
 		throw new UnsupportedOperationException();
-//		final ImportExportSession importExportSession = new ImportExportSession();
+//		final ImportExportContainer importExportSession = new ImportExportContainer();
 //		final Room session = getDatabaseDao().getSessionFromKeyword(sessionkey);
 //		importExportSession.setSessionFromSessionObject(session);
 //		final List<Content> questionList = getDatabaseDao().getAllSkillQuestions(session);
@@ -240,7 +240,7 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement
 	}
 
 	/* TODO: Move to service layer. */
-	private Room calculateSessionInfo(final ImportExportSession importExportSession, final Room room) {
+	private Room calculateSessionInfo(final ImportExportContainer importExportSession, final Room room) {
 		/* FIXME: not yet migrated - move to service layer */
 		throw new UnsupportedOperationException();
 //		int unreadComments = 0;
@@ -251,7 +251,7 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement
 //				unreadComments++;
 //			}
 //		}
-//		for (ImportExportSession.ImportExportContent question : importExportSession.getQuestions()) {
+//		for (ImportExportContainer.ImportExportContent question : importExportSession.getQuestions()) {
 //			numAnswers += question.getAnswers().size();
 //			if (question.getAnswers().isEmpty()) {
 //				numUnanswered++;
@@ -291,7 +291,7 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement
 	@Override
 	public List<Room> findAllForPublicPool() {
 		// TODO replace with new view
-		return queryView("partial_by_ppsubject_name_for_publicpool");
+		return queryView("partial_by_category_name_for_pool");
 	}
 
 	@Override
@@ -324,23 +324,23 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement
 	/* TODO: Move to service layer. */
 	@Override
 	public List<Room> getRoomsWithStatsForOwner(final UserAuthentication owner, final int start, final int limit) {
-		final List<Room> sessions = this.findByOwner(owner, start, limit);
-		if (sessions.isEmpty()) {
+		final List<Room> rooms = this.findByOwner(owner, start, limit);
+		if (rooms.isEmpty()) {
 			return new ArrayList<>();
 		}
-		return attachStatsForRooms(sessions);
+		return attachStatsForRooms(rooms);
 	}
 
 	/* TODO: Move to service layer. */
 	private List<Room> attachStatsForRooms(final List<Room> rooms) {
-		final List<String> sessionIds = rooms.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")
-				.group(true).keys(sessionIds);
-		final ViewQuery commentCountView = createQuery("by_sessionid").designDocId("_design/Comment")
-				.group(true).keys(sessionIds);
-		final ViewQuery unreadCommentCountView = createQuery("by_sessionid_read").designDocId("_design/Comment")
+		final List<String> roomIds = rooms.stream().map(Room::getId).collect(Collectors.toList());
+		final ViewQuery questionCountView = createQuery("by_roomid").designDocId("_design/Content")
+				.group(true).keys(roomIds);
+		final ViewQuery answerCountView = createQuery("by_roomid").designDocId("_design/Answer")
+				.group(true).keys(roomIds);
+		final ViewQuery commentCountView = createQuery("by_roomid").designDocId("_design/Comment")
+				.group(true).keys(roomIds);
+		final ViewQuery unreadCommentCountView = createQuery("by_roomid_read").designDocId("_design/Comment")
 				.group(true).keys(rooms.stream().map(session -> ComplexKey.of(session.getId(), false)).collect(Collectors.toList()));
 
 		return attachStats(rooms, questionCountView, answerCountView, commentCountView, unreadCommentCountView);
@@ -348,9 +348,9 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement
 
 	/* TODO: Move to service layer. */
 	public List<Room> getVisitedRoomsWithStatsForOwner(final List<Room> rooms, final UserAuthentication owner) {
-		final ViewQuery answeredQuestionsView = createQuery("by_user_sessionid").designDocId("_design/Answer")
-				.keys(rooms.stream().map(session -> ComplexKey.of(owner.getUsername(), session.getId())).collect(Collectors.toList()));
-		final ViewQuery contentIdsView = createQuery("by_sessionid").designDocId("_design/Content")
+		final ViewQuery answeredQuestionsView = createQuery("by_creatorid_roomid").designDocId("_design/Answer")
+				.keys(rooms.stream().map(room -> ComplexKey.of(owner.getUsername(), room.getId())).collect(Collectors.toList()));
+		final ViewQuery contentIdsView = createQuery("by_roomid").designDocId("_design/Content")
 				.keys(rooms.stream().map(Room::getId).collect(Collectors.toList()));
 
 		return attachVisitedRoomStats(rooms, answeredQuestionsView, contentIdsView);
@@ -364,44 +364,44 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement
 		final Map<String, Set<String>> answeredQuestionsMap = new HashMap<>();
 		final Map<String, Set<String>> contentIdMap = new HashMap<>();
 
-		// Maps a session ID to a set of question IDs of answered questions of that session
+		// Maps a room ID to a set of question IDs of answered questions of that room
 		for (final ViewResult.Row row : db.queryView(answeredQuestionsView).getRows()) {
-			final String sessionId = row.getKey();
+			final String roomId = row.getKey();
 			final String contentId = row.getValue();
-			Set<String> contentIdsInSession = answeredQuestionsMap.get(sessionId);
-			if (contentIdsInSession == null) {
-				contentIdsInSession = new HashSet<>();
+			Set<String> contentIdsInRoom = answeredQuestionsMap.get(roomId);
+			if (contentIdsInRoom == null) {
+				contentIdsInRoom = new HashSet<>();
 			}
-			contentIdsInSession.add(contentId);
-			answeredQuestionsMap.put(sessionId, contentIdsInSession);
+			contentIdsInRoom.add(contentId);
+			answeredQuestionsMap.put(roomId, contentIdsInRoom);
 		}
 
-		// Maps a session ID to a set of question IDs of that session
+		// Maps a room ID to a set of question IDs of that room
 		for (final ViewResult.Row row : db.queryView(contentIdsView).getRows()) {
-			final String sessionId = row.getKey();
+			final String roomId = row.getKey();
 			final String contentId = row.getId();
-			Set<String> contentIdsInSession = contentIdMap.get(sessionId);
-			if (contentIdsInSession == null) {
-				contentIdsInSession = new HashSet<>();
+			Set<String> contentIdsInRoom = contentIdMap.get(roomId);
+			if (contentIdsInRoom == null) {
+				contentIdsInRoom = new HashSet<>();
 			}
-			contentIdsInSession.add(contentId);
-			contentIdMap.put(sessionId, contentIdsInSession);
+			contentIdsInRoom.add(contentId);
+			contentIdMap.put(roomId, contentIdsInRoom);
 		}
 
-		// For each session, count the question IDs that are not yet answered
+		// For each room, count the question IDs that are not yet answered
 		final Map<String, Integer> unansweredQuestionsCountMap = new HashMap<>();
 		for (final Room s : rooms) {
 			if (!contentIdMap.containsKey(s.getId())) {
 				continue;
 			}
 			// Note: create a copy of the first set so that we don't modify the contents in the original set
-			final Set<String> contentIdsInSession = new HashSet<>(contentIdMap.get(s.getId()));
-			Set<String> answeredContentIdsInSession = answeredQuestionsMap.get(s.getId());
-			if (answeredContentIdsInSession == null) {
-				answeredContentIdsInSession = new HashSet<>();
+			final Set<String> contentIdsInRoom = new HashSet<>(contentIdMap.get(s.getId()));
+			Set<String> answeredContentIdsInRoom = answeredQuestionsMap.get(s.getId());
+			if (answeredContentIdsInRoom == null) {
+				answeredContentIdsInRoom = new HashSet<>();
 			}
-			contentIdsInSession.removeAll(answeredContentIdsInSession);
-			unansweredQuestionsCountMap.put(s.getId(), contentIdsInSession.size());
+			contentIdsInRoom.removeAll(answeredContentIdsInRoom);
+			unansweredQuestionsCountMap.put(s.getId(), contentIdsInRoom.size());
 		}
 
 		for (final Room room : rooms) {
@@ -475,7 +475,7 @@ public class CouchDbRoomRepository extends CouchDbCrudRepository<Room> implement
 			if (!loggedInList.isEmpty()) {
 				loggedIn = loggedInList.get(0);
 
-				/* Do not clutter CouchDB. Only update once every 3 hours per session. */
+				/* Do not clutter CouchDB. Only update once every 3 hours per room. */
 				if (loggedIn.getSessionId().equals(room.getId()) && loggedIn.getTimestamp() > System.currentTimeMillis() - 3 * 3600000) {
 					return loggedIn;
 				}
diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/V2ToV3Migration.java b/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/V2ToV3Migration.java
index 8092d5fe1baba81fc16cef53c9f8a5103db36398..f40bbff2a6c14a8cf3c1a43c1c64b9d48b7c3cb9 100644
--- a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/V2ToV3Migration.java
+++ b/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/V2ToV3Migration.java
@@ -24,6 +24,7 @@ import de.thm.arsnova.entities.migration.FromV2Migrator;
 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.persistance.RoomRepository;
 import de.thm.arsnova.persistance.UserRepository;
 import de.thm.arsnova.persistance.couchdb.support.MangoCouchDbConnector;
 import org.ektorp.DocumentNotFoundException;
@@ -31,7 +32,6 @@ import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
diff --git a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
index 921c58c2bfea4fe7e9e76e82517e34ae2c9d8267..7e0957e493df15d669fd64bf269d5b4a9849f80c 100644
--- a/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
+++ b/src/main/java/de/thm/arsnova/security/ApplicationPermissionEvaluator.java
@@ -67,7 +67,7 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 
 		return hasAdminRole(username)
 				|| (targetDomainObject instanceof Room
-						&& hasSessionPermission(username, ((Room) targetDomainObject), permission.toString()))
+						&& hasRoomPermission(username, ((Room) targetDomainObject), permission.toString()))
 				|| (targetDomainObject instanceof Content
 						&& hasContentPermission(username, ((Content) targetDomainObject), permission.toString()))
 				|| (targetDomainObject instanceof Comment
@@ -91,8 +91,8 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 
 		switch (targetType) {
 			case "session":
-				final Room targetSession = roomRepository.findByKeyword(targetId.toString());
-				return targetSession != null && hasSessionPermission(username, targetSession, permission.toString());
+				final Room targetRoom = roomRepository.findByShortId(targetId.toString());
+				return targetRoom != null && hasRoomPermission(username, targetRoom, permission.toString());
 			case "content":
 				final Content targetContent = contentRepository.findOne(targetId.toString());
 				return targetContent != null && hasContentPermission(username, targetContent, permission.toString());
@@ -104,19 +104,19 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 		}
 	}
 
-	private boolean hasSessionPermission(
+	private boolean hasRoomPermission(
 			final String userId,
-			final Room targetSession,
+			final Room targetRoom,
 			final String permission) {
 		switch (permission) {
 			case "read":
-				return !targetSession.isClosed();
+				return !targetRoom.isClosed();
 			case "create":
 				return !userId.isEmpty();
 			case "owner":
 			case "update":
 			case "delete":
-				return targetSession.getOwnerId().equals(userId);
+				return targetRoom.getOwnerId().equals(userId);
 			default:
 				return false;
 		}
@@ -146,7 +146,7 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 			final String permission) {
 		switch (permission) {
 			case "create":
-				return !userId.isEmpty() && !roomRepository.findOne(targetComment.getSessionId()).isClosed();
+				return !userId.isEmpty() && !roomRepository.findOne(targetComment.getRoomId()).isClosed();
 			case "owner":
 			case "update":
 				return targetComment.getCreatorId() != null && targetComment.getCreatorId().equals(userId);
@@ -157,7 +157,7 @@ public class ApplicationPermissionEvaluator implements PermissionEvaluator {
 				}
 
 				/* Allow reading & deletion by session owner */
-				final Room room = roomRepository.findOne(targetComment.getSessionId());
+				final Room room = roomRepository.findOne(targetComment.getRoomId());
 
 				return room != null && room.getOwnerId().equals(userId);
 			default:
diff --git a/src/main/java/de/thm/arsnova/services/CommentService.java b/src/main/java/de/thm/arsnova/services/CommentService.java
index 38aee41c1442c1fcce40f9c5ab49017884c491b5..083ac7a9aba3a3afc786acd59be25f41d6bf20cb 100644
--- a/src/main/java/de/thm/arsnova/services/CommentService.java
+++ b/src/main/java/de/thm/arsnova/services/CommentService.java
@@ -9,11 +9,11 @@ import java.util.List;
 public interface CommentService extends EntityService<Comment> {
 	boolean save(Comment comment);
 
-	int count(String sessionKey);
+	int count(String roomShortId);
 
-	CommentReadingCount countRead(String sessionKey, String username);
+	CommentReadingCount countRead(String roomShortId, String username);
 
-	List<Comment> getBySessionKey(String sessionKey, int offset, int limit);
+	List<Comment> getByRoomShortId(String roomShortId, int offset, int limit);
 
 	Comment getAndMarkRead(String commentId);
 
@@ -21,5 +21,5 @@ public interface CommentService extends EntityService<Comment> {
 
 	void delete(String commentId);
 
-	void deleteBySessionKey(String sessionKeyword);
+	void deleteByRoomShortId(String roomShortId);
 }
diff --git a/src/main/java/de/thm/arsnova/services/CommentServiceImpl.java b/src/main/java/de/thm/arsnova/services/CommentServiceImpl.java
index 056013b4f8a0bcee57dc87289f458360d4b9e505..048d126768040177a8bb334422566b96239b1159 100644
--- a/src/main/java/de/thm/arsnova/services/CommentServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/CommentServiceImpl.java
@@ -53,9 +53,9 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public boolean save(final Comment comment) {
-		final Room room = roomRepository.findByKeyword(comment.getSessionId());
+		final Room room = roomRepository.findByShortId(comment.getRoomId());
 		final UserAuthentication user = userService.getCurrentUser();
-		comment.setSessionId(room.getId());
+		comment.setRoomId(room.getId());
 		comment.setCreatorId(user.getId());
 		comment.setRead(false);
 		if (comment.getTimestamp() == null) {
@@ -80,60 +80,60 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem
 		}
 		commentRepository.delete(comment);
 
-		final Room room = roomRepository.findByKeyword(comment.getSessionId());
+		final Room room = roomRepository.findByShortId(comment.getRoomId());
 		final DeleteCommentEvent event = new DeleteCommentEvent(this, room, comment);
 		this.publisher.publishEvent(event);
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public void deleteBySessionKey(final String sessionKeyword) {
-		final Room room = roomRepository.findByKeyword(sessionKeyword);
+	public void deleteByRoomShortId(final String roomShortId) {
+		final Room room = roomRepository.findByShortId(roomShortId);
 		if (room == null) {
 			throw new UnauthorizedException();
 		}
 		final UserAuthentication user = getCurrentUser();
 		if (room.getOwnerId().equals(user.getId())) {
-			commentRepository.deleteBySessionId(room.getId());
+			commentRepository.deleteByRoomId(room.getId());
 		} else {
-			commentRepository.deleteBySessionIdAndUser(room.getId(), user);
+			commentRepository.deleteByRoomIdAndUser(room.getId(), user);
 		}
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public int count(final String sessionKey) {
-		return commentRepository.countBySessionId(getSession(sessionKey).getId());
+	public int count(final String roomShortId) {
+		return commentRepository.countByRoomId(getRoom(roomShortId).getId());
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public CommentReadingCount countRead(final String sessionKey, String username) {
-		final Room room = roomRepository.findByKeyword(sessionKey);
+	public CommentReadingCount countRead(final String roomShortId, String username) {
+		final Room room = roomRepository.findByShortId(roomShortId);
 		if (room == null) {
 			throw new NotFoundException();
 		}
 		if (username == null) {
-			return commentRepository.countReadingBySessionId(room.getId());
+			return commentRepository.countReadingByRoomId(room.getId());
 		} else {
 			UserAuthentication currentUser = userService.getCurrentUser();
 			if (!currentUser.getUsername().equals(username)) {
 				throw new ForbiddenException();
 			}
 
-			return commentRepository.countReadingBySessionIdAndUser(room.getId(), currentUser);
+			return commentRepository.countReadingByRoomIdAndUser(room.getId(), currentUser);
 		}
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<Comment> getBySessionKey(final String sessionKey, final int offset, final int limit) {
-		final Room room = this.getSession(sessionKey);
+	public List<Comment> getByRoomShortId(final String roomShortId, final int offset, final int limit) {
+		final Room room = this.getRoom(roomShortId);
 		final UserAuthentication user = getCurrentUser();
 		if (room.getOwnerId().equals(user.getId())) {
-			return commentRepository.findBySessionId(room.getId(), offset, limit);
+			return commentRepository.findByRoomId(room.getId(), offset, limit);
 		} else {
-			return commentRepository.findBySessionIdAndUser(room.getId(), user, offset, limit);
+			return commentRepository.findByRoomIdAndUser(room.getId(), user, offset, limit);
 		}
 	}
 
@@ -154,7 +154,7 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem
 		if (comment == null) {
 			throw new NotFoundException();
 		}
-		final Room room = roomRepository.findOne(comment.getSessionId());
+		final Room room = roomRepository.findOne(comment.getRoomId());
 		if (!comment.getCreatorId().equals(user.getId()) && !room.getOwnerId().equals(user.getId())) {
 			throw new UnauthorizedException();
 		}
@@ -173,8 +173,8 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem
 		return user;
 	}
 
-	private Room getSession(final String sessionkey) {
-		final Room room = roomRepository.findByKeyword(sessionkey);
+	private Room getRoom(final String shortId) {
+		final Room room = roomRepository.findByShortId(shortId);
 		if (room == null) {
 			throw new NotFoundException();
 		}
diff --git a/src/main/java/de/thm/arsnova/services/ContentService.java b/src/main/java/de/thm/arsnova/services/ContentService.java
index a781171558bea622e31f5ed83e69f972a1a9d79c..bdcc5fc14c01fb08e735ebfb41fadc3373e14382 100644
--- a/src/main/java/de/thm/arsnova/services/ContentService.java
+++ b/src/main/java/de/thm/arsnova/services/ContentService.java
@@ -33,15 +33,15 @@ public interface ContentService extends EntityService<Content> {
 
 	Content get(String id);
 
-	List<Content> getBySessionKey(String sessionkey);
+	List<Content> getByRoomShortId(String roomShortId);
 
-	int countBySessionKey(String sessionkey);
+	int countByRoomShortId(String roomShortId);
 
 	void delete(String questionId);
 
-	List<String> getUnAnsweredQuestionIds(String sessionKey);
+	List<String> getUnAnsweredQuestionIds(String roomShortId);
 
-	Answer getMyAnswer(String questionId);
+	Answer getMyAnswer(String contentId);
 
 	void getFreetextAnswerAndMarkRead(String answerId, UserAuthentication user);
 
@@ -57,85 +57,85 @@ public interface ContentService extends EntityService<Content> {
 
 	List<Answer> getAllAnswers(String contentId, int offset, int limit);
 
-	int countAnswersByQuestionIdAndRound(String questionId);
+	int countAnswersByContentIdAndRound(String contentId);
 
-	int countAnswersByQuestionIdAndRound(String questionId, int piRound);
+	int countAnswersByContentIdAndRound(String contentId, int piRound);
 
-	List<Answer> getFreetextAnswersByQuestionId(String questionId, int offset, int limit);
+	List<Answer> getFreetextAnswersByContentId(String contentId, int offset, int limit);
 
-	List<Answer> getMyAnswersBySessionKey(String sessionKey);
+	List<Answer> getMyAnswersByRoomShortId(String roomShortId);
 
-	int countTotalAnswersBySessionKey(String sessionKey);
+	int countTotalAnswersByRoomShortId(String roomShortId);
 
-	int countTotalAnswersByQuestionId(String questionId);
+	int countTotalAnswersByContentId(String contentId);
 
-	Content save(final String sessionId, final Content content);
+	Content save(final String roomId, final Content content);
 
 	Content update(Content content);
 
-	void deleteAnswers(String questionId);
+	void deleteAnswers(String contentId);
 
-	Answer saveAnswer(String questionId, Answer answer);
+	Answer saveAnswer(String contentId, Answer answer);
 
 	Answer updateAnswer(Answer answer);
 
-	void deleteAnswer(String questionId, String answerId);
+	void deleteAnswer(String contentId, String answerId);
 
-	List<Content> getLectureQuestions(String sessionkey);
+	List<Content> getLectureQuestions(String roomShortId);
 
-	List<Content> getFlashcards(String sessionkey);
+	List<Content> getFlashcards(String roomShortId);
 
-	List<Content> getPreparationQuestions(String sessionkey);
+	List<Content> getPreparationQuestions(String roomShortId);
 
-	int countLectureQuestions(String sessionkey);
+	int countLectureQuestions(String roomShortId);
 
-	int countFlashcards(String sessionkey);
+	int countFlashcards(String roomShortId);
 
-	int countPreparationQuestions(String sessionkey);
+	int countPreparationQuestions(String roomShortId);
 
-	Map<String, Object> countAnswersAndAbstentionsInternal(String questionid);
+	Map<String, Object> countAnswersAndAbstentionsInternal(String contentId);
 
-	int countLectureQuestionAnswers(String sessionkey);
+	int countLectureQuestionAnswers(String roomShortId);
 
-	int countLectureQuestionAnswersInternal(String sessionkey);
+	int countLectureQuestionAnswersInternal(String roomShortId);
 
-	int countPreparationQuestionAnswers(String sessionkey);
+	int countPreparationQuestionAnswers(String roomShortId);
 
-	int countPreparationQuestionAnswersInternal(String sessionkey);
+	int countPreparationQuestionAnswersInternal(String roomShortId);
 
-	int countFlashcardsForUserInternal(String sessionkey);
+	int countFlashcardsForUserInternal(String roomShortId);
 
-	void deleteAllContent(String sessionkey);
+	void deleteAllContent(String roomShortId);
 
-	void deleteLectureQuestions(String sessionkey);
+	void deleteLectureQuestions(String roomShortId);
 
-	void deletePreparationQuestions(String sessionkey);
+	void deletePreparationQuestions(String roomShortId);
 
-	void deleteFlashcards(String sessionkey);
+	void deleteFlashcards(String roomShortId);
 
-	List<String> getUnAnsweredLectureQuestionIds(String sessionkey);
+	List<String> getUnAnsweredLectureQuestionIds(String roomShortId);
 
-	List<String> getUnAnsweredLectureQuestionIds(String sessionKey, UserAuthentication user);
+	List<String> getUnAnsweredLectureQuestionIds(String roomShortId, UserAuthentication user);
 
-	List<String> getUnAnsweredPreparationQuestionIds(String sessionkey);
+	List<String> getUnAnsweredPreparationQuestionIds(String roomShortId);
 
-	List<String> getUnAnsweredPreparationQuestionIds(String sessionKey, UserAuthentication user);
+	List<String> getUnAnsweredPreparationQuestionIds(String roomShortId, UserAuthentication user);
 
-	void publishAll(String sessionkey, boolean publish);
+	void publishAll(String roomShortId, boolean publish);
 
-	void publishQuestions(String sessionkey, boolean publish, List<Content> contents);
+	void publishQuestions(String roomShortId, boolean publish, List<Content> contents);
 
-	void deleteAllQuestionsAnswers(String sessionkey);
+	void deleteAllQuestionsAnswers(String roomShortId);
 
-	void deleteAllPreparationAnswers(String sessionkey);
+	void deleteAllPreparationAnswers(String roomShortId);
 
-	void deleteAllLectureAnswers(String sessionkey);
+	void deleteAllLectureAnswers(String roomShortId);
 
-	int countTotalAbstentionsByQuestionId(String questionId);
+	int countTotalAbstentionsByContentId(String contentId);
 
-	void setVotingAdmission(String questionId, boolean disableVoting);
+	void setVotingAdmission(String contentId, boolean disableVoting);
 
-	void setVotingAdmissions(String sessionkey, boolean disableVoting, List<Content> contents);
+	void setVotingAdmissions(String roomShortId, boolean disableVoting, List<Content> contents);
 
-	void setVotingAdmissionForAllQuestions(String sessionkey, boolean disableVoting);
+	void setVotingAdmissionForAllContents(String roomShortId, boolean disableVoting);
 }
diff --git a/src/main/java/de/thm/arsnova/services/ContentServiceImpl.java b/src/main/java/de/thm/arsnova/services/ContentServiceImpl.java
index cd33fec3949e2325097e8359389e5650f46caa1f..331c6c154958d53a1bcb3f6c93a21e668863daa5 100644
--- a/src/main/java/de/thm/arsnova/services/ContentServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/ContentServiceImpl.java
@@ -139,13 +139,13 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	}
 
 	@Override
-	@Caching(evict = {@CacheEvict(value = "contentlists", key = "#sessionId"),
-			@CacheEvict(value = "lecturecontentlists", key = "#sessionId", condition = "#content.getGroup().equals('lecture')"),
-			@CacheEvict(value = "preparationcontentlists", key = "#sessionId", condition = "#content.getGroup().equals('preparation')"),
-			@CacheEvict(value = "flashcardcontentlists", key = "#sessionId", condition = "#content.getGroup().equals('flashcard')") },
+	@Caching(evict = {@CacheEvict(value = "contentlists", key = "#roomId"),
+			@CacheEvict(value = "lecturecontentlists", key = "#roomId", condition = "#content.getGroup().equals('lecture')"),
+			@CacheEvict(value = "preparationcontentlists", key = "#roomId", condition = "#content.getGroup().equals('preparation')"),
+			@CacheEvict(value = "flashcardcontentlists", key = "#roomId", condition = "#content.getGroup().equals('flashcard')") },
 			put = {@CachePut(value = "contents", key = "#content.id")})
-	public Content save(final String sessionId, final Content content) {
-		content.setRoomId(sessionId);
+	public Content save(final String roomId, final Content content) {
+		content.setRoomId(roomId);
 		try {
 			contentRepository.save(content);
 
@@ -201,26 +201,26 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	//@Cacheable("contentlists")
-	public List<Content> getBySessionKey(final String sessionkey) {
-		final Room room = getSession(sessionkey);
+	public List<Content> getByRoomShortId(final String roomShortId) {
+		final Room room = getRoom(roomShortId);
 		final UserAuthentication user = userService.getCurrentUser();
 		if (room.getOwnerId().equals(user.getId())) {
-			return contentRepository.findBySessionIdForSpeaker(room.getId());
+			return contentRepository.findByRoomIdForSpeaker(room.getId());
 		} else {
-			return contentRepository.findBySessionIdForUsers(room.getId());
+			return contentRepository.findByRoomIdForUsers(room.getId());
 		}
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public int countBySessionKey(final String sessionkey) {
-		final Room room = roomRepository.findByKeyword(sessionkey);
-		return contentRepository.countBySessionId(room.getId());
+	public int countByRoomShortId(final String roomShortId) {
+		final Room room = roomRepository.findByShortId(roomShortId);
+		return contentRepository.countByRoomId(room.getId());
 	}
 
-	/* FIXME: #content.getSessionKeyword() cannot be checked since keyword is no longer set for content. */
+	/* FIXME: #content.getShortId() cannot be checked since keyword is no longer set for content. */
 	@Override
-	@PreAuthorize("hasPermission(#content.getSessionKeyword(), 'session', 'owner')")
+	@PreAuthorize("hasPermission(#content.getShortId(), 'session', 'owner')")
 	public Content save(final Content content) {
 		final Room room = roomRepository.findOne(content.getRoomId());
 		content.setTimestamp(new Date());
@@ -294,13 +294,13 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	private void deleteBySessionAndVariant(final Room room, final String variant) {
 		final List<String> contentIds;
 		if ("all".equals(variant)) {
-			contentIds = contentRepository.findIdsBySessionId(room.getId());
+			contentIds = contentRepository.findIdsByRoomId(room.getId());
 		} else {
-			contentIds = contentRepository.findIdsBySessionIdAndVariant(room.getId(), variant);
+			contentIds = contentRepository.findIdsByRoomIdAndVariant(room.getId(), variant);
 		}
 
 		final int answerCount = answerRepository.deleteByContentIds(contentIds);
-		final int contentCount = contentRepository.deleteBySessionId(room.getId());
+		final int contentCount = contentRepository.deleteByRoomId(room.getId());
 		dbLogger.log("delete", "type", "question", "questionCount", contentCount);
 		dbLogger.log("delete", "type", "answer", "answerCount", answerCount);
 
@@ -310,29 +310,29 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public void deleteAllContent(final String sessionkey) {
-		final Room room = getSessionWithAuthCheck(sessionkey);
+	public void deleteAllContent(final String roomShortId) {
+		final Room room = getRoomWithAuthCheck(roomShortId);
 		deleteBySessionAndVariant(room, "all");
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public void deleteLectureQuestions(final String sessionkey) {
-		final Room room = getSessionWithAuthCheck(sessionkey);
+	public void deleteLectureQuestions(final String roomShortId) {
+		final Room room = getRoomWithAuthCheck(roomShortId);
 		deleteBySessionAndVariant(room, "lecture");
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public void deletePreparationQuestions(final String sessionkey) {
-		final Room room = getSessionWithAuthCheck(sessionkey);
+	public void deletePreparationQuestions(final String roomShortId) {
+		final Room room = getRoomWithAuthCheck(roomShortId);
 		deleteBySessionAndVariant(room, "preparation");
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public void deleteFlashcards(final String sessionkey) {
-		final Room room = getSessionWithAuthCheck(sessionkey);
+	public void deleteFlashcards(final String roomShortId) {
+		final Room room = getRoomWithAuthCheck(roomShortId);
 		deleteBySessionAndVariant(room, "flashcard");
 	}
 
@@ -361,13 +361,13 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	@Caching(evict = { @CacheEvict(value = "contents", allEntries = true),
-			@CacheEvict(value = "contentlists", key = "#sessionId"),
-			@CacheEvict(value = "lecturecontentlists", key = "#sessionId"),
-			@CacheEvict(value = "preparationcontentlists", key = "#sessionId"),
-			@CacheEvict(value = "flashcardcontentlists", key = "#sessionId") })
-	public void setVotingAdmissions(final String sessionkey, final boolean disableVoting, List<Content> contents) {
+			@CacheEvict(value = "contentlists", key = "#roomShortId"),
+			@CacheEvict(value = "lecturecontentlists", key = "#roomShortId"),
+			@CacheEvict(value = "preparationcontentlists", key = "#roomShortId"),
+			@CacheEvict(value = "flashcardcontentlists", key = "#roomShortId") })
+	public void setVotingAdmissions(final String roomShortId, final boolean disableVoting, List<Content> contents) {
 		final UserAuthentication user = getCurrentUser();
-		final Room room = getSession(sessionkey);
+		final Room room = getRoom(roomShortId);
 		if (!room.getOwnerId().equals(user.getId())) {
 			throw new UnauthorizedException();
 		}
@@ -387,19 +387,19 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public void setVotingAdmissionForAllQuestions(final String sessionkey, final boolean disableVoting) {
+	public void setVotingAdmissionForAllContents(final String roomShortId, final boolean disableVoting) {
 		final UserAuthentication user = getCurrentUser();
-		final Room room = getSession(sessionkey);
+		final Room room = getRoom(roomShortId);
 		if (!room.getOwnerId().equals(user.getId())) {
 			throw new UnauthorizedException();
 		}
-		final List<Content> contents = contentRepository.findBySessionId(room.getId());
-		setVotingAdmissionForAllQuestions(room.getId(), disableVoting);
+		final List<Content> contents = contentRepository.findByRoomId(room.getId());
+		setVotingAdmissionForAllContents(room.getId(), disableVoting);
 	}
 
-	private Room getSessionWithAuthCheck(final String sessionKeyword) {
+	private Room getRoomWithAuthCheck(final String shortId) {
 		final UserAuthentication user = userService.getCurrentUser();
-		final Room room = roomRepository.findByKeyword(sessionKeyword);
+		final Room room = roomRepository.findByShortId(shortId);
 		if (user == null || room == null || !room.getOwnerId().equals(user.getId())) {
 			throw new UnauthorizedException();
 		}
@@ -418,10 +418,10 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<String> getUnAnsweredQuestionIds(final String sessionKey) {
+	public List<String> getUnAnsweredQuestionIds(final String roomShortId) {
 		final UserAuthentication user = getCurrentUser();
-		final Room room = getSession(sessionKey);
-		return contentRepository.findUnansweredIdsBySessionIdAndUser(room.getId(), user);
+		final Room room = getRoom(roomShortId);
+		return contentRepository.findUnansweredIdsByRoomIdAndUser(room.getId(), user);
 	}
 
 	private UserAuthentication getCurrentUser() {
@@ -439,7 +439,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 		if (content == null) {
 			throw new NotFoundException();
 		}
-		return answerRepository.findByQuestionIdUserPiRound(contentId, userService.getCurrentUser(), content.getState().getRound());
+		return answerRepository.findByContentIdUserPiRound(contentId, userService.getCurrentUser(), content.getState().getRound());
 	}
 
 	@Override
@@ -504,7 +504,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 			throw new NotFoundException();
 		}
 
-		return getFreetextAnswersByQuestionId(contentId, offset, limit);
+		return getFreetextAnswersByContentId(contentId, offset, limit);
 	}
 
 	@Override
@@ -521,12 +521,12 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 			throw new NotFoundException();
 		}
 
-		return getFreetextAnswersByQuestionId(contentId, offset, limit);
+		return getFreetextAnswersByContentId(contentId, offset, limit);
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public int countAnswersByQuestionIdAndRound(final String contentId) {
+	public int countAnswersByContentIdAndRound(final String contentId) {
 		final Content content = get(contentId);
 		if (content == null) {
 			return 0;
@@ -541,7 +541,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public int countAnswersByQuestionIdAndRound(final String contentId, final int piRound) {
+	public int countAnswersByContentIdAndRound(final String contentId, final int piRound) {
 		final Content content = get(contentId);
 		if (content == null) {
 			return 0;
@@ -552,7 +552,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public int countTotalAbstentionsByQuestionId(final String contentId) {
+	public int countTotalAbstentionsByContentId(final String contentId) {
 		final Content content = get(contentId);
 		if (content == null) {
 			return 0;
@@ -563,7 +563,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public int countTotalAnswersByQuestionId(final String contentId) {
+	public int countTotalAnswersByContentId(final String contentId) {
 		final Content content = get(contentId);
 		if (content == null) {
 			return 0;
@@ -574,7 +574,7 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<Answer> getFreetextAnswersByQuestionId(final String contentId, final int offset, final int limit) {
+	public List<Answer> getFreetextAnswersByContentId(final String contentId, final int offset, final int limit) {
 		final List<Answer> answers = answerRepository.findByContentId(contentId, offset, limit);
 		if (answers == null) {
 			throw new NotFoundException();
@@ -585,17 +585,17 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<Answer> getMyAnswersBySessionKey(final String sessionKey) {
-		final Room room = getSession(sessionKey);
+	public List<Answer> getMyAnswersByRoomShortId(final String roomShortId) {
+		final Room room = getRoom(roomShortId);
 		// Load contents first because we are only interested in answers of the latest piRound.
-		final List<Content> contents = getBySessionKey(sessionKey);
+		final List<Content> contents = getByRoomShortId(roomShortId);
 		final Map<String, Content> contentIdToContent = new HashMap<>();
 		for (final Content content : contents) {
 			contentIdToContent.put(content.getId(), content);
 		}
 
 		/* filter answers by active piRound per content */
-		final List<Answer> answers = answerRepository.findByUserSessionId(userService.getCurrentUser(), room.getId());
+		final List<Answer> answers = answerRepository.findByUserRoomId(userService.getCurrentUser(), room.getId());
 		final List<Answer> filteredAnswers = new ArrayList<>();
 		for (final Answer answer : answers) {
 			final Content content = contentIdToContent.get(answer.getContentId());
@@ -619,8 +619,8 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public int countTotalAnswersBySessionKey(final String sessionKey) {
-		return answerRepository.countBySessionKey(sessionKey);
+	public int countTotalAnswersByRoomShortId(final String roomShortId) {
+		return answerRepository.countByRoomShortId(roomShortId);
 	}
 
 	@Override
@@ -714,13 +714,13 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	//@Cacheable("lecturecontentlists")
-	public List<Content> getLectureQuestions(final String sessionkey) {
-		final Room room = getSession(sessionkey);
+	public List<Content> getLectureQuestions(final String roomShortId) {
+		final Room room = getRoom(roomShortId);
 		final UserAuthentication user = userService.getCurrentUser();
 		if (room.getOwnerId().equals(user.getId())) {
-			return contentRepository.findBySessionIdOnlyLectureVariant(room.getId());
+			return contentRepository.findByRoomIdOnlyLectureVariant(room.getId());
 		} else {
-			return contentRepository.findBySessionIdOnlyLectureVariantAndActive(room.getId());
+			return contentRepository.findByRoomIdOnlyLectureVariantAndActive(room.getId());
 		}
 	}
 
@@ -728,13 +728,13 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	//@Cacheable("flashcardcontentlists")
-	public List<Content> getFlashcards(final String sessionkey) {
-		final Room room = getSession(sessionkey);
+	public List<Content> getFlashcards(final String roomShortId) {
+		final Room room = getRoom(roomShortId);
 		final UserAuthentication user = userService.getCurrentUser();
 		if (room.getOwnerId().equals(user.getId())) {
-			return contentRepository.findBySessionIdOnlyFlashcardVariant(room.getId());
+			return contentRepository.findByRoomIdOnlyFlashcardVariant(room.getId());
 		} else {
-			return contentRepository.findBySessionIdOnlyFlashcardVariantAndActive(room.getId());
+			return contentRepository.findByRoomIdOnlyFlashcardVariantAndActive(room.getId());
 		}
 	}
 
@@ -742,18 +742,18 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	//@Cacheable("preparationcontentlists")
-	public List<Content> getPreparationQuestions(final String sessionkey) {
-		final Room room = getSession(sessionkey);
+	public List<Content> getPreparationQuestions(final String roomShortId) {
+		final Room room = getRoom(roomShortId);
 		final UserAuthentication user = userService.getCurrentUser();
 		if (room.getOwnerId().equals(user.getId())) {
-			return contentRepository.findBySessionIdOnlyPreparationVariant(room.getId());
+			return contentRepository.findByRoomIdOnlyPreparationVariant(room.getId());
 		} else {
-			return contentRepository.findBySessionIdOnlyPreparationVariantAndActive(room.getId());
+			return contentRepository.findByRoomIdOnlyPreparationVariantAndActive(room.getId());
 		}
 	}
 
-	private Room getSession(final String sessionkey) {
-		final Room room = roomRepository.findByKeyword(sessionkey);
+	private Room getRoom(final String roomShortId) {
+		final Room room = roomRepository.findByShortId(roomShortId);
 		if (room == null) {
 			throw new NotFoundException();
 		}
@@ -762,26 +762,26 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public int countLectureQuestions(final String sessionkey) {
-		return contentRepository.countLectureVariantBySessionId(getSession(sessionkey).getId());
+	public int countLectureQuestions(final String roomShortId) {
+		return contentRepository.countLectureVariantByRoomId(getRoom(roomShortId).getId());
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public int countFlashcards(final String sessionkey) {
-		return contentRepository.countFlashcardVariantBySessionId(getSession(sessionkey).getId());
+	public int countFlashcards(final String roomShortId) {
+		return contentRepository.countFlashcardVariantRoomId(getRoom(roomShortId).getId());
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public int countPreparationQuestions(final String sessionkey) {
-		return contentRepository.countPreparationVariantBySessionId(getSession(sessionkey).getId());
+	public int countPreparationQuestions(final String roomShortId) {
+		return contentRepository.countPreparationVariantByRoomId(getRoom(roomShortId).getId());
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public int countLectureQuestionAnswers(final String sessionkey) {
-		return this.countLectureQuestionAnswersInternal(sessionkey);
+	public int countLectureQuestionAnswers(final String roomShortId) {
+		return this.countLectureQuestionAnswersInternal(roomShortId);
 	}
 
 	/*
@@ -789,8 +789,8 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	 * TODO: Find a better way of doing this...
 	 */
 	@Override
-	public int countLectureQuestionAnswersInternal(final String sessionkey) {
-		return answerRepository.countBySessionIdLectureVariant(getSession(sessionkey).getId());
+	public int countLectureQuestionAnswersInternal(final String roomShortId) {
+		return answerRepository.countByRoomIdOnlyLectureVariant(getRoom(roomShortId).getId());
 	}
 
 	@Override
@@ -811,8 +811,8 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public int countPreparationQuestionAnswers(final String sessionkey) {
-		return this.countPreparationQuestionAnswersInternal(sessionkey);
+	public int countPreparationQuestionAnswers(final String roomShortId) {
+		return this.countPreparationQuestionAnswersInternal(roomShortId);
 	}
 
 	/*
@@ -820,8 +820,8 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	 * TODO: Find a better way of doing this...
 	 */
 	@Override
-	public int countPreparationQuestionAnswersInternal(final String sessionkey) {
-		return answerRepository.countBySessionIdPreparationVariant(getSession(sessionkey).getId());
+	public int countPreparationQuestionAnswersInternal(final String roomShortId) {
+		return answerRepository.countByRoomIdOnlyPreparationVariant(getRoom(roomShortId).getId());
 	}
 
 	/*
@@ -829,59 +829,59 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	 * TODO: Find a better way of doing this...
 	 */
 	@Override
-	public int countFlashcardsForUserInternal(final String sessionkey) {
-		return contentRepository.findBySessionIdOnlyFlashcardVariantAndActive(getSession(sessionkey).getId()).size();
+	public int countFlashcardsForUserInternal(final String roomShortId) {
+		return contentRepository.findByRoomIdOnlyFlashcardVariantAndActive(getRoom(roomShortId).getId()).size();
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<String> getUnAnsweredLectureQuestionIds(final String sessionkey) {
+	public List<String> getUnAnsweredLectureQuestionIds(final String roomShortId) {
 		final UserAuthentication user = getCurrentUser();
-		return this.getUnAnsweredLectureQuestionIds(sessionkey, user);
+		return this.getUnAnsweredLectureQuestionIds(roomShortId, user);
 	}
 
 	@Override
-	public List<String> getUnAnsweredLectureQuestionIds(final String sessionkey, final UserAuthentication user) {
-		final Room room = getSession(sessionkey);
-		return contentRepository.findUnansweredIdsBySessionIdAndUserOnlyLectureVariant(room.getId(), user);
+	public List<String> getUnAnsweredLectureQuestionIds(final String roomShortId, final UserAuthentication user) {
+		final Room room = getRoom(roomShortId);
+		return contentRepository.findUnansweredIdsByRoomIdAndUserOnlyLectureVariant(room.getId(), user);
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<String> getUnAnsweredPreparationQuestionIds(final String sessionkey) {
+	public List<String> getUnAnsweredPreparationQuestionIds(final String roomShortId) {
 		final UserAuthentication user = getCurrentUser();
-		return this.getUnAnsweredPreparationQuestionIds(sessionkey, user);
+		return this.getUnAnsweredPreparationQuestionIds(roomShortId, user);
 	}
 
 	@Override
-	public List<String> getUnAnsweredPreparationQuestionIds(final String sessionkey, final UserAuthentication user) {
-		final Room room = getSession(sessionkey);
-		return contentRepository.findUnansweredIdsBySessionIdAndUserOnlyPreparationVariant(room.getId(), user);
+	public List<String> getUnAnsweredPreparationQuestionIds(final String roomShortId, final UserAuthentication user) {
+		final Room room = getRoom(roomShortId);
+		return contentRepository.findUnansweredIdsByRoomIdAndUserOnlyPreparationVariant(room.getId(), user);
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public void publishAll(final String sessionkey, final boolean publish) {
+	public void publishAll(final String roomShortId, final boolean publish) {
 		/* TODO: resolve redundancies */
 		final UserAuthentication user = getCurrentUser();
-		final Room room = getSession(sessionkey);
+		final Room room = getRoom(roomShortId);
 		if (!room.getOwnerId().equals(user.getId())) {
 			throw new UnauthorizedException();
 		}
-		final List<Content> contents = contentRepository.findBySessionId(room.getId());
-		publishQuestions(sessionkey, publish, contents);
+		final List<Content> contents = contentRepository.findByRoomId(room.getId());
+		publishQuestions(roomShortId, publish, contents);
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	@Caching(evict = { @CacheEvict(value = "contents", allEntries = true),
-			@CacheEvict(value = "contentlists", key = "#sessionId"),
-			@CacheEvict(value = "lecturecontentlists", key = "#sessionId"),
-			@CacheEvict(value = "preparationcontentlists", key = "#sessionId"),
-			@CacheEvict(value = "flashcardcontentlists", key = "#sessionId") })
-	public void publishQuestions(final String sessionkey, final boolean publish, List<Content> contents) {
+			@CacheEvict(value = "contentlists", key = "#roomShortId"),
+			@CacheEvict(value = "lecturecontentlists", key = "#roomShortId"),
+			@CacheEvict(value = "preparationcontentlists", key = "#roomShortId"),
+			@CacheEvict(value = "flashcardcontentlists", key = "#roomShortId") })
+	public void publishQuestions(final String roomShortId, final boolean publish, List<Content> contents) {
 		final UserAuthentication user = getCurrentUser();
-		final Room room = getSession(sessionkey);
+		final Room room = getRoom(roomShortId);
 		if (!room.getOwnerId().equals(user.getId())) {
 			throw new UnauthorizedException();
 		}
@@ -901,14 +901,14 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	@CacheEvict(value = "answerlists", allEntries = true)
-	public void deleteAllQuestionsAnswers(final String sessionkey) {
+	public void deleteAllQuestionsAnswers(final String roomShortId) {
 		final UserAuthentication user = getCurrentUser();
-		final Room room = getSession(sessionkey);
+		final Room room = getRoom(roomShortId);
 		if (!room.getOwnerId().equals(user.getId())) {
 			throw new UnauthorizedException();
 		}
 
-		final List<Content> contents = contentRepository.findBySessionIdAndVariantAndActive(room.getId());
+		final List<Content> contents = contentRepository.findByRoomIdAndVariantAndActive(room.getId());
 		resetContentsRoundState(room.getId(), contents);
 		final List<String> contentIds = contents.stream().map(Content::getId).collect(Collectors.toList());
 		answerRepository.deleteAllAnswersForQuestions(contentIds);
@@ -918,12 +918,12 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	/* TODO: Only evict cache entry for the answer's content. This requires some refactoring. */
 	@Override
-	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
+	@PreAuthorize("hasPermission(#roomShortId, 'session', 'owner')")
 	@CacheEvict(value = "answerlists", allEntries = true)
-	public void deleteAllPreparationAnswers(String sessionkey) {
-		final Room room = getSession(sessionkey);
+	public void deleteAllPreparationAnswers(String roomShortId) {
+		final Room room = getRoom(roomShortId);
 
-		final List<Content> contents = contentRepository.findBySessionIdAndVariantAndActive(room.getId(), "preparation");
+		final List<Content> contents = contentRepository.findByRoomIdAndVariantAndActive(room.getId(), "preparation");
 		resetContentsRoundState(room.getId(), contents);
 		final List<String> contentIds = contents.stream().map(Content::getId).collect(Collectors.toList());
 		answerRepository.deleteAllAnswersForQuestions(contentIds);
@@ -933,12 +933,12 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	/* TODO: Only evict cache entry for the answer's content. This requires some refactoring. */
 	@Override
-	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
+	@PreAuthorize("hasPermission(#roomShortId, 'session', 'owner')")
 	@CacheEvict(value = "answerlists", allEntries = true)
-	public void deleteAllLectureAnswers(String sessionkey) {
-		final Room room = getSession(sessionkey);
+	public void deleteAllLectureAnswers(String roomShortId) {
+		final Room room = getRoom(roomShortId);
 
-		final List<Content> contents = contentRepository.findBySessionIdAndVariantAndActive(room.getId(), "lecture");
+		final List<Content> contents = contentRepository.findByRoomIdAndVariantAndActive(room.getId(), "lecture");
 		resetContentsRoundState(room.getId(), contents);
 		final List<String> contentIds = contents.stream().map(Content::getId).collect(Collectors.toList());
 		answerRepository.deleteAllAnswersForQuestions(contentIds);
@@ -948,14 +948,14 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 	@Caching(evict = {
 			@CacheEvict(value = "contents", allEntries = true),
-			@CacheEvict(value = "contentlists", key = "#sessionId"),
-			@CacheEvict(value = "lecturecontentlists", key = "#sessionId"),
-			@CacheEvict(value = "preparationcontentlists", key = "#sessionId"),
-			@CacheEvict(value = "flashcardcontentlists", key = "#sessionId") })
-	private void resetContentsRoundState(final String sessionId, final List<Content> contents) {
+			@CacheEvict(value = "contentlists", key = "#roomId"),
+			@CacheEvict(value = "lecturecontentlists", key = "#roomId"),
+			@CacheEvict(value = "preparationcontentlists", key = "#roomId"),
+			@CacheEvict(value = "flashcardcontentlists", key = "#roomId") })
+	private void resetContentsRoundState(final String roomId, final List<Content> contents) {
 		for (final Content q : contents) {
 			/* TODO: Check if setting the sessionId is necessary. */
-			q.setRoomId(sessionId);
+			q.setRoomId(roomId);
 			q.resetState();
 		}
 		contentRepository.save(contents);
diff --git a/src/main/java/de/thm/arsnova/services/FeedbackService.java b/src/main/java/de/thm/arsnova/services/FeedbackService.java
index 2d7ebbc1ea6615dbc4fdb7df47b848af8b19d3ea..9e0de22720ab60e9868131f569421ad5050eadae 100644
--- a/src/main/java/de/thm/arsnova/services/FeedbackService.java
+++ b/src/main/java/de/thm/arsnova/services/FeedbackService.java
@@ -26,17 +26,17 @@ import de.thm.arsnova.entities.UserAuthentication;
 public interface FeedbackService {
 	void cleanFeedbackVotes();
 
-	void cleanFeedbackVotesBySessionKey(String keyword, int cleanupFeedbackDelayInMins);
+	void cleanFeedbackVotesByRoomShortId(String roomShortId, int cleanupFeedbackDelayInMins);
 
-	Feedback getBySessionKey(String keyword);
+	Feedback getByRoomShortId(String roomShortId);
 
-	int countFeedbackBySessionKey(String keyword);
+	int countFeedbackByRoomShortId(String roomShortId);
 
-	double calculateAverageFeedback(String sessionkey);
+	double calculateAverageFeedback(String roomShortId);
 
-	long calculateRoundedAverageFeedback(String sessionkey);
+	long calculateRoundedAverageFeedback(String roomShortId);
 
-	boolean save(String keyword, int value, UserAuthentication user);
+	boolean save(String roomShortId, int value, UserAuthentication user);
 
-	Integer getBySessionKeyAndUser(String keyword, UserAuthentication user);
+	Integer getByRoomShortIdAndUser(String roomShortId, UserAuthentication user);
 }
diff --git a/src/main/java/de/thm/arsnova/services/FeedbackServiceImpl.java b/src/main/java/de/thm/arsnova/services/FeedbackServiceImpl.java
index 81344059cb75648ffb8572e83250dd196ba085db..d3b59d538774578a0b10aa6f0bd4175b0ed96a06 100644
--- a/src/main/java/de/thm/arsnova/services/FeedbackServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/FeedbackServiceImpl.java
@@ -101,8 +101,8 @@ public class FeedbackServiceImpl implements FeedbackService, ApplicationEventPub
 	}
 
 	@Override
-	public void cleanFeedbackVotesBySessionKey(final String keyword, final int cleanupFeedbackDelayInMins) {
-		final Room room = roomRepository.findByKeyword(keyword);
+	public void cleanFeedbackVotesByRoomShortId(final String roomShortId, final int cleanupFeedbackDelayInMins) {
+		final Room room = roomRepository.findByShortId(roomShortId);
 		List<UserAuthentication> affectedUsers = feedbackStorage.cleanVotesByRoom(room, cleanupFeedbackDelayInMins);
 		Set<Room> sessionSet = new HashSet<>();
 		sessionSet.add(room);
@@ -116,8 +116,8 @@ public class FeedbackServiceImpl implements FeedbackService, ApplicationEventPub
 	}
 
 	@Override
-	public Feedback getBySessionKey(final String keyword) {
-		final Room room = roomRepository.findByKeyword(keyword);
+	public Feedback getByRoomShortId(final String roomShortId) {
+		final Room room = roomRepository.findByShortId(roomShortId);
 		if (room == null) {
 			throw new NotFoundException();
 		}
@@ -125,16 +125,16 @@ public class FeedbackServiceImpl implements FeedbackService, ApplicationEventPub
 	}
 
 	@Override
-	public int countFeedbackBySessionKey(final String keyword) {
-		final Feedback feedback = this.getBySessionKey(keyword);
+	public int countFeedbackByRoomShortId(final String roomShortId) {
+		final Feedback feedback = this.getByRoomShortId(roomShortId);
 		final List<Integer> values = feedback.getValues();
 		return values.get(Feedback.FEEDBACK_FASTER) + values.get(Feedback.FEEDBACK_OK)
 				+ values.get(Feedback.FEEDBACK_SLOWER) + values.get(Feedback.FEEDBACK_AWAY);
 	}
 
 	@Override
-	public double calculateAverageFeedback(final String sessionkey) {
-		final Room room = roomRepository.findByKeyword(sessionkey);
+	public double calculateAverageFeedback(final String roomShortId) {
+		final Room room = roomRepository.findByShortId(roomShortId);
 		if (room == null) {
 			throw new NotFoundException();
 		}
@@ -152,13 +152,13 @@ public class FeedbackServiceImpl implements FeedbackService, ApplicationEventPub
 	}
 
 	@Override
-	public long calculateRoundedAverageFeedback(final String sessionkey) {
-		return Math.round(calculateAverageFeedback(sessionkey));
+	public long calculateRoundedAverageFeedback(final String roomShortId) {
+		return Math.round(calculateAverageFeedback(roomShortId));
 	}
 
 	@Override
-	public boolean save(final String keyword, final int value, final UserAuthentication user) {
-		final Room room = roomRepository.findByKeyword(keyword);
+	public boolean save(final String roomShortId, final int value, final UserAuthentication user) {
+		final Room room = roomRepository.findByShortId(roomShortId);
 		if (room == null) {
 			throw new NotFoundException();
 		}
@@ -169,8 +169,8 @@ public class FeedbackServiceImpl implements FeedbackService, ApplicationEventPub
 	}
 
 	@Override
-	public Integer getBySessionKeyAndUser(final String keyword, final UserAuthentication user) {
-		final Room room = roomRepository.findByKeyword(keyword);
+	public Integer getByRoomShortIdAndUser(final String roomShortId, final UserAuthentication user) {
+		final Room room = roomRepository.findByShortId(roomShortId);
 		if (room == null) {
 			throw new NotFoundException();
 		}
diff --git a/src/main/java/de/thm/arsnova/services/MotdService.java b/src/main/java/de/thm/arsnova/services/MotdService.java
index e83831bc2863c1252f6e37601afea0c77d0a23f2..67075b5b7ca1ecf1ffeb3b755475a1eb4e73a103 100644
--- a/src/main/java/de/thm/arsnova/services/MotdService.java
+++ b/src/main/java/de/thm/arsnova/services/MotdService.java
@@ -26,15 +26,13 @@ import java.util.List;
  * The functionality the motd service should provide.
  */
 public interface MotdService extends EntityService<Motd> {
-	Motd getByKey(String keyword);
-
 	List<Motd> getAdminMotds();  //all w/o the sessionmotds
 
-	List<Motd> getAllSessionMotds(final String sessionkey);
+	List<Motd> getAllRoomMotds(final String roomId);
 
 	List<Motd> getCurrentMotds(final Date clientdate, final String audience);
 
-	List<Motd> getCurrentSessionMotds(final Date clientdate, final String sessionkey);
+	List<Motd> getCurrentRoomMotds(final Date clientdate, final String roomId);
 
 	List<Motd> filterMotdsByDate(List<Motd> list, Date clientdate);
 
@@ -42,13 +40,13 @@ public interface MotdService extends EntityService<Motd> {
 
 	void delete(Motd motd);
 
-	void deleteBySessionKey(final String sessionId, Motd motd);
+	void deleteByRoomId(final String roomId, Motd motd);
 
 	Motd save(Motd motd);
 
-	Motd save(final String sessionId, final Motd motd);
+	Motd save(final String roomId, final Motd motd);
 
 	Motd update(Motd motd);
 
-	Motd update(final String sessionkey, Motd motd);
+	Motd update(final String roomShortId, Motd motd);
 }
diff --git a/src/main/java/de/thm/arsnova/services/MotdServiceImpl.java b/src/main/java/de/thm/arsnova/services/MotdServiceImpl.java
index 059da1149eb3002e91cbd2677e5cb739a19d664f..19d3f08b24c078481642771e7a258667240a8aa1 100644
--- a/src/main/java/de/thm/arsnova/services/MotdServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/MotdServiceImpl.java
@@ -55,28 +55,22 @@ public class MotdServiceImpl extends DefaultEntityServiceImpl<Motd> implements M
 		this.roomService = roomService;
 	}
 
-  @Override
-  @PreAuthorize("isAuthenticated()")
-  public Motd getByKey(final String key) {
-    return motdRepository.findByKey(key);
-  }
-
-  @Override
-  @PreAuthorize("hasPermission('', 'motd', 'admin')")
-  public List<Motd> getAdminMotds() {
+	@Override
+	@PreAuthorize("hasPermission('', 'motd', 'admin')")
+	public List<Motd> getAdminMotds() {
     return motdRepository.findGlobalForAdmin();
   }
 
 	@Override
-	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
-	public List<Motd> getAllSessionMotds(final String sessionId) {
-		return motdRepository.findBySessionKey(sessionId);
+	@PreAuthorize("hasPermission(#roomId, 'session', 'owner')")
+	public List<Motd> getAllRoomMotds(final String roomId) {
+		return motdRepository.findByRoomId(roomId);
 	}
 
 	@Override
-	@Cacheable(cacheNames = "motds", key = "('session').concat(#sessionId)")
-	public List<Motd> getCurrentSessionMotds(final Date clientdate, final String sessionId) {
-		final List<Motd> motds = motdRepository.findBySessionKey(sessionId);
+	@Cacheable(cacheNames = "motds", key = "('session').concat(#roomId)")
+	public List<Motd> getCurrentRoomMotds(final Date clientdate, final String roomId) {
+		final List<Motd> motds = motdRepository.findByRoomId(roomId);
 		return filterMotdsByDate(motds, clientdate);
 	}
 
@@ -95,16 +89,16 @@ public class MotdServiceImpl extends DefaultEntityServiceImpl<Motd> implements M
 		return filterMotdsByDate(motds, clientdate);
 	}
 
-  @Override
-  public List<Motd> filterMotdsByDate(List<Motd> list, Date clientdate) {
+	@Override
+	public List<Motd> filterMotdsByDate(List<Motd> list, Date clientdate) {
 		List<Motd> returns = new ArrayList<>();
 		for (Motd motd : list) {
-			if (motd.getStartdate().before(clientdate) && motd.getEnddate().after(clientdate)) {
+			if (motd.getStartDate().before(clientdate) && motd.getEndDate().after(clientdate)) {
 				returns.add(motd);
 			}
 		}
 		return returns;
-  }
+	}
 
 	@Override
 	public List<Motd> filterMotdsByList(List<Motd> list, List<String> ids) {
@@ -118,10 +112,10 @@ public class MotdServiceImpl extends DefaultEntityServiceImpl<Motd> implements M
 	}
 
 	@Override
-	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
-	public Motd save(final String sessionId, final Motd motd) {
-		Room room = roomService.getByKey(sessionId);
-		motd.setSessionId(room.getId());
+	@PreAuthorize("hasPermission(#roomId, 'session', 'owner')")
+	public Motd save(final String roomId, final Motd motd) {
+		Room room = roomService.getByShortId(roomId);
+		motd.setRoomId(room.getId());
 
 		return createOrUpdateMotd(motd);
 	}
@@ -133,16 +127,16 @@ public class MotdServiceImpl extends DefaultEntityServiceImpl<Motd> implements M
 	}
 
 	@Override
-	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
-	public Motd update(final String sessionkey, final Motd motd) {
+	@PreAuthorize("hasPermission(#roomShortId, 'session', 'owner')")
+	public Motd update(final String roomShortId, final Motd motd) {
 		return createOrUpdateMotd(motd);
 	}
 
-	@CacheEvict(cacheNames = "motds", key = "#motd.audience.concat(#motd.sessionId)")
+	@CacheEvict(cacheNames = "motds", key = "#motd.audience.concat(#motd.roomId)")
 	private Motd createOrUpdateMotd(final Motd motd) {
 		if (motd.getId() != null) {
 			Motd oldMotd = motdRepository.findOne(motd.getId());
-			if (!(motd.getId().equals(oldMotd.getId()) && motd.getSessionId().equals(oldMotd.getSessionId())
+			if (!(motd.getId().equals(oldMotd.getId()) && motd.getRoomId().equals(oldMotd.getRoomId())
 					&& motd.getAudience().equals(oldMotd.getAudience()))) {
 				throw new BadRequestException();
 			}
@@ -159,14 +153,14 @@ public class MotdServiceImpl extends DefaultEntityServiceImpl<Motd> implements M
 
 	@Override
 	@PreAuthorize("hasPermission('', 'motd', 'admin')")
-	@CacheEvict(cacheNames = "motds", key = "#motd.audience.concat(#motd.sessionId)")
+	@CacheEvict(cacheNames = "motds", key = "#motd.audience.concat(#motd.roomId)")
 	public void delete(Motd motd) {
 		motdRepository.delete(motd);
 	}
 
 	@Override
-	@PreAuthorize("hasPermission(#sessionId, 'session', 'owner')")
-	public void deleteBySessionKey(final String sessionId, Motd motd) {
+	@PreAuthorize("hasPermission(#roomId, 'session', 'owner')")
+	public void deleteByRoomId(final String roomId, Motd motd) {
 		motdRepository.delete(motd);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/services/RoomService.java b/src/main/java/de/thm/arsnova/services/RoomService.java
index 87ec7bdc35f7536b0d7d28501927c8ee98760493..2ed5a90b577c09da54c7a3e56009c49e389d9cfe 100644
--- a/src/main/java/de/thm/arsnova/services/RoomService.java
+++ b/src/main/java/de/thm/arsnova/services/RoomService.java
@@ -20,7 +20,7 @@ package de.thm.arsnova.services;
 import de.thm.arsnova.connector.model.Course;
 import de.thm.arsnova.entities.Room;
 import de.thm.arsnova.entities.UserAuthentication;
-import de.thm.arsnova.entities.transport.ImportExportSession;
+import de.thm.arsnova.entities.transport.ImportExportContainer;
 import de.thm.arsnova.entities.transport.ScoreStatistics;
 
 import java.util.List;
@@ -30,69 +30,69 @@ import java.util.UUID;
  * The functionality the session service should provide.
  */
 public interface RoomService extends EntityService<Room> {
-	Room getByKey(String keyword);
+	Room getByShortId(String shortId);
 
-	Room getForAdmin(final String keyword);
+	Room getForAdmin(final String shortId);
 
-	Room getInternal(String keyword, UserAuthentication user);
+	Room getInternal(String shortId, UserAuthentication user);
 
 	Room save(Room session);
 
-	boolean isKeyAvailable(String keyword);
+	boolean isShortIdAvailable(String shortId);
 
-	String generateKey();
+	String generateShortId();
 
-	List<Room> getUserSessions(String userId);
+	List<Room> getUserRooms(String userId);
 
-	List<Room> getUserVisitedSessions(String username);
+	List<Room> getUserVisitedRooms(String username);
 
-	List<Room> getMySessions(int offset, int limit);
+	List<Room> getMyRooms(int offset, int limit);
 
-	List<Room> getMyVisitedSessions(int offset, int limit);
+	List<Room> getMyVisitedRooms(int offset, int limit);
 
-	int countSessionsByCourses(List<Course> courses);
+	int countRoomsByCourses(List<Course> courses);
 
-	int activeUsers(String sessionkey);
+	int activeUsers(String shortId);
 
-	Room setActive(String sessionkey, Boolean lock);
+	Room setActive(String shortId, Boolean lock);
 
-	Room join(String keyword, UUID socketId);
+	Room join(String shortId, UUID socketId);
 
-	Room update(String sessionkey, Room session);
+	Room update(String shortId, Room room);
 
-	Room updateCreator(String sessionkey, String newCreator);
+	Room updateCreator(String shortId, String newCreator);
 
-	Room updateInternal(Room session, UserAuthentication user);
+	Room updateInternal(Room room, UserAuthentication user);
 
-	int[] deleteCascading(Room session);
+	int[] deleteCascading(Room room);
 
-	ScoreStatistics getLearningProgress(String sessionkey, String type, String questionVariant);
+	ScoreStatistics getLearningProgress(String shortId, String type, String questionVariant);
 
-	ScoreStatistics getMyLearningProgress(String sessionkey, String type, String questionVariant);
+	ScoreStatistics getMyLearningProgress(String shortId, String type, String questionVariant);
 
-	List<Room> getMySessionsInfo(int offset, int limit);
+	List<Room> getMyRoomsInfo(int offset, int limit);
 
-	List<Room> getPublicPoolSessionsInfo();
+	List<Room> getPublicPoolRoomsInfo();
 
-	List<Room> getMyPublicPoolSessionsInfo();
+	List<Room> getMyPublicPoolRoomsInfo();
 
-	List<Room> getMyVisitedSessionsInfo(int offset, int limit);
+	List<Room> getMyVisitedRoomsInfo(int offset, int limit);
 
-	Room importSession(ImportExportSession session);
+	Room importRooms(ImportExportContainer importExportRoom);
 
-	ImportExportSession exportSession(String sessionkey, Boolean withAnswerStatistics, Boolean withFeedbackQuestions);
+	ImportExportContainer exportRoom(String shortId, Boolean withAnswerStatistics, Boolean withFeedbackQuestions);
 
-	Room copySessionToPublicPool(String sessionkey, de.thm.arsnova.entities.transport.ImportExportSession.PublicPool pp);
+	Room copyRoomToPublicPool(String shortId, ImportExportContainer.PublicPool pp);
 
-	Room.Settings getFeatures(String sessionkey);
+	Room.Settings getFeatures(String shortId);
 
-	Room.Settings updateFeatures(String sessionkey, Room.Settings settings);
+	Room.Settings updateFeatures(String shortId, Room.Settings settings);
 
-	boolean lockFeedbackInput(String sessionkey, Boolean lock);
+	boolean lockFeedbackInput(String shortId, Boolean lock);
 
-	boolean flipFlashcards(String sessionkey, Boolean flip);
+	boolean flipFlashcards(String shortId, Boolean flip);
 
-	void deleteInactiveSessions();
+	void deleteInactiveRooms();
 
-	void deleteInactiveVisitedSessionLists();
+	void deleteInactiveVisitedRoomLists();
 }
diff --git a/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java b/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java
index 8b16210cb9f5258d12c1e9bc10fdc0df5393d1b5..3e4634ac7816de98f2809f4fff2c9a87e80439b8 100644
--- a/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/RoomServiceImpl.java
@@ -22,7 +22,7 @@ import de.thm.arsnova.connector.model.Course;
 import de.thm.arsnova.entities.Room;
 import de.thm.arsnova.entities.UserAuthentication;
 import de.thm.arsnova.entities.UserProfile;
-import de.thm.arsnova.entities.transport.ImportExportSession;
+import de.thm.arsnova.entities.transport.ImportExportContainer;
 import de.thm.arsnova.entities.transport.ScoreStatistics;
 import de.thm.arsnova.events.DeleteRoomEvent;
 import de.thm.arsnova.events.FeatureChangeEvent;
@@ -64,11 +64,11 @@ import java.util.UUID;
 import java.util.stream.Collectors;
 
 /**
- * Performs all session related operations.
+ * Performs all room related operations.
  */
 @Service
 public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements RoomService, ApplicationEventPublisherAware {
-	private static final long SESSION_INACTIVITY_CHECK_INTERVAL_MS = 30 * 60 * 1000L;
+	private static final long ROOM_INACTIVITY_CHECK_INTERVAL_MS = 30 * 60 * 1000L;
 
 	private static final Logger logger = LoggerFactory.getLogger(RoomServiceImpl.class);
 
@@ -93,7 +93,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 	private ConnectorClient connectorClient;
 
 	@Value("${session.guest-session.cleanup-days:0}")
-	private int guestSessionInactivityThresholdDays;
+	private int guestRoomInactivityThresholdDays;
 
 	@Value("${pp.logofilesize_b}")
 	private int uploadFileSizeByte;
@@ -123,7 +123,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 		this.scoreCalculatorFactory = scoreCalculatorFactory;
 	}
 
-	public static class SessionNameComparator implements Comparator<Room>, Serializable {
+	public static class RoomNameComparator implements Comparator<Room>, Serializable {
 		private static final long serialVersionUID = 1L;
 
 		@Override
@@ -132,7 +132,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 		}
 	}
 
-	public static class SessionShortNameComparator implements Comparator<Room>, Serializable {
+	public static class RoomShortNameComparator implements Comparator<Room>, Serializable {
 		private static final long serialVersionUID = 1L;
 
 		@Override
@@ -146,14 +146,14 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 		this.connectorClient = connectorClient;
 	}
 
-	@Scheduled(fixedDelay = SESSION_INACTIVITY_CHECK_INTERVAL_MS)
-	public void deleteInactiveSessions() {
-		if (guestSessionInactivityThresholdDays > 0) {
-			logger.info("Delete inactive sessions.");
+	@Scheduled(fixedDelay = ROOM_INACTIVITY_CHECK_INTERVAL_MS)
+	public void deleteInactiveRooms() {
+		if (guestRoomInactivityThresholdDays > 0) {
+			logger.info("Delete inactive rooms.");
 			long unixTime = System.currentTimeMillis();
-			long lastActivityBefore = unixTime - guestSessionInactivityThresholdDays * 24 * 60 * 60 * 1000L;
+			long lastActivityBefore = unixTime - guestRoomInactivityThresholdDays * 24 * 60 * 60 * 1000L;
 			int totalCount[] = new int[] {0, 0, 0};
-			List<Room> inactiveRooms = roomRepository.findInactiveGuestSessionsMetadata(lastActivityBefore);
+			List<Room> inactiveRooms = roomRepository.findInactiveGuestRoomsMetadata(lastActivityBefore);
 			for (Room room : inactiveRooms) {
 				int[] count = deleteCascading(room);
 				totalCount[0] += count[0];
@@ -162,7 +162,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 			}
 
 			if (!inactiveRooms.isEmpty()) {
-				logger.info("Deleted {} inactive guest sessions.", inactiveRooms.size());
+				logger.info("Deleted {} inactive guest rooms.", inactiveRooms.size());
 				dbLogger.log("cleanup", "type", "session",
 						"sessionCount", inactiveRooms.size(),
 						"questionCount", totalCount[0],
@@ -172,29 +172,29 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 		}
 	}
 
-	@Scheduled(fixedDelay = SESSION_INACTIVITY_CHECK_INTERVAL_MS)
-	public void deleteInactiveVisitedSessionLists() {
-		if (guestSessionInactivityThresholdDays > 0) {
+	@Scheduled(fixedDelay = ROOM_INACTIVITY_CHECK_INTERVAL_MS)
+	public void deleteInactiveVisitedRoomLists() {
+		if (guestRoomInactivityThresholdDays > 0) {
 			logger.info("Delete lists of visited session for inactive users.");
 			long unixTime = System.currentTimeMillis();
-			long lastActivityBefore = unixTime - guestSessionInactivityThresholdDays * 24 * 60 * 60 * 1000L;
+			long lastActivityBefore = unixTime - guestRoomInactivityThresholdDays * 24 * 60 * 60 * 1000L;
 			visitedSessionRepository.deleteInactiveGuestVisitedSessionLists(lastActivityBefore);
 		}
 	}
 
 	@Override
-	public Room join(final String keyword, final UUID socketId) {
+	public Room join(final String shortId, final UUID socketId) {
 		/* Socket.IO solution */
 
-		Room room = null != keyword ? roomRepository.findByKeyword(keyword) : null;
+		Room room = null != shortId ? roomRepository.findByShortId(shortId) : null;
 
 		if (null == room) {
-			userService.removeUserFromSessionBySocketId(socketId);
+			userService.removeUserFromRoomBySocketId(socketId);
 			return null;
 		}
-		final UserAuthentication user = userService.getUser2SocketId(socketId);
+		final UserAuthentication user = userService.getUserToSocketId(socketId);
 
-		userService.addUserToSessionBySocketId(socketId, keyword);
+		userService.addUserToRoomBySocketId(socketId, shortId);
 
 		roomRepository.registerAsOnlineUser(user, room);
 
@@ -212,14 +212,14 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public Room getByKey(final String keyword) {
+	public Room getByShortId(final String shortId) {
 		final UserAuthentication user = userService.getCurrentUser();
-		return this.getInternal(keyword, user);
+		return this.getInternal(shortId, user);
 	}
 
-	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
-	public Room getForAdmin(final String keyword) {
-		return roomRepository.findByKeyword(keyword);
+	@PreAuthorize("hasPermission(#shortId, 'session', 'owner')")
+	public Room getForAdmin(final String shortId) {
+		return roomRepository.findByShortId(shortId);
 	}
 
 	/*
@@ -227,16 +227,16 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 	 * TODO: Find a better way of doing this...
 	 */
 	@Override
-	public Room getInternal(final String keyword, final UserAuthentication user) {
-		final Room room = roomRepository.findByKeyword(keyword);
+	public Room getInternal(final String shortId, final UserAuthentication user) {
+		final Room room = roomRepository.findByShortId(shortId);
 		if (room == null) {
 			throw new NotFoundException();
 		}
 		if (room.isClosed()) {
 			if (user.hasRole(UserRoomService.Role.STUDENT)) {
-				throw new ForbiddenException("User is not session creator.");
+				throw new ForbiddenException("User is not room creator.");
 			} else if (user.hasRole(UserRoomService.Role.SPEAKER) && !room.getOwnerId().equals(user.getId())) {
-				throw new ForbiddenException("User is not session creator.");
+				throw new ForbiddenException("User is not room creator.");
 			}
 		}
 
@@ -253,46 +253,46 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 	}
 
 	@Override
-	@PreAuthorize("isAuthenticated() and hasPermission(#sessionkey, 'session', 'owner')")
-	public List<Room> getUserSessions(String userId) {
+	@PreAuthorize("isAuthenticated() and hasPermission(#shortId, 'session', 'owner')")
+	public List<Room> getUserRooms(String userId) {
 		return roomRepository.findByOwnerId(userId, 0, 0);
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<Room> getMySessions(final int offset, final int limit) {
+	public List<Room> getMyRooms(final int offset, final int limit) {
 		return roomRepository.findByOwner(userService.getCurrentUser(), offset, limit);
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<Room> getPublicPoolSessionsInfo() {
+	public List<Room> getPublicPoolRoomsInfo() {
 		return roomRepository.findInfosForPublicPool();
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<Room> getMyPublicPoolSessionsInfo() {
+	public List<Room> getMyPublicPoolRoomsInfo() {
 		return roomRepository.findInfosForPublicPoolByOwner(userService.getCurrentUser());
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<Room> getMySessionsInfo(final int offset, final int limit) {
+	public List<Room> getMyRoomsInfo(final int offset, final int limit) {
 		final UserAuthentication user = userService.getCurrentUser();
 		return roomRepository.getRoomsWithStatsForOwner(user, offset, limit);
 	}
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<Room> getMyVisitedSessions(final int offset, final int limit) {
+	public List<Room> getMyVisitedRooms(final int offset, final int limit) {
 		/* TODO: implement pagination */
-		return getUserVisitedSessions(userService.getCurrentUser().getUsername());
+		return getUserVisitedRooms(userService.getCurrentUser().getUsername());
 	}
 
 	@Override
 	@PreAuthorize("hasPermission('', 'motd', 'admin')")
-	public List<Room> getUserVisitedSessions(String username) {
+	public List<Room> getUserVisitedRooms(String username) {
 		UserProfile profile = userService.getByUsername(username);
 		List<String> roomIds = profile.getRoomHistory().stream().map(entry -> entry.getRoomId()).collect(Collectors.toList());
 		roomRepository.findAll(roomIds);
@@ -304,8 +304,8 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 
 	@Override
 	@PreAuthorize("isAuthenticated()")
-	public List<Room> getMyVisitedSessionsInfo(final int offset, final int limit) {
-		List<Room> rooms = getMyVisitedSessions(0, 0);
+	public List<Room> getMyVisitedRoomsInfo(final int offset, final int limit) {
+		List<Room> rooms = getMyVisitedRooms(0, 0);
 		roomRepository.getVisitedRoomsWithStatsForOwner(rooms, userService.getCurrentUser());
 
 		return rooms;
@@ -330,7 +330,7 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 		Room.Settings sf = new Room.Settings();
 		room.setSettings(sf);
 
-		room.setShortId(generateKey());
+		room.setShortId(generateShortId());
 		room.setCreationTimestamp(new Date());
 		room.setOwnerId(userService.getCurrentUser().getId());
 		room.setClosed(false);
@@ -341,41 +341,41 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 	}
 
 	@Override
-	public boolean isKeyAvailable(final String keyword) {
-		return getByKey(keyword) == null;
+	public boolean isShortIdAvailable(final String shortId) {
+		return getByShortId(shortId) == null;
 	}
 
 	@Override
-	public String generateKey() {
+	public String generateShortId() {
 		final int low = 10000000;
 		final int high = 100000000;
 		final String keyword = String
 				.valueOf((int) (Math.random() * (high - low) + low));
 
-		if (isKeyAvailable(keyword)) {
+		if (isShortIdAvailable(keyword)) {
 			return keyword;
 		}
-		return generateKey();
+		return generateShortId();
 	}
 
 	@Override
-	public int countSessionsByCourses(final List<Course> courses) {
-		final List<Room> sessions = roomRepository.findSessionsByCourses(courses);
-		if (sessions == null) {
+	public int countRoomsByCourses(final List<Course> courses) {
+		final List<Room> rooms = roomRepository.findRoomsByCourses(courses);
+		if (rooms == null) {
 			return 0;
 		}
-		return sessions.size();
+		return rooms.size();
 	}
 
 	@Override
-	public int activeUsers(final String sessionkey) {
-		return userService.getUsersBySessionKey(sessionkey).size();
+	public int activeUsers(final String shortId) {
+		return userService.getUsersByRoomShortId(shortId).size();
 	}
 
 	@Override
-	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
-	public Room setActive(final String sessionkey, final Boolean lock) {
-		final Room room = roomRepository.findByKeyword(sessionkey);
+	@PreAuthorize("hasPermission(#shortId, 'session', 'owner')")
+	public Room setActive(final String shortId, final Boolean lock) {
+		final Room room = roomRepository.findByShortId(shortId);
 		room.setClosed(!lock);
 		this.publisher.publishEvent(new StatusRoomEvent(this, room));
 		roomRepository.save(room);
@@ -386,18 +386,18 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 	@Override
 	@PreAuthorize("hasPermission(#room, 'owner')")
 	@CachePut(value = "rooms", key = "#room")
-	public Room update(final String sessionkey, final Room room) {
-		final Room existingSession = roomRepository.findByKeyword(sessionkey);
+	public Room update(final String shortId, final Room room) {
+		final Room existingRoom = roomRepository.findByShortId(shortId);
 		handleLogo(room);
-		update(existingSession, room);
+		update(existingRoom, room);
 
 		return room;
 	}
 
 	@Override
 	@PreAuthorize("hasPermission('', 'motd', 'admin')")
-	@Caching(evict = { @CacheEvict("rooms"), @CacheEvict(cacheNames = "rooms", key = "#sessionkey.keyword") })
-	public Room updateCreator(String sessionkey, String newCreator) {
+	@Caching(evict = { @CacheEvict("rooms"), @CacheEvict(cacheNames = "rooms", key = "#shortId") })
+	public Room updateCreator(String shortId, String newCreator) {
 		throw new UnsupportedOperationException("No longer implemented.");
 	}
 
@@ -419,12 +419,12 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 	@CacheEvict("rooms")
 	public int[] deleteCascading(final Room room) {
 		int[] count = new int[] {0, 0, 0};
-		List<String> contentIds = contentRepository.findIdsBySessionId(room.getId());
-		count[2] = commentRepository.deleteBySessionId(room.getId());
+		List<String> contentIds = contentRepository.findIdsByRoomId(room.getId());
+		count[2] = commentRepository.deleteByRoomId(room.getId());
 		count[1] = answerRepository.deleteByContentIds(contentIds);
-		count[0] = contentRepository.deleteBySessionId(room.getId());
+		count[0] = contentRepository.deleteByRoomId(room.getId());
 		roomRepository.delete(room);
-		logger.debug("Deleted session document {} and related data.", room.getId());
+		logger.debug("Deleted room document {} and related data.", room.getId());
 		dbLogger.log("delete", "type", "session", "id", room.getId());
 
 		this.publisher.publishEvent(new DeleteRoomEvent(this, room));
@@ -433,17 +433,17 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 	}
 
 	@Override
-	@PreAuthorize("hasPermission(#sessionkey, 'session', 'read')")
-	public ScoreStatistics getLearningProgress(final String sessionkey, final String type, final String questionVariant) {
-		final Room room = roomRepository.findByKeyword(sessionkey);
+	@PreAuthorize("hasPermission(#shortId, 'session', 'read')")
+	public ScoreStatistics getLearningProgress(final String shortId, final String type, final String questionVariant) {
+		final Room room = roomRepository.findByShortId(shortId);
 		ScoreCalculator scoreCalculator = scoreCalculatorFactory.create(type, questionVariant);
 		return scoreCalculator.getCourseProgress(room);
 	}
 
 	@Override
-	@PreAuthorize("hasPermission(#sessionkey, 'session', 'read')")
-	public ScoreStatistics getMyLearningProgress(final String sessionkey, final String type, final String questionVariant) {
-		final Room room = roomRepository.findByKeyword(sessionkey);
+	@PreAuthorize("hasPermission(#shortId, 'session', 'read')")
+	public ScoreStatistics getMyLearningProgress(final String shortId, final String type, final String questionVariant) {
+		final Room room = roomRepository.findByShortId(shortId);
 		final UserAuthentication user = userService.getCurrentUser();
 		ScoreCalculator scoreCalculator = scoreCalculatorFactory.create(type, questionVariant);
 		return scoreCalculator.getMyProgress(room, user);
@@ -451,29 +451,29 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 
 	@Override
 	@PreAuthorize("hasPermission('', 'session', 'create')")
-	public Room importSession(ImportExportSession importSession) {
+	public Room importRooms(ImportExportContainer importRoom) {
 		final UserAuthentication user = userService.getCurrentUser();
-		final Room info = roomRepository.importSession(user, importSession);
+		final Room info = roomRepository.importRoom(user, importRoom);
 		if (info == null) {
-			throw new NullPointerException("Could not import session.");
+			throw new NullPointerException("Could not import room.");
 		}
 		return info;
 	}
 
 	@Override
-	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
-	public ImportExportSession exportSession(String sessionkey, Boolean withAnswerStatistics, Boolean withFeedbackQuestions) {
-		return roomRepository.exportSession(sessionkey, withAnswerStatistics, withFeedbackQuestions);
+	@PreAuthorize("hasPermission(#shortId, 'session', 'owner')")
+	public ImportExportContainer exportRoom(String shortId, Boolean withAnswerStatistics, Boolean withFeedbackQuestions) {
+		return roomRepository.exportRoom(shortId, withAnswerStatistics, withFeedbackQuestions);
 	}
 
 	@Override
-	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
-	public Room copySessionToPublicPool(String sessionkey, de.thm.arsnova.entities.transport.ImportExportSession.PublicPool pp) {
-		ImportExportSession temp = roomRepository.exportSession(sessionkey, false, false);
+	@PreAuthorize("hasPermission(#shortId, 'session', 'owner')")
+	public Room copyRoomToPublicPool(String shortId, ImportExportContainer.PublicPool pp) {
+		ImportExportContainer temp = roomRepository.exportRoom(shortId, false, false);
 		temp.getSession().setPublicPool(pp);
 		temp.getSession().setSessionType("public_pool");
 		final UserAuthentication user = userService.getCurrentUser();
-		return roomRepository.importSession(user, temp);
+		return roomRepository.importRoom(user, temp);
 	}
 
 	@Override
@@ -482,15 +482,15 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 	}
 
 	@Override
-	@PreAuthorize("hasPermission(#sessionkey, 'session', 'read')")
-	public Room.Settings getFeatures(String sessionkey) {
-		return roomRepository.findByKeyword(sessionkey).getSettings();
+	@PreAuthorize("hasPermission(#shortId, 'session', 'read')")
+	public Room.Settings getFeatures(String shortId) {
+		return roomRepository.findByShortId(shortId).getSettings();
 	}
 
 	@Override
-	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
-	public Room.Settings updateFeatures(String sessionkey, Room.Settings settings) {
-		final Room room = roomRepository.findByKeyword(sessionkey);
+	@PreAuthorize("hasPermission(#shortId, 'session', 'owner')")
+	public Room.Settings updateFeatures(String shortId, Room.Settings settings) {
+		final Room room = roomRepository.findByShortId(shortId);
 		final UserAuthentication user = userService.getCurrentUser();
 		room.setSettings(settings);
 		this.publisher.publishEvent(new FeatureChangeEvent(this, room));
@@ -500,12 +500,12 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 	}
 
 	@Override
-	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
-	public boolean lockFeedbackInput(String sessionkey, Boolean lock) {
-		final Room room = roomRepository.findByKeyword(sessionkey);
+	@PreAuthorize("hasPermission(#shortId, 'session', 'owner')")
+	public boolean lockFeedbackInput(String shortId, Boolean lock) {
+		final Room room = roomRepository.findByShortId(shortId);
 		final UserAuthentication user = userService.getCurrentUser();
 		if (!lock) {
-			feedbackService.cleanFeedbackVotesBySessionKey(sessionkey, 0);
+			feedbackService.cleanFeedbackVotesByRoomShortId(shortId, 0);
 		}
 
 		room.getSettings().setFeedbackLocked(lock);
@@ -516,9 +516,9 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 	}
 
 	@Override
-	@PreAuthorize("hasPermission(#sessionkey, 'session', 'owner')")
-	public boolean flipFlashcards(String sessionkey, Boolean flip) {
-		final Room room = roomRepository.findByKeyword(sessionkey);
+	@PreAuthorize("hasPermission(#shortId, 'session', 'owner')")
+	public boolean flipFlashcards(String shortId, Boolean flip) {
+		final Room room = roomRepository.findByShortId(shortId);
 		this.publisher.publishEvent(new FlipFlashcardsEvent(this, room));
 
 		return flip;
diff --git a/src/main/java/de/thm/arsnova/services/TimerService.java b/src/main/java/de/thm/arsnova/services/TimerService.java
index 952ba218090aebc04e27b492e3098fbb3681361c..0e39081425ec889d776ced05639945c9f508dbe7 100644
--- a/src/main/java/de/thm/arsnova/services/TimerService.java
+++ b/src/main/java/de/thm/arsnova/services/TimerService.java
@@ -3,9 +3,9 @@ package de.thm.arsnova.services;
 import de.thm.arsnova.entities.UserAuthentication;
 
 public interface TimerService {
-	void startNewPiRound(final String contentId, UserAuthentication user);
-	void startNewPiRoundDelayed(final String contentId, final int time);
-	void cancelPiRoundChange(final String contentId);
-	void cancelDelayedPiRoundChange(final String contentId);
-	void resetPiRoundState(final String contentId);
+	void startNewRound(final String contentId, UserAuthentication user);
+	void startNewRoundDelayed(final String contentId, final int time);
+	void cancelRoundChange(final String contentId);
+	void cancelDelayedRoundChange(final String contentId);
+	void resetRoundState(final String contentId);
 }
diff --git a/src/main/java/de/thm/arsnova/services/TimerServiceImpl.java b/src/main/java/de/thm/arsnova/services/TimerServiceImpl.java
index f6c0493e8cb7276262ca8a3baccda1aba9feb721..0cbcd856e14aedc60fe1415a5823705f38ae9106 100644
--- a/src/main/java/de/thm/arsnova/services/TimerServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/TimerServiceImpl.java
@@ -40,7 +40,7 @@ public class TimerServiceImpl implements TimerService, ApplicationEventPublisher
 
 	@Override
 	@PreAuthorize("isAuthenticated() and hasPermission(#contentId, 'content', 'owner')")
-	public void startNewPiRound(final String contentId, UserAuthentication user) {
+	public void startNewRound(final String contentId, UserAuthentication user) {
 		final Content content = contentRepository.findOne(contentId);
 		final Room room = roomRepository.findOne(content.getRoomId());
 
@@ -48,7 +48,7 @@ public class TimerServiceImpl implements TimerService, ApplicationEventPublisher
 			user = userService.getCurrentUser();
 		}
 
-		cancelDelayedPiRoundChange(contentId);
+		cancelDelayedRoundChange(contentId);
 
 		content.getState().setRoundEndTimestamp(null);
 		content.getState().setResponsesEnabled(false);
@@ -60,7 +60,7 @@ public class TimerServiceImpl implements TimerService, ApplicationEventPublisher
 
 	@Override
 	@PreAuthorize("hasPermission(#contentId, 'content', 'owner')")
-	public void startNewPiRoundDelayed(final String contentId, final int time) {
+	public void startNewRoundDelayed(final String contentId, final int time) {
 		final UserAuthentication user = userService.getCurrentUser();
 		final Content content = contentRepository.findOne(contentId);
 		final Room room = roomRepository.findOne(content.getRoomId());
@@ -77,18 +77,18 @@ public class TimerServiceImpl implements TimerService, ApplicationEventPublisher
 		timer.schedule(new TimerTask() {
 			@Override
 			public void run() {
-				startNewPiRound(contentId, user);
+				startNewRound(contentId, user);
 			}
 		}, endDate);
 	}
 
 	@Override
 	@PreAuthorize("hasPermission(#contentId, 'content', 'owner')")
-	public void cancelPiRoundChange(final String contentId) {
+	public void cancelRoundChange(final String contentId) {
 		final Content content = contentRepository.findOne(contentId);
 		final Room room = roomRepository.findOne(content.getRoomId());
 
-		cancelDelayedPiRoundChange(contentId);
+		cancelDelayedRoundChange(contentId);
 		resetRoundManagementState(content);
 
 		if (content.getState().getRound() > 1) {
@@ -101,7 +101,7 @@ public class TimerServiceImpl implements TimerService, ApplicationEventPublisher
 	}
 
 	@Override
-	public void cancelDelayedPiRoundChange(final String contentId) {
+	public void cancelDelayedRoundChange(final String contentId) {
 		Timer timer = timerList.get(contentId);
 
 		if (null != timer) {
@@ -114,10 +114,10 @@ public class TimerServiceImpl implements TimerService, ApplicationEventPublisher
 	@Override
 	@PreAuthorize("hasPermission(#contentId, 'content', 'owner')")
 	@CacheEvict("answerlists")
-	public void resetPiRoundState(final String contentId) {
+	public void resetRoundState(final String contentId) {
 		final Content content = contentRepository.findOne(contentId);
 		final Room room = roomRepository.findOne(content.getRoomId());
-		cancelDelayedPiRoundChange(contentId);
+		cancelDelayedRoundChange(contentId);
 
 		if ("freetext".equals(content.getFormat())) {
 			content.getState().setRound(0);
@@ -156,7 +156,7 @@ public class TimerServiceImpl implements TimerService, ApplicationEventPublisher
 		content.getState().setRoundEndTimestamp(null);
 	}
 
-	private void resetQuestionState(final Content content) {
+	private void resetContentState(final Content content) {
 		content.getState().setResponsesEnabled(true);
 		content.getState().setRound(1);
 		content.getState().setRoundEndTimestamp(null);
diff --git a/src/main/java/de/thm/arsnova/services/UserService.java b/src/main/java/de/thm/arsnova/services/UserService.java
index de0cfdc0362983c210308b7c5615f056b5675c48..4624093e64bda7bfcc9ec868ee85dcf0113ad39c 100644
--- a/src/main/java/de/thm/arsnova/services/UserService.java
+++ b/src/main/java/de/thm/arsnova/services/UserService.java
@@ -36,23 +36,23 @@ public interface UserService {
 
 	void increaseFailedLoginCount(String addr);
 
-	UserAuthentication getUser2SocketId(UUID socketId);
+	UserAuthentication getUserToSocketId(UUID socketId);
 
-	void putUser2SocketId(UUID socketId, UserAuthentication user);
+	void putUserToSocketId(UUID socketId, UserAuthentication user);
 
-	void removeUser2SocketId(UUID socketId);
+	void removeUserToSocketId(UUID socketId);
 
-	Set<Map.Entry<UUID, UserAuthentication>> socketId2User();
+	Set<Map.Entry<UUID, UserAuthentication>> getSocketIdToUser();
 
-	boolean isUserInSession(UserAuthentication user, String keyword);
+	boolean isUserInRoom(UserAuthentication user, String roomShortId);
 
-	Set<UserAuthentication> getUsersBySessionKey(String keyword);
+	Set<UserAuthentication> getUsersByRoomShortId(String roomShortId);
 
-	String getSessionByUsername(String username);
+	String getRoomByUsername(String username);
 
-	void addUserToSessionBySocketId(UUID socketId, String keyword);
+	void addUserToRoomBySocketId(UUID socketId, String roomShortId);
 
-	void removeUserFromSessionBySocketId(UUID socketId);
+	void removeUserFromRoomBySocketId(UUID socketId);
 
 	void removeUserFromMaps(UserAuthentication user);
 
diff --git a/src/main/java/de/thm/arsnova/services/UserServiceImpl.java b/src/main/java/de/thm/arsnova/services/UserServiceImpl.java
index ff4c59788966f9e535894ab2f3cb4b0be67dea27..892132e2324a9b996e0e672fbc7d7198c9fd3aae 100644
--- a/src/main/java/de/thm/arsnova/services/UserServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/services/UserServiceImpl.java
@@ -90,10 +90,10 @@ public class UserServiceImpl implements UserService {
 
 	private static final Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);
 
-	private static final ConcurrentHashMap<UUID, UserAuthentication> socketid2user = new ConcurrentHashMap<>();
+	private static final ConcurrentHashMap<UUID, UserAuthentication> socketIdToUser = new ConcurrentHashMap<>();
 
 	/* used for Socket.IO online check solution (new) */
-	private static final ConcurrentHashMap<UserAuthentication, String> user2session = new ConcurrentHashMap<>();
+	private static final ConcurrentHashMap<UserAuthentication, String> userToRoomId = new ConcurrentHashMap<>();
 
 	private UserRepository userRepository;
 
@@ -265,40 +265,40 @@ public class UserServiceImpl implements UserService {
 	}
 
 	@Override
-	public UserAuthentication getUser2SocketId(final UUID socketId) {
-		return socketid2user.get(socketId);
+	public UserAuthentication getUserToSocketId(final UUID socketId) {
+		return socketIdToUser.get(socketId);
 	}
 
 	@Override
-	public void putUser2SocketId(final UUID socketId, final UserAuthentication user) {
-		socketid2user.put(socketId, user);
+	public void putUserToSocketId(final UUID socketId, final UserAuthentication user) {
+		socketIdToUser.put(socketId, user);
 	}
 
 	@Override
-	public Set<Map.Entry<UUID, UserAuthentication>> socketId2User() {
-		return socketid2user.entrySet();
+	public Set<Map.Entry<UUID, UserAuthentication>> getSocketIdToUser() {
+		return socketIdToUser.entrySet();
 	}
 
 	@Override
-	public void removeUser2SocketId(final UUID socketId) {
-		socketid2user.remove(socketId);
+	public void removeUserToSocketId(final UUID socketId) {
+		socketIdToUser.remove(socketId);
 	}
 
 	@Override
-	public boolean isUserInSession(final UserAuthentication user, final String keyword) {
-		if (keyword == null) {
+	public boolean isUserInRoom(final UserAuthentication user, final String roomShortId) {
+		if (roomShortId == null) {
 			return false;
 		}
-		String session = user2session.get(user);
+		String session = userToRoomId.get(user);
 
-		return session != null && keyword.equals(session);
+		return session != null && roomShortId.equals(session);
 	}
 
 	@Override
-	public Set<UserAuthentication> getUsersBySessionKey(final String keyword) {
+	public Set<UserAuthentication> getUsersByRoomShortId(final String roomShortId) {
 		final Set<UserAuthentication> result = new HashSet<>();
-		for (final Entry<UserAuthentication, String> e : user2session.entrySet()) {
-			if (e.getValue().equals(keyword)) {
+		for (final Entry<UserAuthentication, String> e : userToRoomId.entrySet()) {
+			if (e.getValue().equals(roomShortId)) {
 				result.add(e.getKey());
 			}
 		}
@@ -308,26 +308,26 @@ public class UserServiceImpl implements UserService {
 
 	@Override
 	@Transactional(isolation = Isolation.READ_COMMITTED)
-	public void addUserToSessionBySocketId(final UUID socketId, final String keyword) {
-		final UserAuthentication user = socketid2user.get(socketId);
-		user2session.put(user, keyword);
+	public void addUserToRoomBySocketId(final UUID socketId, final String roomShortId) {
+		final UserAuthentication user = socketIdToUser.get(socketId);
+		userToRoomId.put(user, roomShortId);
 	}
 
 	@Override
 	@Transactional(isolation = Isolation.READ_COMMITTED)
-	public void removeUserFromSessionBySocketId(final UUID socketId) {
-		final UserAuthentication user = socketid2user.get(socketId);
+	public void removeUserFromRoomBySocketId(final UUID socketId) {
+		final UserAuthentication user = socketIdToUser.get(socketId);
 		if (null == user) {
 			logger.warn("No user exists for socket {}.", socketId);
 
 			return;
 		}
-		user2session.remove(user);
+		userToRoomId.remove(user);
 	}
 
 	@Override
-	public String getSessionByUsername(final String username) {
-		for (final Entry<UserAuthentication, String> entry  : user2session.entrySet()) {
+	public String getRoomByUsername(final String username) {
+		for (final Entry<UserAuthentication, String> entry  : userToRoomId.entrySet()) {
 			if (entry.getKey().getUsername().equals(username)) {
 				return entry.getValue();
 			}
@@ -344,14 +344,14 @@ public class UserServiceImpl implements UserService {
 	@Override
 	public void removeUserFromMaps(final UserAuthentication user) {
 		if (user != null) {
-			user2session.remove(user);
+			userToRoomId.remove(user);
 		}
 	}
 
 	@Override
 	@Gauge
 	public int loggedInUsers() {
-		return user2session.size();
+		return userToRoomId.size();
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
index f8d997077f046e5a171dacdf25291dae8391644b..1baf2d0545b3257a488b939a2b5404fd731beee7 100644
--- a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
+++ b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
@@ -142,21 +142,21 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 			@Override
 			@Timed(name = "setFeedbackEvent.onData")
 			public void onData(final SocketIOClient client, final Feedback data, final AckRequest ackSender) {
-				final UserAuthentication u = userService.getUser2SocketId(client.getSessionId());
+				final UserAuthentication u = userService.getUserToSocketId(client.getSessionId());
 				if (u == null) {
 					logger.info("Client {} tried to send feedback but is not mapped to a user", client.getSessionId());
 
 					return;
 				}
-				final String sessionKey = userService.getSessionByUsername(u.getUsername());
-				final de.thm.arsnova.entities.Room room = roomService.getInternal(sessionKey, u);
+				final String roomShortId = userService.getRoomByUsername(u.getUsername());
+				final de.thm.arsnova.entities.Room room = roomService.getInternal(roomShortId, u);
 
 				if (room.getSettings().isFeedbackLocked()) {
-					logger.debug("Feedback save blocked: {}", u, sessionKey, data.getValue());
+					logger.debug("Feedback save blocked: {}", u, roomShortId, data.getValue());
 				} else {
-					logger.debug("Feedback recieved: {}", u, sessionKey, data.getValue());
-					if (null != sessionKey) {
-						feedbackService.save(sessionKey, data.getValue(), u);
+					logger.debug("Feedback recieved: {}", u, roomShortId, data.getValue());
+					if (null != roomShortId) {
+						feedbackService.save(roomShortId, data.getValue(), u);
 					}
 				}
 			}
@@ -166,25 +166,25 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 			@Override
 			@Timed(name = "setSessionEvent.onData")
 			public void onData(final SocketIOClient client, final Room room, final AckRequest ackSender) {
-				final UserAuthentication u = userService.getUser2SocketId(client.getSessionId());
+				final UserAuthentication u = userService.getUserToSocketId(client.getSessionId());
 				if (null == u) {
 					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 != room.getKeyword() && room.getKeyword().equals(oldSessionKey)) {
+				final String oldShortRoomId = userService.getRoomByUsername(u.getUsername());
+				if (null != room.getKeyword() && room.getKeyword().equals(oldShortRoomId)) {
 					return;
 				}
 
 				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(room.getKeyword());
-					reportSessionDataToClient(room.getKeyword(), u, client);
+					reportActiveUserCountForRoom(room.getKeyword());
+					reportRoomDataToClient(room.getKeyword(), u, client);
 				}
-				if (null != oldSessionKey) {
-					reportActiveUserCountForSession(oldSessionKey);
+				if (null != oldShortRoomId) {
+					reportActiveUserCountForRoom(oldShortRoomId);
 				}
 			}
 		});
@@ -200,7 +200,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 					SocketIOClient client,
 					Comment comment,
 					AckRequest ackRequest) {
-				final UserAuthentication user = userService.getUser2SocketId(client.getSessionId());
+				final UserAuthentication user = userService.getUserToSocketId(client.getSessionId());
 				try {
 					commentService.getAndMarkReadInternal(comment.getId(), user);
 				} catch (NotFoundException | UnauthorizedException e) {
@@ -212,7 +212,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		server.addEventListener("readFreetextAnswer", String.class, new DataListener<String>() {
 			@Override
 			public void onData(SocketIOClient client, String answerId, AckRequest ackRequest) {
-				final UserAuthentication user = userService.getUser2SocketId(client.getSessionId());
+				final UserAuthentication user = userService.getUserToSocketId(client.getSessionId());
 				try {
 					contentService.getFreetextAnswerAndMarkRead(answerId, user);
 				} catch (NotFoundException | UnauthorizedException e) {
@@ -229,13 +229,13 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 			@Timed(name = "setLearningProgressOptionsEvent.onData")
 			public void onData(SocketIOClient client, ScoreOptions scoreOptions, AckRequest ack) {
 				throw new UnsupportedOperationException("Not implemented.");
-//				final UserAuthentication user = userService.getUser2SocketId(client.getSessionId());
-//				final String sessionKey = userService.getSessionByUsername(user.getUsername());
-//				final de.thm.arsnova.entities.Room room = roomService.getInternal(sessionKey, user);
+//				final UserAuthentication user = userService.getUserToSocketId(client.getSessionId());
+//				final String shortRoomId = userService.getSessionByUsername(user.getUsername());
+//				final de.thm.arsnova.entities.Room room = roomService.getInternal(shortRoomId, user);
 //				if (room.getOwnerId().equals(user.getId())) {
 //					room.setLearningProgressOptions(scoreOptions);
 //					roomService.updateInternal(room, user);
-//					broadcastInSession(room.getShortId(), "learningProgressOptions", scoreOptions);
+//					broadcastInRoom(room.getShortId(), "learningProgressOptions", scoreOptions);
 //				}
 			}
 		});
@@ -257,17 +257,17 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 				if (
 						userService == null
 						|| client.getSessionId() == null
-						|| userService.getUser2SocketId(client.getSessionId()) == null
+						|| userService.getUserToSocketId(client.getSessionId()) == null
 						) {
 					return;
 				}
-				final String username = userService.getUser2SocketId(client.getSessionId()).getUsername();
-				final String sessionKey = userService.getSessionByUsername(username);
-				userService.removeUserFromSessionBySocketId(client.getSessionId());
-				userService.removeUser2SocketId(client.getSessionId());
-				if (null != sessionKey) {
+				final String username = userService.getUserToSocketId(client.getSessionId()).getUsername();
+				final String shortRoomId = userService.getRoomByUsername(username);
+				userService.removeUserFromRoomBySocketId(client.getSessionId());
+				userService.removeUserToSocketId(client.getSessionId());
+				if (null != shortRoomId) {
 					/* user disconnected before joining a session */
-					reportActiveUserCountForSession(sessionKey);
+					reportActiveUserCountForRoom(shortRoomId);
 				}
 			}
 		});
@@ -345,7 +345,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 
 	private List<UUID> findConnectionIdForUser(final UserAuthentication user) {
 		final List<UUID> result = new ArrayList<>();
-		for (final Entry<UUID, UserAuthentication> e : userService.socketId2User()) {
+		for (final Entry<UUID, UserAuthentication> e : userService.getSocketIdToUser()) {
 			final UUID someUsersConnectionId = e.getKey();
 			final UserAuthentication someUser = e.getValue();
 			if (someUser.equals(user)) {
@@ -371,26 +371,26 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 	 * Currently only sends the feedback data to the client. Should be used for all
 	 * 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.Room room = roomService.getInternal(sessionKey, user);
-		final de.thm.arsnova.entities.Room.Settings settings = 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", roomService.activeUsers(sessionKey));
+	public void reportRoomDataToClient(final String shortRoomId, final UserAuthentication user, final SocketIOClient client) {
+		final de.thm.arsnova.entities.Room room = roomService.getInternal(shortRoomId, user);
+		final de.thm.arsnova.entities.Room.Settings settings = roomService.getFeatures(shortRoomId);
+
+		client.sendEvent("unansweredLecturerQuestions", contentService.getUnAnsweredLectureQuestionIds(shortRoomId, user));
+		client.sendEvent("unansweredPreparationQuestions", contentService.getUnAnsweredPreparationQuestionIds(shortRoomId, user));
+		client.sendEvent("countLectureQuestionAnswers", contentService.countLectureQuestionAnswersInternal(shortRoomId));
+		client.sendEvent("countPreparationQuestionAnswers", contentService.countPreparationQuestionAnswersInternal(shortRoomId));
+		client.sendEvent("activeUserCountData", roomService.activeUsers(shortRoomId));
 //		client.sendEvent("learningProgressOptions", room.getLearningProgressOptions());
-		final de.thm.arsnova.entities.Feedback fb = feedbackService.getBySessionKey(sessionKey);
+		final de.thm.arsnova.entities.Feedback fb = feedbackService.getByRoomShortId(shortRoomId);
 		client.sendEvent("feedbackData", fb.getValues());
 
 		if (settings.isFlashcardsEnabled()) {
-			client.sendEvent("countFlashcards", contentService.countFlashcardsForUserInternal(sessionKey));
+			client.sendEvent("countFlashcards", contentService.countFlashcardsForUserInternal(shortRoomId));
 //			client.sendEvent("flipFlashcards", room.getFlipFlashcards());
 		}
 
 		try {
-			final long averageFeedback = feedbackService.calculateRoundedAverageFeedback(sessionKey);
+			final long averageFeedback = feedbackService.calculateRoundedAverageFeedback(shortRoomId);
 			client.sendEvent("feedbackDataRoundedAverage", averageFeedback);
 		} catch (final NoContentException e) {
 			final Object object = null; // can't directly use "null".
@@ -398,19 +398,19 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		}
 	}
 
-	public void reportUpdatedFeedbackForSession(final de.thm.arsnova.entities.Room room) {
-		final de.thm.arsnova.entities.Feedback fb = feedbackService.getBySessionKey(room.getShortId());
-		broadcastInSession(room.getShortId(), "feedbackData", fb.getValues());
+	public void reportUpdatedFeedbackForRoom(final de.thm.arsnova.entities.Room room) {
+		final de.thm.arsnova.entities.Feedback fb = feedbackService.getByRoomShortId(room.getShortId());
+		broadcastInRoom(room.getShortId(), "feedbackData", fb.getValues());
 		try {
 			final long averageFeedback = feedbackService.calculateRoundedAverageFeedback(room.getShortId());
-			broadcastInSession(room.getShortId(), "feedbackDataRoundedAverage", averageFeedback);
+			broadcastInRoom(room.getShortId(), "feedbackDataRoundedAverage", averageFeedback);
 		} catch (final NoContentException e) {
-			broadcastInSession(room.getShortId(), "feedbackDataRoundedAverage", null);
+			broadcastInRoom(room.getShortId(), "feedbackDataRoundedAverage", null);
 		}
 	}
 
-	public void reportFeedbackForUserInSession(final Room room, final UserAuthentication user) {
-		final de.thm.arsnova.entities.Feedback fb = feedbackService.getBySessionKey(room.getKeyword());
+	public void reportFeedbackForUserInRoom(final Room room, final UserAuthentication user) {
+		final de.thm.arsnova.entities.Feedback fb = feedbackService.getByRoomShortId(room.getKeyword());
 		Long averageFeedback;
 		try {
 			averageFeedback = feedbackService.calculateRoundedAverageFeedback(room.getKeyword());
@@ -430,22 +430,22 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		}
 	}
 
-	public void reportActiveUserCountForSession(final String sessionKey) {
-		final int count = userService.getUsersBySessionKey(sessionKey).size();
+	public void reportActiveUserCountForRoom(final String shortRoomId) {
+		final int count = userService.getUsersByRoomShortId(shortRoomId).size();
 
-		broadcastInSession(sessionKey, "activeUserCountData", count);
+		broadcastInRoom(shortRoomId, "activeUserCountData", count);
 	}
 
-	public void reportAnswersToLecturerQuestionAvailable(final de.thm.arsnova.entities.Room room, final Content content) {
-		broadcastInSession(room.getShortId(), "answersToLecQuestionAvail", content.get_id());
+	public void reportAnswersToContentAvailable(final de.thm.arsnova.entities.Room room, final Content content) {
+		broadcastInRoom(room.getShortId(), "answersToLecQuestionAvail", content.get_id());
 	}
 
-	public void reportAudienceQuestionAvailable(final de.thm.arsnova.entities.Room room, final Comment audienceQuestion) {
+	public void reportCommentAvailable(final de.thm.arsnova.entities.Room room, final Comment comment) {
 		/* TODO role handling implementation, send this only to users with role lecturer */
-		broadcastInSession(room.getShortId(), "audQuestionAvail", audienceQuestion.getId());
+		broadcastInRoom(room.getShortId(), "audQuestionAvail", comment.getId());
 	}
 
-	public void reportLecturerQuestionAvailable(final de.thm.arsnova.entities.Room room, final List<de.thm.arsnova.entities.Content> qs) {
+	public void reportContentAvailable(final de.thm.arsnova.entities.Room room, final List<de.thm.arsnova.entities.Content> qs) {
 		List<Content> contents = new ArrayList<>();
 		for (de.thm.arsnova.entities.Content q : qs) {
 			contents.add(new Content(q));
@@ -453,32 +453,32 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 
 		/* TODO role handling implementation, send this only to users with role audience */
 		if (!qs.isEmpty()) {
-			broadcastInSession(room.getShortId(), "lecQuestionAvail", contents.get(0).get_id()); // deprecated!
+			broadcastInRoom(room.getShortId(), "lecQuestionAvail", contents.get(0).get_id()); // deprecated!
 		}
-		broadcastInSession(room.getShortId(), "lecturerQuestionAvailable", contents);
+		broadcastInRoom(room.getShortId(), "lecturerQuestionAvailable", contents);
 	}
 
-	public void reportLecturerQuestionsLocked(final de.thm.arsnova.entities.Room room, final List<de.thm.arsnova.entities.Content> qs) {
+	public void reportContentsLocked(final de.thm.arsnova.entities.Room room, final List<de.thm.arsnova.entities.Content> qs) {
 		List<Content> contents = new ArrayList<>();
 		for (de.thm.arsnova.entities.Content q : qs) {
 			contents.add(new Content(q));
 		}
-		broadcastInSession(room.getShortId(), "lecturerQuestionLocked", contents);
+		broadcastInRoom(room.getShortId(), "lecturerQuestionLocked", contents);
 	}
 
-	public void reportSessionStatus(final String sessionKey, final boolean active) {
-		broadcastInSession(sessionKey, "setSessionActive", active);
+	public void reportRoomStatus(final String shortRoomId, final boolean active) {
+		broadcastInRoom(shortRoomId, "setSessionActive", active);
 	}
 
-	public void broadcastInSession(final String sessionKey, final String eventName, final Object data) {
-		/* collect a list of users which are in the current session iterate over
+	public void broadcastInRoom(final String shortRoomId, final String eventName, final Object data) {
+		/* collect a list of users which are in the current room iterate over
 		 * all connected clients and if send feedback, if user is in current
-		 * session
+		 * room
 		 */
-		final Set<UserAuthentication> users = userService.getUsersBySessionKey(sessionKey);
+		final Set<UserAuthentication> users = userService.getUsersByRoomShortId(shortRoomId);
 
 		for (final SocketIOClient c : server.getAllClients()) {
-			final UserAuthentication u = userService.getUser2SocketId(c.getSessionId());
+			final UserAuthentication u = userService.getUserToSocketId(c.getSessionId());
 			if (u != null && users.contains(u)) {
 				c.sendEvent(eventName, data);
 			}
@@ -487,50 +487,50 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 
 	@Override
 	public void visit(NewQuestionEvent event) {
-		this.reportLecturerQuestionAvailable(event.getRoom(), Collections.singletonList(event.getQuestion()));
+		this.reportContentAvailable(event.getRoom(), Collections.singletonList(event.getQuestion()));
 	}
 
 	@Override
 	public void visit(UnlockQuestionEvent event) {
-		this.reportLecturerQuestionAvailable(event.getRoom(), Collections.singletonList(event.getQuestion()));
+		this.reportContentAvailable(event.getRoom(), Collections.singletonList(event.getQuestion()));
 	}
 
 	@Override
 	public void visit(LockQuestionEvent event) {
-		this.reportLecturerQuestionsLocked(event.getRoom(), Collections.singletonList(event.getQuestion()));
+		this.reportContentsLocked(event.getRoom(), Collections.singletonList(event.getQuestion()));
 	}
 
 	@Override
 	public void visit(UnlockQuestionsEvent event) {
-		this.reportLecturerQuestionAvailable(event.getRoom(), event.getQuestions());
+		this.reportContentAvailable(event.getRoom(), event.getQuestions());
 	}
 
 	@Override
 	public void visit(LockQuestionsEvent event) {
-		this.reportLecturerQuestionsLocked(event.getRoom(), event.getQuestions());
+		this.reportContentsLocked(event.getRoom(), event.getQuestions());
 	}
 
 	@Override
 	public void visit(NewCommentEvent event) {
-		this.reportAudienceQuestionAvailable(event.getRoom(), event.getQuestion());
+		this.reportCommentAvailable(event.getRoom(), event.getQuestion());
 	}
 
 	@Async
 	@Override
 	@Timed(name = "visit.NewAnswerEvent")
 	public void visit(NewAnswerEvent event) {
-		final String sessionKey = event.getRoom().getShortId();
-		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));
+		final String shortRoomId = event.getRoom().getShortId();
+		this.reportAnswersToContentAvailable(event.getRoom(), new Content(event.getContent()));
+		broadcastInRoom(shortRoomId, "countQuestionAnswersByQuestionId", contentService.countAnswersAndAbstentionsInternal(event.getContent().getId()));
+		broadcastInRoom(shortRoomId, "countLectureQuestionAnswers", contentService.countLectureQuestionAnswersInternal(shortRoomId));
+		broadcastInRoom(shortRoomId, "countPreparationQuestionAnswers", contentService.countPreparationQuestionAnswersInternal(shortRoomId));
 
 		// Update the unanswered count for the content variant that was answered.
 		final de.thm.arsnova.entities.Content content = event.getContent();
 		if ("lecture".equals(content.getGroup())) {
-			sendToUser(event.getUser(), "unansweredLecturerQuestions", contentService.getUnAnsweredLectureQuestionIds(sessionKey, event.getUser()));
+			sendToUser(event.getUser(), "unansweredLecturerQuestions", contentService.getUnAnsweredLectureQuestionIds(shortRoomId, event.getUser()));
 		} else if ("preparation".equals(content.getGroup())) {
-			sendToUser(event.getUser(), "unansweredPreparationQuestions", contentService.getUnAnsweredPreparationQuestionIds(sessionKey, event.getUser()));
+			sendToUser(event.getUser(), "unansweredPreparationQuestions", contentService.getUnAnsweredPreparationQuestionIds(shortRoomId, event.getUser()));
 		}
 	}
 
@@ -538,53 +538,53 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 	@Override
 	@Timed(name = "visit.DeleteAnswerEvent")
 	public void visit(DeleteAnswerEvent event) {
-		final String sessionKey = event.getRoom().getShortId();
-		this.reportAnswersToLecturerQuestionAvailable(event.getRoom(), new Content(event.getQuestion()));
+		final String shortRoomId = event.getRoom().getShortId();
+		this.reportAnswersToContentAvailable(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));
+		broadcastInRoom(shortRoomId, "countLectureQuestionAnswers", contentService.countLectureQuestionAnswersInternal(shortRoomId));
+		broadcastInRoom(shortRoomId, "countPreparationQuestionAnswers", contentService.countPreparationQuestionAnswersInternal(shortRoomId));
 	}
 
 	@Async
 	@Override
 	@Timed(name = "visit.PiRoundDelayedStartEvent")
 	public void visit(PiRoundDelayedStartEvent event) {
-		final String sessionKey = event.getRoom().getShortId();
-		broadcastInSession(sessionKey, "startDelayedPiRound", event.getPiRoundInformations());
+		final String shortRoomId = event.getRoom().getShortId();
+		broadcastInRoom(shortRoomId, "startDelayedPiRound", event.getPiRoundInformations());
 	}
 
 	@Async
 	@Override
 	@Timed(name = "visit.PiRoundEndEvent")
 	public void visit(PiRoundEndEvent event) {
-		final String sessionKey = event.getRoom().getShortId();
-		broadcastInSession(sessionKey, "endPiRound", event.getPiRoundEndInformations());
+		final String shortRoomId = event.getRoom().getShortId();
+		broadcastInRoom(shortRoomId, "endPiRound", event.getPiRoundEndInformations());
 	}
 
 	@Async
 	@Override
 	@Timed(name = "visit.PiRoundCancelEvent")
 	public void visit(PiRoundCancelEvent event) {
-		final String sessionKey = event.getRoom().getShortId();
-		broadcastInSession(sessionKey, "cancelPiRound", event.getContentId());
+		final String shortRoomId = event.getRoom().getShortId();
+		broadcastInRoom(shortRoomId, "cancelPiRound", event.getContentId());
 	}
 
 	@Override
 	public void visit(PiRoundResetEvent event) {
-		final String sessionKey = event.getRoom().getShortId();
-		broadcastInSession(sessionKey, "resetPiRound", event.getPiRoundResetInformations());
+		final String shortRoomId = event.getRoom().getShortId();
+		broadcastInRoom(shortRoomId, "resetPiRound", event.getPiRoundResetInformations());
 	}
 
 	@Override
 	public void visit(LockVoteEvent event) {
-		final String sessionKey = event.getRoom().getShortId();
-		broadcastInSession(sessionKey, "lockVote", event.getVotingAdmission());
+		final String shortRoomId = event.getRoom().getShortId();
+		broadcastInRoom(shortRoomId, "lockVote", event.getVotingAdmission());
 	}
 
 	@Override
 	public void visit(UnlockVoteEvent event) {
-		final String sessionKey = event.getRoom().getShortId();
-		broadcastInSession(sessionKey, "unlockVote", event.getVotingAdmission());
+		final String shortRoomId = event.getRoom().getShortId();
+		broadcastInRoom(shortRoomId, "unlockVote", event.getVotingAdmission());
 	}
 
 	@Override
@@ -593,7 +593,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		for (de.thm.arsnova.entities.Content q : event.getQuestions()) {
 			contents.add(new Content(q));
 		}
-		broadcastInSession(event.getRoom().getShortId(), "lockVotes", contents);
+		broadcastInRoom(event.getRoom().getShortId(), "lockVotes", contents);
 	}
 
 	@Override
@@ -602,29 +602,29 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 		for (de.thm.arsnova.entities.Content q : event.getQuestions()) {
 			contents.add(new Content(q));
 		}
-		broadcastInSession(event.getRoom().getShortId(), "unlockVotes", contents);
+		broadcastInRoom(event.getRoom().getShortId(), "unlockVotes", contents);
 	}
 
 	@Override
 	public void visit(FeatureChangeEvent event) {
-		final String sessionKey = event.getRoom().getShortId();
+		final String shortRoomId = event.getRoom().getShortId();
 		final de.thm.arsnova.entities.Room.Settings settings = event.getRoom().getSettings();
-		broadcastInSession(sessionKey, "featureChange", settings);
+		broadcastInRoom(shortRoomId, "featureChange", settings);
 
 		if (settings.isFlashcardsEnabled()) {
-			broadcastInSession(sessionKey, "countFlashcards", contentService.countFlashcardsForUserInternal(sessionKey));
-//			broadcastInSession(sessionKey, "flipFlashcards", event.getRoom().getFlipFlashcards());
+			broadcastInRoom(shortRoomId, "countFlashcards", contentService.countFlashcardsForUserInternal(shortRoomId));
+//			broadcastInRoom(shortRoomId, "flipFlashcards", event.getRoom().getFlipFlashcards());
 		}
 	}
 
 	@Override
 	public void visit(LockFeedbackEvent event) {
-		broadcastInSession(event.getRoom().getShortId(), "lockFeedback", event.getRoom().getSettings().isFeedbackLocked());
+		broadcastInRoom(event.getRoom().getShortId(), "lockFeedback", event.getRoom().getSettings().isFeedbackLocked());
 	}
 
 	@Override
 	public void visit(FlipFlashcardsEvent event) {
-//		broadcastInSession(event.getRoom().getShortId(), "flipFlashcards", event.getRoom().getFlipFlashcards());
+//		broadcastInRoom(event.getRoom().getShortId(), "flipFlashcards", event.getRoom().getFlipFlashcards());
 	}
 
 	@Override
@@ -665,7 +665,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 
 	@Override
 	public void visit(NewFeedbackEvent event) {
-		this.reportUpdatedFeedbackForSession(event.getRoom());
+		this.reportUpdatedFeedbackForRoom(event.getRoom());
 	}
 
 	@Override
@@ -676,12 +676,12 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer, Arsnova
 
 	@Override
 	public void visit(StatusRoomEvent event) {
-		this.reportSessionStatus(event.getRoom().getShortId(), !event.getRoom().isClosed());
+		this.reportRoomStatus(event.getRoom().getShortId(), !event.getRoom().isClosed());
 	}
 
 	@Override
 	public void visit(ChangeScoreEvent event) {
-		broadcastInSession(event.getRoom().getShortId(), "learningProgressChange", null);
+		broadcastInRoom(event.getRoom().getShortId(), "learningProgressChange", null);
 	}
 
 	@Override
diff --git a/src/main/resources/couchdb/Answer.design.js b/src/main/resources/couchdb/Answer.design.js
index b673dd79e65239ce900109944c3b4cdac15464e6..e3702e94dcb62045c5bd47d351ad6f633b6be392 100644
--- a/src/main/resources/couchdb/Answer.design.js
+++ b/src/main/resources/couchdb/Answer.design.js
@@ -2,69 +2,69 @@ var designDoc = {
 	"_id": "_design/Answer",
 	"language": "javascript",
 	"views": {
-		"by_questionid": {
+		"by_contentid": {
 			"map": function (doc) {
 				if (doc.type === "Answer") {
-					emit(doc.questionId, {_rev: doc._rev});
+					emit(doc.contentId, {_rev: doc._rev});
 				}
 			}
 		},
-		"by_questionid_piround_text_subject": {
+		"by_contentid_round_body_subject": {
 			"map": function (doc) {
 				if (doc.type === "Answer") {
-					emit([doc.questionId, doc.piRound, doc.abstention, doc.answerText, doc.answerSubject, doc.successfulFreeTextAnswer], {_rev: doc._rev});
+					emit([doc.contentId, doc.round, doc.abstention, doc.body, doc.subject, doc.successfulFreeTextAnswer], {_rev: doc._rev});
 				}
 			},
 			"reduce": "_count"
 		},
-		"by_questionid_timestamp": {
+		"by_contentid_creationtimestamp": {
 			"map": function (doc) {
 				if (doc.type === "Answer") {
-					emit([doc.questionId, doc.timestamp], {_rev: doc._rev});
+					emit([doc.contentId, doc.creationTimestamp], {_rev: doc._rev});
 				}
 			}
 		},
-		"by_questionid_user_piround": {
+		"by_contentid_user_round": {
 			"map": function (doc) {
 				if (doc.type === "Answer") {
-					emit([doc.questionId, doc.user, doc.piRound], {_rev: doc._rev});
+					emit([doc.contentId, doc.user, doc.round], {_rev: doc._rev});
 				}
 			}
 		},
-		"by_sessionid": {
+		"by_roomid": {
 			"map": function (doc) {
 				if (doc.type === "Answer") {
-					emit(doc.sessionId, {_rev: doc._rev});
+					emit(doc.roomId, {_rev: doc._rev});
 				}
 			},
 			"reduce": "_count"
 		},
-		"by_sessionid_variant": {
+		"by_roomid_variant": {
 			"map": function (doc) {
 				if (doc.type === "Answer") {
-					emit([doc.sessionId, doc.questionVariant], {_rev: doc._rev});
+					emit([doc.roomId, doc.questionVariant], {_rev: doc._rev});
 				}
 			},
 			"reduce": "_count"
 		},
-		"by_user_sessionid": {
+		"by_creatorid_roomid": {
 			"map": function (doc) {
 				if (doc.type === "Answer") {
-					emit([doc.user, doc.sessionId], {_rev: doc._rev});
+					emit([doc.creatorId, doc.roomId], {_rev: doc._rev});
 				}
 			}
 		},
-		"questionid_by_user_sessionid_variant": {
+		"contentid_by_creatorid_roomid_variant": {
 			"map": function (doc) {
 				if (doc.type === "Answer") {
-					emit([doc.user, doc.sessionId, doc.questionVariant], doc.questionId);
+					emit([doc.user, doc.roomId, doc.questionVariant], doc.contentId);
 				}
 			}
 		},
-		"questionid_piround_by_user_sessionid_variant": {
+		"contentid_round_by_creatorid_roomid_variant": {
 			"map": function (doc) {
 				if (doc.type === "Answer") {
-					emit([doc.user, doc.sessionId, doc.questionVariant], [doc.questionId, doc.piRound]);
+					emit([doc.creatorId, doc.roomId, doc.questionVariant], [doc.contentId, doc.round]);
 				}
 			}
 		}
diff --git a/src/main/resources/couchdb/Comment.design.js b/src/main/resources/couchdb/Comment.design.js
index 5dcde26d162effbd55335cace2b3c5abff49c96d..701f6bb6d27aae97e0e4effc5dc271c58027b7d3 100644
--- a/src/main/resources/couchdb/Comment.design.js
+++ b/src/main/resources/couchdb/Comment.design.js
@@ -2,41 +2,41 @@ var designDoc = {
 	"_id": "_design/Comment",
 	"language": "javascript",
 	"views": {
-		"by_sessionid": {
+		"by_roomid": {
 			"map": function (doc) {
 				if (doc.type === "Comment") {
-					emit(doc.sessionId, {_rev: doc._rev});
+					emit(doc.roomId, {_rev: doc._rev});
 				}
 			},
 			"reduce": "_count"
 		},
-		"by_sessionid_creator_read": {
+		"by_roomid_creatorid_read": {
 			"map": function (doc) {
 				if (doc.type === "Comment") {
-					emit([doc.sessionId, doc.creator, doc.read], {_rev: doc._rev})
+					emit([doc.roomId, doc.creatorId, doc.read], {_rev: doc._rev})
 				}
 			},
 			"reduce": "_count"
 		},
-		"by_sessionid_creator_timestamp": {
+		"by_roomid_creatorid_creationtimestamp": {
 			"map": function (doc) {
 				if (doc.type === "Comment") {
-					emit([doc.sessionId, doc.creator, doc.timestamp], {_rev: doc._rev});
+					emit([doc.roomId, doc.creatorId, doc.creationTimestamp], {_rev: doc._rev});
 				}
 			}
 		},
-		"by_sessionid_read": {
+		"by_roomid_read": {
 			"map": function (doc) {
 				if (doc.type === "Comment") {
-					emit([doc.sessionId, doc.read], {_rev: doc._rev});
+					emit([doc.roomId, doc.read], {_rev: doc._rev});
 				}
 			},
 			"reduce": "_count"
 		},
-		"by_sessionid_timestamp": {
+		"by_roomid_creationtimestamp": {
 			"map": function (doc) {
 				if (doc.type === "Comment") {
-					emit([doc.sessionId, doc.timestamp], {_rev: doc._rev});
+					emit([doc.roomId, doc.creationTimestamp], {_rev: doc._rev});
 				}
 			}
 		}
diff --git a/src/main/resources/couchdb/Content.design.js b/src/main/resources/couchdb/Content.design.js
index 6a827d2ac1f96d6f4ef4ac36b32dec3d890587ef..4a9d8308370f9d0b5f192697dbe2ae2ee2a63bca 100644
--- a/src/main/resources/couchdb/Content.design.js
+++ b/src/main/resources/couchdb/Content.design.js
@@ -2,18 +2,18 @@ var designDoc = {
 	"_id": "_design/Content",
 	"language": "javascript",
 	"views": {
-		"by_sessionid": {
+		"by_roomid": {
 			"map": function (doc) {
 				if (doc.type === "Content") {
-					emit(doc.sessionId, {_rev: doc._rev});
+					emit(doc.roomId, {_rev: doc._rev});
 				}
 			},
 			"reduce": "_count"
 		},
-		"by_sessionid_variant_active": {
+		"by_roomid_group_locked": {
 			"map": function (doc) {
 				if (doc.type === "Content") {
-					emit([doc.sessionId, doc.questionVariant, doc.active, doc.subject, doc.text.substr(0, 16)], {_rev: doc._rev});
+					emit([doc.roomId, doc.group, doc.locked, doc.subject, doc.body.substr(0, 16)], {_rev: doc._rev});
 				}
 			},
 			"reduce": "_count"
diff --git a/src/main/resources/couchdb/Motd.design.js b/src/main/resources/couchdb/Motd.design.js
index f7aa01b86732b35e31334d8aa1eca55f3042a736..b0569f69ad6c538edc183ce24b55b462556e9a37 100644
--- a/src/main/resources/couchdb/Motd.design.js
+++ b/src/main/resources/couchdb/Motd.design.js
@@ -4,22 +4,22 @@ var designDoc = {
 	"views": {
 		"by_audience_for_global": {
 			"map": function (doc) {
-				if (doc.type === "Motd" && doc.audience !== "session") {
+				if (doc.type === "Motd" && doc.audience !== "ROOM") {
 					emit(doc.audience, {_rev: doc._rev});
 				}
 			}
 		},
-		"by_motdkey": {
+		"by_id": {
 			"map": function (doc) {
 				if (doc.type === "Motd") {
-					emit(doc.motdkey, {_rev: doc._rev});
+					emit(doc.id, {_rev: doc._rev});
 				}
 			}
 		},
-		"by_sessionkey": {
+		"by_roomid": {
 			"map": function (doc) {
-				if (doc.type === "Motd" && doc.audience === "session") {
-					emit(doc.sessionkey, {_rev: doc._rev});
+				if (doc.type === "Motd" && doc.audience === "ROOM") {
+					emit(doc.roomId, {_rev: doc._rev});
 				}
 			}
 		}
diff --git a/src/main/resources/couchdb/Room.design.js b/src/main/resources/couchdb/Room.design.js
index bde7ba5bf1fdc5e63c9ced3c92b2393fdc19b7ee..1d8ec99ccf53eaa87620272c755595a9422a43d3 100644
--- a/src/main/resources/couchdb/Room.design.js
+++ b/src/main/resources/couchdb/Room.design.js
@@ -36,7 +36,7 @@ var designDoc = {
 				}
 			}
 		},
-		"partial_by_subject_name_for_publicpool": {
+		"partial_by_category_name_for_pool": {
 			"map": function (doc) {
 				if (doc.type === "Room" && doc.poolProperties) {
 					emit([doc.poolProperties.category, doc.name], {
diff --git a/src/site/markdown/development/caching.md b/src/site/markdown/development/caching.md
index 59e0b71349ac5c6c265c6cd7251b84fa6f5b6e37..ca4a74e71107b0f4091560bfc582e47edd8327b1 100644
--- a/src/site/markdown/development/caching.md
+++ b/src/site/markdown/development/caching.md
@@ -19,11 +19,11 @@ Caching should only be used with domain objects where the `hashCode` and `equals
 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:
+Therefore, you should always work with domain objects like `Room`, `Content`, or even your own, newly defined objects:
 
 ```java
 @Cacheable("verycacheable")
-public ResultObject veryCacheable(Session session) { ... }
+public ResultObject veryCacheable(Room room) { ... }
 ```
 
 Be aware though that you need to carefully choose the fields which should be part of the `equals`/`hashCode`: In case of CouchDB, for example, it is not a good idea to use a document's `rev` field. Every time a document is updated, it gets a new `rev` which will make it _unequal_ to all its previous versions, making cache updates using `@CachePut` impossible.
@@ -46,14 +46,14 @@ Here is a list of all caches, their keys, and a short description.
 
 Cache name | Key | Description
 -----------|-----|------------
-`contentlists`| database id of session | Contains all contents for the specified session irrespective of their variant.
-`lecturecontentlists` | database id of session | Contains all "lecture" variant contents for the specified session.
-`preparationcontentlists` | database id of session | Contains all "preparation" variant contents for the specified session.
-`flashcardcontentlists` | database id of session | Contains all "flashcard" variant contents for the specified session.
+`contentlists`| database id of room | Contains all contents for the specified room irrespective of their variant.
+`lecturecontentlists` | database id of room | Contains all "lecture" variant contents for the specified room.
+`preparationcontentlists` | database id of room | Contains all "preparation" variant contents for the specified room.
+`flashcardcontentlists` | database id of room | Contains all "flashcard" variant contents for the specified room.
 `contents` | `Content` entity | Contains single content objects.
 `contents` | database id of content | Although it shares the name of the previously mentioned cache, it is in essence a different cache because the keys are different. This means that the same `Content` object might be associated with two different keys.
 `answerlists`| database id of content | Contains single answer objects.
-`score` | `Session` entity | Contains `CourseScore` objects to calculate the score values for the specified session.
-`sessions` | keyword of session | Contains sessions identified by their keywords.
-`sessions` | database id of session | Although it shares the name of the previously mentioned cache, it is in essence a different cache because the keys are different. This means that the same `Session` object might be associated with two different keys.
+`score` | `Room` entity | Contains `CourseScore` objects to calculate the score values for the specified room.
+`rooms` | keyword of room | Contains rooms identified by their keywords.
+`rooms` | database id of room | Although it shares the name of the previously mentioned cache, it is in essence a different cache because the keys are different. This means that the same `Room` object might be associated with two different keys.
 `statistics` | -- | Contains a single, global statistics object.
diff --git a/src/site/markdown/development/event-system.md b/src/site/markdown/development/event-system.md
index 71132e71bbc0d34254e47be3f277bf7090ec352e..7bf677bcd1ea5091d09de8cceea97a43c5e14aca 100644
--- a/src/site/markdown/development/event-system.md
+++ b/src/site/markdown/development/event-system.md
@@ -11,18 +11,18 @@ A class is able to send events by implementing the `ApplicationEventPublisherAwa
 ```java
 publisher.publishEvent(theEvent);
 ```
-where `theEvent` is an object of type `ApplicationEvent`. For ARSnova, the base class `ArsovaEvent` should be used instead. All of ARSnova's internal events are subtypes of `ArsovaEvent`.
+where `theEvent` is an object of type `ApplicationEvent`. For ARSnova, the base class `ArsnovaEvent` should be used instead. All of ARSnova's internal events are subtypes of `ArsnovaEvent`.
 
 _Note_: Events are sent and received on the same thread, i.e., it is a synchronous operation.
 
 
 ## How to receive events?
 
-Events are received by implementing the `ApplicationListener<ArsovaEvent>` interface. The associated method gets passed in a `ArsovaEvent`, which is the base class of all of ARSnova's events. However, this type itself is not very useful. The real type can be revealed using double dispatch, which is the basis of the Visitor pattern. Therefore, the event should be forwarded to a class that implements the `ArsovaEvent` interface. This could be the same class that received the event.
+Events are received by implementing the `ApplicationListener<ArsnovaEvent>` interface. The associated method gets passed in a `ArsnovaEvent`, which is the base class of all of ARSnova's events. However, this type itself is not very useful. The real type can be revealed using double dispatch, which is the basis of the Visitor pattern. Therefore, the event should be forwarded to a class that implements the `ArsnovaEvent` interface. This could be the same class that received the event.
 
 _Note_: If the class implementing the Visitor needs to have some of Spring's annotations on the event methods, like, for example, to cache some values using `@Cacheable`, the Listener and the Visitor must be different objects.
 
 
 ## How to create custom events?
 
-Subclass either `ArsovaEvent` or `SessionEvent`. The former is for generic events that are not tied to a specific session, while the latter is for cases where the event only makes sense in the context of a session.
+Subclass either `ArsnovaEvent` or `RoomEvent`. The former is for generic events that are not tied to a specific room, while the latter is for cases where the event only makes sense in the context of a room.