diff --git a/src/main/java/org/olat/basesecurity/manager/GroupDAO.java b/src/main/java/org/olat/basesecurity/manager/GroupDAO.java
index c624071c0c66e4f5fc447b6d51699d47b96416b5..83dfe04e8798776402c08054357d6f8d06f039dd 100644
--- a/src/main/java/org/olat/basesecurity/manager/GroupDAO.java
+++ b/src/main/java/org/olat/basesecurity/manager/GroupDAO.java
@@ -194,6 +194,20 @@ public class GroupDAO {
 		return count == null ? false: count.intValue() > 0;
 	}
 	
+	public List<String> getPermissions(IdentityRef identity, OLATResource resource) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("select grant.permission from bgrant as grant")
+		  .append(" inner join grant.group as baseGroup")
+		  .append(" inner join baseGroup.members as membership")
+		  .append(" where membership.identity.key=:identityKey and grant.resource.key=:resourceKey")
+		  .append("   and membership.role=grant.role");
+		return dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), String.class)
+				.setParameter("identityKey", identity.getKey())
+				.setParameter("resourceKey", resource.getKey())
+				.getResultList();
+	}
+	
 	public List<Grant> getGrants(Group group, String role) {
 		StringBuilder sb = new StringBuilder();
 		sb.append("select grant from bgrant as grant")
diff --git a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java
index fef06048e548a957649c121b5696cbb061219c65..b55887050e475483577d462c12d5b8a09d6c249e 100644
--- a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java
+++ b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java
@@ -123,15 +123,14 @@ public class PersistingCourseGroupManager extends BasicManager implements Course
 	 * @see org.olat.course.groupsandrights.CourseGroupManager#hasRight(org.olat.core.id.Identity,
 	 *      java.lang.String)
 	 */
+	@Override
 	public boolean hasRight(Identity identity, String courseRight) {
-		boolean hasRight = rightManager.hasBGRight(courseRight, identity, getCourseResource());
-		return hasRight;
+		return rightManager.hasBGRight(courseRight, identity, getCourseResource());
 	}
-	
+
+	@Override
 	public List<String> getRights(Identity identity) {
-		return Collections.emptyList();
-				
-				//TODO groups securityManager.getIdentityPermissionOnresourceable(identity, getCourseResource());
+		return rightManager.getBGRights(identity, getCourseResource());
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/course/member/CourseBusinessGroupListController.java b/src/main/java/org/olat/course/member/CourseBusinessGroupListController.java
index 33fc04185164fd766a557e9cbd90e7d5d68b3a90..0e540a1286fd6613c65fb7f17505c07ce0f33b0f 100644
--- a/src/main/java/org/olat/course/member/CourseBusinessGroupListController.java
+++ b/src/main/java/org/olat/course/member/CourseBusinessGroupListController.java
@@ -196,10 +196,12 @@ public class CourseBusinessGroupListController extends AbstractBusinessGroupList
 			cmc.deactivate();
 			cleanUpPopups();
 			addGroupsToCourse(selectedGroups);
+			fireEvent(ureq, Event.CHANGED_EVENT);
 		} else if (source == confirmRemoveResource) {
 			if (DialogBoxUIFactory.isYesEvent(event)) { // yes case
 				BusinessGroup group = (BusinessGroup)confirmRemoveResource.getUserObject();
 				doRemoveBusinessGroups(Collections.singletonList(group));
+				fireEvent(ureq, Event.CHANGED_EVENT);
 			}
 		} else if (source == confirmRemoveMultiResource) {
 			if (DialogBoxUIFactory.isYesEvent(event)) { // yes case
diff --git a/src/main/java/org/olat/course/member/MembersManagementMainController.java b/src/main/java/org/olat/course/member/MembersManagementMainController.java
index 542cc993e3185a4a33f56c614f988bdf03037a7f..7165fdb35ace9d34c4edb6afe77c88892458e896 100644
--- a/src/main/java/org/olat/course/member/MembersManagementMainController.java
+++ b/src/main/java/org/olat/course/member/MembersManagementMainController.java
@@ -21,7 +21,6 @@ package org.olat.course.member;
 
 import java.util.List;
 
-import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
@@ -52,6 +51,7 @@ import org.olat.resource.accesscontrol.ACService;
 import org.olat.resource.accesscontrol.AccessControlModule;
 import org.olat.resource.accesscontrol.ui.OrdersAdminController;
 import org.olat.util.logging.activity.LoggingResourceable;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * 
@@ -73,16 +73,18 @@ public class MembersManagementMainController extends MainLayoutBasicController
 	private MembersOverviewController membersOverviewCtrl;
 	private GroupsAndRightsController rightsController;
 	
-	private final ACService acService;
-	private final RepositoryEntry repoEntry;
-	private final AccessControlModule acModule;
+	private boolean membersDirty;
+	private RepositoryEntry repoEntry;
+	
+	@Autowired
+	private ACService acService;
+	@Autowired
+	private AccessControlModule acModule;
 
 	public MembersManagementMainController(UserRequest ureq, WindowControl wControl, RepositoryEntry re) {
 		super(ureq, wControl);
 		this.repoEntry = re;
-		acModule = CoreSpringFactory.getImpl(AccessControlModule.class);
-		acService = CoreSpringFactory.getImpl(ACService.class);
-		
+
 		//logging
 		getUserActivityLogger().setStickyActionType(ActionType.admin);
 		ICourse course = CourseFactory.loadCourse(re.getOlatResource());
@@ -150,6 +152,16 @@ public class MembersManagementMainController extends MainLayoutBasicController
 		}
 	}
 	
+	@Override
+	protected void event(UserRequest ureq, Controller source, Event event) {
+		if(groupsCtrl == source) {
+			if(event == Event.CHANGED_EVENT) {
+				membersDirty = true;
+			}
+		}
+		super.event(ureq, source, event);
+	}
+
 	@Override
 	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
 		if(entries == null || entries.isEmpty()) return;
@@ -174,6 +186,8 @@ public class MembersManagementMainController extends MainLayoutBasicController
 			if(membersOverviewCtrl == null) {
 				membersOverviewCtrl = new MembersOverviewController(ureq, bwControl, repoEntry);
 				listenTo(membersOverviewCtrl);
+			} else if(membersDirty) {
+				membersOverviewCtrl.reloadMembers();
 			}
 			mainVC.put("content", membersOverviewCtrl.getInitialComponent());
 			selectedCtrl = membersOverviewCtrl;
diff --git a/src/main/java/org/olat/course/member/MembersOverviewController.java b/src/main/java/org/olat/course/member/MembersOverviewController.java
index b7e277f6233455e66157379c609a760f9aade51f..0382a56d327d440aa64b63bdda78a9485ae35fbb 100644
--- a/src/main/java/org/olat/course/member/MembersOverviewController.java
+++ b/src/main/java/org/olat/course/member/MembersOverviewController.java
@@ -236,6 +236,30 @@ public class MembersOverviewController extends BasicController implements Activa
 		dedupCtrl = null;
 		cmc = null;
 	}
+	
+	protected void reloadMembers() {
+		if(allMemberListCtrl != null) {
+			allMemberListCtrl.reloadModel();
+		}
+		if(ownersCtrl != null) {
+			ownersCtrl.reloadModel();
+		}
+		if(tutorsCtrl != null) {
+			tutorsCtrl.reloadModel();
+		}
+		if(participantsCtrl != null) {
+			participantsCtrl.reloadModel();
+		}
+		if(waitingCtrl != null) {
+			waitingCtrl.reloadModel();
+		}
+		if(selectedCtrl != null) {
+			selectedCtrl.reloadModel();
+		}
+		if(searchCtrl != null) {
+			searchCtrl.reloadModel();
+		}
+	}
 
 	private void doChooseMembers(UserRequest ureq) {
 		removeAsListenerAndDispose(importMembersWizard);
diff --git a/src/main/java/org/olat/group/right/BGRightManager.java b/src/main/java/org/olat/group/right/BGRightManager.java
index 6a54cb5952ef8d0a47d496baa00c37060fa5f594..24427f68d79b934bfb1df74ccb03637259d26176 100644
--- a/src/main/java/org/olat/group/right/BGRightManager.java
+++ b/src/main/java/org/olat/group/right/BGRightManager.java
@@ -97,6 +97,14 @@ public interface BGRightManager {
 	 *         right in the given resource
 	 */
 	public boolean hasBGRight(String bgRight, IdentityRef identity, OLATResource resource);
+	
+	/**
+	 * 
+	 * @param identity
+	 * @param resource
+	 * @return
+	 */
+	public List<String> getBGRights(IdentityRef identity, OLATResource resource);
 
 	/**
 	 * @param rightGroup
diff --git a/src/main/java/org/olat/group/right/BGRightManagerImpl.java b/src/main/java/org/olat/group/right/BGRightManagerImpl.java
index cc4109a96702c58276f3d30f25fa2a02c827ffc8..113d498c2386a68fd0a9ce7bffad6ba90b562924 100644
--- a/src/main/java/org/olat/group/right/BGRightManagerImpl.java
+++ b/src/main/java/org/olat/group/right/BGRightManagerImpl.java
@@ -122,6 +122,11 @@ public class BGRightManagerImpl extends BasicManager implements BGRightManager {
 	public boolean hasBGRight(String bgRight, IdentityRef identity, OLATResource resource) {
 		return groupDao.hasGrant(identity, bgRight, resource);
 	}
+	
+	@Override
+	public List<String> getBGRights(IdentityRef identity, OLATResource resource) {
+		return groupDao.getPermissions(identity, resource);
+	}
 
 	/**
 	 * @see org.olat.group.right.BGRightManager#findBGRights(org.olat.group.BusinessGroup)
diff --git a/src/main/java/org/olat/group/ui/main/AbstractBusinessGroupListController.java b/src/main/java/org/olat/group/ui/main/AbstractBusinessGroupListController.java
index af140de1ec66c52debeb23eb95d2e9fe4733cbb4..f8597eb94f8195feaad05723df43d549e878e1d3 100644
--- a/src/main/java/org/olat/group/ui/main/AbstractBusinessGroupListController.java
+++ b/src/main/java/org/olat/group/ui/main/AbstractBusinessGroupListController.java
@@ -434,6 +434,7 @@ public abstract class AbstractBusinessGroupListController extends FormBasicContr
 				String businessPath = "[BusinessGroup:" + group.getKey() + "]";
 				NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl());
 			}
+			fireEvent(ureq, Event.CHANGED_EVENT);
 		} else if (source == businessGroupWizard) { 
 			if(event == Event.CANCELLED_EVENT || event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) {
 				getWindowControl().pop();