diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java
index 525bd65ddea5469aed9cca1da4301d66c3749d3a..b8443784bf35398a46b3845e246b7f97b5ae019e 100644
--- a/src/main/java/de/thm/arsnova/controller/SessionController.java
+++ b/src/main/java/de/thm/arsnova/controller/SessionController.java
@@ -191,6 +191,24 @@ public class SessionController extends AbstractController {
 		return null;
 	}
 
+	@RequestMapping(value = "/{sessionkey}/learningprogress", method = RequestMethod.GET)
+	@ResponseBody
+	public final int learningProgress(
+			@PathVariable final String sessionkey,
+			final HttpServletResponse response
+	) {
+		return sessionService.getLearningProgress(sessionkey);
+	}
+
+	@RequestMapping(value = "/{sessionkey}/mylearningprogress", method = RequestMethod.GET)
+	@ResponseBody
+	public final int myLearningProgress(
+			@PathVariable final String sessionkey,
+			final HttpServletResponse response
+	) {
+		return sessionService.getMyLearningProgress(sessionkey);
+	}
+
 	/* internal redirections */
 
 	@RequestMapping(value = "/{sessionKey}/lecturerquestion")
diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
index 30089aa489467a55b2261995e134a695921eec12..4e5e0d77f08edf70ae65994935167f71d2c0ecd1 100644
--- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
+++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java
@@ -926,6 +926,7 @@ public class CouchDBDao implements IDatabaseDao {
 			a.put("questionId", answer.getQuestionId());
 			a.put("answerSubject", answer.getAnswerSubject());
 			a.put("questionVariant", answer.getQuestionVariant());
+			a.put("questionValue", answer.getQuestionValue());
 			a.put("answerText", answer.getAnswerText());
 			a.put("timestamp", answer.getTimestamp());
 			a.put("user", user.getUsername());
@@ -949,6 +950,7 @@ public class CouchDBDao implements IDatabaseDao {
 			a.put("answerText", answer.getAnswerText());
 			a.put("timestamp", answer.getTimestamp());
 			a.put("abstention", answer.isAbstention());
+			a.put("questionValue", answer.getQuestionValue());
 			this.database.saveDocument(a);
 			answer.set_rev(a.getRev());
 			return answer;
@@ -1351,4 +1353,39 @@ public class CouchDBDao implements IDatabaseDao {
 			this.deleteAnswers(q);
 		}
 	}
+
+	@Override
+	public int getLearningProgress(Session session) {
+		NovaView courseView = new NovaView("learning_progress/course_value");
+		NovaView maximumView = new NovaView("learning_progress/maximum_value");
+		courseView.setKey(session.get_id());
+		maximumView.setKey(session.get_id());
+
+		return getProgressPercentage(courseView, maximumView);
+	}
+
+	@Override
+	public int getMyLearningProgress(Session session, User user) {
+		NovaView userView = new NovaView("learning_progress/user_value");
+		NovaView maximumView = new NovaView("learning_progress/maximum_value");
+		userView.setKey(session.get_id(), user.getUsername());
+		maximumView.setKey(session.get_id());
+
+		return getProgressPercentage(userView, maximumView);
+	}
+
+	private int getProgressPercentage(NovaView progressView, NovaView maximumView) {
+		List<Document> progressValue = this.getDatabase().view(progressView).getResults();
+		List<Document> maximumValue = this.getDatabase().view(maximumView).getResults();
+		if (maximumValue.isEmpty()) {
+			return 0;
+		}
+		int maximum = maximumValue.get(0).getInt("value");
+		int progress = 0;
+		if (!progressValue.isEmpty()) {
+			progress = progressValue.get(0).getInt("value");
+		}
+		int percentage = (int)((progress * 100.0f) / maximum);
+		return percentage < 0 ? 0 : percentage;
+	}
 }
diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
index b7f153c1f8487c8b9d2fa99fc4e0466a3f514b61..b4c9c3003b345bacdefed2fe06ed5113bb44d0a1 100644
--- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
+++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java
@@ -161,4 +161,8 @@ public interface IDatabaseDao {
 	void publishAllQuestions(Session session, boolean publish);
 
 	void deleteAllQuestionsAnswers(Session session);
+
+	int getLearningProgress(Session session);
+
+	int getMyLearningProgress(Session session, User user);
 }
diff --git a/src/main/java/de/thm/arsnova/entities/Answer.java b/src/main/java/de/thm/arsnova/entities/Answer.java
index aed482cfba76aac0f3f915fcba3d21b117af4579..d2361ed901256dfb1906f059d87ef92d6ffea750 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 answerText;
 	private String answerSubject;
 	private String questionVariant;
+	private int questionValue;
 	private int piRound;
 	private String user;
 	private long timestamp;
@@ -133,6 +134,14 @@ public class Answer {
 		this.questionVariant = questionVariant;
 	}
 
+	public int getQuestionValue() {
+		return questionValue;
+	}
+
+	public void setQuestionValue(int questionValue) {
+		this.questionValue = questionValue;
+	}
+
 	@Override
 	public final String toString() {
 		return "Answer type:'" + type + "'"
diff --git a/src/main/java/de/thm/arsnova/entities/PossibleAnswer.java b/src/main/java/de/thm/arsnova/entities/PossibleAnswer.java
index acfea0d3de09a13c2d1e469de0963c85714d110d..ebc36f98e9c2f88d9ac05668ae808a01170289fb 100644
--- a/src/main/java/de/thm/arsnova/entities/PossibleAnswer.java
+++ b/src/main/java/de/thm/arsnova/entities/PossibleAnswer.java
@@ -23,6 +23,7 @@ public class PossibleAnswer {
 	private String id;
 	private String text;
 	private boolean correct;
+	private int value;
 
 	public String getId() {
 		return this.id;
@@ -48,6 +49,14 @@ public class PossibleAnswer {
 		this.correct = correct;
 	}
 
+	public int getValue() {
+		return value;
+	}
+
+	public void setValue(int value) {
+		this.value = value;
+	}
+
 	@Override
 	public String toString() {
 		return "PossibleAnswer [id=" + id + ", text=" + text + ", correct=" + correct + "]";
diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java
index d868e4bc1b75c68de8986bcdb7f5bb9fb2f85f7a..611f3ce91aece07210e2472c8f709316a05f80ad 100644
--- a/src/main/java/de/thm/arsnova/services/ISessionService.java
+++ b/src/main/java/de/thm/arsnova/services/ISessionService.java
@@ -51,4 +51,8 @@ public interface ISessionService {
 	Session updateSession(String sessionkey, Session session);
 
 	void deleteSession(String sessionkey, User user);
+
+	int getLearningProgress(String sessionkey);
+
+	int getMyLearningProgress(String sessionkey);
 }
diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java
index e9e6af9b97eb11a115f681484eebdfca9a5ecc57..205ee49b743cfafe17347bbed23d3c8deca2323e 100644
--- a/src/main/java/de/thm/arsnova/services/SessionService.java
+++ b/src/main/java/de/thm/arsnova/services/SessionService.java
@@ -256,4 +256,19 @@ public class SessionService implements ISessionService {
 		}
 		databaseDao.deleteSession(session);
 	}
+
+	@Override
+	@Authenticated
+	public int getLearningProgress(String sessionkey) {
+		Session session = databaseDao.getSession(sessionkey);
+		return databaseDao.getLearningProgress(session);
+	}
+
+	@Override
+	@Authenticated
+	public int getMyLearningProgress(String sessionkey) {
+		Session session = databaseDao.getSession(sessionkey);
+		User user = userService.getCurrentUser();
+		return databaseDao.getMyLearningProgress(session, user);
+	}
 }
diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
index 8e354540801597bbedda9e3cf505295dcf207b4f..bfd23302b147be58f012b22e2b8dcec6380d9c35 100644
--- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
+++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java
@@ -497,4 +497,16 @@ public class StubDatabaseDao implements IDatabaseDao {
 		// TODO Auto-generated method stub
 		
 	}
+
+	@Override
+	public int getLearningProgress(Session session) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	@Override
+	public int getMyLearningProgress(Session session, User user) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
 }