From edddba9a6ca7eb885dc80463884c2d820eb23844 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Mon, 4 Nov 2019 19:08:33 +0100
Subject: [PATCH] OO-4254: check against disposed of modal controller too

---
 .../org/olat/admin/quota/QuotaController.java    |  4 ++--
 .../user/SystemRolesAndRightsController.java     |  2 +-
 .../org/olat/admin/user/UserAdminController.java |  2 +-
 .../calendar/ui/WeeklyCalendarController.java    |  4 ++--
 .../memberlist/ui/MembersMailController.java     |  2 +-
 .../LinkFileCombiCalloutController.java          |  2 +-
 .../vfs/ui/version/VersionMaintenanceForm.java   |  2 +-
 .../gui/control/controller/BasicController.java  |  4 ++++
 .../CloseableModalController.java                |  2 +-
 .../ui/mode/AssessmentModeEditController.java    | 10 +++++-----
 .../AssessmentModeForLectureEditController.java  |  2 +-
 ...cateAndEfficiencyStatementListController.java |  2 +-
 .../olat/course/editor/EditorMainController.java |  2 +-
 .../cl/ui/CheckListAssessmentController.java     |  4 ++--
 .../cl/ui/CheckListBoxListEditController.java    |  2 +-
 .../cl/ui/wizard/CheckboxListStepController.java |  2 +-
 .../nodes/gta/ui/GTAAssignedTaskController.java  |  2 +-
 ...GTACoachRevisionAndCorrectionsController.java |  2 +-
 .../gta/ui/GTACoachedGroupListController.java    |  2 +-
 .../GTACoachedParticipantGradingController.java  |  2 +-
 .../ui/GTACoachedParticipantListController.java  |  4 ++--
 .../nodes/gta/ui/GTAParticipantController.java   |  2 +-
 .../nodes/gta/ui/SubmitDocumentsController.java  |  4 ++--
 .../iq/IQIdentityListCourseNodeController.java   |  2 +-
 .../nodes/portfolio/PortfolioConfigForm.java     |  2 +-
 .../ui/main/AbstractMemberListController.java    |  2 +-
 .../olat/ims/qti21/ui/QTI21AdminController.java  |  2 +-
 .../ui/QTI21AssessedIdentityListController.java  |  2 +-
 .../ui/QTI21AssessmentDetailsController.java     |  2 +-
 ...tionIdentityAssessmentItemListController.java |  2 +-
 .../ui/AdobeConnectEditMeetingsController.java   |  4 ++--
 .../modules/ceditor/ui/PageEditorController.java |  2 +-
 .../ui/CurriculumComposerController.java         |  4 ++--
 .../CurriculumElementResourceListController.java |  2 +-
 ...urriculumElementUserManagementController.java |  2 +-
 .../ui/CurriculumListManagerController.java      |  4 ++--
 .../ui/CurriculumUserManagementController.java   |  2 +-
 .../gotomeeting/ui/EditTrainingController.java   |  2 +-
 .../gotomeeting/ui/GoToMeetingController.java    |  2 +-
 .../ui/GoToMeetingsEditController.java           |  4 ++--
 .../ui/GoToOrganizerListAdminController.java     |  6 +++---
 .../gotomeeting/ui/GoToRecordingsController.java |  2 +-
 .../ui/AppealListRepositoryController.java       |  4 ++--
 .../ui/LectureListRepositoryController.java      |  4 ++--
 .../ui/ParticipantLectureBlocksController.java   |  2 +-
 .../ui/ParticipantListRepositoryController.java  |  2 +-
 .../lecture/ui/TeacherRollCallController.java    |  4 ++--
 .../ui/coach/AbsenceNoticesListController.java   |  2 +-
 .../library/ui/LibraryAdminController.java       |  2 +-
 .../portfolio/ui/AbstractPageListController.java |  4 ++--
 .../portfolio/ui/AssignmentEditController.java   |  2 +-
 .../ui/AssignmentTemplatesEditController.java    |  6 +++---
 .../ui/AssignmentTemplatesListController.java    |  4 ++--
 .../ui/BinderDeliveryOptionsController.java      |  2 +-
 .../portfolio/ui/BinderListController.java       | 12 ++++++------
 .../portfolio/ui/BinderPageListController.java   |  8 ++++----
 .../portfolio/ui/DeletedBinderController.java    |  2 +-
 .../portfolio/ui/MediaCenterController.java      | 10 +++++-----
 .../portfolio/ui/MediaDetailsController.java     |  2 +-
 .../portfolio/ui/MyPageListController.java       |  2 +-
 .../modules/portfolio/ui/PageRunController.java  |  2 +-
 .../modules/portfolio/ui/PublishController.java  |  8 ++++----
 .../portfolio/ui/TableOfContentController.java   | 16 ++++++++--------
 .../DataCollectionConfigurationController.java   |  2 +-
 .../ui/IdentityCompetencesController.java        |  2 +-
 .../ui/TaxonomyLevelCompetenceController.java    |  4 ++--
 .../ui/TaxonomyLevelOverviewController.java      |  4 ++--
 .../taxonomy/ui/TaxonomyListAdminController.java |  2 +-
 .../taxonomy/ui/TaxonomyTreeTableController.java |  6 +++---
 .../video/ui/VideoChapterEditController.java     |  2 +-
 .../ui/author/AuthorListController.java          | 10 +++++-----
 .../list/RepositoryEntryDetailsController.java   |  2 +-
 .../ui/list/RepositoryEntryListController.java   |  2 +-
 .../user/ui/admin/UserSearchTableController.java |  2 +-
 .../OrganisationAdminConfigrationController.java |  2 +-
 .../OrganisationResourceListController.java      |  2 +-
 .../OrganisationTypesAdminController.java        |  4 ++--
 .../OrganisationUserManagementController.java    |  2 +-
 .../OrganisationsStructureAdminController.java   |  8 ++++----
 .../ui/role/RelationRolesAdminController.java    |  4 ++--
 80 files changed, 140 insertions(+), 136 deletions(-)

diff --git a/src/main/java/org/olat/admin/quota/QuotaController.java b/src/main/java/org/olat/admin/quota/QuotaController.java
index 3de15be5b98..6b58d0b7cd9 100644
--- a/src/main/java/org/olat/admin/quota/QuotaController.java
+++ b/src/main/java/org/olat/admin/quota/QuotaController.java
@@ -153,7 +153,7 @@ public class QuotaController extends BasicController {
 	}
 	
 	private void doEditQuota(UserRequest ureq, Quota q) {
-		if(quotaEditCtr != null) return;
+		if(guardModalController(quotaEditCtr)) return;
 		
 		quotaEditCtr = new GenericQuotaEditController(ureq, getWindowControl(), q, false);
 		listenTo(quotaEditCtr);
@@ -164,7 +164,7 @@ public class QuotaController extends BasicController {
 	}
 	
 	private void doAddQuota(UserRequest ureq) {
-		if(quotaEditCtr != null) return;
+		if(guardModalController(quotaEditCtr)) return;
 		
 		// start edit workflow in dedicated quota edit controller
 		removeAsListenerAndDispose(quotaEditCtr);
diff --git a/src/main/java/org/olat/admin/user/SystemRolesAndRightsController.java b/src/main/java/org/olat/admin/user/SystemRolesAndRightsController.java
index 1fe5981fdaa..11b6cf405f9 100644
--- a/src/main/java/org/olat/admin/user/SystemRolesAndRightsController.java
+++ b/src/main/java/org/olat/admin/user/SystemRolesAndRightsController.java
@@ -472,7 +472,7 @@ public class SystemRolesAndRightsController extends FormBasicController {
 	}
 	
 	private void doAddToOrganisation(UserRequest ureq) {
-		if(selectOrganisationCtrl != null) return;
+		if(guardModalController(selectOrganisationCtrl)) return;
 		
 		List<Organisation> upgradeableToOrganisations = new ArrayList<>(manageableOrganisations);
 		upgradeableToOrganisations.removeAll(organisations);
diff --git a/src/main/java/org/olat/admin/user/UserAdminController.java b/src/main/java/org/olat/admin/user/UserAdminController.java
index 05039608df2..419295838af 100644
--- a/src/main/java/org/olat/admin/user/UserAdminController.java
+++ b/src/main/java/org/olat/admin/user/UserAdminController.java
@@ -299,7 +299,7 @@ public class UserAdminController extends BasicController implements Activateable
 	}
 	
 	private void doExportData(UserRequest ureq) {
-		if(exportDataCtrl != null) return;
+		if(guardModalController(exportDataCtrl)) return;
 		
 		exportDataCtrl = new UserDataExportController(ureq, getWindowControl(), editedIdentity);
 		listenTo(exportDataCtrl);
diff --git a/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java b/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java
index 7f7e4fd0081..b5c41661836 100644
--- a/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java
+++ b/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java
@@ -758,7 +758,7 @@ public class WeeklyCalendarController extends FormBasicController implements Act
 	 * @param kalendarWrapper
 	 */
 	private void pushEditEventController(UserRequest ureq, KalendarEvent kalendarEvent, KalendarRenderWrapper kalendarWrapper) {
-		if(editController != null) return;
+		if(guardModalController(editController)) return;
 		
 		removeAsListenerAndDispose(cmc);
 		removeAsListenerAndDispose(editController);
@@ -789,7 +789,7 @@ public class WeeklyCalendarController extends FormBasicController implements Act
 	}
 	
 	private void pushAddEventController(CalendarGUIAddEvent addEvent, UserRequest ureq) {
-		if(editController != null || ureq.getUserSession().getRoles().isGuestOnly()) {
+		if(guardModalController(editController) || ureq.getUserSession().getRoles().isGuestOnly()) {
 			return;
 		}
 		removeAsListenerAndDispose(cmc);
diff --git a/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java b/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java
index 107e049e95c..5ded8166554 100644
--- a/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java
+++ b/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java
@@ -414,7 +414,7 @@ public class MembersMailController extends FormBasicController {
 	}
 
 	private void doChooseMember(UserRequest ureq) {
-		if(selectMemberCtrl != null || cmc != null) return;
+		if(guardModalController(selectMemberCtrl)) return;
 		
 		List<Member> owners = ownerList;
 		List<Member> coaches = coachList;
diff --git a/src/main/java/org/olat/core/commons/controllers/filechooser/LinkFileCombiCalloutController.java b/src/main/java/org/olat/core/commons/controllers/filechooser/LinkFileCombiCalloutController.java
index 68cf9c88845..e3e29a20a8a 100644
--- a/src/main/java/org/olat/core/commons/controllers/filechooser/LinkFileCombiCalloutController.java
+++ b/src/main/java/org/olat/core/commons/controllers/filechooser/LinkFileCombiCalloutController.java
@@ -383,7 +383,7 @@ public class LinkFileCombiCalloutController extends BasicController {
 	 * @param newModalContentController
 	 */
 	private void displayModal(Controller newModalContentController) {
-		if (newModalContentController == null) return;
+		if (guardModalController(newModalContentController)) return;
 		currentModalController = newModalContentController;
 		listenTo(currentModalController);
 		cmc = new CloseableModalController(getWindowControl(), "close", newModalContentController.getInitialComponent());
diff --git a/src/main/java/org/olat/core/commons/services/vfs/ui/version/VersionMaintenanceForm.java b/src/main/java/org/olat/core/commons/services/vfs/ui/version/VersionMaintenanceForm.java
index a87e27882f4..e1747f51c40 100644
--- a/src/main/java/org/olat/core/commons/services/vfs/ui/version/VersionMaintenanceForm.java
+++ b/src/main/java/org/olat/core/commons/services/vfs/ui/version/VersionMaintenanceForm.java
@@ -172,7 +172,7 @@ public class VersionMaintenanceForm extends FormBasicController implements Progr
 	}
 	
 	private void doOpenOrphansList(UserRequest ureq) {
-		if(orphansController  != null) return;
+		if(guardModalController(orphansController)) return;
 		
 		orphansController = new VersionsDeletedFileController(ureq, getWindowControl());			
 		listenTo(orphansController);
diff --git a/src/main/java/org/olat/core/gui/control/controller/BasicController.java b/src/main/java/org/olat/core/gui/control/controller/BasicController.java
index 4022f3c64d4..adc862c0cc5 100644
--- a/src/main/java/org/olat/core/gui/control/controller/BasicController.java
+++ b/src/main/java/org/olat/core/gui/control/controller/BasicController.java
@@ -179,6 +179,10 @@ public abstract class BasicController extends DefaultController {
 			controller.dispose();
 		}
 	}
+	
+	protected boolean guardModalController(Controller controller) {
+		return controller != null && !controller.isDisposed();
+	}
 
 	/**
 	 * convenience method: registers a mapper which will be automatically
diff --git a/src/main/java/org/olat/core/gui/control/generic/closablewrapper/CloseableModalController.java b/src/main/java/org/olat/core/gui/control/generic/closablewrapper/CloseableModalController.java
index 58a0287c85c..7895d2903da 100644
--- a/src/main/java/org/olat/core/gui/control/generic/closablewrapper/CloseableModalController.java
+++ b/src/main/java/org/olat/core/gui/control/generic/closablewrapper/CloseableModalController.java
@@ -85,7 +85,7 @@ public class CloseableModalController extends DefaultController {
 		 this(wControl, closeButtonText, modalContent, displayAsOverlay, title, true);
 	}
 
-	public CloseableModalController(WindowControl wControl, String closeButtonText, Component modalContent, boolean showCloseIcon) {
+	private CloseableModalController(WindowControl wControl, String closeButtonText, Component modalContent, boolean showCloseIcon) {
 		 this(wControl, closeButtonText, modalContent, true, null, showCloseIcon);
 	}
 
diff --git a/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeEditController.java b/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeEditController.java
index dc845aad461..17bb3671aa2 100644
--- a/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeEditController.java
+++ b/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeEditController.java
@@ -772,7 +772,7 @@ public class AssessmentModeEditController extends FormBasicController {
 	}
 	
 	private void doChooseElements(UserRequest ureq) {
-		if(chooseElementsCtrl != null) return;
+		if(guardModalController(chooseElementsCtrl)) return;
 
 		chooseElementsCtrl = new ChooseElementsController(ureq, getWindowControl(), elementKeys, courseOres);
 		listenTo(chooseElementsCtrl);
@@ -784,7 +784,7 @@ public class AssessmentModeEditController extends FormBasicController {
 	}
 	
 	private void doChooseStartElement(UserRequest ureq) {
-		if(chooseElementsCtrl != null) return;
+		if(guardModalController(chooseElementsCtrl)) return;
 		
 		List<String> allowedKeys = courseElementsRestrictionEl.isAtLeastSelected(1)
 				? new ArrayList<>(elementKeys) : null;
@@ -798,7 +798,7 @@ public class AssessmentModeEditController extends FormBasicController {
 	}
 	
 	private void doChooseAreas(UserRequest ureq) {
-		if(areaChooseCtrl != null) return;
+		if(guardModalController(areaChooseCtrl)) return;
 
 		ICourse course = CourseFactory.loadCourse(courseOres);
 		CourseGroupManager groupManager = course.getCourseEnvironment().getCourseGroupManager();
@@ -812,7 +812,7 @@ public class AssessmentModeEditController extends FormBasicController {
 	}
 	
 	private void doChooseGroups(UserRequest ureq) {
-		if(groupChooseCtrl != null) return;
+		if(guardModalController(groupChooseCtrl)) return;
 		
 		ICourse course = CourseFactory.loadCourse(courseOres);
 		CourseGroupManager groupManager = course.getCourseEnvironment().getCourseGroupManager();
@@ -826,7 +826,7 @@ public class AssessmentModeEditController extends FormBasicController {
 	}
 	
 	private void doChooseCurriculumElements(UserRequest ureq) {
-		if(curriculumElementChooseCtrl != null) return;
+		if(guardModalController(curriculumElementChooseCtrl)) return;
 		
 		ICourse course = CourseFactory.loadCourse(courseOres);
 		CourseGroupManager groupManager = course.getCourseEnvironment().getCourseGroupManager();
diff --git a/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeForLectureEditController.java b/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeForLectureEditController.java
index 0e899c4ce08..78d6364ab9e 100644
--- a/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeForLectureEditController.java
+++ b/src/main/java/org/olat/course/assessment/ui/mode/AssessmentModeForLectureEditController.java
@@ -402,7 +402,7 @@ public class AssessmentModeForLectureEditController extends FormBasicController
 	}
 	
 	private void doChooseElements(UserRequest ureq) {
-		if(chooseElementsCtrl != null) return;
+		if(guardModalController(chooseElementsCtrl)) return;
 
 		chooseElementsCtrl = new ChooseElementsController(ureq, getWindowControl(), elementKeys, courseOres);
 		listenTo(chooseElementsCtrl);
diff --git a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java
index 4379abf373f..5db70b48e6a 100644
--- a/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java
+++ b/src/main/java/org/olat/course/certificate/ui/CertificateAndEfficiencyStatementListController.java
@@ -396,7 +396,7 @@ public class CertificateAndEfficiencyStatementListController extends FormBasicCo
 	}
 
 	private void doCollectMedia(UserRequest ureq, String title, Long efficiencyStatementKey) {
-		if(collectorCtrl != null) return;
+		if(guardModalController(collectorCtrl)) return;
 		
 		EfficiencyStatement fullStatement = esm.getUserEfficiencyStatementByKey(efficiencyStatementKey);
 		collectorCtrl = new CollectArtefactController(ureq, getWindowControl(), fullStatement, mediaHandler, null);
diff --git a/src/main/java/org/olat/course/editor/EditorMainController.java b/src/main/java/org/olat/course/editor/EditorMainController.java
index c05ef7a5fad..026b64e2c6c 100644
--- a/src/main/java/org/olat/course/editor/EditorMainController.java
+++ b/src/main/java/org/olat/course/editor/EditorMainController.java
@@ -759,7 +759,7 @@ public class EditorMainController extends MainLayoutBasicController implements G
 	}
 	
 	private void doMove(UserRequest ureq, ICourse course, boolean copy) {
-		if(moveCopyController != null) return;
+		if(guardModalController(moveCopyController)) return;
 		
 		TreeNode tn = menuTree.getSelectedNode();
 		if (tn == null) {
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java
index d18830c9e74..1b80fe9f05c 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java
@@ -482,7 +482,7 @@ public class CheckListAssessmentController extends FormBasicController implement
 	}
 	
 	private void doOpenBoxAssessment(UserRequest ureq) {
-		if(boxAssessmentCtrl != null) return;
+		if(guardModalController(boxAssessmentCtrl)) return;
 
 		List<CheckListAssessmentRow> rows = model.getObjects();
 		boxAssessmentCtrl = new CheckboxAssessmentController(ureq, getWindowControl(), checkboxList, rows,
@@ -630,7 +630,7 @@ public class CheckListAssessmentController extends FormBasicController implement
 	}
 	
 	private void doOpenEdit(UserRequest ureq, CheckListAssessmentRow row) {
-		if(editCtrl != null) return;
+		if(guardModalController(editCtrl)) return;
 		
 		ICourse course = CourseFactory.loadCourse(courseOres);
 		Identity assessedIdentity = securityManager.loadIdentityByKey(row.getIdentityKey());
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListBoxListEditController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListBoxListEditController.java
index 287b671e1b2..51e90f0eb07 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListBoxListEditController.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListBoxListEditController.java
@@ -264,7 +264,7 @@ public class CheckListBoxListEditController extends FormBasicController {
 	}
 
 	private void doOpenEdit(UserRequest ureq, Checkbox checkbox, boolean newCheckbox, String title) {
-		if(editCtrl != null) return;
+		if(guardModalController(editCtrl)) return;
 		
 		Boolean hasScore = (Boolean)config.get(MSCourseNode.CONFIG_KEY_HAS_SCORE_FIELD);
 		boolean withScore = (hasScore == null || hasScore.booleanValue());	
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/wizard/CheckboxListStepController.java b/src/main/java/org/olat/course/nodes/cl/ui/wizard/CheckboxListStepController.java
index 4317dff2e74..b968bdf8979 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/wizard/CheckboxListStepController.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/wizard/CheckboxListStepController.java
@@ -192,7 +192,7 @@ public class CheckboxListStepController extends StepFormBasicController {
 	}
 
 	private void doOpenEdit(UserRequest ureq, Checkbox checkbox, boolean newCheckbox, String title) {
-		if(editCtrl != null) return;
+		if(guardModalController(editCtrl)) return;
 		
 		editCtrl = new CheckboxEditController(ureq, getWindowControl(), courseOres, checkbox, newCheckbox, true);
 		listenTo(editCtrl);
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTAAssignedTaskController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTAAssignedTaskController.java
index 00a3b3950cf..0f380edece5 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTAAssignedTaskController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTAAssignedTaskController.java
@@ -172,7 +172,7 @@ public class GTAAssignedTaskController extends BasicController {
 	}
 	
 	private void doPreview(UserRequest ureq) {
-		if(viewTaskCtrl != null) return;
+		if(guardModalController(viewTaskCtrl)) return;
 		
 		VFSContainer tasksContainer = gtaManager.getTasksContainer(courseEnv, gtaNode);
 		viewTaskCtrl = new SinglePageController(ureq, getWindowControl(), tasksContainer, taskFile.getName(),
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachRevisionAndCorrectionsController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachRevisionAndCorrectionsController.java
index 16118faf017..acca375e455 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachRevisionAndCorrectionsController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachRevisionAndCorrectionsController.java
@@ -323,7 +323,7 @@ public class GTACoachRevisionAndCorrectionsController extends BasicController im
 	}
 	
 	private void doConfirmReturnToRevisions(UserRequest ureq) {
-		if(confirmReturnToRevisionsCtrl != null) return;
+		if(guardModalController(confirmReturnToRevisionsCtrl)) return;
 		
 		confirmReturnToRevisionsCtrl = new ConfirmRevisionsController(ureq, getWindowControl(), assignedTask,
 				assessedIdentity, assessedGroup, gtaNode, courseEnv);
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedGroupListController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedGroupListController.java
index f3b160afb5a..22ced209374 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedGroupListController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedGroupListController.java
@@ -226,7 +226,7 @@ public class GTACoachedGroupListController extends GTACoachedListController {
 	}
 	
 	private void doEditDueDate(UserRequest ureq, CoachedGroupRow row) {
-		if(editDueDatesCtrl != null) return;
+		if(guardModalController(editDueDatesCtrl)) return;
 		
 		Task task;
 		BusinessGroup assessedGroup = row.getBusinessGroup();
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedParticipantGradingController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedParticipantGradingController.java
index d8a9fd10b84..2a5edacb68e 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedParticipantGradingController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedParticipantGradingController.java
@@ -173,7 +173,7 @@ public class GTACoachedParticipantGradingController extends BasicController {
 	}
 
 	private void doOpenAssessmentForm(UserRequest ureq) {
-		if(assessmentForm != null) return;//already open
+		if(guardModalController(assessmentForm)) return;//already open
 		
 		RepositoryEntry courseEntry = CourseFactory.loadCourse(courseOres).getCourseEnvironment().getCourseGroupManager().getCourseEntry();
 
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedParticipantListController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedParticipantListController.java
index 7916901ce4a..b5ec57d5e35 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedParticipantListController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTACoachedParticipantListController.java
@@ -392,7 +392,7 @@ public class GTACoachedParticipantListController extends GTACoachedListControlle
 	}
 	
 	private void doEditDueDate(UserRequest ureq, CoachedIdentityRow row) {
-		if(editDueDatesCtrl != null) return;
+		if(guardModalController(editDueDatesCtrl)) return;
 		
 		Task task;
 		Identity assessedIdentity = securityManager.loadIdentityByKey(row.getIdentity().getIdentityKey());
@@ -416,7 +416,7 @@ public class GTACoachedParticipantListController extends GTACoachedListControlle
 	}
 	
 	private void doEditMultipleDueDates(UserRequest ureq, List<CoachedIdentityRow> rows) {
-		if(editMultipleDueDatesCtrl != null) return;
+		if(guardModalController(editMultipleDueDatesCtrl)) return;
 		
 		if(rows.isEmpty()) {
 			showWarning("error.atleast.task");
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantController.java
index e1a2e4da7a2..b00e95fbd9c 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTAParticipantController.java
@@ -421,7 +421,7 @@ public class GTAParticipantController extends GTAAbstractController implements A
 	}
 	
 	private void doConfirmResetTask(UserRequest ureq, Task task) {
-		if(confirmResetTaskCtrl != null) return;
+		if(guardModalController(confirmResetTaskCtrl)) return;
 		confirmResetTaskCtrl = new ConfirmResetTaskController(ureq, getWindowControl(), task, gtaNode, courseEnv);
 		listenTo(confirmResetTaskCtrl);
 		
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java b/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java
index a098585916e..e422a91e82d 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java
@@ -386,7 +386,7 @@ class SubmitDocumentsController extends FormBasicController implements Activatea
 	}
 	
 	private void doView(UserRequest ureq, String filename) {
-		if(viewDocCtrl != null) return;
+		if(guardModalController(viewDocCtrl)) return;
 		
 		viewDocCtrl = new SinglePageController(ureq, getWindowControl(), documentsContainer, filename, false);
 		listenTo(viewDocCtrl);
@@ -463,7 +463,7 @@ class SubmitDocumentsController extends FormBasicController implements Activatea
 	}
 	
 	private void doOpenDocumentUpload(UserRequest ureq) {
-		if(uploadCtrl != null) return;
+		if(guardModalController(uploadCtrl)) return;
 		
 		if(maxDocs > 0 && maxDocs <= model.getRowCount()) {
 			showWarning("error.max.documents");
diff --git a/src/main/java/org/olat/course/nodes/iq/IQIdentityListCourseNodeController.java b/src/main/java/org/olat/course/nodes/iq/IQIdentityListCourseNodeController.java
index 73d1c47968e..fb2d2d8defb 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQIdentityListCourseNodeController.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQIdentityListCourseNodeController.java
@@ -402,7 +402,7 @@ public class IQIdentityListCourseNodeController extends IdentityListCourseNodeCo
 	}
 	
 	private void doValidateSignature(UserRequest ureq) {
-		if(validationCtrl != null) return;
+		if(guardModalController(validationCtrl)) return;
 		
 		validationCtrl = new ValidationXmlSignatureController(ureq, getWindowControl());
 		listenTo(validationCtrl);
diff --git a/src/main/java/org/olat/course/nodes/portfolio/PortfolioConfigForm.java b/src/main/java/org/olat/course/nodes/portfolio/PortfolioConfigForm.java
index c9efd2d8bc3..589795eb87f 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/PortfolioConfigForm.java
+++ b/src/main/java/org/olat/course/nodes/portfolio/PortfolioConfigForm.java
@@ -231,7 +231,7 @@ public class PortfolioConfigForm extends FormBasicController {
 	}
 	
 	private void doChangeTemplate(UserRequest ureq) {
-		if(searchController != null) return;
+		if(guardModalController(searchController)) return;
 		if (isDirty) {
 			showWarning("form.dirty");
 			return;
diff --git a/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java b/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java
index 1114be6bd8c..2d2c903a0f9 100644
--- a/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java
+++ b/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java
@@ -523,7 +523,7 @@ public abstract class AbstractMemberListController extends FormBasicController i
 	}
 	
 	protected void openEdit(UserRequest ureq, MemberRow member) {
-		if(editSingleMemberCtrl != null) return;
+		if(guardModalController(editSingleMemberCtrl)) return;
 		
 		Identity identity = securityManager.loadIdentityByKey(member.getIdentityKey());
 		editSingleMemberCtrl = new EditSingleMembershipController(ureq, getWindowControl(), identity, repoEntry, businessGroup, false, overrideManaged);
diff --git a/src/main/java/org/olat/ims/qti21/ui/QTI21AdminController.java b/src/main/java/org/olat/ims/qti21/ui/QTI21AdminController.java
index c81eab6f989..c7f69709f01 100644
--- a/src/main/java/org/olat/ims/qti21/ui/QTI21AdminController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/QTI21AdminController.java
@@ -235,7 +235,7 @@ public class QTI21AdminController extends FormBasicController {
 	}
 
 	private void doValidate(UserRequest ureq) {
-		if(validationCtrl != null) return;
+		if(guardModalController(validationCtrl)) return;
 		
 		validationCtrl = new ValidationXmlSignatureController(ureq, getWindowControl());
 		listenTo(validationCtrl);
diff --git a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessedIdentityListController.java b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessedIdentityListController.java
index 82ededb7f8c..e184e6d3a41 100644
--- a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessedIdentityListController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessedIdentityListController.java
@@ -120,7 +120,7 @@ public class QTI21AssessedIdentityListController extends AssessedIdentityListCon
 	}
 	
 	private void doResetData(UserRequest ureq) {
-		if(resetDataCtrl != null) return;
+		if(guardModalController(resetDataCtrl)) return;
 	
 		AssessmentToolOptions asOptions = getOptions();
 		resetDataCtrl = new QTI21ResetDataController(ureq, getWindowControl(), this.getRepositoryEntry(), asOptions);
diff --git a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java
index ccd6d30e718..fd05006c2e4 100644
--- a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java
@@ -516,7 +516,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
 	}
 
 	private void doOpenResult(UserRequest ureq, AssessmentTestSession session) {
-		if(resultCtrl != null) return;
+		if(guardModalController(resultCtrl)) return;
 		
 		//reload it to prevent lazy loading issues
 		session = qtiService.getAssessmentTestSession(session.getKey());
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemListController.java b/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemListController.java
index 5087e5b005b..11b122f920d 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemListController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemListController.java
@@ -316,7 +316,7 @@ public class CorrectionIdentityAssessmentItemListController extends FormBasicCon
 	
 	
 	private void doConfirmSaveTests(UserRequest ureq) {
-		if(confirmSaveTestCtrl != null) return;
+		if(guardModalController(confirmSaveTestCtrl)) return;
 		
 		int notCorrectedQuestions = 0;
 		List<CorrectionIdentityAssessmentItemRow> rows = tableModel.getObjects();
diff --git a/src/main/java/org/olat/modules/adobeconnect/ui/AdobeConnectEditMeetingsController.java b/src/main/java/org/olat/modules/adobeconnect/ui/AdobeConnectEditMeetingsController.java
index 593ac41fd02..624503d01dc 100644
--- a/src/main/java/org/olat/modules/adobeconnect/ui/AdobeConnectEditMeetingsController.java
+++ b/src/main/java/org/olat/modules/adobeconnect/ui/AdobeConnectEditMeetingsController.java
@@ -186,7 +186,7 @@ public class AdobeConnectEditMeetingsController extends FormBasicController {
 	}
 
 	private void doAddMeeting(UserRequest ureq) {
-		if(editMeetingCtlr != null) return;
+		if(guardModalController(editMeetingCtlr)) return;
 		
 		editMeetingCtlr = new EditAdobeConnectMeetingController(ureq, getWindowControl(), entry, subIdent, businessGroup, configuration);
 		listenTo(editMeetingCtlr);
@@ -198,7 +198,7 @@ public class AdobeConnectEditMeetingsController extends FormBasicController {
 	}
 	
 	private void doEditMeeting(UserRequest ureq, AdobeConnectMeeting meeting) {
-		if(editMeetingCtlr != null) return;
+		if(guardModalController(editMeetingCtlr)) return;
 		
 		editMeetingCtlr = new EditAdobeConnectMeetingController(ureq, getWindowControl(), meeting, configuration);
 		listenTo(editMeetingCtlr);
diff --git a/src/main/java/org/olat/modules/ceditor/ui/PageEditorController.java b/src/main/java/org/olat/modules/ceditor/ui/PageEditorController.java
index 2c2acb47849..b3d0d320372 100644
--- a/src/main/java/org/olat/modules/ceditor/ui/PageEditorController.java
+++ b/src/main/java/org/olat/modules/ceditor/ui/PageEditorController.java
@@ -307,7 +307,7 @@ public class PageEditorController extends BasicController {
 	}
 
 	private void doAddElement(UserRequest ureq, EditorFragment refenceFragment, PageElementHandler handler, PageElementTarget target, int column) {
-		if(addCtrl != null) return;
+		if(guardModalController(addCtrl)) return;
 		
 		if(handler instanceof InteractiveAddPageElementHandler) {
 			InteractiveAddPageElementHandler interactiveHandler = (InteractiveAddPageElementHandler)handler;
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 7f84447b50a..f880bc51eb6 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java
@@ -477,7 +477,7 @@ public class CurriculumComposerController extends FormBasicController implements
 	}
 	
 	private void doNewCurriculumElement(UserRequest ureq) {
-		if(newElementCtrl != null) return;
+		if(guardModalController(newElementCtrl)) return;
 
 		newElementCtrl = new EditCurriculumElementController(ureq, getWindowControl(), null, curriculum, secCallback);
 		listenTo(newElementCtrl);
@@ -661,7 +661,7 @@ public class CurriculumComposerController extends FormBasicController implements
 	}
 	
 	private void doConfirmDelete(UserRequest ureq, CurriculumElementRow row) {
-		if(confirmDeleteCtrl != null) return;
+		if(guardModalController(confirmDeleteCtrl)) return;
 		
 		confirmDeleteCtrl = new ConfirmCurriculumElementDeleteController(ureq, getWindowControl(), row);
 		listenTo(confirmDeleteCtrl);
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementResourceListController.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementResourceListController.java
index 39c77340188..0ad3b1a2714 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementResourceListController.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementResourceListController.java
@@ -228,7 +228,7 @@ public class CurriculumElementResourceListController extends FormBasicController
 	}
 	
 	private void doChooseResources(UserRequest ureq) {
-		if(repoSearchCtr != null) return;
+		if(guardModalController(repoSearchCtr)) return;
 		
 		Roles roles = ureq.getUserSession().getRoles();
 		boolean adminSearch = roles.hasRole(OrganisationRoles.administrator)
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementUserManagementController.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementUserManagementController.java
index 734df439eb4..e476f84d7fc 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementUserManagementController.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementUserManagementController.java
@@ -284,7 +284,7 @@ public class CurriculumElementUserManagementController extends FormBasicControll
 	}
 	
 	private void doSearchMember(UserRequest ureq, CurriculumRoles role) {
-		if(userSearchCtrl != null) return;
+		if(guardModalController(userSearchCtrl)) return;
 
 		userSearchCtrl = new UserSearchController(ureq, getWindowControl(), true, true, false);
 		userSearchCtrl.setUserObject(role);
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumListManagerController.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumListManagerController.java
index f4c4416bdc6..3da52184014 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumListManagerController.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumListManagerController.java
@@ -340,7 +340,7 @@ public class CurriculumListManagerController extends FormBasicController impleme
 	}
 	
 	private void doImportCurriculum(UserRequest ureq) {
-		if(importCurriculumCtrl != null) return;
+		if(guardModalController(importCurriculumCtrl)) return;
 
 		importCurriculumCtrl = new ImportCurriculumController(ureq, getWindowControl());
 		listenTo(importCurriculumCtrl);
@@ -351,7 +351,7 @@ public class CurriculumListManagerController extends FormBasicController impleme
 	}
 	
 	private void doNewCurriculum(UserRequest ureq) {
-		if(newCurriculumCtrl != null) return;
+		if(guardModalController(newCurriculumCtrl)) return;
 
 		newCurriculumCtrl = new EditCurriculumController(ureq, getWindowControl(), secCallback);
 		listenTo(newCurriculumCtrl);
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumUserManagementController.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumUserManagementController.java
index af4c14cc85e..c7fe81ea09d 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumUserManagementController.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumUserManagementController.java
@@ -272,7 +272,7 @@ public class CurriculumUserManagementController extends FormBasicController {
 	}
 	
 	private void doSearchMember(UserRequest ureq, CurriculumRoles role) {
-		if(userSearchCtrl != null) return;
+		if(guardModalController(userSearchCtrl)) return;
 
 		userSearchCtrl = new UserSearchController(ureq, getWindowControl(), true, true, false);
 		userSearchCtrl.setUserObject(role);
diff --git a/src/main/java/org/olat/modules/gotomeeting/ui/EditTrainingController.java b/src/main/java/org/olat/modules/gotomeeting/ui/EditTrainingController.java
index 0977a00c676..eaecd15f663 100644
--- a/src/main/java/org/olat/modules/gotomeeting/ui/EditTrainingController.java
+++ b/src/main/java/org/olat/modules/gotomeeting/ui/EditTrainingController.java
@@ -262,7 +262,7 @@ public class EditTrainingController extends FormBasicController {
 	}
 	
 	private void doAddPersonalAccount(UserRequest ureq) {
-		if(addOrganizerController != null) return;
+		if(guardModalController(addOrganizerController)) return;
 		
 		addOrganizerController = new LoginOrganizerController(ureq, getWindowControl(), getIdentity());
 		listenTo(addOrganizerController);
diff --git a/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingController.java b/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingController.java
index 8f624748cab..7ff4841ffc0 100644
--- a/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingController.java
+++ b/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingController.java
@@ -299,7 +299,7 @@ public class GoToMeetingController extends BasicController {
 	}
 	
 	private void doOpenRecordings(UserRequest ureq) {
-		if(recordingsCtrl != null) return;
+		if(guardModalController(recordingsCtrl)) return;
 		
 		recordingsCtrl = new GoToRecordingsController(ureq, getWindowControl(), meeting);
 		listenTo(recordingsCtrl);
diff --git a/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsEditController.java b/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsEditController.java
index 3f730e022a5..20adfb7b5f8 100644
--- a/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsEditController.java
+++ b/src/main/java/org/olat/modules/gotomeeting/ui/GoToMeetingsEditController.java
@@ -204,7 +204,7 @@ public class GoToMeetingsEditController extends FormBasicController {
 	}
 
 	private void doAddTraining(UserRequest ureq) {
-		if(editTrainingController != null) return;
+		if(guardModalController(editTrainingController)) return;
 		
 		editTrainingController = new EditTrainingController(ureq, getWindowControl(), entry, subIdent, businessGroup);
 		listenTo(editTrainingController);
@@ -216,7 +216,7 @@ public class GoToMeetingsEditController extends FormBasicController {
 	}
 	
 	private void doEditTraining(UserRequest ureq, GoToMeeting meeting) {
-		if(editTrainingController != null) return;
+		if(guardModalController(editTrainingController)) return;
 		
 		editTrainingController = new EditTrainingController(ureq, getWindowControl(), meeting);
 		listenTo(editTrainingController);
diff --git a/src/main/java/org/olat/modules/gotomeeting/ui/GoToOrganizerListAdminController.java b/src/main/java/org/olat/modules/gotomeeting/ui/GoToOrganizerListAdminController.java
index 60040f24609..178bffb75b2 100644
--- a/src/main/java/org/olat/modules/gotomeeting/ui/GoToOrganizerListAdminController.java
+++ b/src/main/java/org/olat/modules/gotomeeting/ui/GoToOrganizerListAdminController.java
@@ -216,7 +216,7 @@ public class GoToOrganizerListAdminController extends FormBasicController implem
 	}
 	
 	private void doEdit(UserRequest ureq, GoToOrganizer organizer) {
-		if(editOrganizerNameController != null) return;
+		if(guardModalController(editOrganizerNameController)) return;
 		
 		editOrganizerNameController = new EditOrganizerNameController(ureq, getWindowControl(), organizer);
 		listenTo(editOrganizerNameController);
@@ -228,7 +228,7 @@ public class GoToOrganizerListAdminController extends FormBasicController implem
 	}
 	
 	private void doAddOrganizer(UserRequest ureq) {
-		if(loginOrganizerController != null) return;
+		if(guardModalController(loginOrganizerController)) return;
 		
 		loginOrganizerController = new LoginOrganizerController(ureq, getWindowControl());
 		listenTo(loginOrganizerController);
@@ -240,7 +240,7 @@ public class GoToOrganizerListAdminController extends FormBasicController implem
 	}
 	
 	private void doRenewOrganizer(UserRequest ureq, GoToOrganizer organizer) {
-		if(loginOrganizerController != null) return;
+		if(guardModalController(loginOrganizerController)) return;
 		
 		loginOrganizerController = new LoginOrganizerController(ureq, getWindowControl(), organizer);
 		listenTo(loginOrganizerController);
diff --git a/src/main/java/org/olat/modules/gotomeeting/ui/GoToRecordingsController.java b/src/main/java/org/olat/modules/gotomeeting/ui/GoToRecordingsController.java
index 88f782df24b..9ee0635db7d 100644
--- a/src/main/java/org/olat/modules/gotomeeting/ui/GoToRecordingsController.java
+++ b/src/main/java/org/olat/modules/gotomeeting/ui/GoToRecordingsController.java
@@ -133,7 +133,7 @@ public class GoToRecordingsController extends FormBasicController {
 	}
 
 	private void doView(UserRequest ureq, GoToRecordingsG2T recording) {
-		if(recordingController != null) return;
+		if(guardModalController(recordingController)) return;
 		
 		recordingController = new GoToRecordingController(ureq, getWindowControl(), recording);
 		listenTo(recordingController);
diff --git a/src/main/java/org/olat/modules/lecture/ui/AppealListRepositoryController.java b/src/main/java/org/olat/modules/lecture/ui/AppealListRepositoryController.java
index b2940e61345..3faeb5e5dc9 100644
--- a/src/main/java/org/olat/modules/lecture/ui/AppealListRepositoryController.java
+++ b/src/main/java/org/olat/modules/lecture/ui/AppealListRepositoryController.java
@@ -286,7 +286,7 @@ public class AppealListRepositoryController extends FormBasicController {
 	}
 	
 	private void doEditAppeal(UserRequest ureq, LectureBlockRollCall rollCall) {
-		if(appealCtrl != null || !secCallback.canApproveAppeal()) return;
+		if(guardModalController(appealCtrl) || !secCallback.canApproveAppeal()) return;
 		
 		appealCtrl = new EditAppealController(ureq, getWindowControl(), rollCall);
 		listenTo(appealCtrl);
@@ -298,7 +298,7 @@ public class AppealListRepositoryController extends FormBasicController {
 	}
 	
 	private void doEditAppeals(UserRequest ureq, List<LectureBlockRollCall> rollCalls) {
-		if(appealCtrl != null || !secCallback.canApproveAppeal()) return;
+		if(guardModalController(appealCtrl) || !secCallback.canApproveAppeal()) return;
 		
 		if(rollCalls.isEmpty()) {
 			showWarning("warning.choose.at.least.one.appeal");
diff --git a/src/main/java/org/olat/modules/lecture/ui/LectureListRepositoryController.java b/src/main/java/org/olat/modules/lecture/ui/LectureListRepositoryController.java
index 06f0bdb6288..27707d77684 100644
--- a/src/main/java/org/olat/modules/lecture/ui/LectureListRepositoryController.java
+++ b/src/main/java/org/olat/modules/lecture/ui/LectureListRepositoryController.java
@@ -309,7 +309,7 @@ public class LectureListRepositoryController extends FormBasicController {
 	}
 
 	private void doEditLectureBlock(UserRequest ureq, LectureBlockRow row) {
-		if(editLectureCtrl != null) return;
+		if(guardModalController(editLectureCtrl)) return;
 		
 		LectureBlock block = lectureService.getLectureBlock(row);
 		boolean readOnly = lectureManagementManaged || !secCallback.canNewLectureBlock();
@@ -322,7 +322,7 @@ public class LectureListRepositoryController extends FormBasicController {
 	}
 
 	private void doAddLectureBlock(UserRequest ureq) {
-		if(editLectureCtrl != null || !secCallback.canNewLectureBlock()) return;
+		if(guardModalController(editLectureCtrl) || !secCallback.canNewLectureBlock()) return;
 		
 		editLectureCtrl = new EditLectureBlockController(ureq, getWindowControl(), entry);
 		listenTo(editLectureCtrl);
diff --git a/src/main/java/org/olat/modules/lecture/ui/ParticipantLectureBlocksController.java b/src/main/java/org/olat/modules/lecture/ui/ParticipantLectureBlocksController.java
index 17edcc61748..ce63612412a 100644
--- a/src/main/java/org/olat/modules/lecture/ui/ParticipantLectureBlocksController.java
+++ b/src/main/java/org/olat/modules/lecture/ui/ParticipantLectureBlocksController.java
@@ -351,7 +351,7 @@ public class ParticipantLectureBlocksController extends FormBasicController {
 	}
 	
 	private void doAppeal(UserRequest ureq, LectureBlockAndRollCall row) {
-		if(appealCtrl != null) return;
+		if(guardModalController(appealCtrl)) return;
 		
 		LectureBlock block = lectureService.getLectureBlock(row.getLectureBlockRef());
 		List<Identity> teachers = lectureService.getTeachers(block);
diff --git a/src/main/java/org/olat/modules/lecture/ui/ParticipantListRepositoryController.java b/src/main/java/org/olat/modules/lecture/ui/ParticipantListRepositoryController.java
index 32ac87788e9..68e63793cd9 100644
--- a/src/main/java/org/olat/modules/lecture/ui/ParticipantListRepositoryController.java
+++ b/src/main/java/org/olat/modules/lecture/ui/ParticipantListRepositoryController.java
@@ -290,7 +290,7 @@ public class ParticipantListRepositoryController extends FormBasicController {
 	}
 	
 	private void doEdit(UserRequest ureq, ParticipantRow row) {
-		if(editRateCtrl != null) return;
+		if(guardModalController(editRateCtrl)) return;
 		
 		Identity identity = securityManager.loadIdentityByKey(row.getIdentityKey());
 		editRateCtrl = new EditParticipantSummaryController(ureq, getWindowControl(), entry, identity, rateEnabled, defaultRate);
diff --git a/src/main/java/org/olat/modules/lecture/ui/TeacherRollCallController.java b/src/main/java/org/olat/modules/lecture/ui/TeacherRollCallController.java
index d59c13e26a3..c3b70ae1711 100644
--- a/src/main/java/org/olat/modules/lecture/ui/TeacherRollCallController.java
+++ b/src/main/java/org/olat/modules/lecture/ui/TeacherRollCallController.java
@@ -699,7 +699,7 @@ public class TeacherRollCallController extends FormBasicController {
 	}
 	
 	private void doConfirmCloseLectureBlock(UserRequest ureq) {
-		if(closeRollCallCtrl != null) return;
+		if(guardModalController(closeRollCallCtrl)) return;
 		
 		closeRollCallCtrl = new CloseRollCallConfirmationController(ureq, getWindowControl(), lectureBlock, secCallback);
 		listenTo(closeRollCallCtrl);
@@ -710,7 +710,7 @@ public class TeacherRollCallController extends FormBasicController {
 	}
 	
 	private void doConfirmCancelLectureBlock(UserRequest ureq) {
-		if(cancelRollCallCtrl != null) return;
+		if(guardModalController(cancelRollCallCtrl)) return;
 		
 		cancelRollCallCtrl = new CancelRollCallConfirmationController(ureq, getWindowControl(), lectureBlock, secCallback);
 		listenTo(cancelRollCallCtrl);
diff --git a/src/main/java/org/olat/modules/lecture/ui/coach/AbsenceNoticesListController.java b/src/main/java/org/olat/modules/lecture/ui/coach/AbsenceNoticesListController.java
index c9318b78dcb..8f459f9471e 100644
--- a/src/main/java/org/olat/modules/lecture/ui/coach/AbsenceNoticesListController.java
+++ b/src/main/java/org/olat/modules/lecture/ui/coach/AbsenceNoticesListController.java
@@ -572,7 +572,7 @@ public class AbsenceNoticesListController extends FormBasicController {
 	}
 	
 	private void doContactTeachers(UserRequest ureq, AbsenceNoticeRow row) {
-		if(contactTeachersCtrl != null) return;
+		if(guardModalController(contactTeachersCtrl)) return;
 
 		List<Identity> teachers = row.getTeachers();
 		if(teachers.isEmpty()) {
diff --git a/src/main/java/org/olat/modules/library/ui/LibraryAdminController.java b/src/main/java/org/olat/modules/library/ui/LibraryAdminController.java
index 60dbaf182e0..e310691a51e 100644
--- a/src/main/java/org/olat/modules/library/ui/LibraryAdminController.java
+++ b/src/main/java/org/olat/modules/library/ui/LibraryAdminController.java
@@ -215,7 +215,7 @@ public class LibraryAdminController extends FormBasicController {
 	 * @param ureq
 	 */
 	private void doDisplaySearchController(UserRequest ureq) {
-		if(chooseFolderCtr != null) return;
+		if(guardModalController(chooseFolderCtr)) return;
 		
 		String choose = translate("library.catalog.choose.folder.link");
 		chooseFolderCtr = new ReferencableEntriesSearchController(getWindowControl(), ureq, SharedFolderFileResource.TYPE_NAME, choose);
diff --git a/src/main/java/org/olat/modules/portfolio/ui/AbstractPageListController.java b/src/main/java/org/olat/modules/portfolio/ui/AbstractPageListController.java
index ba3f0a916d9..c87e1474412 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/AbstractPageListController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/AbstractPageListController.java
@@ -804,7 +804,7 @@ implements Activateable2, TooledController, FlexiTableComponentDelegate {
 	}
 	
 	protected void doEditAssignment(UserRequest ureq, PortfolioElementRow row) {
-		if(editAssignmentCtrl != null) return;
+		if(guardModalController(editAssignmentCtrl)) return;
 		
 		Assignment assignment = row.getAssignment();
 		editAssignmentCtrl = new AssignmentEditController(ureq, getWindowControl(), assignment);
@@ -817,7 +817,7 @@ implements Activateable2, TooledController, FlexiTableComponentDelegate {
 	}
 	
 	private void doMoveAssignment(UserRequest ureq, PortfolioElementRow row) {
-		if(moveAssignmentCtrl != null) return;
+		if(guardModalController(moveAssignmentCtrl)) return;
 		
 		Assignment assignment = row.getAssignment();
 		moveAssignmentCtrl = new AssignmentMoveController(ureq, getWindowControl(), assignment, row.getSection());
diff --git a/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java b/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java
index e68a4a4e333..11fdafa1ff9 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java
@@ -520,7 +520,7 @@ public class AssignmentEditController extends FormBasicController {
 	}
 	
 	private void doSelectForm(UserRequest ureq) {
-		if(searchFormCtrl != null) return;
+		if(guardModalController(searchFormCtrl)) return;
 
 		searchFormCtrl = new ReferencableEntriesSearchController(getWindowControl(), ureq, 
 					EvaluationFormResource.TYPE_NAME, translate("select.form"));
diff --git a/src/main/java/org/olat/modules/portfolio/ui/AssignmentTemplatesEditController.java b/src/main/java/org/olat/modules/portfolio/ui/AssignmentTemplatesEditController.java
index 1b28b19442a..9a014467d8f 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/AssignmentTemplatesEditController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/AssignmentTemplatesEditController.java
@@ -208,7 +208,7 @@ public class AssignmentTemplatesEditController extends FormBasicController {
 	}
 	
 	private void doSelectDocument(UserRequest ureq) {
-		if(addDocumentCtrl != null) return;
+		if(guardModalController(addDocumentCtrl)) return;
 
 		addDocumentCtrl = new AddAssignmentDocumentController(ureq, getWindowControl());
 		listenTo(addDocumentCtrl);
@@ -236,7 +236,7 @@ public class AssignmentTemplatesEditController extends FormBasicController {
 	}
 	
 	private void doSelectForm(UserRequest ureq) {
-		if(searchFormCtrl != null) return;
+		if(guardModalController(searchFormCtrl)) return;
 
 		searchFormCtrl = new ReferencableEntriesSearchController(getWindowControl(), ureq, 
 					EvaluationFormResource.TYPE_NAME, translate("select.form"));
@@ -255,7 +255,7 @@ public class AssignmentTemplatesEditController extends FormBasicController {
 	}
 	
 	private void doEditAssignment(UserRequest ureq, Assignment assignment) {
-		if(editAssignmentCtrl != null) return;
+		if(guardModalController(editAssignmentCtrl)) return;
 		
 		editAssignmentCtrl = new AssignmentEditController(ureq, getWindowControl(), assignment,
 				AssignmentEditController.templatesTypes, 1);
diff --git a/src/main/java/org/olat/modules/portfolio/ui/AssignmentTemplatesListController.java b/src/main/java/org/olat/modules/portfolio/ui/AssignmentTemplatesListController.java
index 92a2058134b..be85c169c83 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/AssignmentTemplatesListController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/AssignmentTemplatesListController.java
@@ -194,7 +194,7 @@ public class AssignmentTemplatesListController extends FormBasicController imple
 	}
 	
 	private void doCreateNewPage(UserRequest ureq) {
-		if(newPageCtrl != null) return;
+		if(guardModalController(newPageCtrl)) return;
 		
 		newPageCtrl = new PageMetadataEditController(ureq, getWindowControl(), secCallback, binder, false, (Section)null, true);
 		listenTo(newPageCtrl);
@@ -206,7 +206,7 @@ public class AssignmentTemplatesListController extends FormBasicController imple
 	}
 	
 	private void doCreateNewPage(UserRequest ureq, Assignment assignment) {
-		if(newPageCtrl != null) return;
+		if(guardModalController(newPageCtrl)) return;
 		
 		newPageCtrl = new PageMetadataEditController(ureq, getWindowControl(), secCallback, binder, false, assignment, true);
 		listenTo(newPageCtrl);
diff --git a/src/main/java/org/olat/modules/portfolio/ui/BinderDeliveryOptionsController.java b/src/main/java/org/olat/modules/portfolio/ui/BinderDeliveryOptionsController.java
index 1ea031eda1c..94f6ac87632 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/BinderDeliveryOptionsController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/BinderDeliveryOptionsController.java
@@ -177,7 +177,7 @@ public class BinderDeliveryOptionsController extends FormBasicController impleme
 	}
 
 	private void doConfirmDeleteOption(UserRequest ureq) {
-		if(deleteOptionCtrl != null) return;
+		if(guardModalController(deleteOptionCtrl)) return;
 		
 		deleteOptionCtrl = new ConfirmDeleteOptionController(ureq, getWindowControl());
 		listenTo(deleteOptionCtrl);
diff --git a/src/main/java/org/olat/modules/portfolio/ui/BinderListController.java b/src/main/java/org/olat/modules/portfolio/ui/BinderListController.java
index 120a673efbb..e79d8e12fac 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/BinderListController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/BinderListController.java
@@ -544,7 +544,7 @@ public class BinderListController extends FormBasicController
 	}
 
 	private void doNewBinder(UserRequest ureq) {
-		if(newBinderCtrl != null) return;
+		if(guardModalController(newBinderCtrl)) return;
 		
 		newBinderCtrl = new BinderMetadataEditController(ureq, getWindowControl(), null);
 		listenTo(newBinderCtrl);
@@ -556,7 +556,7 @@ public class BinderListController extends FormBasicController
 	}
 
 	private void doNewBinderFromTemplate(UserRequest ureq) {
-		if(searchTemplateCtrl != null) return;
+		if(guardModalController(searchTemplateCtrl)) return;
 
 		String title = translate("create.empty.binder.from.template");
 		String commandLabel = translate("create.binder.selectTemplate");
@@ -582,7 +582,7 @@ public class BinderListController extends FormBasicController
 	}
 	
 	private void doNewBinderFromCourse(UserRequest ureq) {
-		if(searchCourseTemplateCtrl != null) return;
+		if(guardModalController(searchCourseTemplateCtrl)) return;
 
 		removeAsListenerAndDispose(searchCourseTemplateCtrl);
 		searchCourseTemplateCtrl = new CourseTemplateSearchController(ureq, getWindowControl());			
@@ -707,7 +707,7 @@ public class BinderListController extends FormBasicController
 	}
 	
 	private void doEditBinderMetadata(UserRequest ureq, BinderRow row) {
-		if(binderMetadataCtrl != null) return;
+		if(guardModalController(binderMetadataCtrl)) return;
 		
 		Binder reloadedBinder = portfolioService.getBinderByKey(row.getKey());
 		binderMetadataCtrl = new BinderMetadataEditController(ureq, getWindowControl(), reloadedBinder);
@@ -720,7 +720,7 @@ public class BinderListController extends FormBasicController
 	}
 	
 	private void doConfirmMoveToTrashBinder(UserRequest ureq, BinderRow row) {
-		if(moveBinderToTrashCtrl != null) return;
+		if(guardModalController(moveBinderToTrashCtrl)) return;
 		
 		BinderStatistics stats = portfolioService.getBinderStatistics(row);
 		moveBinderToTrashCtrl = new ConfirmMoveBinderToTrashController(ureq, getWindowControl(), stats);
@@ -741,7 +741,7 @@ public class BinderListController extends FormBasicController
 	}
 	
 	private void doConfirmDeleteBinder(UserRequest ureq, BinderRow row) {
-		if(moveBinderToTrashCtrl != null) return;
+		if(guardModalController(moveBinderToTrashCtrl)) return;
 		
 		BinderStatistics stats = portfolioService.getBinderStatistics(row);
 		deleteBinderCtrl = new ConfirmDeleteBinderController(ureq, getWindowControl(), stats);
diff --git a/src/main/java/org/olat/modules/portfolio/ui/BinderPageListController.java b/src/main/java/org/olat/modules/portfolio/ui/BinderPageListController.java
index 006cb5d3a39..aa1fa38ec72 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/BinderPageListController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/BinderPageListController.java
@@ -629,7 +629,7 @@ public class BinderPageListController extends AbstractPageListController {
 	}
 	
 	private void doCreateNewSection(UserRequest ureq) {
-		if(newSectionCtrl != null) return;
+		if(guardModalController(newSectionCtrl)) return;
 		
 		newSectionCtrl = new SectionEditController(ureq, getWindowControl(), binder, secCallback);
 		listenTo(newSectionCtrl);
@@ -641,7 +641,7 @@ public class BinderPageListController extends AbstractPageListController {
 	}
 	
 	private void doCreateNewPage(UserRequest ureq, Section preSelectedSection) {
-		if(newPageCtrl != null) return;
+		if(guardModalController(newPageCtrl)) return;
 		
 		newPageCtrl = new PageMetadataEditController(ureq, getWindowControl(), secCallback, binder, false, preSelectedSection, true);
 		listenTo(newPageCtrl);
@@ -653,7 +653,7 @@ public class BinderPageListController extends AbstractPageListController {
 	}
 	
 	private void doCreateNewAssignment(UserRequest ureq) {
-		if(newAssignmentCtrl != null) return;
+		if(guardModalController(newAssignmentCtrl)) return;
 
 		newAssignmentCtrl = new AssignmentEditController(ureq, getWindowControl(), binder);
 		listenTo(newAssignmentCtrl);
@@ -665,7 +665,7 @@ public class BinderPageListController extends AbstractPageListController {
 	}
 	
 	private void doCreateNewAssignment(UserRequest ureq, Section section) {
-		if(newAssignmentCtrl != null) return;
+		if(guardModalController(newAssignmentCtrl)) return;
 		
 		newAssignmentCtrl = new AssignmentEditController(ureq, getWindowControl(), section);
 		listenTo(newAssignmentCtrl);
diff --git a/src/main/java/org/olat/modules/portfolio/ui/DeletedBinderController.java b/src/main/java/org/olat/modules/portfolio/ui/DeletedBinderController.java
index ad06b03bc87..4840ab4fe50 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/DeletedBinderController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/DeletedBinderController.java
@@ -162,7 +162,7 @@ public class DeletedBinderController extends BinderListController {
 	}
 
 	private void doConfirmDelete(UserRequest ureq) {
-		if(deleteBinderCtrl != null) return;
+		if(guardModalController(deleteBinderCtrl)) return;
 		
 		List<BinderRow> rows = getSelectedRows();
 		if(rows.isEmpty()) {
diff --git a/src/main/java/org/olat/modules/portfolio/ui/MediaCenterController.java b/src/main/java/org/olat/modules/portfolio/ui/MediaCenterController.java
index 815d3a7f718..9daf2ac512a 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/MediaCenterController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/MediaCenterController.java
@@ -527,7 +527,7 @@ public class MediaCenterController extends FormBasicController
 	}
 
 	private void doCreateFile(UserRequest ureq) {
-		if(createFileCtrl != null) return;
+		if(guardModalController(createFileCtrl)) return;
 		
 		createFileCtrl = new CreateFileMediaController(ureq, getWindowControl(), editableFileTypes);
 		listenTo(createFileCtrl);
@@ -539,7 +539,7 @@ public class MediaCenterController extends FormBasicController
 	}
 	
 	private void doAddMedia(UserRequest ureq, String titleKey) {
-		if(mediaUploadCtrl != null) return;
+		if(guardModalController(mediaUploadCtrl)) return;
 		
 		mediaUploadCtrl = new MediaUploadController(ureq, getWindowControl());
 		listenTo(mediaUploadCtrl);
@@ -551,7 +551,7 @@ public class MediaCenterController extends FormBasicController
 	}
 	
 	private void doAddTextMedia(UserRequest ureq) {
-		if(textUploadCtrl != null) return;
+		if(guardModalController(textUploadCtrl)) return;
 		
 		textUploadCtrl = new CollectTextMediaController(ureq, getWindowControl());
 		listenTo(textUploadCtrl);
@@ -563,7 +563,7 @@ public class MediaCenterController extends FormBasicController
 	}
 	
 	private void doAddCitationMedia(UserRequest ureq) {
-		if(citationUploadCtrl != null) return;
+		if(guardModalController(citationUploadCtrl)) return;
 		
 		citationUploadCtrl = new CollectCitationMediaController(ureq, getWindowControl());
 		listenTo(citationUploadCtrl);
@@ -575,7 +575,7 @@ public class MediaCenterController extends FormBasicController
 	}
 	
 	private void doChooseArtefactV1(UserRequest ureq) {
-		if(importArtefactv1Ctrl != null) return;
+		if(guardModalController(importArtefactv1Ctrl)) return;
 		
 		importArtefactv1Ctrl = new EPArtefactPoolRunController(ureq, this.getWindowControl(), true, false, true);
 		listenTo(importArtefactv1Ctrl);
diff --git a/src/main/java/org/olat/modules/portfolio/ui/MediaDetailsController.java b/src/main/java/org/olat/modules/portfolio/ui/MediaDetailsController.java
index 925ac3ddf78..3e74ec2b055 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/MediaDetailsController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/MediaDetailsController.java
@@ -276,7 +276,7 @@ public class MediaDetailsController extends FormBasicController implements Activ
 	}
 	
 	private void doEdit(UserRequest ureq) {
-		if(mediaEditCtrl != null) return;
+		if(guardModalController(mediaEditCtrl)) return;
 		
 		mediaEditCtrl = handler.getEditMediaController(ureq, getWindowControl(), media);
 		listenTo(mediaEditCtrl);
diff --git a/src/main/java/org/olat/modules/portfolio/ui/MyPageListController.java b/src/main/java/org/olat/modules/portfolio/ui/MyPageListController.java
index 8cb70466426..11caef715a9 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/MyPageListController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/MyPageListController.java
@@ -210,7 +210,7 @@ public class MyPageListController extends AbstractPageListController {
 	}
 	
 	protected void doCreateNewPage(UserRequest ureq) {
-		if(newPageCtrl != null) return;
+		if(guardModalController(newPageCtrl)) return;
 		
 		newPageCtrl = new PageMetadataEditController(ureq, getWindowControl(), secCallback, null, true, (Section)null, true);
 		listenTo(newPageCtrl);
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 8427905cb00..e77cefca6f2 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/PageRunController.java
@@ -612,7 +612,7 @@ public class PageRunController extends BasicController implements TooledControll
 	}
 	
 	private void doEditMetadata(UserRequest ureq) {
-		if(editMetadataCtrl != null) return;
+		if(guardModalController(editMetadataCtrl)) return;
 		
 		removeAsListenerAndDispose(editMetadataCtrl);
 		
diff --git a/src/main/java/org/olat/modules/portfolio/ui/PublishController.java b/src/main/java/org/olat/modules/portfolio/ui/PublishController.java
index 3b1bd3b2db1..52a3b18b023 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/PublishController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/PublishController.java
@@ -352,7 +352,7 @@ public class PublishController extends BasicController implements TooledControll
 	}
 	
 	private void doAddInvitationEmail(UserRequest ureq) {
-		if(addInvitationEmailCtrl != null) return;
+		if(guardModalController(addInvitationEmailCtrl)) return;
 		
 		addInvitationEmailCtrl = new InvitationEmailController(ureq, getWindowControl(), binder);
 		listenTo(addInvitationEmailCtrl);
@@ -364,7 +364,7 @@ public class PublishController extends BasicController implements TooledControll
 	}
 	
 	private void doAddInvitation(UserRequest ureq, String email) {
-		if(addInvitationCtrl != null) return;
+		if(guardModalController(addInvitationCtrl)) return;
 		
 		addInvitationCtrl = new InvitationEditRightsController(ureq, getWindowControl(), binder, email, null);
 		listenTo(addInvitationCtrl);
@@ -393,7 +393,7 @@ public class PublishController extends BasicController implements TooledControll
 	}
 	
 	private void doEditInvitation(UserRequest ureq, Identity invitee) {
-		if(addInvitationCtrl != null) return;
+		if(guardModalController(addInvitationCtrl)) return;
 
 		addInvitationCtrl = new InvitationEditRightsController(ureq, getWindowControl(), binder, invitee);
 		listenTo(addInvitationCtrl);
@@ -457,7 +457,7 @@ public class PublishController extends BasicController implements TooledControll
 	}
 	
 	private void doEditAccessRights(UserRequest ureq, PortfolioElement element, Identity member) {
-		if(editAccessRightsCtrl != null) return;
+		if(guardModalController(editAccessRightsCtrl)) return;
 		
 		boolean canEdit = secCallback.canEditAccessRights(element);
 		editAccessRightsCtrl = new AccessRightsEditController(ureq, getWindowControl(), binder, member, canEdit);
diff --git a/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java b/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java
index 7b4693cfab9..610ef6dc344 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/TableOfContentController.java
@@ -730,7 +730,7 @@ public class TableOfContentController extends BasicController implements TooledC
 	}
 	
 	private void doEditSection(UserRequest ureq, SectionRow sectionRow) {
-		if(editSectionCtrl != null) return;
+		if(guardModalController(editSectionCtrl)) return;
 		
 		editSectionCtrl = new SectionEditController(ureq, getWindowControl(), sectionRow.getSection(), secCallback);
 		editSectionCtrl.setUserObject(sectionRow);
@@ -743,7 +743,7 @@ public class TableOfContentController extends BasicController implements TooledC
 	}
 	
 	private void doCreateNewSection(UserRequest ureq) {
-		if(newSectionCtrl != null) return;
+		if(guardModalController(newSectionCtrl)) return;
 		
 		newSectionCtrl = new SectionEditController(ureq, getWindowControl(), binder, secCallback);
 		listenTo(newSectionCtrl);
@@ -755,7 +755,7 @@ public class TableOfContentController extends BasicController implements TooledC
 	}
 	
 	private void doCreateNewAssignment(UserRequest ureq) {
-		if(newAssignmentCtrl != null) return;
+		if(guardModalController(newAssignmentCtrl)) return;
 
 		newAssignmentCtrl = new AssignmentEditController(ureq, getWindowControl(), binder);
 		listenTo(newAssignmentCtrl);
@@ -841,7 +841,7 @@ public class TableOfContentController extends BasicController implements TooledC
 	}
 	
 	private void doCreateNewEntry(UserRequest ureq) {
-		if(newPageCtrl != null) return;
+		if(guardModalController(newPageCtrl)) return;
 		
 		newPageCtrl = new PageMetadataEditController(ureq, getWindowControl(), secCallback, binder, false, (Section)null, true);
 		listenTo(newPageCtrl);
@@ -853,7 +853,7 @@ public class TableOfContentController extends BasicController implements TooledC
 	}
 	
 	private void doEditBinderMetadata(UserRequest ureq) {
-		if(binderMetadataCtrl != null) return;
+		if(guardModalController(binderMetadataCtrl)) return;
 		
 		Binder reloadedBinder = portfolioService.getBinderByKey(binder.getKey());
 		binderMetadataCtrl = new BinderMetadataEditController(ureq, getWindowControl(), reloadedBinder);
@@ -866,7 +866,7 @@ public class TableOfContentController extends BasicController implements TooledC
 	}
 	
 	private void doOverrideDatesSection(UserRequest ureq, SectionRow sectionRow) {
-		if(editSectionDatesCtrl != null) return;
+		if(guardModalController(editSectionDatesCtrl)) return;
 		
 		editSectionDatesCtrl = new SectionDatesEditController(ureq, getWindowControl(), sectionRow.getSection());
 		editSectionDatesCtrl.setUserObject(sectionRow);
@@ -918,7 +918,7 @@ public class TableOfContentController extends BasicController implements TooledC
 	}
 	
 	private void doConfirmMoveToTrashBinder(UserRequest ureq) {
-		if(moveBinderToTrashCtrl != null) return;
+		if(guardModalController(moveBinderToTrashCtrl)) return;
 		
 		BinderStatistics stats = portfolioService.getBinderStatistics(binder);
 		moveBinderToTrashCtrl = new ConfirmMoveBinderToTrashController(ureq, getWindowControl(), stats);
@@ -949,7 +949,7 @@ public class TableOfContentController extends BasicController implements TooledC
 	}
 	
 	private void doConfirmDeleteBinder(UserRequest ureq) {
-		if(moveBinderToTrashCtrl != null) return;
+		if(guardModalController(moveBinderToTrashCtrl)) return;
 		
 		BinderStatistics stats = portfolioService.getBinderStatistics(binder);
 		deleteBinderCtrl = new ConfirmDeleteBinderController(ureq, getWindowControl(), stats);
diff --git a/src/main/java/org/olat/modules/quality/ui/DataCollectionConfigurationController.java b/src/main/java/org/olat/modules/quality/ui/DataCollectionConfigurationController.java
index 10d8fd4b38b..de26c7d0173 100644
--- a/src/main/java/org/olat/modules/quality/ui/DataCollectionConfigurationController.java
+++ b/src/main/java/org/olat/modules/quality/ui/DataCollectionConfigurationController.java
@@ -610,7 +610,7 @@ public class DataCollectionConfigurationController extends FormBasicController {
 	private void doSelectFormEntry(UserRequest ureq) {
 		formSearchCtrl = new ReferencableEntriesSearchController(getWindowControl(), ureq,
 				EvaluationFormResource.TYPE_NAME, translate("data.collection.form.select"));
-		this.listenTo(formSearchCtrl);
+		listenTo(formSearchCtrl);
 
 		cmc = new CloseableModalController(getWindowControl(), translate("close"),
 				formSearchCtrl.getInitialComponent(), true, translate("data.collection.form.select"));
diff --git a/src/main/java/org/olat/modules/taxonomy/ui/IdentityCompetencesController.java b/src/main/java/org/olat/modules/taxonomy/ui/IdentityCompetencesController.java
index d2e5661eff7..d0b4241ef92 100644
--- a/src/main/java/org/olat/modules/taxonomy/ui/IdentityCompetencesController.java
+++ b/src/main/java/org/olat/modules/taxonomy/ui/IdentityCompetencesController.java
@@ -198,7 +198,7 @@ public class IdentityCompetencesController extends FormBasicController implement
 	}
 	
 	private void doSelectTaxonomyLevelsToAdd(UserRequest ureq, TaxonomyCompetenceTypes comptenceType) {
-		if(levelsSearchCtrl != null) return;
+		if(guardModalController(levelsSearchCtrl)) return;
 		
 		levelsSearchCtrl = new SelectTaxonomyLevelController(ureq, getWindowControl(), comptenceType);
 		listenTo(levelsSearchCtrl);
diff --git a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelCompetenceController.java b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelCompetenceController.java
index d2b796f23b6..8651982e560 100644
--- a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelCompetenceController.java
+++ b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelCompetenceController.java
@@ -259,7 +259,7 @@ public class TaxonomyLevelCompetenceController extends FormBasicController {
 	}
 	
 	private void doSelectTaxonomyLevelCompetence(UserRequest ureq, TaxonomyLevelCompetenceRow row) {
-		if(editCompetenceCtrl != null) return;
+		if(guardModalController(editCompetenceCtrl)) return;
 
 		TaxonomyCompetence competence = row.getCompetence();
 		editCompetenceCtrl = new EditTaxonomyCompetenceController(ureq, getWindowControl(), competence);
@@ -284,7 +284,7 @@ public class TaxonomyLevelCompetenceController extends FormBasicController {
 	}
 
 	private void doSearchUsersToAdd(UserRequest ureq, TaxonomyCompetenceTypes comptenceType) {
-		if(userSearchCtrl != null) return;
+		if(guardModalController(userSearchCtrl)) return;
 
 		userSearchCtrl = new UserSearchController(ureq, getWindowControl(), true, true, false);
 		userSearchCtrl.setUserObject(comptenceType);
diff --git a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelOverviewController.java b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelOverviewController.java
index cc4bb446d0d..1068cb279e7 100644
--- a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelOverviewController.java
+++ b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyLevelOverviewController.java
@@ -219,7 +219,7 @@ public class TaxonomyLevelOverviewController extends BasicController implements
 	}
 	
 	private void doMove(UserRequest ureq) {
-		if(moveLevelCtrl != null) return;
+		if(guardModalController(moveLevelCtrl)) return;
 		
 		taxonomyLevel = taxonomyService.getTaxonomyLevel(taxonomyLevel);
 		Taxonomy taxonomy = taxonomyLevel.getTaxonomy();
@@ -234,7 +234,7 @@ public class TaxonomyLevelOverviewController extends BasicController implements
 	}
 	
 	private void doCreateTaxonomyLevel(UserRequest ureq) {
-		if(createTaxonomyLevelCtrl != null) return;
+		if(guardModalController(createTaxonomyLevelCtrl)) return;
 		
 		taxonomyLevel = taxonomyService.getTaxonomyLevel(taxonomyLevel);
 		Taxonomy taxonomy = taxonomyLevel.getTaxonomy();
diff --git a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyListAdminController.java b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyListAdminController.java
index fbffd15a6bb..5180a22312f 100644
--- a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyListAdminController.java
+++ b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyListAdminController.java
@@ -292,7 +292,7 @@ public class TaxonomyListAdminController extends FormBasicController implements
 	}
 	
 	private void doCreateTaxonomy(UserRequest ureq) {
-		if(editTaxonomyCtrl != null) return;
+		if(guardModalController(editTaxonomyCtrl)) return;
 		
 		editTaxonomyCtrl = new EditTaxonomyController(ureq, getWindowControl(), null);
 		listenTo(editTaxonomyCtrl);
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 e66d6e8def6..d5785c12e53 100644
--- a/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java
+++ b/src/main/java/org/olat/modules/taxonomy/ui/TaxonomyTreeTableController.java
@@ -346,7 +346,7 @@ public class TaxonomyTreeTableController extends FormBasicController implements
 	}
 	
 	private void doAssignType(UserRequest ureq) {
-		if(typeLevelCtrl != null) return;
+		if(guardModalController(typeLevelCtrl)) return;
 		
 		List<TaxonomyLevel> levelsToMerge = getSelectedTaxonomyLevels(TaxonomyLevelManagedFlag.type);
 		if(levelsToMerge.isEmpty()) {
@@ -363,7 +363,7 @@ public class TaxonomyTreeTableController extends FormBasicController implements
 	}
 	
 	private void doMerge(UserRequest ureq) {
-		if(mergeCtrl != null) return;
+		if(guardModalController(mergeCtrl)) return;
 		
 		List<TaxonomyLevel> levelsToMerge = getSelectedTaxonomyLevels(TaxonomyLevelManagedFlag.delete);
 		if(levelsToMerge.isEmpty()) {
@@ -404,7 +404,7 @@ public class TaxonomyTreeTableController extends FormBasicController implements
 	}
 	
 	private void doCreateTaxonomyLevel(UserRequest ureq, TaxonomyLevel parentLevel) {
-		if(createTaxonomyLevelCtrl != null) return;
+		if(guardModalController(createTaxonomyLevelCtrl)) return;
 
 		createTaxonomyLevelCtrl = new EditTaxonomyLevelController(ureq, getWindowControl(), parentLevel, taxonomy);
 		listenTo(createTaxonomyLevelCtrl);
diff --git a/src/main/java/org/olat/modules/video/ui/VideoChapterEditController.java b/src/main/java/org/olat/modules/video/ui/VideoChapterEditController.java
index b754e7a4007..785034bf34e 100644
--- a/src/main/java/org/olat/modules/video/ui/VideoChapterEditController.java
+++ b/src/main/java/org/olat/modules/video/ui/VideoChapterEditController.java
@@ -273,7 +273,7 @@ public class VideoChapterEditController extends BasicController {
 		}
 	
 		private void doEditChapter(UserRequest ureq, VideoChapterTableRow videoChapterTableRow, boolean chapterExists) {
-			if(chapterEditCtr != null) return;
+			if(guardModalController(chapterEditCtr)) return;
 
 			chapterEditCtr = new ChapterEditController(ureq, getWindowControl(), videoChapterTableRow, 
 					chapterExists, tableModel.getObjects(), durationInSeconds); 
diff --git a/src/main/java/org/olat/repository/ui/author/AuthorListController.java b/src/main/java/org/olat/repository/ui/author/AuthorListController.java
index a8925d5fd99..b15b3df03a2 100644
--- a/src/main/java/org/olat/repository/ui/author/AuthorListController.java
+++ b/src/main/java/org/olat/repository/ui/author/AuthorListController.java
@@ -751,7 +751,7 @@ public class AuthorListController extends FormBasicController implements Activat
 	}
 	
 	private void doImport(UserRequest ureq) {
-		if(importCtrl != null) return;
+		if(guardModalController(importCtrl)) return;
 
 		removeAsListenerAndDispose(importCtrl);
 		importCtrl = new ImportRepositoryEntryController(ureq, getWindowControl());
@@ -766,7 +766,7 @@ public class AuthorListController extends FormBasicController implements Activat
 	}
 	
 	private void doImportUrl(UserRequest ureq) {
-		if(importUrlCtrl != null) return;
+		if(guardModalController(importUrlCtrl)) return;
 
 		removeAsListenerAndDispose(importUrlCtrl);
 		importUrlCtrl = new ImportURLRepositoryEntryController(ureq, getWindowControl());
@@ -781,7 +781,7 @@ public class AuthorListController extends FormBasicController implements Activat
 	}
 	
 	private void doCreate(UserRequest ureq, RepositoryHandler handler) {
-		if(createCtrl != null) return;
+		if(guardModalController(createCtrl)) return;
 
 		removeAsListenerAndDispose(createCtrl);
 		createCtrl = handler.createCreateRepositoryEntryController(ureq, getWindowControl());
@@ -880,7 +880,7 @@ public class AuthorListController extends FormBasicController implements Activat
 	}
 	
 	private void doSendMail(UserRequest ureq, List<AuthoringEntryRow> rows) {
-		if(sendMailCtrl != null) return;
+		if(guardModalController(sendMailCtrl)) return;
 
 		removeAsListenerAndDispose(userSearchCtr);
 		sendMailCtrl = new SendMailController(ureq, getWindowControl(), rows);
@@ -894,7 +894,7 @@ public class AuthorListController extends FormBasicController implements Activat
 	}
 	
 	private void doAddOwners(UserRequest ureq, List<AuthoringEntryRow> rows) {
-		if(userSearchCtr != null) return;
+		if(guardModalController(userSearchCtr)) return;
 		
 		List<AuthoringEntryRow> manageableRows = new ArrayList<>(rows.size());
 		for(AuthoringEntryRow row:rows) {
diff --git a/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java b/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java
index ba440389c16..517a0621a59 100644
--- a/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java
+++ b/src/main/java/org/olat/repository/ui/list/RepositoryEntryDetailsController.java
@@ -708,7 +708,7 @@ public class RepositoryEntryDetailsController extends FormBasicController {
 	}
 	
 	protected void doOpenComments(UserRequest ureq) {
-		if(commentsCtrl != null) return;
+		if(guardModalController(commentsCtrl)) return;
 		
 		boolean anonym = ureq.getUserSession().getRoles().isGuestOnly();
 		CommentAndRatingSecurityCallback secCallback = new CommentAndRatingDefaultSecurityCallback(getIdentity(), false, anonym);
diff --git a/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java b/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java
index 68823f5c900..1b85dc6ff0a 100644
--- a/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java
+++ b/src/main/java/org/olat/repository/ui/list/RepositoryEntryListController.java
@@ -558,7 +558,7 @@ public class RepositoryEntryListController extends FormBasicController
 	}
 	
 	protected void doOpenComments(UserRequest ureq, RepositoryEntryRow row) {
-		if(commentsCtrl != null) return;
+		if(guardModalController(commentsCtrl)) return;
 		
 		boolean anonym = ureq.getUserSession().getRoles().isGuestOnly();
 		CommentAndRatingSecurityCallback secCallback = new CommentAndRatingDefaultSecurityCallback(getIdentity(), false, anonym);
diff --git a/src/main/java/org/olat/user/ui/admin/UserSearchTableController.java b/src/main/java/org/olat/user/ui/admin/UserSearchTableController.java
index e9cae0b4027..c4eeba18add 100644
--- a/src/main/java/org/olat/user/ui/admin/UserSearchTableController.java
+++ b/src/main/java/org/olat/user/ui/admin/UserSearchTableController.java
@@ -404,7 +404,7 @@ public class UserSearchTableController extends FormBasicController implements Ac
 	}
 	
 	private void doMail(UserRequest ureq) {
-		if(contactCtr != null) return;
+		if(guardModalController(contactCtr)) return;
 		
 		List<Identity> identities = getSelectedIdentitiesWithWarning();
 		if(identities.isEmpty()) {
diff --git a/src/main/java/org/olat/user/ui/organisation/OrganisationAdminConfigrationController.java b/src/main/java/org/olat/user/ui/organisation/OrganisationAdminConfigrationController.java
index 2b6330c2f7f..74603e3fffd 100644
--- a/src/main/java/org/olat/user/ui/organisation/OrganisationAdminConfigrationController.java
+++ b/src/main/java/org/olat/user/ui/organisation/OrganisationAdminConfigrationController.java
@@ -120,7 +120,7 @@ public class OrganisationAdminConfigrationController extends FormBasicController
 	}
 	
 	private void doConfirmMigration(UserRequest ureq) {
-		if(migratorCtrl != null) return;
+		if(guardModalController(migratorCtrl)) return;
 		
 		migratorCtrl = new InstitutionMigratorController(ureq, getWindowControl());
 		listenTo(migratorCtrl);
diff --git a/src/main/java/org/olat/user/ui/organisation/OrganisationResourceListController.java b/src/main/java/org/olat/user/ui/organisation/OrganisationResourceListController.java
index 05ba8757aff..9e39128e2c8 100644
--- a/src/main/java/org/olat/user/ui/organisation/OrganisationResourceListController.java
+++ b/src/main/java/org/olat/user/ui/organisation/OrganisationResourceListController.java
@@ -216,7 +216,7 @@ public class OrganisationResourceListController extends FormBasicController impl
 	}
 	
 	private void doChooseResources(UserRequest ureq) {
-		if(repoSearchCtr != null) return;
+		if(guardModalController(repoSearchCtr)) return;
 		
 		repoSearchCtr = new ReferencableEntriesSearchController(getWindowControl(), ureq,
 				new String[]{ CourseModule.getCourseTypeName() }, null,
diff --git a/src/main/java/org/olat/user/ui/organisation/OrganisationTypesAdminController.java b/src/main/java/org/olat/user/ui/organisation/OrganisationTypesAdminController.java
index 39686d7e98b..e2f5503ec59 100644
--- a/src/main/java/org/olat/user/ui/organisation/OrganisationTypesAdminController.java
+++ b/src/main/java/org/olat/user/ui/organisation/OrganisationTypesAdminController.java
@@ -161,7 +161,7 @@ public class OrganisationTypesAdminController extends FormBasicController implem
 	}
 
 	private void doAddRootType(UserRequest ureq) {
-		if(rootTypeCtrl != null) return;
+		if(guardModalController(rootTypeCtrl)) return;
 		
 		rootTypeCtrl = new EditOrganisationTypeController(ureq, getWindowControl(), null);
 		listenTo(rootTypeCtrl);
@@ -172,7 +172,7 @@ public class OrganisationTypesAdminController extends FormBasicController implem
 	}
 	
 	private void doEditType(UserRequest ureq, OrganisationType type) {
-		if(editTypeCtrl != null) return;
+		if(guardModalController(editTypeCtrl)) return;
 		
 		OrganisationType reloadedType = organisationService.getOrganisationType(type);
 		editTypeCtrl = new EditOrganisationTypeController(ureq, getWindowControl(), reloadedType);
diff --git a/src/main/java/org/olat/user/ui/organisation/OrganisationUserManagementController.java b/src/main/java/org/olat/user/ui/organisation/OrganisationUserManagementController.java
index 0174e372dd6..155ca36d40a 100644
--- a/src/main/java/org/olat/user/ui/organisation/OrganisationUserManagementController.java
+++ b/src/main/java/org/olat/user/ui/organisation/OrganisationUserManagementController.java
@@ -288,7 +288,7 @@ public class OrganisationUserManagementController extends FormBasicController {
 	}
 	
 	private void doSearchMember(UserRequest ureq, OrganisationRoles role) {
-		if(userSearchCtrl != null) return;
+		if(guardModalController(userSearchCtrl)) return;
 
 		userSearchCtrl = new UserSearchController(ureq, getWindowControl(), true, true, false, true);
 		userSearchCtrl.setUserObject(role);
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 618441a83cf..69439e536bb 100644
--- a/src/main/java/org/olat/user/ui/organisation/OrganisationsStructureAdminController.java
+++ b/src/main/java/org/olat/user/ui/organisation/OrganisationsStructureAdminController.java
@@ -251,7 +251,7 @@ public class OrganisationsStructureAdminController extends FormBasicController i
 	}
 	
 	private void doCreateOrganisation(UserRequest ureq) {
-		if(newOrganisationCtrl != null) return;
+		if(guardModalController(newOrganisationCtrl)) return;
 
 		newOrganisationCtrl = new EditOrganisationController(ureq, getWindowControl(), null);
 		listenTo(newOrganisationCtrl);
@@ -262,7 +262,7 @@ public class OrganisationsStructureAdminController extends FormBasicController i
 	}
 	
 	private void doCreateOrganisation(UserRequest ureq, Organisation parentOrganisation) {
-		if(newOrganisationCtrl != null) return;
+		if(guardModalController(newOrganisationCtrl)) return;
 
 		newOrganisationCtrl = new EditOrganisationController(ureq, getWindowControl(), null, parentOrganisation);
 		listenTo(newOrganisationCtrl);
@@ -292,7 +292,7 @@ public class OrganisationsStructureAdminController extends FormBasicController i
 	}
 	
 	private void doMove(UserRequest ureq, Organisation organisation) {
-		if(moveCtrl != null) return;
+		if(guardModalController(moveCtrl)) return;
 		
 		moveCtrl = new MoveOrganisationController(ureq, getWindowControl(), Collections.singletonList(organisation));
 		listenTo(moveCtrl);
@@ -315,7 +315,7 @@ public class OrganisationsStructureAdminController extends FormBasicController i
 	}
 	
 	private void doConfirmDelete(UserRequest ureq, OrganisationRow row) {
-		if(confirmDeleteCtrl != null) return;
+		if(guardModalController(confirmDeleteCtrl)) return;
 		
 		confirmDeleteCtrl = new ConfirmOrganisationDeleteController(ureq, getWindowControl(), row);
 		listenTo(confirmDeleteCtrl);
diff --git a/src/main/java/org/olat/user/ui/role/RelationRolesAdminController.java b/src/main/java/org/olat/user/ui/role/RelationRolesAdminController.java
index 818f6ae3278..1876cce3d64 100644
--- a/src/main/java/org/olat/user/ui/role/RelationRolesAdminController.java
+++ b/src/main/java/org/olat/user/ui/role/RelationRolesAdminController.java
@@ -206,7 +206,7 @@ public class RelationRolesAdminController extends FormBasicController {
 	}
 	
 	private void doAddRole(UserRequest ureq) {
-		if(editRoleCtrl != null) return;
+		if(guardModalController(editRoleCtrl)) return;
 		
 		editRoleCtrl = new EditRelationRoleController(ureq, getWindowControl());
 		listenTo(editRoleCtrl);
@@ -217,7 +217,7 @@ public class RelationRolesAdminController extends FormBasicController {
 	}
 	
 	private void doEditRole(UserRequest ureq, RelationRoleRow row) {
-		if(editRoleCtrl != null) return;
+		if(guardModalController(editRoleCtrl)) return;
 		
 		RelationRole role = identityRelationsService.getRole(row.getKey());
 		if(role == null) {
-- 
GitLab