diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 46d51d4dc12a447c53e841db7431c50665bb0543..4663c22954e415f7ab6a6f9e9e6ccd13c9b13497 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -1943,7 +1943,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		Set<String> uniqueSubjects = new HashSet();
 		
 		for (final Document d : results.getResults()) {
-			uniqueSubjects.add(d.getJSONObject().getJSONArray("value").getString(0));
+			uniqueSubjects.add(d.getString("value"));
 		}
 		
 		List<String> uniqueSubjectsList = new ArrayList(uniqueSubjects);
@@ -1961,17 +1961,17 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			viewString = "skill_question/preparation_question_ids_by_session_and_subject";
 		}
 		NovaView view = new NovaView(viewString);
-		view.setKey(session.get_id());
+		view.setKey(session.get_id(), subject);
 		ViewResults results = this.getDatabase().view(view);
 
-		if (results.getResults().isEmpty()) {
+		if (results.getJSONArray("rows").optJSONObject(0) == null) {
 			return null;
 		}
 		
 		List<String> qids = new ArrayList();
 		
 		for (final Document d : results.getResults()) {
-			final String s = d.getJSONObject().getJSONArray("value").getString(0);
+			final String s = d.getString("value");
 			qids.add(s);
 			/*final Answer a = new Answer();
 			a.setAnswerCount(d.getInt("value"));
diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java
index 6fdd0d0fe1d3a22f9eeb3665070b48d9d6c5ef19..f75086ac5c023ad842d23f7df0fbfcbbcbc08f1a 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -839,20 +839,30 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
         return sortOrder;
     }
     
-    public List<Question> getQuestionsBySortOrder(SortOrder sortOrder, boolean onlyActive) {
-        List<Question> questions = new ArrayList<Question>();
-        List<String> questionIds = sortOrder.getSortOrder();
-        for (String t : questionIds) {
-            Question tempQuestion = getQuestion(t);
-            if (onlyActive) {
-                if (tempQuestion.isActive()) {
-                    questions.add(tempQuestion);
-                }
-            }
-            else {
-                questions.add(tempQuestion);
-            }
-        }
+    public List<Question> getQuestionsBySortOrder(SortOrder subjectSortOrder, boolean onlyActive) {
+		if (subjectSortOrder.getSortOrder() == null) {
+			return null;
+		}
+		if (subjectSortOrder.getSortOrder().isEmpty()) {
+			return null;
+		}
+		List<Question> questions = new ArrayList<Question>();
+		List<String> subjects = subjectSortOrder.getSortOrder();
+		for (String sub : subjects) {
+			SortOrder questionSortOrder = databaseDao.getSortOrder(subjectSortOrder.getSessionId(), subjectSortOrder.getQuestionVariant(), sub);
+			List<String> questionIds = questionSortOrder.getSortOrder();
+			for (String t : questionIds) {
+				Question tempQuestion = getQuestion(t);
+				if (onlyActive) {
+					if (tempQuestion.isActive()) {
+						questions.add(tempQuestion);
+					}
+				}
+				else {
+					questions.add(tempQuestion);
+				}
+			}
+		}
         return questions;
     }
 	
@@ -884,6 +894,12 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 	}
                                    
     public SortOrder alphabeticalSort(SortOrder sortOrder){
+		if (sortOrder.getSortOrder() == null) {
+			return null;
+		}
+		if (sortOrder.getSortOrder().isEmpty()) {
+			return null;
+		}
 		if ("".equals(sortOrder.getSubject())) {
 			List<String> subjects = sortOrder.getSortOrder();
 			Collections.sort(subjects);