diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 28b267e43898678ae939d10a3b2d693be99fea36..e353eb954e7946d3834adc8583bbdf410a338c29 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -250,6 +250,10 @@ public class CouchDBDao implements IDatabaseDao {
 				);
 				question.setPossibleAnswers(new ArrayList<PossibleAnswer>(answers));
 				question.setSessionKeyword(this.getSessionKeyword(question.getSessionId()));
+				if (!"freetext".equals(question.getQuestionType()) && 0 == question.getPiRound()) {
+					/* needed for legacy questions whose piRound property has not been set */
+					question.setPiRound(1);
+				}
 				result.add(question);
 			}
 
@@ -558,6 +562,7 @@ public class CouchDBDao implements IDatabaseDao {
 		q.put("releasedFor", question.getReleasedFor());
 		q.put("possibleAnswers", question.getPossibleAnswers());
 		q.put("noCorrect", question.isNoCorrect());
+		q.put("piRound", question.getPiRound());
 		q.put("showStatistic", question.isShowStatistic());
 		q.put("showAnswer", question.isShowAnswer());
 		try {
@@ -581,6 +586,7 @@ public class CouchDBDao implements IDatabaseDao {
 			q.put("releasedFor", question.getReleasedFor());
 			q.put("possibleAnswers", question.getPossibleAnswers());
 			q.put("noCorrect", question.isNoCorrect());
+			q.put("piRound", question.getPiRound());
 			q.put("showStatistic", question.isShowStatistic());
 			q.put("showAnswer", question.isShowAnswer());
 			this.database.saveDocument(q);
@@ -825,21 +831,39 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final Answer getMyAnswer(final String questionId) {
+	public final Answer getMyAnswer(final String questionId, int piRound) {
 		User user = userService.getCurrentUser();
 		if (user == null) {
 			throw new UnauthorizedException();
 		}
 
 		try {
-			View view = new View("answer/by_question_and_user");
-			view.setKey(
-					"[" + URLEncoder.encode(
-							"\"" + questionId + "\",\"" + user.getUsername() + "\"",
-							"UTF-8"
-					)
-					+ "]"
-			);
+			View view = new View("answer/by_question_and_user_and_piround");
+			if (2 == piRound) {
+				view.setKey(
+						"[" + URLEncoder.encode(
+								"\"" + questionId + "\",\"" + user.getUsername() + "\",2",
+								"UTF-8"
+						)
+						+ "]"
+				);
+			} else {
+				/* needed for legacy questions whose piRound property has not been set */
+				view.setStartKey(
+						"[" + URLEncoder.encode(
+								"\"" + questionId + "\",\"" + user.getUsername() + "\"",
+								"UTF-8"
+						)
+						+ "]"
+				);
+				view.setEndKey(
+						"[" + URLEncoder.encode(
+								"\"" + questionId + "\",\"" + user.getUsername() + "\",1",
+								"UTF-8"
+						)
+						+ "]"
+				);
+			}
 			ViewResults results = this.getDatabase().view(view);
 			if (results.getResults().isEmpty()) {
 				return null;
@@ -859,11 +883,11 @@ public class CouchDBDao implements IDatabaseDao {
 	}
 
 	@Override
-	public final List<Answer> getAnswers(final String questionId) {
+	public final List<Answer> getAnswers(final String questionId, int piRound) {
 		try {
-			View view = new View("skill_question/count_answers");
-			view.setStartKey("[" + URLEncoder.encode("\"" + questionId + "\"", "UTF-8") + "]");
-			view.setEndKey("[" + URLEncoder.encode("\"" + questionId + "\",{}", "UTF-8") + "]");
+			View view = new View("skill_question/count_answers_by_question_and_piround");
+			view.setStartKey("[" + URLEncoder.encode("\"" + questionId + "\"," + piRound, "UTF-8") + "]");
+			view.setEndKey("[" + URLEncoder.encode("\"" + questionId + "\"," + piRound + ",{}", "UTF-8") + "]");
 			view.setGroup(true);
 			ViewResults results = this.getDatabase().view(view);
 			List<Answer> answers = new ArrayList<Answer>();
@@ -871,8 +895,8 @@ public class CouchDBDao implements IDatabaseDao {
 				Answer a = new Answer();
 				a.setAnswerCount(d.getInt("value"));
 				a.setQuestionId(d.getJSONObject().getJSONArray("key").getString(0));
-				a.setAnswerText(d.getJSONObject().getJSONArray("key").getString(1));
-				a.setAnswerSubject(d.getJSONObject().getJSONArray("key").getString(2));
+				a.setPiRound(d.getJSONObject().getJSONArray("key").getInt(1));
+				a.setAnswerText(d.getJSONObject().getJSONArray("key").getString(2));
 				answers.add(a);
 			}
 			return answers;
@@ -1312,6 +1336,7 @@ public class CouchDBDao implements IDatabaseDao {
 			a.put("answerText", answer.getAnswerText());
 			a.put("timestamp", answer.getTimestamp());
 			a.put("user", user.getUsername());
+			a.put("piRound", answer.getPiRound());
 			this.database.saveDocument(a);
 			answer.set_id(a.getId());
 			answer.set_rev(a.getRev());
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index 8f1fc5cc74b9f1d6c15f01ab0777c98fc1b8951e..adfca01274f41cf07040c5b5d9c70f0ca5e486b0 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -72,9 +72,9 @@ public interface IDatabaseDao {
 
 	List<String> getUnAnsweredQuestions(Session session, User user);
 
-	Answer getMyAnswer(String questionId);
+	Answer getMyAnswer(String questionId, int piRound);
 
-	List<Answer> getAnswers(String questionId);
+	List<Answer> getAnswers(String questionId, int piRound);
 
 	int getAnswerCount(String questionId);
 
diff --git a/src/main/java/de/thm/arsnova/entities/Answer.java b/src/main/java/de/thm/arsnova/entities/Answer.java
index 3438bb14b7dc3414befd8a880c16280a81b86868..273d5942683d2aea489c03f336b8d869ac2b2a8a 100644
--- a/src/main/java/de/thm/arsnova/entities/Answer.java
+++ b/src/main/java/de/thm/arsnova/entities/Answer.java
@@ -10,6 +10,7 @@ public class Answer {
 	private String questionId;
 	private String answerText;
 	private String answerSubject;
+	private int piRound;
 	private String user;
 	private long timestamp;
 	private int answerCount;
@@ -74,6 +75,14 @@ public class Answer {
 		this.answerSubject = answerSubject;
 	}
 
+	public int getPiRound() {
+		return piRound;
+	}
+
+	public void setPiRound(int piRound) {
+		this.piRound = piRound;
+	}
+
 	public final String getUser() {
 		return user;
 	}
diff --git a/src/main/java/de/thm/arsnova/entities/Question.java b/src/main/java/de/thm/arsnova/entities/Question.java
index 5e4249f35ca6296641392cc776d58a077086cb5b..ee0b29eafcb3295678622d070fb14095d6ec2aab 100644
--- a/src/main/java/de/thm/arsnova/entities/Question.java
+++ b/src/main/java/de/thm/arsnova/entities/Question.java
@@ -36,6 +36,7 @@ public class Question {
 	private long timestamp;
 	private int number;
 	private int duration;
+	private int piRound;
 	private boolean showStatistic; // sic
 	private boolean showAnswer;
 	private String _id;
@@ -153,6 +154,14 @@ public class Question {
 		this.duration = duration;
 	}
 
+	public int getPiRound() {
+		return piRound;
+	}
+
+	public void setPiRound(int piRound) {
+		this.piRound = piRound;
+	}
+
 	public boolean isShowStatistic() {
 		return showStatistic;
 	}
diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java
index 444d3c01d7d675c85a0fc7c6df13eb3f43837fbb..0cd315013ed1a82a38c6a45408520f2769f3aa49 100644
--- a/src/main/java/de/thm/arsnova/services/IQuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java
@@ -45,6 +45,8 @@ public interface IQuestionService {
 
 	Answer getMyAnswer(String questionId);
 
+	List<Answer> getAnswers(String questionId, int piRound);
+
 	List<Answer> getAnswers(String questionId);
 
 	int getAnswerCount(String questionId);
diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java
index ed2a816bad38b6221342a25e83c4921d1ed737b6..c07105664e80913b339a77d2450a0614f4565b2e 100644
--- a/src/main/java/de/thm/arsnova/services/QuestionService.java
+++ b/src/main/java/de/thm/arsnova/services/QuestionService.java
@@ -76,6 +76,13 @@ public class QuestionService implements IQuestionService {
 	public Question saveQuestion(Question question) {
 		Session session = this.databaseDao.getSessionFromKeyword(question.getSessionKeyword());
 		question.setSessionId(session.get_id());
+
+		if ("freetext".equals(question.getQuestionType())) {
+			question.setPiRound(0);
+		} else if (question.getPiRound() < 1 || question.getPiRound() > 2) {
+			question.setPiRound(1);
+		}
+
 		Question result = this.databaseDao.saveQuestion(session, question);
 		socketIoServer.reportLecturerQuestionAvailable(result.getSessionKeyword(), result.get_id());
 
@@ -100,7 +107,13 @@ public class QuestionService implements IQuestionService {
 	@Override
 	@Authenticated
 	public Question getQuestion(String id) {
-		return databaseDao.getQuestion(id);
+		Question result = databaseDao.getQuestion(id);
+		if (!"freetext".equals(result.getQuestionType()) && 0 == result.getPiRound()) {
+			/* needed for legacy questions whose piRound property has not been set */
+			result.setPiRound(1);
+		}
+
+		return result;
 	}
 
 	@Override
@@ -181,15 +194,26 @@ public class QuestionService implements IQuestionService {
 	@Override
 	@Authenticated
 	public Answer getMyAnswer(String questionId) {
-		return databaseDao.getMyAnswer(questionId);
+		Question question = getQuestion(questionId);
+
+		return databaseDao.getMyAnswer(questionId, question.getPiRound());
+	}
+
+	@Override
+	@Authenticated
+	public List<Answer> getAnswers(String questionId, int piRound) {
+		return databaseDao.getAnswers(questionId, piRound);
 	}
 
 	@Override
 	@Authenticated
 	public List<Answer> getAnswers(String questionId) {
-		return databaseDao.getAnswers(questionId);
+		Question question = getQuestion(questionId);
+
+		return getAnswers(questionId, question.getPiRound());
 	}
 
+	/* TODO add implementation for piRound */
 	@Override
 	@Authenticated
 	public int getAnswerCount(String questionId) {
@@ -205,6 +229,7 @@ public class QuestionService implements IQuestionService {
 	@Override
 	@Authenticated
 	public List<Answer> getMytAnswers(String sessionKey) {
+		/* TODO Peer Instruction implementation needed */
 		return databaseDao.getMyAnswers(sessionKey);
 	}
 
@@ -255,7 +280,8 @@ public class QuestionService implements IQuestionService {
 	@Override
 	@Authenticated
 	public void update(Question question) {
-		if (databaseDao.getQuestion(question.get_id()) == null) {
+		Question oldQuestion = databaseDao.getQuestion(question.get_id());
+		if (null == oldQuestion) {
 			throw new NotFoundException();
 		}
 
@@ -264,6 +290,13 @@ public class QuestionService implements IQuestionService {
 		if (user == null || session == null || !session.isCreator(user)) {
 			throw new UnauthorizedException();
 		}
+
+		if ("freetext".equals(question.getQuestionType())) {
+			question.setPiRound(0);
+		} else if (question.getPiRound() < 1 || question.getPiRound() > 2) {
+			question.setPiRound(oldQuestion.getPiRound() > 0 ? oldQuestion.getPiRound() : 1);
+		}
+
 		this.databaseDao.updateQuestion(question);
 	}
 
@@ -279,6 +312,12 @@ public class QuestionService implements IQuestionService {
 			throw new NotFoundException();
 		}
 
+		if ("freetext".equals(question.getQuestionType())) {
+			answer.setPiRound(0);
+		} else {
+			answer.setPiRound(question.getPiRound());
+		}
+
 		Answer result = this.databaseDao.saveAnswer(answer, user);
 		socketIoServer.reportAnswersToLecturerQuestionAvailable(question.getSessionKeyword(), question.get_id());
 
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index 5e8df373853d23fdb9d162b03b8a68622cc50b9f..2e8f7a9c9b527f40fc9bfab7fc6f6757fcfd11f1 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -244,13 +244,13 @@ public class StubDatabaseDao implements IDatabaseDao {
 	}
 
 	@Override
-	public Answer getMyAnswer(String questionId) {
+	public Answer getMyAnswer(String questionId, int piRound) {
 		// TODO Auto-generated method stub
 		return null;
 	}
 
 	@Override
-	public List<Answer> getAnswers(String questionId) {
+	public List<Answer> getAnswers(String questionId, int piRound) {
 		// TODO Auto-generated method stub
 		return null;
 	}