diff --git a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
index 758d94865594d22f13ccdbae5da912517a386ec8..e7d55df05bae242ae07171ed2ec48774f1d1220c 100644
--- a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
+++ b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java
@@ -121,18 +121,6 @@ public class LecturerQuestionController extends AbstractController {
 		}
 	}
 
-	@RequestMapping(value = "/sort", method = RequestMethod.POST)
-	public void publishQuestion(
-			@PathVariable final String questionId,
-			@RequestParam(required = false) final Boolean publish,
-			@RequestBody final Question question
-			) {
-		if (publish != null) {
-			question.setActive(publish);
-		}
-		questionService.update(question);
-	}
-
 	@RequestMapping(value = "/{questionId}/publishstatistics", method = RequestMethod.POST)
 	public void publishStatistics(
 			@PathVariable final String questionId,
@@ -426,4 +414,45 @@ public class LecturerQuestionController extends AbstractController {
 			return questionService.getTotalAnswerCount(sessionkey);
 		}
 	}
-}
+
+	@RequestMapping(value = "/setsort", method = RequestMethod.POST)
+	public void setSubjectSortOrder(
+			@PathVariable final String questionId,
+			@RequestParam(required = false) final Boolean publish,
+			@RequestBody final Question question
+			) {
+		if (publish != null) {
+			question.setActive(publish);
+		}
+		questionService.update(question);
+	}
+
+	@RequestMapping(value = "/getsort", 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 = "/setsort", method = RequestMethod.POST)
+	public void setQuestionSortOrder(
+			@PathVariable final String questionId,
+			@RequestParam(required = false) final Boolean publish,
+			@RequestBody final Question question
+			) {
+		if (publish != null) {
+			question.setActive(publish);
+		}
+		questionService.update(question);
+	}
+
+	@RequestMapping(value = "/getsort", 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, subject, isPreparation);
+	}
+}
\ 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 df3e5e05d68abf0e41e6b1decc02e36c2da81f09..5d8c7a14b08a894239447a748f94c90c6d229eb2 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -550,7 +550,6 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		q.put("gridType", question.getGridType());
 		q.put("scaleFactor", question.getScaleFactor());
 		q.put("gridScaleFactor", question.getGridScaleFactor());
-        q.put("sequenceNo", question.getSequenceNo());
 
 		return q;
 	}
@@ -1382,28 +1381,40 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	@Cacheable("lecturequestions")
 	@Override
 	public List<Question> getLectureQuestionsForUsers(final Session session) {
-        SortOrder sortOrder = getSortOrder(session, "lecture");
-        if (sordOrder != null) {
-            //get Questionds via sortOrder   List<Question> result =
+        SortOrder subjectSortOrder = getSortOrder(session.get_id(), "lecture", "");
+        if (sortOrder != null) {
+            List<Question> questions = new ArrayList<Question>();
+            if ("alphabet".equals(sortOrder.getSortType())) {
+                // i srsly dunno, lol
+            }
+            else {
+                questions = getQuestionsBySortOrder(sortOrder, true);
+            }
+            return questions;
         }
         else {
             String viewName = "skill_question/lecture_question_by_session_for_all";
-            List<Question> result = getQuestions(new NovaView(viewName), session);
+            return getQuestions(new NovaView(viewName), session);
         }
-        return result;
 	}
 
 	@Override
 	public List<Question> getLectureQuestionsForTeachers(final Session session) {
-        SortOrder sortOrder = getSortOrder(session, "lecture");
-        if (sordOrder != null) {
-            //get Questionds via sortOrder
+        SortOrder subjectSortOrder = getSortOrder(session, "lecture", "");
+        if (sortOrder != null) {
+            List<Question> questions = new ArrayList<Question>();
+            if ("alphabet".equals(sortOrder.getSortType())) {
+                // i srsly dunno, lol
+            }
+            else {
+                questions = getQuestionsBySortOrder(sortOrder, false);
+            }
+            return questions;
         }
 		else {
             String viewName = "skill_question/lecture_question_by_session";
-            List<Question> result = getQuestions(new NovaView(viewName), session);
+            return getQuestions(new NovaView(viewName), session);
         }
-        return result;
 	}
 
 	@Cacheable("flashcardquestions")
@@ -1422,9 +1433,16 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	@Cacheable("preparationquestions")
 	@Override
 	public List<Question> getPreparationQuestionsForUsers(final Session session) {
-        SortOrder sortOrder = getSortOrder(session, "preparation");
-        if (sordOrder != null) {
-            //get Questionds via sortOrder
+        SortOrder subjectSortOrder = getSortOrder(session, "preparation", "");
+        if (sortOrder != null) {
+            List<Question> questions = new ArrayList<Question>();
+            if ("alphabet".equals(sortOrder.getSortType())) {
+                // i srsly dunno, lol
+            }
+            else {
+                questions = getQuestionsBySortOrder(sortOrder, true);
+            }
+            return questions;
         }
 		else {
             String viewName = "skill_question/preparation_question_by_session_for_all";
@@ -1435,14 +1453,20 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	@Override
 	public List<Question> getPreparationQuestionsForTeachers(final Session session) {
         SortOrder sortOrder = getSortOrder(session, "preparation");
-        if (sordOrder != null) {
-            //get Questionds via sortOrder
+        if (sortOrder != null) {
+            List<Question> questions = new ArrayList<Question>();
+            if ("alphabet".equals(sortOrder.getSortType())) {
+                // i srsly dunno, lol
+            }
+            else {
+                questions = getQuestionsBySortOrder(sortOrder, false);
+            }
+            return questions;
         }
 		else {
             String viewName = "skill_question/preparation_question_by_session";
             return getQuestions(new NovaView(viewName), session);
         }
-        return result;
 	}
 
 	private List<Question> getQuestions(final NovaView view, final Session session) {
@@ -1939,29 +1963,34 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 	}
     
     @Override
-    SortOrder getSortOrder(Session session, String questionVariant) {
+    public SortOrder getSortOrder(String sessionId, String questionVariant, String subject) {
+        String viewString = "";
         if ("preparation".equals(questionVariant)) {
-            String viewString = "sort_order/preparation_question_sort_order_by_session";    
+            viewString = "sort_order/preparation_question_sort_order_by_sessionId";    
         }
-        else if ("lecture".euals(questionVariant)) {
-            String viewString = "sort_order/lecture_question_sort_order_by_session";
+        else if ("lecture".equals(questionVariant)) {
+            viewString = "sort_order/lecture_question_sort_order_by_sessionId";
         }
+        
 		NovaView view = new NovaView(viewString);
-		view.setKey(session.get_id());
+		view.setKey(sessionId);
+        if(subject.isempty() == false) {
+            String suffix = "_and_subject";
+            viewString = viewString.concat(suffix);
+            view.setKey(subject);
+        }
+        
 		ViewResults results = this.getDatabase().view(view);
 
 		if (results.getJSONArray("rows").optJSONObject(0) == null) {
 			return null;
 		}
 
-		return (SortOrder) JSONObject.toBean(
-			results.getJSONArray("rows").optJSONObject(0).optJSONObject("value"),
-			SortOrder.class
-		);
+        return (SortOrder) JSONObject.toBean(results.getJSONObject(), Question.class);
     }
     
     @Override
-    SortOrder createOrUpdateQuestionSortOrder(Session session, SortOrder sortOrder) {
+    public SortOrder createOrUpdateQuestionSortOrder(SortOrder sortOrder) {
 		try {
 			String id = sortOrder.get_id();
 			String rev = sortOrder.get_rev();
@@ -1972,18 +2001,35 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 			}
 
 			d.put("type", "sort_order");
-            d.put("sessionId", session.get_id());
+            d.put("sessionId", sortOrder.getSessionId());
             d.put("questionVariant", sortOrder.getQuestionVariant());
+            d.put("subject", sortOrder.getSubject());
             d.put("sortOrder", sortOrder.getSortOrder());
 
 			database.saveDocument(d, id);
-			sortOrder.setId(d.getId());
-			sortOrder.setRev(d.getRev());
+			sortOrder.set_id(d.getId());
+			sortOrder.set_rev(d.getRev());
 
-			return sotOrder;
+			return sortOrder;
 		} catch (IOException e) {
-			LOGGER.error("Could not save user {}", user);
+			LOGGER.error("Could not save user {}", sortOrder);
 		}
         return null;
     }
+    
+    public List<Question> getQuestionsBySortOrder(SortOrder sortOrder, boolean onlyActive) {
+        List<Question> questions = new ArrayList<Question>();
+        String[] questionIds = sortOrder.getSortOrder();
+        for (String t : questionIds) {
+            Question tempQuestion = getQuestion(t);
+            if (onlyActive) {
+                if (tempQuestion.isActive()) {
+                    questions.add(tempQuestion);
+                }
+            }
+            else {
+                questions.add(tempQuestion);
+            }
+        }
+    }
 }
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index 5ae19e9213d8c2d06819c0425b63437a00571fc3..037c3ca0ec25bb6023de87a472bcff51ac1b87c6 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -198,7 +198,7 @@ public interface IDatabaseDao {
 
 	Statistics getStatistics();
     
-    String getSortOrder(Session session, String questionVariant);
+    SortOrder getSortOrder(String sessionkey, String questionVariant, String subject);
     
-    String createOrUpdateQuestionSortOrder(Session session, SortOrder sortOrder);
+    SortOrder createOrUpdateQuestionSortOrder(SortOrder sortOrder);
 }
diff --git a/src/main/java/de/thm/arsnova/entities/Question.java b/src/main/java/de/thm/arsnova/entities/Question.java
index fe1b0d8ba1a03cdf1bb2c08ff87c5ac2a71c5656..956512a627dfbbf38b1ceac3b98144815d83bca8 100644
--- a/src/main/java/de/thm/arsnova/entities/Question.java
+++ b/src/main/java/de/thm/arsnova/entities/Question.java
@@ -66,7 +66,6 @@ public class Question {
 	private String gridType;
 	private String scaleFactor;
 	private String gridScaleFactor;
-    private int sequenceNo;
 
 	public final String getType() {
 		return type;
@@ -411,14 +410,6 @@ public class Question {
 	public String getGridScaleFactor() {
 		return this.gridScaleFactor;
 	}
-    
-    public void setSequenceNo(int sequenceNo) {
-        this.sequenceNo = sequenceNo;
-    }
-    
-    public int getSequenceNo() {
-        return sequenceNo;
-    }
 
 	@Override
 	public final String toString() {
diff --git a/src/main/java/de/thm/arsnova/entities/SortOrder.java b/src/main/java/de/thm/arsnova/entities/SortOrder.java
index b3aba0cd4bc1e2a5e2a406eade541126b8f5bf41..c69e8552a57e78ab237af077304e3330d209be91 100644
--- a/src/main/java/de/thm/arsnova/entities/SortOrder.java
+++ b/src/main/java/de/thm/arsnova/entities/SortOrder.java
@@ -19,18 +19,45 @@ package de.thm.arsnova.entities;
 
 public class SortOrder {
 
-	private String sortVariant;
+    private String sessionId;
+	private String sortType;
+    private String questionVariant;
+    private String subject;
     private String[] sortOrder;
 
 	private String _id;
 	private String _rev;
     
-    public void setSortVariant(final String sortVariant) {
+    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.sortVariant = sortVariant;
     }
     
-    public String getSortVariant() {
-        return this.sortVariant;
+    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 String[] sortOrder) {
diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java
index 457b9fc7b2d9e9af938e5ee3011bb4b583181e2e..c37a0813381ad3edb241e3d406f3638022867930 100644
--- a/src/main/java/de/thm/arsnova/services/IQuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java
@@ -128,4 +128,8 @@ public interface IQuestionService {
 	void deleteAllLectureAnswers(String sessionkey);
 
 	int getAbstentionAnswerCount(String questionId);
+    
+    String getSubjectSortType(String sessionkey, String isPreparation);
+    
+    String getQuestionSortType(String sessionkey, String isPreparation);
 }
diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java
index dae73c9224e4256cb6404af3654815d86cc7e9b1..a9f9def28db9befb0c8170955f5f33afbe2fea6f 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -125,15 +125,22 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 				LOGGER.error("Could not save file. File is too large with " + fileSize + " Byte.");
 				throw new BadRequestException();
 			}
-		}
+		}        
+
+		final Question result = databaseDao.saveQuestion(session, question);
         
-        SortOrder sortOrder = databaseDao.getSortOrder(session, question.getQuestionVariant);
+        SortOrder sortOrder = databaseDao.getSortOrder(session.get_id(), question.getQuestionVariant(), question.getSubject());
         if (sortOrder != null) {
-            
+            if("alphabet____work".equals(sortOrder.getSortType())) {
+                
+            }
+            else {
+                String[] tmp = sortOrder.getSortOrder();
+                tmp.add(question.get_id());
+                sortOrder.setSortOrder(tmp);
+            }
         }
         
-
-		final Question result = databaseDao.saveQuestion(session, question);
 		final NewQuestionEvent event = new NewQuestionEvent(this, session, result);
 		this.publisher.publishEvent(event);
 
@@ -714,4 +721,16 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 	public void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
 		this.publisher = publisher;
 	}
+    
+    @Override
+    public String getSubjectSortType(String sessionkey, String isPreparation) {
+        SortOrder sortOrder = databaseDao.getSortOrder(sessionkey, isPreparation, "");
+        return SortOrder.getSortType();
+    }
+    
+    @Override
+    public String getQuestionSortType(String session, String subject, String isPreparation) {
+        SortOrder sortOrder = databaseDao.getSortOrder(sessionkey, isPreparation, subject);
+        return SortOrder.getSortType();
+    }
 }