diff --git a/src/main/java/de/thm/arsnova/event/AfterCreationEvent.java b/src/main/java/de/thm/arsnova/event/AfterCreationEvent.java
index 6f99fd8552ba3b8c5e745c287e2f22c73eb358c6..5267b6d2efc083b58ba032e451df41817a739ad4 100644
--- a/src/main/java/de/thm/arsnova/event/AfterCreationEvent.java
+++ b/src/main/java/de/thm/arsnova/event/AfterCreationEvent.java
@@ -3,7 +3,7 @@ package de.thm.arsnova.event;
 import de.thm.arsnova.model.Entity;
 
 public class AfterCreationEvent<E extends Entity> extends CrudEvent<E> {
-	public AfterCreationEvent(final E source) {
-		super(source);
+	public AfterCreationEvent(final Object source, final E entity) {
+		super(source, entity);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/event/AfterDeletionEvent.java b/src/main/java/de/thm/arsnova/event/AfterDeletionEvent.java
index 67893207a13004fc3bc8e9f0dc49d0dda89e1a68..34115a7442a128dbdcca848318017f1b1001dc3b 100644
--- a/src/main/java/de/thm/arsnova/event/AfterDeletionEvent.java
+++ b/src/main/java/de/thm/arsnova/event/AfterDeletionEvent.java
@@ -3,7 +3,7 @@ package de.thm.arsnova.event;
 import de.thm.arsnova.model.Entity;
 
 public class AfterDeletionEvent<E extends Entity> extends CrudEvent<E> {
-	public AfterDeletionEvent(final E source) {
-		super(source);
+	public AfterDeletionEvent(final Object source, final E entity) {
+		super(source, entity);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/event/AfterPatchEvent.java b/src/main/java/de/thm/arsnova/event/AfterPatchEvent.java
index 26382107409030433cf7d33afa72b1e1f64fcce1..4b73660d36aef3cb763d09f099dbc81535c8a700 100644
--- a/src/main/java/de/thm/arsnova/event/AfterPatchEvent.java
+++ b/src/main/java/de/thm/arsnova/event/AfterPatchEvent.java
@@ -3,7 +3,7 @@ package de.thm.arsnova.event;
 import de.thm.arsnova.model.Entity;
 
 public class AfterPatchEvent<E extends Entity> extends AfterUpdateEvent<E> {
-	public AfterPatchEvent(final E source) {
-		super(source);
+	public AfterPatchEvent(final Object source, final E entity) {
+		super(source, entity);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/event/AfterUpdateEvent.java b/src/main/java/de/thm/arsnova/event/AfterUpdateEvent.java
index b30f3958a414b4e7e2b1f42f09412a2fb92051be..702173630447bc819fe8bf66771a64c56e8b584d 100644
--- a/src/main/java/de/thm/arsnova/event/AfterUpdateEvent.java
+++ b/src/main/java/de/thm/arsnova/event/AfterUpdateEvent.java
@@ -3,7 +3,7 @@ package de.thm.arsnova.event;
 import de.thm.arsnova.model.Entity;
 
 public class AfterUpdateEvent<E extends Entity> extends CrudEvent<E> {
-	public AfterUpdateEvent(final E source) {
-		super(source);
+	public AfterUpdateEvent(final Object source, final E entity) {
+		super(source, entity);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/event/BeforeCreationEvent.java b/src/main/java/de/thm/arsnova/event/BeforeCreationEvent.java
index 42d5524f349374f7613ea7d030e8dc537f7b56a7..7235cb4c7518b5e01c70c5a1b146d03756386e11 100644
--- a/src/main/java/de/thm/arsnova/event/BeforeCreationEvent.java
+++ b/src/main/java/de/thm/arsnova/event/BeforeCreationEvent.java
@@ -3,7 +3,7 @@ package de.thm.arsnova.event;
 import de.thm.arsnova.model.Entity;
 
 public class BeforeCreationEvent<E extends Entity> extends CrudEvent<E> {
-	public BeforeCreationEvent(final E source) {
-		super(source);
+	public BeforeCreationEvent(final Object source, final E entity) {
+		super(source, entity);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/event/BeforeDeletionEvent.java b/src/main/java/de/thm/arsnova/event/BeforeDeletionEvent.java
index 0a13bef26ba234ff52e0d9b2fcc7b115592ac670..fac150106ed5900eaa743d038a82f138e8fc9042 100644
--- a/src/main/java/de/thm/arsnova/event/BeforeDeletionEvent.java
+++ b/src/main/java/de/thm/arsnova/event/BeforeDeletionEvent.java
@@ -3,7 +3,7 @@ package de.thm.arsnova.event;
 import de.thm.arsnova.model.Entity;
 
 public class BeforeDeletionEvent<E extends Entity> extends CrudEvent<E> {
-	public BeforeDeletionEvent(final E source) {
-		super(source);
+	public BeforeDeletionEvent(final Object source, final E entity) {
+		super(source, entity);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/event/BeforePatchEvent.java b/src/main/java/de/thm/arsnova/event/BeforePatchEvent.java
index 871dc6bfd20ee2db688ca0c688ab799cabb9750f..82eee8540dd42629a35834dbb7f365e962599fb5 100644
--- a/src/main/java/de/thm/arsnova/event/BeforePatchEvent.java
+++ b/src/main/java/de/thm/arsnova/event/BeforePatchEvent.java
@@ -3,7 +3,7 @@ package de.thm.arsnova.event;
 import de.thm.arsnova.model.Entity;
 
 public class BeforePatchEvent<E extends Entity> extends BeforeUpdateEvent<E> {
-	public BeforePatchEvent(final E source) {
-		super(source);
+	public BeforePatchEvent(final Object source, final E entity) {
+		super(source, entity);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/event/BeforeUpdateEvent.java b/src/main/java/de/thm/arsnova/event/BeforeUpdateEvent.java
index 81c74e675a330083d6f381e0a5a689c616a38ef6..65fc96e1009ca9a1423fbe596049af898124617f 100644
--- a/src/main/java/de/thm/arsnova/event/BeforeUpdateEvent.java
+++ b/src/main/java/de/thm/arsnova/event/BeforeUpdateEvent.java
@@ -3,7 +3,7 @@ package de.thm.arsnova.event;
 import de.thm.arsnova.model.Entity;
 
 public class BeforeUpdateEvent<E extends Entity> extends CrudEvent<E> {
-	public BeforeUpdateEvent(final E source) {
-		super(source);
+	public BeforeUpdateEvent(final Object source, final E entity) {
+		super(source, entity);
 	}
 }
diff --git a/src/main/java/de/thm/arsnova/event/CrudEvent.java b/src/main/java/de/thm/arsnova/event/CrudEvent.java
index 07d3bbb6fa8ec575b5824c85b1257c533b9b7822..e95cdea65db2b1a6aa4e7dfea2e6ecee74eadd15 100644
--- a/src/main/java/de/thm/arsnova/event/CrudEvent.java
+++ b/src/main/java/de/thm/arsnova/event/CrudEvent.java
@@ -6,13 +6,15 @@ import org.springframework.core.ResolvableType;
 import org.springframework.core.ResolvableTypeProvider;
 
 public abstract class CrudEvent<E extends Entity> extends ApplicationEvent implements ResolvableTypeProvider {
-	public CrudEvent(final E source) {
+	private E entity;
+
+	public CrudEvent(final Object source, final E entity) {
 		super(source);
+		this.entity = entity;
 	}
 
-	@Override
-	public E getSource() {
-		return (E) super.getSource();
+	public E getEntity() {
+		return entity;
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/service/AnswerServiceImpl.java b/src/main/java/de/thm/arsnova/service/AnswerServiceImpl.java
index fdbe22ff3653a0bd2c4db0e4bcbcd83399912203..bc0b146cb937bee6a1dca389b4c634e046b42a5c 100644
--- a/src/main/java/de/thm/arsnova/service/AnswerServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/AnswerServiceImpl.java
@@ -96,11 +96,11 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> implemen
 		}
 		try {
 			for (AnswerQueueElement e : elements) {
-				this.eventPublisher.publishEvent(new BeforeCreationEvent<>(e.getAnswer()));
+				this.eventPublisher.publishEvent(new BeforeCreationEvent<>(this, e.getAnswer()));
 			}
 			answerRepository.saveAll(answerList);
 			for (AnswerQueueElement e : elements) {
-				this.eventPublisher.publishEvent(new AfterCreationEvent<>(e.getAnswer()));
+				this.eventPublisher.publishEvent(new AfterCreationEvent<>(this, e.getAnswer()));
 			}
 		} catch (final DbAccessException e) {
 			logger.error("Could not bulk save answers from queue.", e);
@@ -375,9 +375,9 @@ public class AnswerServiceImpl extends DefaultEntityServiceImpl<Answer> implemen
 		answer.setCreatorId(user.getId());
 		answer.setContentId(content.getId());
 		answer.setRoomId(room.getId());
-		this.eventPublisher.publishEvent(new BeforeCreationEvent<>(realAnswer));
+		this.eventPublisher.publishEvent(new BeforeCreationEvent<>(this, realAnswer));
 		answerRepository.save(realAnswer);
-		this.eventPublisher.publishEvent(new AfterCreationEvent<>(realAnswer));
+		this.eventPublisher.publishEvent(new AfterCreationEvent<>(this, realAnswer));
 
 		return answer;
 	}
diff --git a/src/main/java/de/thm/arsnova/service/CommentServiceImpl.java b/src/main/java/de/thm/arsnova/service/CommentServiceImpl.java
index 48f055635662389bf974d7a68cde51d173113d75..91e7708ef82922b67b44d8a33183f1af1c6d83f8 100644
--- a/src/main/java/de/thm/arsnova/service/CommentServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/CommentServiceImpl.java
@@ -65,9 +65,9 @@ public class CommentServiceImpl extends DefaultEntityServiceImpl<Comment> implem
 		if (comment == null) {
 			throw new NotFoundException();
 		}
-		eventPublisher.publishEvent(new BeforeDeletionEvent<>(comment));
+		eventPublisher.publishEvent(new BeforeDeletionEvent<>(this, comment));
 		commentRepository.delete(comment);
-		eventPublisher.publishEvent(new AfterDeletionEvent<>(comment));
+		eventPublisher.publishEvent(new AfterDeletionEvent<>(this, comment));
 	}
 
 	@Override
diff --git a/src/main/java/de/thm/arsnova/service/ContentServiceImpl.java b/src/main/java/de/thm/arsnova/service/ContentServiceImpl.java
index f905d2b1a7668d7b3c6fb7c771209afc8538e1ab..fab8488d6ad775b45a585c0331539fa647ecaa8f 100644
--- a/src/main/java/de/thm/arsnova/service/ContentServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/ContentServiceImpl.java
@@ -194,9 +194,9 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 			newGroup.setContentIds(newContentIds);
 			room.getContentGroups().add(newGroup);
 		}
-		eventPublisher.publishEvent(new BeforeCreationEvent<>(content));
+		eventPublisher.publishEvent(new BeforeCreationEvent<>(this, content));
 		roomRepository.save(room);
-		eventPublisher.publishEvent(new AfterCreationEvent<>(content));
+		eventPublisher.publishEvent(new AfterCreationEvent<>(this, content));
 	}
 
 	@Override
@@ -289,9 +289,9 @@ public class ContentServiceImpl extends DefaultEntityServiceImpl<Content> implem
 
 		try {
 			final int count = answerRepository.deleteByContentId(contentId);
-			eventPublisher.publishEvent(new BeforeDeletionEvent<>(content));
+			eventPublisher.publishEvent(new BeforeDeletionEvent<>(this, content));
 			contentRepository.deleteById(contentId);
-			eventPublisher.publishEvent(new AfterDeletionEvent<>(content));
+			eventPublisher.publishEvent(new AfterDeletionEvent<>(this, content));
 			dbLogger.log("delete", "type", "content", "answerCount", count);
 		} catch (final IllegalArgumentException e) {
 			logger.error("Could not delete content {}.", contentId, e);
diff --git a/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java b/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java
index 3e1ab77461229d2f4f5247a7ea5b22f197e24c57..7767771a5bab29d30cb83cf5d9be39af4dac1629 100644
--- a/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/DefaultEntityServiceImpl.java
@@ -92,9 +92,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
 		entity.setCreationTimestamp(new Date());
 
 		prepareCreate(entity);
-		eventPublisher.publishEvent(new BeforeCreationEvent<>(entity));
+		eventPublisher.publishEvent(new BeforeCreationEvent<>(this, entity));
 		final T createdEntity = repository.save(entity);
-		eventPublisher.publishEvent(new AfterCreationEvent<>(createdEntity));
+		eventPublisher.publishEvent(new AfterCreationEvent<>(this, createdEntity));
 		finalizeCreate(entity);
 
 		return createdEntity;
@@ -129,9 +129,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
 		newEntity.setUpdateTimestamp(new Date());
 
 		prepareUpdate(newEntity);
-		eventPublisher.publishEvent(new BeforeUpdateEvent<>(newEntity));
+		eventPublisher.publishEvent(new BeforeUpdateEvent<>(this, newEntity));
 		final T updatedEntity = repository.save(newEntity);
-		eventPublisher.publishEvent(new AfterUpdateEvent<>(updatedEntity));
+		eventPublisher.publishEvent(new AfterUpdateEvent<>(this, updatedEntity));
 		finalizeUpdate(updatedEntity);
 
 		return updatedEntity;
@@ -170,9 +170,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
 		reader.readValue(tree);
 		entity.setUpdateTimestamp(new Date());
 		preparePatch(entity);
-		eventPublisher.publishEvent(new BeforePatchEvent<>(entity));
+		eventPublisher.publishEvent(new BeforePatchEvent<>(this, entity));
 		final T patchedEntity = repository.save(entity);
-		eventPublisher.publishEvent(new AfterPatchEvent<>(entity));
+		eventPublisher.publishEvent(new AfterPatchEvent<>(this, entity));
 
 		return patchedEntity;
 	}
@@ -193,7 +193,7 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
 			reader.readValue(tree);
 			entity.setUpdateTimestamp(new Date());
 			preparePatch(entity);
-			eventPublisher.publishEvent(new BeforePatchEvent<>(entity));
+			eventPublisher.publishEvent(new BeforePatchEvent<>(this, entity));
 		}
 
 		return repository.saveAll(entities);
@@ -212,9 +212,9 @@ public class DefaultEntityServiceImpl<T extends Entity> implements EntityService
 	@Override
 	@PreAuthorize("hasPermission(#entity, 'delete')")
 	public void delete(final T entity) {
-		eventPublisher.publishEvent(new BeforeDeletionEvent<>(entity));
+		eventPublisher.publishEvent(new BeforeDeletionEvent<>(this, entity));
 		repository.delete(entity);
-		eventPublisher.publishEvent(new AfterUpdateEvent<>(entity));
+		eventPublisher.publishEvent(new AfterUpdateEvent<>(this, entity));
 	}
 
 	/**
diff --git a/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java b/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java
index 9f7de91a136bece44c95a097d5c946d9b49cb656..83b06681be2f48bf1340ce33d184be14ecb77552 100644
--- a/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/RoomServiceImpl.java
@@ -455,9 +455,9 @@ public class RoomServiceImpl extends DefaultEntityServiceImpl<Room> implements R
 		count[2] = commentRepository.deleteByRoomId(room.getId());
 		count[1] = answerRepository.deleteByContentIds(contentIds);
 		count[0] = contentRepository.deleteByRoomId(room.getId());
-		this.eventPublisher.publishEvent(new BeforeDeletionEvent<>(room));
+		this.eventPublisher.publishEvent(new BeforeDeletionEvent<>(this, room));
 		roomRepository.delete(room);
-		this.eventPublisher.publishEvent(new AfterDeletionEvent<>(room));
+		this.eventPublisher.publishEvent(new AfterDeletionEvent<>(this, room));
 		logger.debug("Deleted room document {} and related data.", room.getId());
 		dbLogger.log("delete", "type", "session", "id", room.getId());
 
diff --git a/src/main/java/de/thm/arsnova/service/score/ScoreCalculatorFactoryImpl.java b/src/main/java/de/thm/arsnova/service/score/ScoreCalculatorFactoryImpl.java
index 46a50546d459772a98e6969dc703a5e488d3ca7e..4f29f03e70d65cb86e4acf9ba50a31d3e76d5443 100644
--- a/src/main/java/de/thm/arsnova/service/score/ScoreCalculatorFactoryImpl.java
+++ b/src/main/java/de/thm/arsnova/service/score/ScoreCalculatorFactoryImpl.java
@@ -56,7 +56,7 @@ public class ScoreCalculatorFactoryImpl implements ScoreCalculatorFactory, Appli
 	@CacheEvict(value = "score", key = "#event.Room")
 	@EventListener
 	public void handleAfterContentCreation(AfterCreationEvent<Content> event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSource().getRoomId()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getEntity().getRoomId()));
 	}
 
 	@CacheEvict(value = "score", key = "#event.Room")
@@ -86,19 +86,19 @@ public class ScoreCalculatorFactoryImpl implements ScoreCalculatorFactory, Appli
 	@CacheEvict(value = "score", key = "#event.Room")
 	@EventListener
 	public void handleNewAnswer(AfterCreationEvent<Answer> event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSource().getRoomId()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getEntity().getRoomId()));
 	}
 
 	@CacheEvict(value = "score", key = "#event.Room")
 	@EventListener
 	public void handleDeleteAnswer(AfterDeletionEvent<Answer> event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSource().getRoomId()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getEntity().getRoomId()));
 	}
 
 	@CacheEvict(value = "score", key = "#event.Room")
 	@EventListener
 	public void handleDeleteQuestion(AfterDeletionEvent<Content> event) {
-		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getSource().getRoomId()));
+		this.publisher.publishEvent(new ChangeScoreEvent(this, event.getEntity().getRoomId()));
 	}
 
 	@CacheEvict(value = "score", key = "#event.Room")
diff --git a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
index 8ec0ac0752b08fc868446ec6008a62a35fc6566d..8e99eca9e25362342d03d708d78117842626bf9c 100644
--- a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
+++ b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
@@ -493,7 +493,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 
 	@EventListener
 	public void handleAfterContentCreation(AfterCreationEvent<de.thm.arsnova.model.Content> event) {
-		this.reportContentAvailable(event.getSource().getId(), Collections.singletonList(event.getSource()));
+		this.reportContentAvailable(event.getEntity().getId(), Collections.singletonList(event.getEntity()));
 	}
 
 	@EventListener
@@ -518,16 +518,16 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 
 	@EventListener
 	public void handleAfterCommentCreation(AfterCreationEvent<Comment> event) {
-		this.reportCommentAvailable(event.getSource().getId(), event.getSource().getId());
+		this.reportCommentAvailable(event.getEntity().getId(), event.getEntity().getId());
 	}
 
 	@Async
 	@EventListener
 	@Timed
 	public void handleNewAnswer(AfterCreationEvent<Answer> event) {
-		final String roomId = event.getSource().getRoomId();
-		this.reportAnswersToContentAvailable(event.getSource().getRoomId(), event.getSource().getContentId());
-		broadcastInRoom(roomId, "countQuestionAnswersByQuestionId", answerService.countAnswersAndAbstentionsInternal(event.getSource().getContentId()));
+		final String roomId = event.getEntity().getRoomId();
+		this.reportAnswersToContentAvailable(event.getEntity().getRoomId(), event.getEntity().getContentId());
+		broadcastInRoom(roomId, "countQuestionAnswersByQuestionId", answerService.countAnswersAndAbstentionsInternal(event.getEntity().getContentId()));
 		/* FIXME: Content variant is ignored for now */
 		broadcastInRoom(roomId, "countLectureQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId));
 		broadcastInRoom(roomId, "countPreparationQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId));
@@ -546,8 +546,8 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 	@EventListener
 	@Timed
 	public void handleAfterAnswerDeletion(AfterDeletionEvent<Answer> event) {
-		final String roomId = event.getSource().getRoomId();
-		this.reportAnswersToContentAvailable(event.getSource().getRoomId(), event.getSource().getContentId());
+		final String roomId = event.getEntity().getRoomId();
+		this.reportAnswersToContentAvailable(event.getEntity().getRoomId(), event.getEntity().getContentId());
 		// We do not know which user's answer was deleted, so we can't update his 'unanswered' list of questions...
 		/* FIXME: Content variant is ignored for now */
 		broadcastInRoom(roomId, "countLectureQuestionAnswers", answerService.countTotalAnswersByRoomId(roomId));