diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseTreeController.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseTreeController.java
index d6b2a05e2d66890b82943202e7075a2006b921d2..6e6ea7e3e8a1d0f46be4f28c9426e69e2bc30943 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseTreeController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseTreeController.java
@@ -110,7 +110,9 @@ public class AssessmentCourseTreeController extends BasicController implements A
 	
 	@Override
 	protected void doDispose() {
-		//
+		if(stackPanel != null) {
+			stackPanel.removeListener(this);
+		}
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentToolController.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentToolController.java
index bc4ece695e21586438234823297a8626ca0465f9..3bb50e5cc3dc3684116bffbb4d77ffc9b22c0cfa 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentToolController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentToolController.java
@@ -224,7 +224,9 @@ public class AssessmentToolController extends MainLayoutBasicController implemen
 
 	@Override
 	protected void doDispose() {
-		//
+		if(stackPanel != null) {
+			stackPanel.removeListener(this);
+		}
 	}
 	
 	@Override
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java b/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java
index a494cee81670b17dfbdf3610fd1538d04afc82f7..8726b8259cf14d151559077b8a56959402a53c76 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java
@@ -555,6 +555,9 @@ public class IdentityListCourseNodeController extends FormBasicController
 
 	@Override
 	protected void doDispose() {
+		if(stackPanel != null) {
+			stackPanel.removeListener(this);
+		}
 		coordinatorManager.getCoordinator().getEventBus()
 			.deregisterFor(this, courseEntry.getOlatResource());
 	}
diff --git a/src/main/java/org/olat/course/nodes/iq/IQConfigurationController.java b/src/main/java/org/olat/course/nodes/iq/IQConfigurationController.java
index 640c8eb4ace61012f55286dd20eae7462890e28d..4298b02d37a96e19f9af52d728d592a4f4f7fc69 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQConfigurationController.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQConfigurationController.java
@@ -658,11 +658,11 @@ public class IQConfigurationController extends BasicController {
 		return repositoryManager.lookupRepositoryEntryBySoftkey(repoSoftkey, false);
 	}
 
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
-	 */
 	@Override
 	protected void doDispose() {
+		if(stackPanel != null) {
+			stackPanel.removeListener(this);
+		}
 		//child controllers registered with listenTo() get disposed in BasicController
 		if (previewLayoutCtr != null) {
 			previewLayoutCtr.dispose();
diff --git a/src/main/java/org/olat/course/run/CourseRuntimeController.java b/src/main/java/org/olat/course/run/CourseRuntimeController.java
index 88e4495e9eeab6ae9b7599207fff3ed29c5d123f..1029882403d73a6f83f144205bf58e8f7e9424c6 100644
--- a/src/main/java/org/olat/course/run/CourseRuntimeController.java
+++ b/src/main/java/org/olat/course/run/CourseRuntimeController.java
@@ -1037,20 +1037,28 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im
 	@Override
 	protected void cleanUp() {
 		removeAsListenerAndDispose(lifeCycleChangeCtr);
+		removeAsListenerAndDispose(assessmentModeCtrl);
+		removeAsListenerAndDispose(lecturesAdminCtrl);
 		removeAsListenerAndDispose(assessmentToolCtr);
 		removeAsListenerAndDispose(courseFolderCtrl);
 		removeAsListenerAndDispose(statisticsCtrl);
+		removeAsListenerAndDispose(remindersCtrl);
 		removeAsListenerAndDispose(databasesCtrl);
+		removeAsListenerAndDispose(lecturesCtrl);
 		removeAsListenerAndDispose(archiverCtrl);
 		removeAsListenerAndDispose(statsToolCtr);
 		removeAsListenerAndDispose(membersCtrl);
 		removeAsListenerAndDispose(areasCtrl);
 		removeAsListenerAndDispose(leaveDialogBox);
 		lifeCycleChangeCtr = null;
+		assessmentModeCtrl = null;
+		lecturesAdminCtrl = null;
 		assessmentToolCtr = null;
 		courseFolderCtrl = null;
 		statisticsCtrl = null;
+		remindersCtrl = null;
 		databasesCtrl = null;
+		lecturesCtrl = null;
 		archiverCtrl = null;
 		statsToolCtr = null;
 		membersCtrl = null;
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java
index ec0801fc92cddd1921b5b9ea1cd0292966080682..57566ba1fad0dca68f87825f9dfd6ad614b4f6e1 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java
@@ -274,6 +274,7 @@ public class CurriculumComposerController extends FormBasicController implements
 
 	@Override
 	protected void doDispose() {
+		toolbarPanel.removeListener(this);
 		if(!toolbarPanel.isToolbarEnabled()) {
 			toolbarPanel.setToolbarEnabled(true);
 		}
diff --git a/src/main/java/org/olat/modules/lecture/ui/TeacherOverviewController.java b/src/main/java/org/olat/modules/lecture/ui/TeacherOverviewController.java
index 94e4a49c84480f6d71dcd4806291ca99620b5bbc..c44e6cbe61b1edf41149107614ba5d1d166863f3 100644
--- a/src/main/java/org/olat/modules/lecture/ui/TeacherOverviewController.java
+++ b/src/main/java/org/olat/modules/lecture/ui/TeacherOverviewController.java
@@ -95,6 +95,14 @@ public class TeacherOverviewController extends AbstractTeacherOverviewController
 		super.initTables(ureq, withTeachers, withAssessment);
 	}
 
+	@Override
+	protected void doDispose() {
+		if(toolbarPanel != null) {
+			toolbarPanel.removeListener(this);
+		}
+		super.doDispose();
+	}
+
 	@Override
 	protected List<LectureBlockRow> getRows(LecturesBlockSearchParameters searchParams) {
 		Identity filterByTeacher = ((Boolean)allTeachersSwitch.getUserObject()).booleanValue() ? null : getIdentity();
diff --git a/src/main/java/org/olat/modules/portfolio/ui/BinderController.java b/src/main/java/org/olat/modules/portfolio/ui/BinderController.java
index 8c11a99351e4bd4a146e782ad61179135ac401d1..2e634f7227d0ef56e6329513618a318ae91b0439 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/BinderController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/BinderController.java
@@ -176,7 +176,9 @@ public class BinderController extends BasicController implements TooledControlle
 
 	@Override
 	protected void doDispose() {
-		//
+		if(stackPanel != null) {
+			stackPanel.removeListener(this);
+		}
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java b/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java
index 73a4a33d51df93dda8b6c4eb3dd4f4e90f7bd6b0..c30186f8d260bd4f52d1022cbc4ee77d2002d88e 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java
@@ -354,6 +354,9 @@ public class PageRunController extends BasicController implements TooledControll
 	
 	@Override
 	protected void doDispose() {
+		if(stackPanel != null) {
+			stackPanel.removeListener(this);
+		}
 		if (lockEntry != null && lockEntry.isSuccess()) {
 			// release lock
 			coordinator.getCoordinator().getLocker().releaseLock(lockEntry);
diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
index 813f607bac57a6dd1aae31da97c8ef2520986ad3..f48040ca05dc89a0222f09daf8fe0f3eb7a0ccaa 100644
--- a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
@@ -259,6 +259,14 @@ public class QuestionListController extends AbstractItemListController implement
 			bulkChange = uifactory.addFormLink("bulk.change", formLayout, Link.BUTTON);
 		}
 	}
+	
+	@Override
+	protected void doDispose() {
+		if(stackPanel != null) {
+			stackPanel.removeListener(this);
+		}
+		super.doDispose();
+	}
 
 	public QuestionItemCollection getItemCollection() {
 		return itemCollection;
diff --git a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java
index 2c32b5a2e53bdf359f349403b11672fcd4ff86c4..64a31ca32d7d765442657691d6c4a03e7b65b79a 100644
--- a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java
+++ b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java
@@ -210,7 +210,9 @@ public class TaxonomyTreeTableController extends FormBasicController implements
 
 	@Override
 	protected void doDispose() {
-		//
+		if(stackPanel != null) {
+			stackPanel.removeListener(this);
+		}
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/user/ui/organisation/OrganisationsStructureAdminController.java b/src/main/java/org/olat/user/ui/organisation/OrganisationsStructureAdminController.java
index 69439e536bbfb26a2e30a352f357fdc02933fce5..5561a74df4b635f11d3bcfe1d360b1479ae4710c 100644
--- a/src/main/java/org/olat/user/ui/organisation/OrganisationsStructureAdminController.java
+++ b/src/main/java/org/olat/user/ui/organisation/OrganisationsStructureAdminController.java
@@ -136,7 +136,9 @@ public class OrganisationsStructureAdminController extends FormBasicController i
 
 	@Override
 	protected void doDispose() {
-		//
+		if(stackPanel != null) {
+			stackPanel.removeListener(this);
+		}
 	}
 	
 	private void loadModel(boolean reset) {