diff --git a/src/main/java/de/thm/arsnova/dao/CacheBuster.java b/src/main/java/de/thm/arsnova/dao/CacheBuster.java
index fc00491e1160a00d9387105e8cb0d6e16229d0b4..5d39e3997558d105ffe1c1205495867a4f99733a 100644
--- a/src/main/java/de/thm/arsnova/dao/CacheBuster.java
+++ b/src/main/java/de/thm/arsnova/dao/CacheBuster.java
@@ -20,6 +20,7 @@ package de.thm.arsnova.dao;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.stereotype.Component;
 
+import de.thm.arsnova.events.ChangeLearningProgress;
 import de.thm.arsnova.events.DeleteAllLectureAnswersEvent;
 import de.thm.arsnova.events.DeleteAllPreparationAnswersEvent;
 import de.thm.arsnova.events.DeleteAllQuestionsAnswersEvent;
@@ -77,4 +78,7 @@ public class CacheBuster implements ICacheBuster, NovaEventVisitor {
 
 	@Override
 	public void visit(StatusSessionEvent event) {}
+
+	@Override
+	public void visit(ChangeLearningProgress changeLearningProgress) {}
 }
diff --git a/src/main/java/de/thm/arsnova/domain/LearningProgressFactory.java b/src/main/java/de/thm/arsnova/domain/LearningProgressFactory.java
index ab378a4635b50a47828487fb0e837b60712b1d2a..d2936f57a0aa975df3fa09a353a23631982c2584 100644
--- a/src/main/java/de/thm/arsnova/domain/LearningProgressFactory.java
+++ b/src/main/java/de/thm/arsnova/domain/LearningProgressFactory.java
@@ -19,9 +19,12 @@ package de.thm.arsnova.domain;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.context.ApplicationEventPublisherAware;
 import org.springframework.stereotype.Component;
 
 import de.thm.arsnova.dao.IDatabaseDao;
+import de.thm.arsnova.events.ChangeLearningProgress;
 import de.thm.arsnova.events.DeleteAllLectureAnswersEvent;
 import de.thm.arsnova.events.DeleteAllPreparationAnswersEvent;
 import de.thm.arsnova.events.DeleteAllQuestionsAnswersEvent;
@@ -37,11 +40,13 @@ import de.thm.arsnova.events.NovaEventVisitor;
 import de.thm.arsnova.events.StatusSessionEvent;
 
 @Component
-public class LearningProgressFactory implements NovaEventVisitor, ILearningProgressFactory {
+public class LearningProgressFactory implements NovaEventVisitor, ILearningProgressFactory, ApplicationEventPublisherAware {
 
 	@Autowired
 	private IDatabaseDao databaseDao;
 
+	private ApplicationEventPublisher publisher;
+
 	@Override
 	public LearningProgress createFromType(String progressType) {
 		if (progressType.equals("questions")) {
@@ -59,31 +64,45 @@ public class LearningProgressFactory implements NovaEventVisitor, ILearningProgr
 
 	@CacheEvict(value = "learningprogress", key = "#event.Session")
 	@Override
-	public void visit(NewQuestionEvent event) {}
+	public void visit(NewQuestionEvent event) {
+		this.publisher.publishEvent(new ChangeLearningProgress(this, event.getSession()));
+	}
 
 	@CacheEvict(value = "learningprogress", key = "#event.Session")
 	@Override
-	public void visit(NewAnswerEvent event) {}
+	public void visit(NewAnswerEvent event) {
+		this.publisher.publishEvent(new ChangeLearningProgress(this, event.getSession()));
+	}
 
 	@CacheEvict(value = "learningprogress", key = "#event.Session")
 	@Override
-	public void visit(DeleteAnswerEvent event) {}
+	public void visit(DeleteAnswerEvent event) {
+		this.publisher.publishEvent(new ChangeLearningProgress(this, event.getSession()));
+	}
 
 	@CacheEvict(value = "learningprogress", key = "#event.Session")
 	@Override
-	public void visit(DeleteQuestionEvent event) {}
+	public void visit(DeleteQuestionEvent event) {
+		this.publisher.publishEvent(new ChangeLearningProgress(this, event.getSession()));
+	}
 
 	@CacheEvict(value = "learningprogress", key = "#event.Session")
 	@Override
-	public void visit(DeleteAllQuestionsAnswersEvent event) {}
+	public void visit(DeleteAllQuestionsAnswersEvent event) {
+		this.publisher.publishEvent(new ChangeLearningProgress(this, event.getSession()));
+	}
 
 	@CacheEvict(value = "learningprogress", key = "#event.Session")
 	@Override
-	public void visit(DeleteAllPreparationAnswersEvent event) {}
+	public void visit(DeleteAllPreparationAnswersEvent event) {
+		this.publisher.publishEvent(new ChangeLearningProgress(this, event.getSession()));
+	}
 
 	@CacheEvict(value = "learningprogress", key = "#event.Session")
 	@Override
-	public void visit(DeleteAllLectureAnswersEvent event) {}
+	public void visit(DeleteAllLectureAnswersEvent event) {
+		this.publisher.publishEvent(new ChangeLearningProgress(this, event.getSession()));
+	}
 
 	@Override
 	public void visit(NewFeedbackEvent newFeedbackEvent) {}
@@ -94,4 +113,12 @@ public class LearningProgressFactory implements NovaEventVisitor, ILearningProgr
 	@Override
 	public void visit(StatusSessionEvent statusSessionEvent) {}
 
+	@Override
+	public void visit(ChangeLearningProgress changeLearningProgress) {}
+
+	@Override
+	public void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
+		this.publisher = publisher;
+	}
+
 }
diff --git a/src/main/java/de/thm/arsnova/events/ChangeLearningProgress.java b/src/main/java/de/thm/arsnova/events/ChangeLearningProgress.java
new file mode 100644
index 0000000000000000000000000000000000000000..f0ddec67104ed9455c9bc98ff39fd6c359499a60
--- /dev/null
+++ b/src/main/java/de/thm/arsnova/events/ChangeLearningProgress.java
@@ -0,0 +1,35 @@
+/*
+ * 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.events;
+
+import de.thm.arsnova.entities.Session;
+
+public class ChangeLearningProgress extends SessionEvent {
+
+	private static final long serialVersionUID = 1L;
+
+	public ChangeLearningProgress(Object source, Session session) {
+		super(source, session);
+	}
+
+	@Override
+	public void accept(NovaEventVisitor visitor) {
+		visitor.visit(this);
+	}
+
+}
diff --git a/src/main/java/de/thm/arsnova/events/NovaEventVisitor.java b/src/main/java/de/thm/arsnova/events/NovaEventVisitor.java
index ab820bf2fa9c0661ffcfdf23a4a7a1053c2f4e57..c1eb3e68f7988f399457211ca87727073dff2ff7 100644
--- a/src/main/java/de/thm/arsnova/events/NovaEventVisitor.java
+++ b/src/main/java/de/thm/arsnova/events/NovaEventVisitor.java
@@ -43,4 +43,6 @@ public interface NovaEventVisitor {
 
 	void visit(StatusSessionEvent statusSessionEvent);
 
+	void visit(ChangeLearningProgress changeLearningProgress);
+
 }
diff --git a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
index e68d991781a86c7a4746c68ffec82002a20085dc..f8d7b6a580d879189a833945f56fc0176f37a99e 100644
--- a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
+++ b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
@@ -49,6 +49,7 @@ import com.corundumstudio.socketio.protocol.PacketType;
 import de.thm.arsnova.entities.InterposedQuestion;
 import de.thm.arsnova.entities.User;
 import de.thm.arsnova.entities.transport.LearningProgressType;
+import de.thm.arsnova.events.ChangeLearningProgress;
 import de.thm.arsnova.events.DeleteAllLectureAnswersEvent;
 import de.thm.arsnova.events.DeleteAllPreparationAnswersEvent;
 import de.thm.arsnova.events.DeleteAllQuestionsAnswersEvent;
@@ -518,4 +519,9 @@ public class ARSnovaSocketIOServer implements ARSnovaSocket, NovaEventVisitor {
 	public void visit(StatusSessionEvent event) {
 		this.reportSessionStatus(event.getSession().getKeyword(), event.getSession().isActive());
 	}
+
+	@Override
+	public void visit(ChangeLearningProgress event) {
+		broadcastInSession(event.getSession().getKeyword(), "learningProgressChange", null);
+	}
 }