diff --git a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
index c08bfe5602e01f8b56215596162012cd73e0f2b2..597f00f28c20b2a22d1733abca9e604116c3f0c4 100644
--- a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
+++ b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
@@ -437,4 +437,50 @@ public class LecturerQuestionController extends AbstractController {
 			return questionService.getTotalAnswerCount(sessionkey);
 		}
 	}
-}
+
+	@RequestMapping(value = "/subjectsort", method = RequestMethod.POST)
+	public void setSubjectSortOrder(
+			@RequestParam(required = true) final String sessionkey,
+            @RequestParam(required = true) final String sorttype,
+            @RequestParam(required = true) final String ispreparation,
+			@RequestBody String[] sortOrder
+			) {
+		try {
+			questionService.setSort(sessionkey, "", sorttype, ispreparation, sortOrder) ;
+		} catch (final Exception e) {
+			throw new BadRequestException();
+		}
+	}
+
+	@RequestMapping(value = "/subjectsort", method = RequestMethod.GET)
+	public String getSubjectSortType(
+			@RequestParam(required = true) final String sessionkey,
+			@RequestParam(required = true) final String ispreparation
+			) {
+		return questionService.getSubjectSortType(sessionkey, ispreparation);
+	}
+
+	@RequestMapping(value = "/questionsort", method = RequestMethod.POST)
+	public void setQuestionSortOrder(
+			@RequestParam(required = true) final String sessionkey,
+			@RequestParam(required = true) final String subject,
+			@RequestParam(required = true) final String sorttype,
+			@RequestParam(required = true) final String ispreparation,
+			@RequestBody String[] sortOrder
+			) {
+		try {
+			questionService.setSort(sessionkey, subject, sorttype, ispreparation, sortOrder);
+		} catch (final Exception e) {
+			throw new BadRequestException();
+		}
+	}
+
+	@RequestMapping(value = "/questionsort", method = RequestMethod.GET)
+	public String getQuestionSortType(
+			@RequestParam(required = true) final String sessionkey,
+			@RequestParam(required = true) final String subject,
+			@RequestParam(required = true) final String ispreparation
+			) {
+		return questionService.getQuestionSortType(sessionkey, ispreparation, subject);
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 7739c3d198cfa4c77d762e9320fb3bfc2d831dcd..22ccbc5b9409c1a04cb74d9b48dc81633ccce1ae 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -9,11 +9,11 @@
  *
  * ARSnova Backend is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * along with this program.	 If not, see <http://www.gnu.org/licenses/>.
  */
 package de.thm.arsnova.dao;
 
@@ -70,6 +70,7 @@ import de.thm.arsnova.entities.PossibleAnswer;
 import de.thm.arsnova.entities.Question;
 import de.thm.arsnova.entities.Session;
 import de.thm.arsnova.entities.SessionInfo;
+import de.thm.arsnova.entities.SortOrder;
 import de.thm.arsnova.entities.Statistics;
 import de.thm.arsnova.entities.User;
 import de.thm.arsnova.entities.VisitedSession;
@@ -551,6 +552,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		q.put("gridScaleFactor", question.getGridScaleFactor());
 		q.put("imageQuestion", question.isImageQuestion());
 		q.put("textAnswerEnabled", question.isTextAnswerEnabled());
+		q.put("timestamp", question.getTimestamp());
 
 		return q;
 	}
@@ -1184,7 +1186,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			// Not all users have visited sessions
 			if (d.getJSONObject().optJSONArray("value") != null) {
 				@SuppressWarnings("unchecked")
-				final Collection<Session> visitedSessions =  JSONArray.toCollection(
+				final Collection<Session> visitedSessions =	 JSONArray.toCollection(
 					d.getJSONObject().getJSONArray("value"),
 					Session.class
 				);
@@ -1942,4 +1944,131 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		info.setNumUnredInterposed(unreadInterposed);
 		return info;
 	}
+
+	@Override
+	public List<String> getSubjects(Session session, String questionVariant) {
+		String viewString = "";
+		if ("lecture".equals(questionVariant)) {
+			viewString = "skill_question/lecture_question_subjects_by_session";
+		}
+		else {
+			viewString = "skill_question/preparation_question_subjects_by_session";
+		}
+		NovaView view = new NovaView(viewString);
+		view.setKey(session.get_id());
+		ViewResults results = this.getDatabase().view(view);
+
+		if (results.getJSONArray("rows").optJSONObject(0) == null) {
+			return null;
+		}
+
+		Set<String> uniqueSubjects = new HashSet<>();
+
+		for (final Document d : results.getResults()) {
+			uniqueSubjects.add(d.getString("value"));
+		}
+
+		List<String> uniqueSubjectsList = new ArrayList<>(uniqueSubjects);
+
+		return uniqueSubjectsList;
+	}
+
+	@Override
+	public List<String> getQuestionIdsBySubject(Session session, String questionVariant, String subject) {
+		String viewString = "";
+		if ("lecture".equals(questionVariant)) {
+			viewString = "skill_question/lecture_question_ids_by_session_and_subject";
+		}
+		else {
+			viewString = "skill_question/preparation_question_ids_by_session_and_subject";
+		}
+		NovaView view = new NovaView(viewString);
+		view.setKey(session.get_id(), subject);
+		ViewResults results = this.getDatabase().view(view);
+
+		if (results.getJSONArray("rows").optJSONObject(0) == null) {
+			return null;
+		}
+
+		List<String> qids = new ArrayList<>();
+
+		for (final Document d : results.getResults()) {
+			final String s = d.getString("value");
+			qids.add(s);
+		}
+
+		return qids;
+	}
+
+	@Override
+	public SortOrder getSortOrder(String sessionId, String questionVariant, String subject) {
+		String viewString = "";
+		if ("preparation".equals(questionVariant)) {
+			viewString = "sort_order/preparation_question_sort_order_by_sessionid_and_subject";
+		}
+		else if ("lecture".equals(questionVariant)) {
+			viewString = "sort_order/lecture_question_sort_order_by_sessionid_and_subject";
+		}
+
+		NovaView view = new NovaView(viewString);
+		view.setKey(sessionId, subject);
+
+		ViewResults results = this.getDatabase().view(view);
+
+		if (results.getResults().isEmpty()) {
+			return null;
+		}
+
+		SortOrder sortOrder = new SortOrder();
+
+		for (final Document d : results.getResults()) {
+			sortOrder.set_id(d.getJSONObject("value").getString("_id"));
+			sortOrder.set_rev(d.getJSONObject("value").getString("_rev"));
+			sortOrder.setSessionId(d.getJSONObject("value").getString("sessionId"));
+			sortOrder.setSubject(d.getJSONObject("value").getString("subject"));
+			sortOrder.setSortType(d.getJSONObject("value").getString("sortType"));
+			sortOrder.setQuestionVariant(d.getJSONObject("value").getString("questionVariant"));
+			List<String> sort = new ArrayList<String>();
+			JSONArray json = d.getJSONObject("value").getJSONArray("sortOrder");
+			int len = json.size();
+			for (int i=0; i<len; i++) {
+				sort.add(json.getString(i));
+			}
+			sortOrder.setSortOrder(sort);
+		}
+
+		return sortOrder;
+	}
+
+	@Override
+	public SortOrder createOrUpdateSortOrder(SortOrder sortOrder) {
+		try {
+			SortOrder oldSortOrder = getSortOrder(sortOrder.getSessionId(), sortOrder.getQuestionVariant(), sortOrder.getSubject());
+			Document d = new Document();
+
+			String id = "";
+			String rev = "";
+			if (oldSortOrder != null) {
+				id = oldSortOrder.get_id();
+				rev = oldSortOrder.get_rev();
+				d = database.getDocument(id, rev);
+			}
+
+			d.put("type", "sort_order");
+			d.put("sessionId", sortOrder.getSessionId());
+			d.put("sortType", sortOrder.getSortType());
+			d.put("questionVariant", sortOrder.getQuestionVariant());
+			d.put("subject", sortOrder.getSubject());
+			d.put("sortOrder", sortOrder.getSortOrder());
+
+			database.saveDocument(d, id);
+			sortOrder.set_id(d.getId());
+			sortOrder.set_rev(d.getRev());
+
+			return sortOrder;
+		} catch (IOException e) {
+			LOGGER.error("Could not save sort {}", sortOrder);
+		}
+		return null;
+	}
 }
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index c60e1e296d6c7305367e6a3bbab2197aa65a7415..d7384fbce4cb13cdb7ecdd138d879771e3d28b40 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -9,11 +9,11 @@
  *
  * ARSnova Backend is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * along with this program.	 If not, see <http://www.gnu.org/licenses/>.
  */
 package de.thm.arsnova.dao;
 
@@ -31,6 +31,7 @@ import de.thm.arsnova.entities.Session;
 import de.thm.arsnova.entities.SessionInfo;
 import de.thm.arsnova.entities.Statistics;
 import de.thm.arsnova.entities.User;
+import de.thm.arsnova.entities.SortOrder;
 import de.thm.arsnova.entities.transport.ImportExportSession;
 
 public interface IDatabaseDao {
@@ -196,4 +197,12 @@ public interface IDatabaseDao {
 	SessionInfo importSession(User user, ImportExportSession importSession);
 
 	Statistics getStatistics();
+	
+	List<String> getSubjects(Session session, String questionVariant);
+	
+	List<String> getQuestionIdsBySubject(Session session, String questionVariant, String subject);
+	
+	SortOrder createOrUpdateSortOrder(SortOrder sortOrder);
+	
+	SortOrder getSortOrder(String sessionkey, String questionVariant, String subject);
 }
diff --git a/src/main/java/de/thm/arsnova/entities/Session.java b/src/main/java/de/thm/arsnova/entities/Session.java
index 80311ff8a5e60719a181e0c06e807b2eaae92cf9..dd87a3eda8f0a2d5260f7490bc8104312d498a79 100644
--- a/src/main/java/de/thm/arsnova/entities/Session.java
+++ b/src/main/java/de/thm/arsnova/entities/Session.java
@@ -25,7 +25,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
 public class Session implements Serializable {
 
 	private static final long serialVersionUID = 1L;
-
+	
 	private String type;
 	private String name;
 	private String shortName;
@@ -321,4 +321,5 @@ public class Session implements Serializable {
 		Session other = (Session) obj;
 		return this.keyword.equals(other.keyword);
 	}
+
 }
diff --git a/src/main/java/de/thm/arsnova/entities/SortOrder.java b/src/main/java/de/thm/arsnova/entities/SortOrder.java
new file mode 100644
index 0000000000000000000000000000000000000000..468023f543f7e1551f5a9e488d2d1de721e2af25
--- /dev/null
+++ b/src/main/java/de/thm/arsnova/entities/SortOrder.java
@@ -0,0 +1,88 @@
+/*
+ * This file is part of ARSnova Backend.
+ * Copyright (C) 2012-2015 The ARSnova Team
+ *
+ * ARSnova Backend is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * ARSnova Backend is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.	 If not, see <http://www.gnu.org/licenses/>.
+ */
+package de.thm.arsnova.entities;
+
+import java.util.List;
+
+public class SortOrder {
+
+	private String sessionId;
+	private String sortType;
+	private String questionVariant;
+	private String subject;
+	private List<String> sortOrder;
+
+	private String _id;
+	private String _rev;
+	
+	public void setSessionId(final String sessionId) {
+		this.sessionId = sessionId;
+	}
+	
+	public String getSessionId() {
+		return this.sessionId;	 
+	}
+	
+	public void setSortType(final String sortType) {
+		this.sortType = sortType;
+	}
+	
+	public String getSortType() {
+		return this.sortType;
+	}
+	
+	public void setQuestionVariant(final String questionVariant) {
+		this.questionVariant = questionVariant;
+	}
+	
+	public String getQuestionVariant() {
+		return this.questionVariant;
+	}
+	
+	public void setSubject(final String subject) {
+		this.subject = subject;
+	}
+	
+	public String getSubject() {
+		return this.subject;
+	}
+	
+	public void setSortOrder(final List<String> sortOrder) {
+		this.sortOrder = sortOrder;
+	}
+	
+	public List<String> getSortOrder() {
+		return this.sortOrder;
+	}
+
+	public void set_id(final String id) {
+		_id = id;
+	}
+
+	public String get_id() {
+		return _id;
+	}
+
+	public void set_rev(final String rev) {
+		_rev = rev;
+	}
+
+	public String get_rev() {
+		return _rev;
+	} 
+}
diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java
index 0581dfb6011fcde32d3972c4cdc102bf420b90e4..44332d428d73b54dd097b756021ba5fcdb40ec61 100644
--- a/src/main/java/de/thm/arsnova/services/IQuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java
@@ -9,11 +9,11 @@
  *
  * ARSnova Backend is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * along with this program.	 If not, see <http://www.gnu.org/licenses/>.
  */
 package de.thm.arsnova.services;
 
@@ -24,6 +24,7 @@ import de.thm.arsnova.entities.Answer;
 import de.thm.arsnova.entities.InterposedQuestion;
 import de.thm.arsnova.entities.InterposedReadingCount;
 import de.thm.arsnova.entities.Question;
+import de.thm.arsnova.entities.SortOrder;
 import de.thm.arsnova.entities.User;
 
 public interface IQuestionService {
@@ -138,4 +139,10 @@ public interface IQuestionService {
 	int getAbstentionAnswerCount(String questionId);
 
 	String getImage(String questionId, String answerId);
+
+	String getSubjectSortType(String sessionkey, String isPreparation);
+
+	SortOrder setSort(String sessionkey, String subject, String sortType, String isPreparation, String[] sortOrder);
+
+	String getQuestionSortType(String sessionkey, String isPreparation, String subject);
 }
diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java
index fae75ff96c7b35ca8bc89aac5aed74d585a0cef0..6d411350f81186e302c2ddbc14e8b952b81d8c02 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -9,11 +9,11 @@
  *
  * ARSnova Backend is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * along with this program.	 If not, see <http://www.gnu.org/licenses/>.
  */
 package de.thm.arsnova.services;
 
@@ -21,11 +21,12 @@ import java.util.AbstractMap;
 import java.util.AbstractMap.SimpleEntry;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
-
 import java.util.Timer;
 import java.util.TimerTask;
 
@@ -45,6 +46,7 @@ import de.thm.arsnova.entities.InterposedQuestion;
 import de.thm.arsnova.entities.InterposedReadingCount;
 import de.thm.arsnova.entities.Question;
 import de.thm.arsnova.entities.Session;
+import de.thm.arsnova.entities.SortOrder;
 import de.thm.arsnova.entities.User;
 import de.thm.arsnova.events.DeleteAllLectureAnswersEvent;
 import de.thm.arsnova.events.DeleteAllPreparationAnswersEvent;
@@ -111,6 +113,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 	public Question saveQuestion(final Question question) {
 		final Session session = databaseDao.getSessionFromKeyword(question.getSessionKeyword());
 		question.setSessionId(session.get_id());
+		question.setTimestamp(System.currentTimeMillis() / 1000L);
 
 		if ("freetext".equals(question.getQuestionType())) {
 			question.setPiRound(0);
@@ -137,6 +140,27 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 		}
 
 		final Question result = databaseDao.saveQuestion(session, question);
+
+		SortOrder subjectSortOrder = databaseDao.getSortOrder(session.get_id(), question.getQuestionVariant(), "");
+		if (subjectSortOrder != null) {
+			SortOrder questionSortOrder = databaseDao.getSortOrder(session.get_id(), question.getQuestionVariant(), question.getSubject());
+			if (questionSortOrder == null) {
+				List<String> s = new ArrayList<String>();
+				s.add(question.get_id());
+				SortOrder newQSortOrder = new SortOrder();
+				newQSortOrder.setSessionId(question.getSessionId());
+				newQSortOrder.setSubject(question.getSubject());
+				newQSortOrder.setSortType(subjectSortOrder.getSortType());
+				newQSortOrder.setQuestionVariant(subjectSortOrder.getQuestionVariant());
+				newQSortOrder.setSortOrder(s);
+				databaseDao.createOrUpdateSortOrder(newQSortOrder);
+				addToSortOrder(subjectSortOrder, question.getSubject());
+			}
+			else {
+				addToSortOrder(questionSortOrder, question.get_id());
+			}
+		}
+
 		final NewQuestionEvent event = new NewQuestionEvent(this, session, result);
 		this.publisher.publishEvent(event);
 
@@ -589,12 +613,12 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 	@PreAuthorize("isAuthenticated()")
 	public List<Question> getLectureQuestions(final String sessionkey) {
 		final Session session = getSession(sessionkey);
-		final User user = userService.getCurrentUser();
-		if (session.isCreator(user)) {
-			return databaseDao.getLectureQuestionsForTeachers(session);
-		} else {
-			return databaseDao.getLectureQuestionsForUsers(session);
+		SortOrder subjectSortOrder = databaseDao.getSortOrder(session.get_id(), "lecture", "");
+		if (subjectSortOrder == null) {
+			subjectSortOrder = createSortOrder(session, "lecture", "");
 		}
+		final User user = userService.getCurrentUser();
+		return getQuestionsBySortOrder(subjectSortOrder, session.isCreator(user));
 	}
 
 	@Override
@@ -613,12 +637,12 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 	@PreAuthorize("isAuthenticated()")
 	public List<Question> getPreparationQuestions(final String sessionkey) {
 		final Session session = getSession(sessionkey);
-		final User user = userService.getCurrentUser();
-		if (session.isCreator(user)) {
-			return databaseDao.getPreparationQuestionsForTeachers(session);
-		} else {
-			return databaseDao.getPreparationQuestionsForUsers(session);
+		SortOrder subjectSortOrder = databaseDao.getSortOrder(session.get_id(), "preparation", "");
+		if (subjectSortOrder == null) {
+			subjectSortOrder = createSortOrder(session, "preparation", "");
 		}
+		final User user = userService.getCurrentUser();
+		return getQuestionsBySortOrder(subjectSortOrder, session.isCreator(user));
 	}
 
 	private Session getSession(final String sessionkey) {
@@ -811,4 +835,131 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 
 		return answer.getAnswerImage();
 	}
+
+	@Override
+	public String getSubjectSortType(String sessionkey, String isPreparation) {
+		SortOrder sortOrder = databaseDao.getSortOrder(sessionkey, isPreparation, "");
+		return sortOrder.getSortType();
+	}
+
+	@Override
+	public SortOrder setSort(String sessionkey, String subject, String sortType, String isPreparation, String[] sortOrderList) {
+		Session session = databaseDao.getSessionFromKeyword(sessionkey);
+		String questionVariant = "preparation";
+		if ("false".equals(isPreparation)) {
+			questionVariant = "lecture";
+		}
+		SortOrder existing = databaseDao.getSortOrder(session.get_id(), questionVariant, subject);
+		SortOrder sortOrder = new SortOrder();
+		if (existing != null) {
+			sortOrder.set_id(existing.get_id());
+			sortOrder.set_rev(existing.get_rev());
+		}
+		sortOrder.setSessionId(session.get_id());
+		sortOrder.setSubject(subject);
+		sortOrder.setSortType(sortType);
+		sortOrder.setQuestionVariant(questionVariant);
+		sortOrder.setSortOrder(Arrays.asList(sortOrderList));
+		return databaseDao.createOrUpdateSortOrder(sortOrder);
+	}
+
+	@Override
+	public String getQuestionSortType(String sessionkey, String isPreparation, String subject) {
+		SortOrder sortOrder = databaseDao.getSortOrder(sessionkey, isPreparation, subject);
+		return sortOrder.getSortType();
+	}
+
+	public SortOrder addToSortOrder(SortOrder sortOrder, String toBeAdded) {
+		List<String> tmpList = sortOrder.getSortOrder();
+		tmpList.add(toBeAdded);
+		sortOrder.setSortOrder(tmpList);
+		if("alphabet".equals(sortOrder.getSortType())) {
+			sortOrder = alphabeticalSort(sortOrder);
+		}
+		return databaseDao.createOrUpdateSortOrder(sortOrder);
+	}
+
+	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;
+	}
+
+	public SortOrder createSortOrder(Session session, String questionVariant, String subject) {
+		if ("".equals(subject)) {
+			SortOrder subjectSortOrder = new SortOrder();
+			subjectSortOrder.setSortOrder(databaseDao.getSubjects(session, questionVariant));
+			subjectSortOrder.setSubject("");
+			subjectSortOrder.setSortType("alphabetical");
+			subjectSortOrder.setQuestionVariant(questionVariant);
+			subjectSortOrder.setSessionId(session.get_id());
+			alphabeticalSort(subjectSortOrder);
+			List<String> subjects = subjectSortOrder.getSortOrder();
+			for (String sub : subjects) {
+				createSortOrder(session, questionVariant, sub);
+			}
+			return databaseDao.createOrUpdateSortOrder(subjectSortOrder);
+		}
+		else {
+			SortOrder sortOrder = new SortOrder();
+			sortOrder.setSessionId(session.get_id());
+			sortOrder.setSubject(subject);
+			sortOrder.setQuestionVariant(questionVariant);
+			sortOrder.setSortType("alphabetical");
+			sortOrder.setSortOrder(databaseDao.getQuestionIdsBySubject(session, questionVariant, subject));
+			alphabeticalSort(sortOrder);
+			return databaseDao.createOrUpdateSortOrder(sortOrder);
+		}
+	}
+
+	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);
+			sortOrder.setSortOrder(subjects);
+			return sortOrder;
+		}
+		else {
+			Hashtable<String, String> hash = new Hashtable<>();
+			for (String qid : sortOrder.getSortOrder()) {
+				Question question = getQuestion(qid);
+				hash.put(question.getText(), qid);
+			}
+			List<String> sortList = new ArrayList<>();
+			List<String> keys = new ArrayList<>(hash.keySet());
+			Collections.sort(keys);
+			for (String textKey : keys) {
+				sortList.add(hash.get(textKey));
+			}
+			sortOrder.setSortOrder(sortList);
+			return sortOrder;
+		}
+	}
 }
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index ab234bcc84f58f1cea84923da74f5b1f3b2eb70e..3916adf2e287e47c29c800af11c4c8a4218ee1d4 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -10,11 +10,11 @@
  *
  * ARSnova is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * along with this program.	 If not, see <http://www.gnu.org/licenses/>.
  */
 package de.thm.arsnova.dao;
 
@@ -36,6 +36,7 @@ import de.thm.arsnova.entities.Session;
 import de.thm.arsnova.entities.SessionInfo;
 import de.thm.arsnova.entities.Statistics;
 import de.thm.arsnova.entities.User;
+import de.thm.arsnova.entities.SortOrder;
 import de.thm.arsnova.entities.transport.ImportExportSession;
 import de.thm.arsnova.exceptions.NoContentException;
 import de.thm.arsnova.exceptions.NotFoundException;
@@ -573,4 +574,28 @@ public class StubDatabaseDao implements IDatabaseDao {
 		stats.setInterposedQuestions(0);
 		return stats;
 	}
-}
+	
+	@Override
+	public List<String> getSubjects(Session session, String questionVariant) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	
+	@Override
+	public List<String> getQuestionIdsBySubject(Session session, String questionVariant, String subject) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	
+	@Override
+	public SortOrder createOrUpdateSortOrder(SortOrder sortOrder) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	
+	@Override
+	public SortOrder getSortOrder(String sessionkey, String questionVariant, String subject) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+}
\ No newline at end of file