diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index dc0e26e6aa17c1b67001cd607cc5011554f47c7b..c1b7c41b77037993c5de0b5f4cda2b7db6d42e5e 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -100,6 +100,11 @@ public class CouchDBDao implements IDatabaseDao {
 		sessionService = service;
 	}
 
+	/**
+	 * @deprecated Use getSessionFromKeyword instead. The database should not throw HTTP exceptions.
+	 * Additionally, the caching mechanism won't work here because it is calling inside the same class.
+	 */
+	@Deprecated
 	@Override
 	public final Session getSession(final String keyword) {
 		final Session result = getSessionFromKeyword(keyword);
@@ -865,12 +870,7 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public List<Answer> getMyAnswers(final User me, final String sessionKey) {
-		final Session s = getSessionFromKeyword(sessionKey);
-		if (s == null) {
-			throw new NotFoundException();
-		}
-
+	public List<Answer> getMyAnswers(final User me, final Session s) {
 		final NovaView view = new NovaView("answer/by_user_and_session_full");
 		view.setKey(me.getUsername(), s.get_id());
 		final ViewResults results = getDatabase().view(view);
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index d688abbebe96b06212afe87a79157ccd996444ce..9944d347e4849f6a226c78dfa32b3c59296b81cb 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -35,6 +35,12 @@ import de.thm.arsnova.entities.transport.ImportExportSession;
 public interface IDatabaseDao {
 	Session getSessionFromKeyword(String keyword);
 
+	/**
+	 * @deprecated Use getSessionFromKeyword
+	 * @param keyword
+	 * @return
+	 */
+	@Deprecated
 	Session getSession(String keyword);
 
 	List<Session> getMySessions(User user);
@@ -79,7 +85,7 @@ public interface IDatabaseDao {
 
 	List<Answer> getFreetextAnswers(String questionId);
 
-	List<Answer> getMyAnswers(User me, String sessionKey);
+	List<Answer> getMyAnswers(User me, Session session);
 
 	int getTotalAnswerCount(String sessionKey);
 
diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java
index b1e27a79f64fbb11ad11a69b43eb7ec58319ff90..7fc4aedb7c1f64b776b87500e76a362f16307ec6 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -168,7 +168,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 			throw new NotFoundException();
 		}
 
-		final Session session = databaseDao.getSession(question.getSessionKeyword());
+		final Session session = databaseDao.getSessionFromKeyword(question.getSessionKeyword());
 		if (session == null) {
 			throw new UnauthorizedException();
 		}
@@ -190,7 +190,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 
 	private Session getSessionWithAuthCheck(final String sessionKeyword) {
 		final User user = userService.getCurrentUser();
-		final Session session = databaseDao.getSession(sessionKeyword);
+		final Session session = databaseDao.getSessionFromKeyword(sessionKeyword);
 		if (user == null || session == null || !session.isCreator(user)) {
 			throw new UnauthorizedException();
 		}
@@ -315,6 +315,8 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public List<Answer> getMyAnswers(final String sessionKey) {
+		final Session session = getSession(sessionKey);
+		// Load questions first because we are only interested in answers of the latest piRound.
 		final List<Question> questions = getSkillQuestions(sessionKey);
 		final Map<String, Question> questionIdToQuestion = new HashMap<String, Question>();
 		for (final Question question : questions) {
@@ -322,13 +324,14 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 		}
 
 		/* filter answers by active piRound per question */
-		final List<Answer> answers = databaseDao.getMyAnswers(userService.getCurrentUser(), sessionKey);
+		final List<Answer> answers = databaseDao.getMyAnswers(userService.getCurrentUser(), session);
 		final List<Answer> filteredAnswers = new ArrayList<Answer>();
 		for (final Answer answer : answers) {
 			final Question question = questionIdToQuestion.get(answer.getQuestionId());
 			if (0 == answer.getPiRound() && !"freetext".equals(question.getQuestionType())) {
 				answer.setPiRound(1);
 			}
+			// discard all answers that aren't in the same piRound as the question
 			if (answer.getPiRound() == question.getPiRound()) {
 				filteredAnswers.add(answer);
 			}
@@ -416,7 +419,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 		}
 
 		final User user = userService.getCurrentUser();
-		final Session session = databaseDao.getSession(question.getSessionKeyword());
+		final Session session = databaseDao.getSessionFromKeyword(question.getSessionKeyword());
 		if (user == null || session == null || !session.isCreator(user)) {
 			throw new UnauthorizedException();
 		}
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index ff05e7d951067e37be65db4e4a7561d3f4af25d8..7f3a9f719a809f47d47de212c3080e1196a47f9a 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -303,7 +303,7 @@ public class SessionService implements ISessionService {
 	@Override
 	@PreAuthorize("isAuthenticated() and hasPermission(#sessionkey, 'session', 'owner')")
 	public void deleteSession(final String sessionkey) {
-		final Session session = databaseDao.getSession(sessionkey);
+		final Session session = databaseDao.getSessionFromKeyword(sessionkey);
 		for (final Question q : databaseDao.getSkillQuestions(userService.getCurrentUser(), session)) {
 			databaseDao.deleteQuestionWithAnswers(q);
 		}
@@ -313,7 +313,7 @@ public class SessionService implements ISessionService {
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public int getLearningProgress(final String sessionkey, final String progressType) {
-		final Session session = databaseDao.getSession(sessionkey);
+		final Session session = databaseDao.getSessionFromKeyword(sessionkey);
 		LearningProgress learningProgress = learningProgressFactory.createFromType(progressType);
 		return learningProgress.getCourseProgress(session);
 	}
@@ -321,7 +321,7 @@ public class SessionService implements ISessionService {
 	@Override
 	@PreAuthorize("isAuthenticated()")
 	public SimpleEntry<Integer, Integer> getMyLearningProgress(final String sessionkey, final String progressType) {
-		final Session session = databaseDao.getSession(sessionkey);
+		final Session session = databaseDao.getSessionFromKeyword(sessionkey);
 		final User user = userService.getCurrentUser();
 		LearningProgress learningProgress = learningProgressFactory.createFromType(progressType);
 		return learningProgress.getMyProgress(session, user);