diff --git a/src/main/java/de/thm/arsnova/cache/CacheBuster.java b/src/main/java/de/thm/arsnova/cache/CacheBuster.java
index ed10194b5af93aab7b8928daf0f32710cd9b14bf..8a3d9fce334bbee10a51cb9171541775a3595e30 100644
--- a/src/main/java/de/thm/arsnova/cache/CacheBuster.java
+++ b/src/main/java/de/thm/arsnova/cache/CacheBuster.java
@@ -80,7 +80,7 @@ public class CacheBuster implements ICacheBuster, NovaEventVisitor {
 	@Override
 	public void visit(LockQuestionsEvent lockQuestionsEvent) {}
 
-	@CacheEvict(value = "answers", key = "#event.Session")
+	@CacheEvict(value = "answers", key = "#event.Question")
 	@Override
 	public void visit(NewAnswerEvent event) {}
 
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 00b4b07132ca04fe671d4c8e965aa5a8b55610c0..374d9705a5f1a7a3dcf0ee583937a52ad12d8a12 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -39,6 +39,7 @@ import net.sf.json.util.JSONUtils;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.aop.framework.AopContext;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cache.annotation.CacheEvict;
@@ -117,6 +118,16 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		sessionService = service;
 	}
 
+	/**
+	 * Allows access to the proxy object. It has to be used instead of <code>this</code> for local calls to public
+	 * methods for caching purposes. This is an ugly but necessary temporary workaround until a better solution is
+	 * implemented (e.g. use of AspectJ's weaving).
+	 * @return the proxy for CouchDBDao
+	 */
+	private IDatabaseDao getDatabaseDao() {
+		return (IDatabaseDao) AopContext.currentProxy();
+	}
+
 	@Override
 	public void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
 		this.publisher = publisher;
@@ -870,7 +881,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		}
 		view.setGroup(true);
 		final ViewResults results = getDatabase().view(view);
-		final int abstentionCount = getAbstentionAnswerCount(questionId);
+		final int abstentionCount = getDatabaseDao().getAbstentionAnswerCount(questionId);
 		final List<Answer> answers = new ArrayList<Answer>();
 
 		for (final Document d : results.getResults()) {
@@ -894,7 +905,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		view.setEndKeyArray(questionId, "{}");
 		view.setGroup(true);
 		final ViewResults results = getDatabase().view(view);
-		final int abstentionCount = getAbstentionAnswerCount(questionId);
+		final int abstentionCount = getDatabaseDao().getAbstentionAnswerCount(questionId);
 
 		final List<Answer> answers = new ArrayList<Answer>();
 		for (final Document d : results.getResults()) {
@@ -998,7 +1009,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 
 	@Override
 	public int getTotalAnswerCount(final String sessionKey) {
-		final Session s = getSessionFromKeyword(sessionKey);
+		final Session s = getDatabaseDao().getSessionFromKeyword(sessionKey);
 		if (s == null) {
 			throw new NotFoundException();
 		}
@@ -1014,7 +1025,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 
 	@Override
 	public int getInterposedCount(final String sessionKey) {
-		final Session s = getSessionFromKeyword(sessionKey);
+		final Session s = getDatabaseDao().getSessionFromKeyword(sessionKey);
 		if (s == null) {
 			throw new NotFoundException();
 		}
@@ -1247,7 +1258,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		final List<Session> filteredSessions = new ArrayList<Session>();
 		for (final Session s : allSessions) {
 			try {
-				final Session session = getSessionFromKeyword(s.getKeyword());
+				final Session session = getDatabaseDao().getSessionFromKeyword(s.getKeyword());
 				if (session != null && !session.isCreator(user)) {
 					result.add(session);
 				} else {
@@ -1619,14 +1630,14 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	public List<String> getUnAnsweredLectureQuestionIds(final Session session, final User user) {
 		final NovaView view = new NovaView("answer/variant_by_user_and_piround");
 		view.setKey(user.getUsername(), session.get_id(), "lecture");
-		return collectUnansweredQuestionIdsByPiRound(getLectureQuestionsForUsers(session), view);
+		return collectUnansweredQuestionIdsByPiRound(getDatabaseDao().getLectureQuestionsForUsers(session), view);
 	}
 
 	@Override
 	public List<String> getUnAnsweredPreparationQuestionIds(final Session session, final User user) {
 		final NovaView view = new NovaView("answer/variant_by_user_and_piround");
 		view.setKey(user.getUsername(), session.get_id(), "preparation");
-		return collectUnansweredQuestionIdsByPiRound(getPreparationQuestionsForUsers(session), view);
+		return collectUnansweredQuestionIdsByPiRound(getDatabaseDao().getPreparationQuestionsForUsers(session), view);
 	}
 
 	private List<String> collectUnansweredQuestionIds(
@@ -1716,7 +1727,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	@Override
 	public List<Question> publishAllQuestions(final Session session, final boolean publish) {
 		final List<Question> questions = getQuestions(new NovaView("skill_question/by_session"), session);
-		publishQuestions(session, publish, questions);
+		getDatabaseDao().publishQuestions(session, publish, questions);
 		return questions;
 	}
 
@@ -1747,7 +1758,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	@Override
 	public List<Question> setVotingAdmissionForAllQuestions(final Session session, final boolean disableVoting) {
 		final List<Question> questions = getQuestions(new NovaView("skill_question/by_session"), session);
-		setVotingAdmissions(session, disableVoting, questions);
+		getDatabaseDao().setVotingAdmissions(session, disableVoting, questions);
 		return questions;
 	}
 
@@ -1783,7 +1794,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	@Override
 	public void deleteAllQuestionsAnswers(final Session session) {
 		final List<Question> questions = getQuestions(new NovaView("skill_question/by_session"), session);
-		resetQuestionsRoundState(session, questions);
+		getDatabaseDao().resetQuestionsRoundState(session, questions);
 		deleteAllAnswersForQuestions(questions);
 	}
 
@@ -1792,7 +1803,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	@Override
 	public void deleteAllPreparationAnswers(final Session session) {
 		final List<Question> questions = getQuestions(new NovaView("skill_question/preparation_question_by_session"), session);
-		resetQuestionsRoundState(session, questions);
+		getDatabaseDao().resetQuestionsRoundState(session, questions);
 		deleteAllAnswersForQuestions(questions);
 	}
 
@@ -1801,7 +1812,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	@Override
 	public void deleteAllLectureAnswers(final Session session) {
 		final List<Question> questions = getQuestions(new NovaView("skill_question/lecture_question_by_session"), session);
-		resetQuestionsRoundState(session, questions);
+		getDatabaseDao().resetQuestionsRoundState(session, questions);
 		deleteAllAnswersForQuestions(questions);
 	}
 
@@ -2178,7 +2189,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	@Override
 	public SortOrder createOrUpdateSortOrder(SortOrder sortOrder) {
 		try {
-			SortOrder oldSortOrder = getSortOrder(sortOrder.getSessionId(), sortOrder.getQuestionVariant(), sortOrder.getSubject());
+			SortOrder oldSortOrder = getDatabaseDao().getSortOrder(sortOrder.getSessionId(), sortOrder.getQuestionVariant(), sortOrder.getSubject());
 			Document d = new Document();
 
 			String id = "";
diff --git a/src/main/webapp/WEB-INF/spring/spring-main.xml b/src/main/webapp/WEB-INF/spring/spring-main.xml
index 98521a822aea86acbc3df072aa07e9d567997218..81bf547b3078968e4ac5e44279f16113b24dbf01 100644
--- a/src/main/webapp/WEB-INF/spring/spring-main.xml
+++ b/src/main/webapp/WEB-INF/spring/spring-main.xml
@@ -29,7 +29,12 @@
 
 	<task:annotation-driven />
 
-	<aop:aspectj-autoproxy>
+	<!--
+		expose-proxy is needed to access the proxy object via AopContext.currentProxy() in CouchDBDao. It might have a
+		negative impact on performance but is needed for caching until a better solution is implemented (e.g. use of
+		AspectJ's weaving).
+	-->
+	<aop:aspectj-autoproxy expose-proxy="true">
 		<aop:include name="userSessionAspect" />
 	</aop:aspectj-autoproxy>