diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 4663c22954e415f7ab6a6f9e9e6ccd13c9b13497..0fdfbc4b32b7d0807be2f70eaadebef443299af4 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -20,6 +20,7 @@ package de.thm.arsnova.dao;
 import java.io.IOException;
 import java.util.AbstractMap;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -550,6 +551,7 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		q.put("gridType", question.getGridType());
 		q.put("scaleFactor", question.getScaleFactor());
 		q.put("gridScaleFactor", question.getGridScaleFactor());
+		q.put("timestamp", question.getTimestamp());
 
 		return q;
 	}
@@ -1973,14 +1975,6 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		for (final Document d : results.getResults()) {
 			final String s = d.getString("value");
 			qids.add(s);
-			/*final Answer a = new Answer();
-			a.setAnswerCount(d.getInt("value"));
-			a.setAbstentionCount(abstentionCount);
-			a.setQuestionId(d.getJSONObject().getJSONArray("key").getString(0));
-			a.setPiRound(piRound);
-			final String answerText = d.getJSONObject().getJSONArray("key").getString(2);
-			a.setAnswerText("null".equals(answerText) ? null : answerText);
-			answers.add(a);*/
 		}
 		
 		return qids;
@@ -2004,21 +1998,38 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware
 		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.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) JSONObject.toBean(
-			results.getJSONArray("rows").optJSONObject(0).optJSONObject("value"),
-			SortOrder.class
-		);
+		return sortOrder;
     }
     
     @Override
     public SortOrder createOrUpdateSortOrder(SortOrder sortOrder) {
 		try {
-			String id = sortOrder.get_id();
-			String rev = sortOrder.get_rev();
+			SortOrder oldSortOrder = getSortOrder(sortOrder.getSessionId(), sortOrder.getQuestionVariant(), sortOrder.getSubject());
 			Document d = new Document();
 
-			if (null != id) {
+			String id = "";
+			String rev = "";
+			if (oldSortOrder != null) {
+				id = oldSortOrder.get_id();
+				rev = oldSortOrder.get_rev();
 				d = database.getDocument(id, rev);
 			}
 
diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java
index f75086ac5c023ad842d23f7df0fbfcbbcbc08f1a..f1c27686f548cc398d56359e96ef84617658cb1a 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -140,10 +140,23 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 
 		final Question result = databaseDao.saveQuestion(session, question);
         
-        SortOrder sortOrder = databaseDao.getSortOrder(session.get_id(), question.getQuestionVariant(), question.getSubject());
-        if (sortOrder != null) {
-            addQuestionToSortOrder(sortOrder, question);
-            databaseDao.createOrUpdateSortOrder(sortOrder);
+        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.getSubject());
+				SortOrder newQSortOrder = new SortOrder();
+				newQSortOrder.setSessionId(question.get_id());
+				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);
@@ -589,11 +602,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 			subjectSortOrder = createSortOrder(session, "lecture", "");
 		}
 		final User user = userService.getCurrentUser();
-		if (session.isCreator(user)) {
-			return getQuestionsBySortOrder(subjectSortOrder, false);
-		} else {
-			return getQuestionsBySortOrder(subjectSortOrder, true);
-		}
+		return getQuestionsBySortOrder(subjectSortOrder, session.isCreator(user));
 	}
 
 	@Override
@@ -617,11 +626,7 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
 			subjectSortOrder = createSortOrder(session, "preparation", "");
 		}
 		final User user = userService.getCurrentUser();
-		if (session.isCreator(user)) {
-			return getQuestionsBySortOrder(subjectSortOrder, false);
-		} else {
-			return getQuestionsBySortOrder(subjectSortOrder, true);
-		}
+		return getQuestionsBySortOrder(subjectSortOrder, session.isCreator(user));
 	}
 
 	private Session getSession(final String sessionkey) {
@@ -829,14 +834,14 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis
         return sortOrder.getSortType();
     }
     
-    public SortOrder addQuestionToSortOrder(SortOrder sortOrder, Question question) {
+    public SortOrder addToSortOrder(SortOrder sortOrder, String toBeAdded) {
         List<String> tmpList = sortOrder.getSortOrder();
-        tmpList.add(question.get_id());
+        tmpList.add(toBeAdded);
         sortOrder.setSortOrder(tmpList);
         if("alphabet".equals(sortOrder.getSortType())) {
             sortOrder = alphabeticalSort(sortOrder);
         }
-        return sortOrder;
+        return databaseDao.createOrUpdateSortOrder(sortOrder);
     }
     
     public List<Question> getQuestionsBySortOrder(SortOrder subjectSortOrder, boolean onlyActive) {