diff --git a/src/main/java/org/olat/modules/quality/manager/QualityReportAccessDAO.java b/src/main/java/org/olat/modules/quality/manager/QualityReportAccessDAO.java
index ca8efe04d88c1251848ebfd571ff8945addc6c19..814150d75cb54afd9dd2a52d04ba4ae1fd759778 100644
--- a/src/main/java/org/olat/modules/quality/manager/QualityReportAccessDAO.java
+++ b/src/main/java/org/olat/modules/quality/manager/QualityReportAccessDAO.java
@@ -127,6 +127,38 @@ class QualityReportAccessDAO {
 		}
 		query.executeUpdate();
 	}
+	
+	/**
+	 * Delete unappropriated report accesses. A report access is unappropriated, if
+	 * it has no access and the email should never be sent. Just a little
+	 * optimization.
+	 *
+	 * @param reference
+	 */
+	void deleteUnappropriated(QualityReportAccessReference reference) {
+		if (reference == null) return;
+		
+		QueryBuilder sb = new QueryBuilder(256);
+		sb.append("delete from qualityreportaccess as reportaccess");
+		sb.and().append("reportaccess.online = false");
+		sb.and().append("reportaccess.emailTrigger = '").append(EmailTrigger.never).append("'");
+		if (reference.getDataCollectionRef() != null) {
+			sb.and().append("reportaccess.dataCollection.key = :dataCollectionKey");
+		}
+		if (reference.getGeneratorRef() != null) {
+			sb.and().append("reportaccess.generator.key = :generatorKey");
+		}
+
+		Query query = dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString());
+		if (reference.getDataCollectionRef() != null) {
+			query.setParameter("dataCollectionKey", reference.getDataCollectionRef().getKey());
+		}
+		if (reference.getGeneratorRef() != null) {
+			query.setParameter("generatorKey", reference.getGeneratorRef().getKey());
+		}
+		query.executeUpdate();
+	}
 
 	List<QualityReportAccess> load(QualityReportAccessSearchParams searchParams) {
 		QueryBuilder sb = new QueryBuilder();
diff --git a/src/main/java/org/olat/modules/quality/manager/QualityServiceImpl.java b/src/main/java/org/olat/modules/quality/manager/QualityServiceImpl.java
index aa7a9936e230e5a3bf37ab6143006826403ad895..366fa0bc6d854464c3a9cf3698c2b0fab5275ea6 100644
--- a/src/main/java/org/olat/modules/quality/manager/QualityServiceImpl.java
+++ b/src/main/java/org/olat/modules/quality/manager/QualityServiceImpl.java
@@ -277,6 +277,7 @@ public class QualityServiceImpl
 			QualityDataCollectionStatus previousStatus = dataCollection.getStatus();
 			updatedDataCollection = dataCollectionDao.updateDataCollectionStatus(dataCollection, status);
 			if (QualityDataCollectionStatus.FINISHED.equals(status) && !QualityDataCollectionStatus.FINISHED.equals(previousStatus)) {
+				reportAccessDao.deleteUnappropriated(of(updatedDataCollection));
 				sendReportAccessMails(dataCollection);
 			}
 			log.info("Status of quality data collection updated to " + status + ". " + updatedDataCollection.toString());
diff --git a/src/test/java/org/olat/modules/quality/manager/QualityReportAccessDAOTest.java b/src/test/java/org/olat/modules/quality/manager/QualityReportAccessDAOTest.java
index 84c39a78827ce451f14ff26dd247405e4b993252..77b3a8effb71f3a016343c846075127545ff129a 100644
--- a/src/test/java/org/olat/modules/quality/manager/QualityReportAccessDAOTest.java
+++ b/src/test/java/org/olat/modules/quality/manager/QualityReportAccessDAOTest.java
@@ -226,6 +226,41 @@ public class QualityReportAccessDAOTest extends OlatTestCase {
 		assertThat(accessesOther).contains(reportAccessOther);
 	}
 	
+	@Test
+	public void shouldDeleteUnappropriate() {
+		QualityDataCollectionRef dc = qualityTestHelper.createDataCollection();
+		QualityReportAccess raAlways = sut.create(of(dc), QualityReportAccess.Type.TopicIdentity, null);
+		raAlways.setEmailTrigger(EmailTrigger.insufficient);
+		sut.save(raAlways);
+		QualityReportAccess raOnline = sut.create(of(dc), QualityReportAccess.Type.TopicIdentity, null);
+		raOnline.setOnline(true);
+		sut.save(raOnline);
+		QualityReportAccess raUnappropriated = sut.create(of(dc), QualityReportAccess.Type.TopicIdentity, null);
+		raUnappropriated.setOnline(false);
+		raUnappropriated.setEmailTrigger(EmailTrigger.never);
+		sut.save(raUnappropriated);
+		QualityDataCollectionRef dcOther = qualityTestHelper.createDataCollection();
+		QualityReportAccess raUnappropriatedOther = sut.create(of(dcOther), QualityReportAccess.Type.TopicIdentity, null);
+		raUnappropriatedOther.setOnline(false);
+		raUnappropriatedOther.setEmailTrigger(EmailTrigger.never);
+		sut.save(raUnappropriatedOther);
+		dbInstance.commitAndCloseSession();
+		
+		sut.deleteUnappropriated(of(dc));
+		dbInstance.commitAndCloseSession();
+		
+		QualityReportAccessSearchParams searchParams = new QualityReportAccessSearchParams();
+		searchParams.setReference(of(dc));
+		List<QualityReportAccess> accesses = sut.load(searchParams);
+		assertThat(accesses)
+				.containsExactlyInAnyOrder(raOnline, raAlways)
+				.doesNotContain(raUnappropriated);
+		
+		searchParams.setReference(of(dcOther));
+		List<QualityReportAccess> accessesOther = sut.load(searchParams);
+		assertThat(accessesOther).containsExactly(raUnappropriatedOther);
+	}
+	
 	@Test
 	public void shouldFilterByDataCollection() {
 		QualityDataCollectionRef dc = qualityTestHelper.createDataCollection();