From fc5ce952f44d471e98bee9eda8fe5715e7dc2769 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Thu, 16 Aug 2012 14:31:25 +0200
Subject: [PATCH] OO-291: fix the permission to manage, merge, configure a
 batch of groups, fix the permission in the configuration wizard for quota and
 course assignment, remove unused i18n keys, remove unused velocity templates,
 fix payment method not displayed in booking. fix booking of group with
 waiting list, fix red screen booking a group

---
 .../gui/components/tabbedpane/TabbedPane.java |  6 +--
 .../manager/BusinessGroupRelationDAO.java     | 18 +++++++++
 .../manager/BusinessGroupServiceImpl.java     | 27 ++++++++++---
 .../ui/edit/BusinessGroupAreasController.java | 23 ++++++++---
 .../ui/edit/BusinessGroupEditController.java  |  6 +++
 .../BusinessGroupEditResourceController.java  | 17 +++-----
 .../group/ui/edit/_content/tab_bgAreas.html   |  2 +-
 .../AbstractBusinessGroupListController.java  | 39 +++++++++++++++----
 .../main/BusinessGroupTableModelWithType.java | 34 ++++++++++++++++
 .../olat/group/ui/main/_content/buddy.html    |  6 ---
 .../olat/group/ui/main/_content/learning.html |  6 ---
 .../olat/group/ui/main/_content/right.html    |  6 ---
 .../ui/main/_i18n/LocalStrings_ar.properties  |  4 --
 .../ui/main/_i18n/LocalStrings_bg.properties  |  4 --
 .../ui/main/_i18n/LocalStrings_cs.properties  |  2 -
 .../ui/main/_i18n/LocalStrings_da.properties  |  4 --
 .../ui/main/_i18n/LocalStrings_de.properties  | 15 +++----
 .../ui/main/_i18n/LocalStrings_el.properties  |  4 --
 .../ui/main/_i18n/LocalStrings_en.properties  |  5 +--
 .../ui/main/_i18n/LocalStrings_es.properties  |  4 --
 .../ui/main/_i18n/LocalStrings_fa.properties  |  4 --
 .../ui/main/_i18n/LocalStrings_fr.properties  |  5 +--
 .../ui/main/_i18n/LocalStrings_it.properties  |  4 --
 .../ui/main/_i18n/LocalStrings_jp.properties  |  3 --
 .../ui/main/_i18n/LocalStrings_lt.properties  |  4 --
 .../main/_i18n/LocalStrings_nl_NL.properties  |  4 --
 .../ui/main/_i18n/LocalStrings_pl.properties  |  4 --
 .../main/_i18n/LocalStrings_pt_BR.properties  |  4 --
 .../main/_i18n/LocalStrings_pt_PT.properties  |  4 --
 .../ui/main/_i18n/LocalStrings_ru.properties  |  4 --
 .../ui/main/_i18n/LocalStrings_sq.properties  |  4 --
 .../main/_i18n/LocalStrings_zh_CN.properties  |  4 --
 .../main/_i18n/LocalStrings_zh_TW.properties  |  4 --
 .../run/BusinessGroupMainRunController.java   | 26 +++++++++++++
 .../olat/group/ui/run/_content/waiting.html   |  4 ++
 .../ui/run/_i18n/LocalStrings_de.properties   |  1 +
 .../group/ui/wizard/BGConfigToolsStep.java    | 17 ++++++--
 .../wizard/BGConfigToolsStepController.java   | 19 +++++----
 .../olat/repository/RepositoryTableModel.java |  5 +++
 .../manager/ACFrontendManager.java            | 22 +++++------
 .../accesscontrol/model/AccessMethod.java     |  2 +
 .../accesscontrol/model/FreeAccessMethod.java |  5 +++
 .../model/TokenAccessMethod.java              |  5 +++
 .../provider/paypal/PaypalAccessHandler.java  |  2 +-
 .../paypal/model/PaypalAccessMethod.java      |  5 +++
 .../ui/AccessMethodRenderer.java              |  6 +--
 .../accesscontrol/ui/OrdersDataModel.java     | 15 +++++--
 47 files changed, 251 insertions(+), 167 deletions(-)
 delete mode 100644 src/main/java/org/olat/group/ui/main/_content/buddy.html
 delete mode 100644 src/main/java/org/olat/group/ui/main/_content/learning.html
 delete mode 100644 src/main/java/org/olat/group/ui/main/_content/right.html
 create mode 100644 src/main/java/org/olat/group/ui/run/_content/waiting.html

diff --git a/src/main/java/org/olat/core/gui/components/tabbedpane/TabbedPane.java b/src/main/java/org/olat/core/gui/components/tabbedpane/TabbedPane.java
index 947247ab2f7..03465af175d 100644
--- a/src/main/java/org/olat/core/gui/components/tabbedpane/TabbedPane.java
+++ b/src/main/java/org/olat/core/gui/components/tabbedpane/TabbedPane.java
@@ -59,8 +59,8 @@ public class TabbedPane extends Container implements Activateable2 {
 	 */
 	protected static final String PARAM_PANE_ID = "taid";
 
-	private List tabbedPanes = new ArrayList(4);
-	private List displayNames = new ArrayList(4);
+	private List<Component> tabbedPanes = new ArrayList<Component>(4);
+	private List<String> displayNames = new ArrayList<String>(4);
 	private BitSet disabledPanes = new BitSet(4);
 	private int selectedPane = -1;
 	
@@ -188,7 +188,7 @@ public class TabbedPane extends Container implements Activateable2 {
 	 * 
 	 * @return int
 	 */
-	protected int getSelectedPane() {
+	public int getSelectedPane() {
 		return selectedPane;
 	}
 
diff --git a/src/main/java/org/olat/group/manager/BusinessGroupRelationDAO.java b/src/main/java/org/olat/group/manager/BusinessGroupRelationDAO.java
index 6650446a861..09655959d32 100644
--- a/src/main/java/org/olat/group/manager/BusinessGroupRelationDAO.java
+++ b/src/main/java/org/olat/group/manager/BusinessGroupRelationDAO.java
@@ -277,6 +277,24 @@ public class BusinessGroupRelationDAO {
 		return query.getResultList();
 	}
 	
+	public List<BGResourceRelation> findRelations(Collection<Long> groupKeys, int firstResult, int maxResults) {
+		if(groupKeys == null || groupKeys.isEmpty()) {
+			return Collections.emptyList();
+		}
+
+		StringBuilder sb = new StringBuilder();
+		sb.append("select rel from ").append(BGResourceRelation.class.getName()).append(" as rel ")
+			.append(" where rel.group.key in (:groupKeys)");
+
+		TypedQuery<BGResourceRelation> query = dbInstance.getCurrentEntityManager().createQuery(sb.toString(), BGResourceRelation.class);
+		query.setFirstResult(firstResult);
+		if(maxResults > 0) {
+			query.setMaxResults(maxResults);
+		}
+		query.setParameter("groupKeys", groupKeys);
+		return query.getResultList();
+	}
+	
 	private boolean and(StringBuilder sb, boolean and) {
 		if(and) sb.append(" and ");
 		else sb.append(" where ");
diff --git a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java
index 6fb6478cd32..914c511e147 100644
--- a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java
+++ b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java
@@ -76,6 +76,7 @@ import org.olat.group.area.BGArea;
 import org.olat.group.area.BGAreaManager;
 import org.olat.group.model.AddToGroupsEvent;
 import org.olat.group.model.BGRepositoryEntryRelation;
+import org.olat.group.model.BGResourceRelation;
 import org.olat.group.model.BusinessGroupEnvironment;
 import org.olat.group.model.DisplayMembers;
 import org.olat.group.model.MembershipModification;
@@ -206,8 +207,8 @@ public class BusinessGroupServiceImpl implements BusinessGroupService, UserDataD
 				BusinessGroup bg = loadBusinessGroup(group);
 				bg.setName(name);
 				bg.setDescription(description);
-				bg.setMaxParticipants(minParticipants);
-				bg.setMinParticipants(maxParticipants);
+				bg.setMaxParticipants(maxParticipants);
+				bg.setMinParticipants(minParticipants);
 				bg.setLastUsage(new Date(System.currentTimeMillis()));
 				return businessGroupDAO.merge(bg);
 			}
@@ -223,8 +224,8 @@ public class BusinessGroupServiceImpl implements BusinessGroupService, UserDataD
 				BusinessGroup bg = loadBusinessGroup(group);
 				bg.setName(name);
 				bg.setDescription(description);
-				bg.setMaxParticipants(minParticipants);
-				bg.setMinParticipants(maxParticipants);
+				bg.setMaxParticipants(maxParticipants);
+				bg.setMinParticipants(minParticipants);
 				bg.setWaitingListEnabled(waitingList);
 				if (waitingList != null && waitingList.booleanValue() && bg.getWaitingGroup() == null) {
 					// Waitinglist is enabled but not created => Create waitingGroup
@@ -1216,9 +1217,25 @@ public class BusinessGroupServiceImpl implements BusinessGroupService, UserDataD
 	public void addResourcesTo(List<BusinessGroup> groups, List<OLATResource> resources) {
 		if(groups == null || groups.isEmpty()) return;
 		if(resources == null || resources.isEmpty()) return;
+		
+		List<Long> groupKeys = new ArrayList<Long>();
+		for(BusinessGroup group:groups) {
+			groupKeys.add(group.getKey());
+		}
+
+		//check for duplicate entries
+		List<BGResourceRelation> relations = businessGroupRelationDAO.findRelations(groupKeys, 0, -1);
 		for(BusinessGroup group:groups) {
 			for(OLATResource resource:resources) {
-				addResourceTo(group, resource);
+				boolean relationExists = false;
+				for(BGResourceRelation relation:relations) {
+					if(relation.getGroup().equals(group) && relation.getResource().equals(resource)) {
+						relationExists = true;
+					}
+				}
+				if(!relationExists) {
+					addResourceTo(group, resource);
+				}
 			}
 		}
 	}
diff --git a/src/main/java/org/olat/group/ui/edit/BusinessGroupAreasController.java b/src/main/java/org/olat/group/ui/edit/BusinessGroupAreasController.java
index c32a61f40d4..0afd504df31 100644
--- a/src/main/java/org/olat/group/ui/edit/BusinessGroupAreasController.java
+++ b/src/main/java/org/olat/group/ui/edit/BusinessGroupAreasController.java
@@ -32,6 +32,7 @@ import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
+import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
@@ -54,40 +55,46 @@ public class BusinessGroupAreasController extends FormBasicController {
 	private final BusinessGroupService businessGroupService;
 	
 	public BusinessGroupAreasController(UserRequest ureq, WindowControl wControl, BusinessGroup businessGroup) {
-		super(ureq, wControl);
+		super(ureq, wControl, "tab_bgAreas");
 		
 		this.businessGroup = businessGroup;
 		areaManager = CoreSpringFactory.getImpl(BGAreaManager.class);
 		businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class);
 		
 		initForm(ureq);
-		updateBusinessGroup(businessGroup);
+		updateBusinessGroup(ureq, businessGroup);
 	}
 	
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		setFormTitle("fieldset.legend.areas");
-		setFormContextHelp("org.olat.group.ui.edit", "grp-select-area.html", "help.hover.bgArea");
+		//
 	}
 	
-	private void updateBusinessGroup(BusinessGroup businessGroup) {
+	private void updateBusinessGroup(UserRequest ureq, BusinessGroup businessGroup) {
 		this.businessGroup = businessGroup;
 		for(FormItem item: flc.getFormComponents().values()) {
 			flc.remove(item);
 		}
 		
+		FormLayoutContainer choiceContainer = FormLayoutContainer.createDefaultFormLayout("areasChoice", getTranslator());
+		choiceContainer.setRootForm(mainForm);
+		flc.add(choiceContainer);
+		
+		boolean hasAreas = false;
 		List<BGArea> selectedAreas = areaManager.findBGAreasOfBusinessGroup(businessGroup);
 		List<RepositoryEntry> entries = businessGroupService.findRepositoryEntries(Collections.singletonList(businessGroup), 0, -1);
 		for(RepositoryEntry entry:entries) {
 			List<BGArea> areas = areaManager.findBGAreasInContext(entry.getOlatResource());
 			if(areas.isEmpty()) continue;
+			
+			hasAreas |= true;
 			String[] keys = new String[areas.size()];
 			String[] values = new String[areas.size()];
 			for(int i=areas.size(); i-->0; ) {
 				keys[i] = areas.get(i).getKey().toString();
 				values[i] = areas.get(i).getName();
 			}
-			MultipleSelectionElement el = uifactory.addCheckboxesVertical("repo_" + entry.getKey(), null, flc, keys, values, null, 1);
+			MultipleSelectionElement el = uifactory.addCheckboxesVertical("repo_" + entry.getKey(), null, choiceContainer, keys, values, null, 1);
 			el.setLabel(entry.getDisplayname(), null, false);
 			el.showLabel(true);
 			el.setUserObject(entry.getOlatResource());
@@ -102,6 +109,10 @@ public class BusinessGroupAreasController extends FormBasicController {
 				}
 			}
 		}
+		
+		flc.contextPut("noAreasFound", new Boolean(!hasAreas));
+		boolean isAdmin = (ureq.getUserSession().getRoles().isOLATAdmin() || ureq.getUserSession().getRoles().isGroupManager());
+		flc.contextPut("noAreasFound", new Boolean(isAdmin));
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/group/ui/edit/BusinessGroupEditController.java b/src/main/java/org/olat/group/ui/edit/BusinessGroupEditController.java
index bba1b084943..dc465c1f203 100644
--- a/src/main/java/org/olat/group/ui/edit/BusinessGroupEditController.java
+++ b/src/main/java/org/olat/group/ui/edit/BusinessGroupEditController.java
@@ -181,6 +181,8 @@ public class BusinessGroupEditController extends BasicController implements Cont
 		hasResources = businessGroupService.hasResources(currBusinessGroup);
 		
 		tabAccessCtrl = getAccessController(ureq);
+		
+		int currentSelectedPane = tabbedPane.getSelectedPane();
 
 		tabbedPane.removeAll();
 		editDetailsController.setAllowWaitingList(tabAccessCtrl == null || !tabAccessCtrl.isPaymentMethodInUse());
@@ -208,6 +210,10 @@ public class BusinessGroupEditController extends BasicController implements Cont
 		if(tabAccessCtrl != null) {
 			tabbedPane.addTab(translate("group.edit.tab.accesscontrol"), tabAccessCtrl.getInitialComponent());
 		}
+		
+		if(currentSelectedPane > 0) {
+			tabbedPane.setSelectedPane(currentSelectedPane);
+		}
 	}
 	
 	/**
diff --git a/src/main/java/org/olat/group/ui/edit/BusinessGroupEditResourceController.java b/src/main/java/org/olat/group/ui/edit/BusinessGroupEditResourceController.java
index 0e7c19b2691..9f1604c1083 100644
--- a/src/main/java/org/olat/group/ui/edit/BusinessGroupEditResourceController.java
+++ b/src/main/java/org/olat/group/ui/edit/BusinessGroupEditResourceController.java
@@ -29,7 +29,6 @@ import java.util.Collections;
 import java.util.List;
 
 import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.persistence.PersistenceHelper;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.link.Link;
@@ -74,7 +73,6 @@ public class BusinessGroupEditResourceController extends BasicController impleme
 
 	private TableController resourcesCtr;
 	private RepositoryTableModel repoTableModel;
-	private List<RepositoryEntry> repoTableModelEntries;
 	private ReferencableEntriesSearchController repoSearchCtr;
 	private CloseableModalController cmc;
 	private DialogBoxController confirmRemoveResource;
@@ -102,7 +100,7 @@ public class BusinessGroupEditResourceController extends BasicController impleme
 		listenTo(resourcesCtr);
 
 		repoTableModel = new RepositoryTableModel(resourceTrans);
-		repoTableModelEntries = businessGroupService.findRepositoryEntries(Collections.singletonList(group), 0, -1);
+		List<RepositoryEntry> repoTableModelEntries = businessGroupService.findRepositoryEntries(Collections.singletonList(group), 0, -1);
 		repoTableModel.setObjects(repoTableModelEntries);
 		repoTableModel.addColumnDescriptors(resourcesCtr, translate("resources.remove"), false);
 		resourcesCtr.setTableDataModel(repoTableModel);
@@ -143,13 +141,10 @@ public class BusinessGroupEditResourceController extends BasicController impleme
 				RepositoryEntry re = repoSearchCtr.getSelectedEntry();
 				removeAsListenerAndDispose(repoSearchCtr);
 				cmc.deactivate();
-				if (re != null && !repoTableModelEntries.contains(re)) {
+				if (re != null && !repoTableModel.getObjects().contains(re)) {
 					// check if already in model
-					boolean alreadyAssociated = PersistenceHelper.listContainsObjectByKey(repoTableModelEntries, re);
-					if (!alreadyAssociated) {
-						doAddRepositoryEntry(re);
-						fireEvent(ureq, Event.CHANGED_EVENT);
-					}
+					doAddRepositoryEntry(re);
+					fireEvent(ureq, Event.CHANGED_EVENT);
 				}
 			}
 		} else if (source == resourcesCtr) {
@@ -175,13 +170,13 @@ public class BusinessGroupEditResourceController extends BasicController impleme
 	
 	private void doRemoveResource(RepositoryEntry entry) {
 		businessGroupService.removeResourceFrom(group, entry.getOlatResource());
-		repoTableModelEntries.remove(entry);
+		repoTableModel.getObjects().remove(entry);
 		resourcesCtr.modelChanged();
 	}
 
 	private void doAddRepositoryEntry(RepositoryEntry entry) {
 		businessGroupService.addResourceTo(group, entry.getOlatResource());
-		repoTableModelEntries.add(entry);
+		repoTableModel.addObject(entry);
 		resourcesCtr.modelChanged();
 	}
 	
diff --git a/src/main/java/org/olat/group/ui/edit/_content/tab_bgAreas.html b/src/main/java/org/olat/group/ui/edit/_content/tab_bgAreas.html
index afe05e50b89..d5c36cc8d8e 100644
--- a/src/main/java/org/olat/group/ui/edit/_content/tab_bgAreas.html
+++ b/src/main/java/org/olat/group/ui/edit/_content/tab_bgAreas.html
@@ -1,6 +1,6 @@
 <fieldset>
 	<legend>$r.translate("fieldset.legend.areas")</legend>
-	$r.contextHelpWithWrapper("org.olat.group.ui.edit","grp-${type}-select-area.html","help.hover.bgArea-${type}")
+	$r.contextHelpWithWrapper("org.olat.group.ui.edit","grp-select-area.html","help.hover.bgArea")
 #if ($noAreasFound)
 	#if ($isGmAdmin)
 		$r.translate("areachoice.no.areas.admin")
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 e4319e39e54..ce580ab9ec1 100644
--- a/src/main/java/org/olat/group/ui/main/AbstractBusinessGroupListController.java
+++ b/src/main/java/org/olat/group/ui/main/AbstractBusinessGroupListController.java
@@ -430,7 +430,7 @@ abstract class AbstractBusinessGroupListController extends BasicController imple
 		removeAsListenerAndDispose(businessGroupWizard);
 		if(items == null || items.isEmpty()) return;
 		
-		List<BusinessGroup> groups = toBusinessGroups(items);
+		List<BusinessGroup> groups = toBusinessGroups(ureq, items, false);
 		
 		boolean enableCoursesCopy = businessGroupService.hasResources(groups);
 		boolean enableAreasCopy = areaManager.countBGAreasOfBusinessGroups(groups) > 0;
@@ -489,9 +489,16 @@ abstract class AbstractBusinessGroupListController extends BasicController imple
 		removeAsListenerAndDispose(businessGroupWizard);
 		if(selectedItems == null || selectedItems.isEmpty()) return;
 		
-		final List<BusinessGroup> groups = toBusinessGroups(selectedItems);
+		final List<BusinessGroup> groups = toBusinessGroups(ureq, selectedItems, true);
+		if(groups.isEmpty()) {
+			showWarning("msg.alleastone.editable.group");
+			return;
+		}
+		
+		boolean isAuthor = ureq.getUserSession().getRoles().isAuthor()
+				|| ureq.getUserSession().getRoles().isInstitutionalResourceManager();
 
-		Step start = new BGConfigToolsStep(ureq);
+		Step start = new BGConfigToolsStep(ureq, isAuthor);
 		StepRunnerCallback finish = new StepRunnerCallback() {
 			@Override
 			public Step execute(UserRequest ureq, WindowControl wControl, StepsRunContext runContext) {
@@ -535,7 +542,7 @@ abstract class AbstractBusinessGroupListController extends BasicController imple
 		removeAsListenerAndDispose(businessGroupWizard);
 		if(selectedItems == null || selectedItems.isEmpty()) return;
 		
-		List<BusinessGroup> groups = toBusinessGroups(selectedItems);
+		List<BusinessGroup> groups = toBusinessGroups(ureq, selectedItems, false);
 
 		Step start = new BGEmailSelectReceiversStep(ureq, groups);
 		StepRunnerCallback finish = new StepRunnerCallback() {
@@ -561,7 +568,11 @@ abstract class AbstractBusinessGroupListController extends BasicController imple
 		removeAsListenerAndDispose(userManagementController);
 		if(selectedItems == null || selectedItems.isEmpty()) return;
 		
-		List<BusinessGroup> groups = toBusinessGroups(selectedItems);
+		List<BusinessGroup> groups = toBusinessGroups(ureq, selectedItems, true);
+		if(groups.isEmpty()) {
+			showWarning("msg.alleastone.editable.group");
+			return;
+		}
 		
 		userManagementController = new BGUserManagementController(ureq, getWindowControl(), groups);
 		listenTo(userManagementController);
@@ -598,7 +609,11 @@ abstract class AbstractBusinessGroupListController extends BasicController imple
 		removeAsListenerAndDispose(businessGroupWizard);
 		if(selectedItems == null || selectedItems.isEmpty()) return;
 
-		final List<BusinessGroup> groups = toBusinessGroups(selectedItems);
+		final List<BusinessGroup> groups = toBusinessGroups(ureq, selectedItems, true);
+		if(groups.isEmpty()) {
+			showWarning("msg.alleastone.editable.group");
+			return;
+		}
 
 		Step start = new BGMergeStep(ureq, groups);
 		StepRunnerCallback finish = new StepRunnerCallback() {
@@ -624,7 +639,12 @@ abstract class AbstractBusinessGroupListController extends BasicController imple
 	 */
 	private void confirmDelete(UserRequest ureq, List<BGTableItem> selectedItems) {
 		StringBuilder names = new StringBuilder();
-		List<BusinessGroup> groups = toBusinessGroups(selectedItems);
+		List<BusinessGroup> groups = toBusinessGroups(ureq, selectedItems, true);
+		if(groups.isEmpty()) {
+			showWarning("msg.alleastone.editable.group");
+			return;
+		}
+
 		for(BusinessGroup group:groups) {
 			if(names.length() > 0) names.append(", ");
 			names.append(group.getName());
@@ -638,11 +658,14 @@ abstract class AbstractBusinessGroupListController extends BasicController imple
 		listenTo(cmc);
 	}
 	
-	private List<BusinessGroup> toBusinessGroups(List<BGTableItem> items) {
+	private List<BusinessGroup> toBusinessGroups(UserRequest ureq, List<BGTableItem> items, boolean editableOnly) {
 		List<Long> groupKeys = new ArrayList<Long>();
 		for(BGTableItem item:items) {
 			groupKeys.add(item.getBusinessGroupKey());
 		}
+		if(editableOnly) {
+			groupListModel.filterEditableGroupKeys(ureq, groupKeys);
+		}
 		List<BusinessGroup> groups = businessGroupService.loadBusinessGroups(groupKeys);
 		return groups;
 	}
diff --git a/src/main/java/org/olat/group/ui/main/BusinessGroupTableModelWithType.java b/src/main/java/org/olat/group/ui/main/BusinessGroupTableModelWithType.java
index ea7158024c7..57ed01a3b20 100644
--- a/src/main/java/org/olat/group/ui/main/BusinessGroupTableModelWithType.java
+++ b/src/main/java/org/olat/group/ui/main/BusinessGroupTableModelWithType.java
@@ -26,10 +26,12 @@
 package org.olat.group.ui.main;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.lang.StringEscapeUtils;
+import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.table.DefaultTableDataModel;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.util.Formatter;
@@ -137,6 +139,38 @@ public class BusinessGroupTableModelWithType extends DefaultTableDataModel<BGTab
 	public Object createCopyWithEmptyList() {
 		return new BusinessGroupTableModelWithType(trans, columnCount);
 	}
+	
+	public boolean filterEditableGroups(UserRequest ureq, List<BusinessGroup> groups) {
+		if(ureq.getUserSession().getRoles().isOLATAdmin() || ureq.getUserSession().getRoles().isGroupManager()) {
+			return false;
+		}
+		
+		int countBefore = groups.size();
+		for(Iterator<BusinessGroup> it=groups.iterator(); it.hasNext(); ) {
+			BusinessGroup group = it.next();
+			BusinessGroupMembership membership = memberships.get(group.getKey());
+			if(membership == null || membership.getOwnerGroupKey() == null) {
+				it.remove();
+			}
+		}
+		return groups.size() != countBefore;
+	}
+	
+	public boolean filterEditableGroupKeys(UserRequest ureq, List<Long> groupKeys) {
+		if(ureq.getUserSession().getRoles().isOLATAdmin() || ureq.getUserSession().getRoles().isGroupManager()) {
+			return false;
+		}
+		
+		int countBefore = groupKeys.size();
+		for(Iterator<Long> it=groupKeys.iterator(); it.hasNext(); ) {
+			Long groupKey = it.next();
+			BusinessGroupMembership membership = memberships.get(groupKey);
+			if(membership == null || membership.getOwnerGroupKey() == null) {
+				it.remove();
+			}
+		}
+		return groupKeys.size() != countBefore;
+	}
 
 	/**
 	 * @param owned
diff --git a/src/main/java/org/olat/group/ui/main/_content/buddy.html b/src/main/java/org/olat/group/ui/main/_content/buddy.html
deleted file mode 100644
index 272b3179ba6..00000000000
--- a/src/main/java/org/olat/group/ui/main/_content/buddy.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<h4 class="b_with_small_icon_left b_group_icon">
-	$r.translate("buddy.header")
-</h4>
-$r.translate("buddy.intro")
-<p />
-$r.render("groupList")
diff --git a/src/main/java/org/olat/group/ui/main/_content/learning.html b/src/main/java/org/olat/group/ui/main/_content/learning.html
deleted file mode 100644
index ac865efc291..00000000000
--- a/src/main/java/org/olat/group/ui/main/_content/learning.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<h4 class="b_with_small_icon_left b_group_icon">
-	$r.translate("learning.header")
-</h4>
-$r.translate("learning.intro")
-<p />
-$r.render("groupList")
diff --git a/src/main/java/org/olat/group/ui/main/_content/right.html b/src/main/java/org/olat/group/ui/main/_content/right.html
deleted file mode 100644
index e39699d1bcc..00000000000
--- a/src/main/java/org/olat/group/ui/main/_content/right.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<h4 class="b_with_small_icon_left b_group_icon">
-	$r.translate("right.header")
-</h4>
-$r.translate("right.intro")
-<p />
-$r.render("groupList")
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_ar.properties
index 2eadb9e246c..dd922137265 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_ar.properties
@@ -1,6 +1,4 @@
 #Sun Feb 21 18:55:04 CET 2010
-buddy.header=\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u0645\u0634\u0631\u0648\u0639
-buddy.intro=\u0641\u0649 \u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062A\u0627\u0644\u064A\u0629 \u062A\u0648\u062C\u062F \u0643\u0644 \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u0645\u0634\u0631\u0648\u0639 \u0627\u0644\u062A\u0649 \u062A\u0634\u0627\u0631\u0643 \u0641\u064A\u0647\u0627.
 create.form.title=\u0625\u0646\u0634\u0627\u0621 \u0645\u062C\u0645\u0648\u0639\u0629 \u0645\u0634\u0631\u0648\u0639 \u062C\u062F\u064A\u062F\u0629
 dialog.modal.bg.delete.text=<p>\u0647\u0644 \u062A\u0631\u064A\u062F \u0641\u0639\u0644\u0627\u064B \u062D\u0630\u0641 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u0634\u0631\u0648\u0639"{0}"\u061F
 dialog.modal.bg.leave.text=<p>\u0647\u0644 \u062A\u0631\u064A\u062F \u0641\u0639\u0644\u0627\u064B \u062A\u0631\u0643 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u0634\u0631\u0648\u0639\u061F <br>\u060C\u0625\u0630\u0627 \u0642\u0645\u062A \u0628\u062A\u0631\u0643 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u0634\u0631\u0648\u0639 "{0}" \u0641\u0625\u0646\u0647 \u0644\u0646 \u064A\u0643\u0648\u0646 \u0644\u062F\u064A\u0643 \u0635\u0644\u0627\u062D\u064A\u0629 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0645\u0648\u0627\u062F \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629
@@ -16,8 +14,6 @@ menu.index=\u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0627\u062A
 menu.index.alt=\u0627\u0639\u0645\u0644 \u0645\u0639 \u0645\u062C\u0645\u0648\u0639\u0627\u062A\u0643
 menu.learninggroups=\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u062A\u0639\u0644\u064A\u0645 \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0649
 menu.learninggroups.alt=\u0627\u0639\u0645\u0644 \u0645\u0639 \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u062A\u0639\u0644\u064A\u0645 \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0643
-menu.rightgroups=\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u062D\u0642\u0648\u0642 \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0649
-menu.rightgroups.alt=\u0627\u0639\u0645\u0644 \u0645\u0639 \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u062D\u0642\u0648\u0642 \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0643
 msg.atleastone=\u064A\u062C\u0628 \u0623\u0646 \u064A\u0643\u0648\u0646 \u0647\u0646\u0627\u0643 \u0645\u0624\u0644\u0641 \u0645\u0633\u0627\u0639\u062F \u0648\u0627\u062D\u062F\u0627\u064B \u0639\u0644\u0649 \u0627\u0644\u0623\u0642\u0644 \u0641\u0649 \u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u0645\u0634\u0631\u0648\u0639.
 right.header=\u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u062D\u0642\u0648\u0642
 right.intro=\u0627\u0644\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u062A\u0627\u0644\u064A\u0629 \u062A\u0648\u0636\u062D \u0643\u0644 \u0645\u062C\u0645\u0648\u0639\u0627\u062A \u0627\u0644\u062D\u0642\u0648\u0642 \u0627\u0644\u062A\u0649 \u062A\u0634\u0627\u0631\u0643 \u0641\u064A\u0647\u0627.
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_bg.properties
index 1420b4fbbd5..e52f016a321 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_bg.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_bg.properties
@@ -1,6 +1,4 @@
 #Mon May 25 18:34:12 CEST 2009
-buddy.header=\u0413\u0440\u0443\u043F\u0438 \u043F\u043E \u043F\u0440\u043E\u0435\u043A\u0442\u0438
-buddy.intro=\u0422\u043E\u0437\u0438 \u0441\u043F\u0438\u0441\u044A\u043A \u043F\u043E\u043A\u0430\u0437\u0432\u0430 \u0432\u0441\u0438\u0447\u043A\u0438 \u0433\u0440\u0443\u043F\u0438 \u043F\u043E \u043F\u0440\u043E\u0435\u043A\u0442\u0438, \u0432 \u043A\u043E\u0438\u0442\u043E \u0443\u0447\u0430\u0441\u0442\u0432\u0430\u0442\u0435.
 create.form.title=\u0421\u044A\u0437\u0434\u0430\u0439\u0442\u0435 \u043D\u043E\u0432\u0430 \u0433\u0440\u0443\u043F\u0430 \u043F\u043E \u043F\u0440\u043E\u0435\u043A\u0442\u0438
 dialog.modal.bg.delete.text=\u041D\u0430\u0438\u0441\u0442\u0438\u043D\u0430 \u043B\u0438 \u0438\u0441\u043A\u0430\u0442\u0435 \u0434\u0430 \u0438\u0437\u0442\u0440\u0438\u0435\u0442\u0435 \u0433\u0440\u0443\u043F\u0430\u0442\u0430 \u043F\u043E \u043F\u0440\u043E\u0435\u043A\u0442\u0438 "{0}" ?<p>
 dialog.modal.bg.leave.text=\u0410\u043A\u043E \u043D\u0430\u043F\u0443\u0441\u043D\u0435\u0442\u0435 \u0433\u0440\u0443\u043F\u0430\u0442\u0430 \u043F\u043E \u043F\u0440\u043E\u0435\u043A\u0442\u0438 "{0}", \u0432\u0438\u0435 \u043D\u044F\u043C\u0430 \u0434\u0430 \u0438\u043C\u0430\u0442\u0435 \u043F\u043E\u0432\u0435\u0447\u0435 \u0434\u043E\u0441\u0442\u044A\u043F. <br>\u041D\u0430\u0438\u0441\u0442\u0438\u043D\u0430 \u043B\u0438 \u0438\u0441\u043A\u0430\u0442\u0435 \u0434\u0430 \u043D\u0430\u043F\u0443\u0441\u043D\u0435\u0442\u0435 \u0442\u0430\u0437\u0438 \u0433\u0440\u0443\u043F\u0430 \u043F\u043E \u043F\u0440\u043E\u0435\u043A\u0442\u0438?<p>
@@ -16,8 +14,6 @@ menu.index=\u0413\u0440\u0443\u043F\u0438
 menu.index.alt=\u0420\u0430\u0431\u043E\u0442\u0435\u0442\u0435 \u0441 \u0432\u0430\u0448\u0438\u0442\u0435 \u0433\u0440\u0443\u043F\u0438
 menu.learninggroups=\u041C\u043E\u0438\u0442\u0435 \u0443\u0447\u0435\u0431\u043D\u0438 \u0433\u0440\u0443\u043F\u0438
 menu.learninggroups.alt=\u0420\u0430\u0431\u043E\u0442\u0435\u0442\u0435 \u0441 \u0432\u0430\u0448\u0438\u0442\u0435 \u043B\u0438\u0447\u043D\u0438 \u0443\u0447\u0435\u0431\u043D\u0438 \u0433\u0440\u0443\u043F\u0438
-menu.rightgroups=\u041C\u043E\u0438\u0442\u0435 \u0433\u0440\u0443\u043F\u0438 \u0441\u044A\u0441 \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u043D\u0438 \u043F\u0440\u0430\u0432\u0430
-menu.rightgroups.alt=\u0420\u0430\u0431\u043E\u0442\u0435\u0442\u0435 \u0441 \u0432\u0430\u0448\u0438\u0442\u0435 \u043B\u0438\u0447\u043D\u0438 \u0433\u0440\u0443\u043F\u0438 \u0441\u044A\u0441 \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u043D\u0438 \u043F\u0440\u0430\u0432\u0430
 msg.atleastone=\u0422\u0440\u044F\u0431\u0432\u0430 \u0434\u0430 \u0438\u043C\u0430 \u043F\u043E\u043D\u0435 \u0435\u0434\u0438\u043D \u0441\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u0438\u043A \u0432 \u0442\u0430\u0437\u0438 \u0433\u0440\u0443\u043F\u0430 \u043F\u043E \u043F\u0440\u043E\u0435\u043A\u0442\u0438.
 right.header=\u0413\u0440\u0443\u043F\u0438 \u0441\u044A\u0441 \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u043D\u0438 \u043F\u0440\u0430\u0432\u0430
 right.intro=\u0422\u043E\u0437\u0438 \u0441\u043F\u0438\u0441\u044A\u043A \u043F\u043E\u043A\u0430\u0437\u0432\u0430 \u0432\u0441\u0438\u0447\u043A\u0438 \u0433\u0440\u0443\u043F\u0438 \u0441\u044A\u0441 \u0441\u043F\u0435\u0446\u0438\u0430\u043B\u043D\u0438 \u043F\u0440\u0430\u0432\u0430, \u0432 \u043A\u043E\u0438\u0442\u043E \u0443\u0447\u0430\u0441\u0442\u0432\u0430\u0442\u0435.
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_cs.properties
index f5e334dced0..3bd202c19ec 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_cs.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_cs.properties
@@ -1,6 +1,4 @@
 #Mon Mar 02 09:54:14 CET 2009
-buddy.header=Projektov\u00E9 skupiny
-buddy.intro=Seznam v\u0161ech projektov\u00FDch skupin, ve kter\u00FDch jste za\u0159azen 
 create.form.title=Vytvo\u0159it novou projektovou skupinu
 dialog.modal.bg.delete.text=Opravdu chcete smazat projektovou skupinu "{0}" ?<p>
 dialog.modal.bg.leave.text=Pokud opust\u00EDte projektovou skupinu "{0}" ji\u017E do n\u00ED nebudete m\u00EDt p\u0159\u00EDstup. <br>Opravdu chcete tuto skupinu opustit?<p>
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_da.properties
index 8897a67d128..842a0216659 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_da.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_da.properties
@@ -1,6 +1,4 @@
 #Mon Mar 02 09:54:09 CET 2009
-buddy.header=Projektgrupper
-buddy.intro=Den f\u00F8lgende liste viser alle projektgrupper du er medlem af.
 create.form.title=Opret ny projektgruppe
 dialog.modal.bg.delete.text=Er du sikker p\u00E5 du vil slette denne projektgruppe "{0}" ?<p>
 dialog.modal.bg.leave.text=Hvis du forlader projektgruppen "{0}" vil du ikke l\u00E6ngere have adgang. <br>Er du sikker p\u00E5 du vil forlade denne projektgruppe
@@ -15,8 +13,6 @@ menu.index=Grupper
 menu.index.alt=Arbejd med dine grupper
 menu.learninggroups=Mine l\u00E6ringsgrupper
 menu.learninggroups.alt=Arbejd med dine personlige l\u00E6ringsgrupper
-menu.rightgroups=Mine rettighedsgrupper
-menu.rightgroups.alt=Arbejd med dine personlige rettighedsgrupper
 msg.atleastone=Der skal v\u00E6re mindst en ejer i denne projektgruppe.
 right.header=Rettighedsgrupper
 right.intro=Den f\u00F8lgende liste viser alle rettighedsgrupper du er medlem af.
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_de.properties
index 3c2a97a88a2..d1de97ec856 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_de.properties
@@ -1,6 +1,4 @@
 #Mon Mar 02 09:54:04 CET 2009
-buddy.header=Arbeitsgruppen
-buddy.intro=In der untenstehenden Liste finden Sie alle Arbeitsgruppen, an denen Sie teilnehmen.
 create.form.title=Neue Arbeitsgruppe erstellen
 create.group=Gruppe erstellen
 create.group.description=Erzeugen Sie eine neue Gruppe mit der unten stehenden Schaltfläche. Als Besitzer dieser Gruppe können Sie danach die Gruppenwerkzeuge freischalten, Benutzer hinzufügen oder die Gruppe veröffentlichen.
@@ -27,11 +25,10 @@ menu.learninggroups=Meine Lerngruppen
 menu.learninggroups.alt=Arbeiten Sie mit Ihren Lerngruppen
 menu.groups=Meine Gruppen
 menu.groups.alt=Arbeiten Sie mit Ihren Gruppen
-menu.rightgroups=Meine Rechtegruppen
-menu.rightgroups.alt=Arbeiten Sie mit Ihren Rechtegruppen
 menu.opengroups=Ver\u00F6ffentlichte Gruppen
 menu.opengroups.alt=Arbeitsgruppen in die \u00F6ffentlich sind und an denen ich teilnehmen kann.
 msg.atleastone=Es muss mindestens ein Besitzer in der Arbeitsgruppe eingetragen sein.
+msg.alleastone.editable.group=Sie m\u00FCssen mindestens eine Gruppe wählen, die Sie besitzen.
 right.header=Rechtegruppen
 right.intro=In dieser Liste finden Sie alle Rechtegruppen, an denen Sie teilnehmen. 
 open.header=Öffentliche Gruppen
@@ -104,11 +101,11 @@ users.group=Benutzer verwalten
 
 notification.mail.added.body=*** Das ist eine automatisch generierte Nachricht. Bitte antworten Sie nicht auf diese Nachricht *** \n\nSie wurden von {0} {1} ({3}) in eine Arbeitsgruppe eingeladen\: \n\nGruppenname\: $groupname\nBeschreibung\: $groupdescription\n\nSind Sie damit nicht einverstanden, so k\u00F6nnen Sie sich aus der Arbeitsgruppe wieder austragen.
 notification.mail.added.self.body=*** Das ist eine automatisch generierte Nachricht. Bitte antworten Sie nicht auf diese Nachricht *** \n\n Sie haben in OLAT eine Arbeitsgruppe eröffnet\: \n\nGruppenname\: $groupname\nBeschreibung\: $groupdescription\n\nSie k\u00F6nnen die Gruppe jederzeit wieder löschen.
-notification.mail.added.self.subject=OLAT-Arbeitsgruppe $groupname
-notification.mail.added.subject=OLAT-Arbeitsgruppe $groupname
+notification.mail.added.self.subject=Gruppe $groupname
+notification.mail.added.subject=Gruppe $groupname
 notification.mail.deleted.body=*** Das ist eine automatisch generierte Nachricht. Bitte antworten Sie nicht auf diese Nachricht *** \n\n Sie wurden von {0} {1} ({3}) aus der Arbeitsgruppe ausgetragen, da sie gel\u00F6scht wurde\: \n\nGruppenname\: $groupname\nBeschreibung\: $groupdescription\n\nBei Fragen kontaktieren Sie bitte {0} {1} ({2}).
-notification.mail.deleted.subject=OLAT-Arbeitsgruppe $groupname\: Die Gruppe wurde gel\u00F6scht
+notification.mail.deleted.subject=Gruppe $groupname\: Die Gruppe wurde gel\u00F6scht
 notification.mail.removed.body=*** Das ist eine automatisch generierte Nachricht. Bitte antworten Sie nicht auf diese Nachricht *** \n\nSie wurden von {0} {1} ({3}) aus der Arbeitsgruppe ausgetragen\: \n\nGruppenname\: $groupname\nBeschreibung\: $groupdescription\n\nBei Fragen kontaktieren Sie bitte {0} {1} ({2}).
 notification.mail.removed.self.body=*** Das ist eine automatisch generierte Nachricht. Bitte antworten Sie nicht auf diese Nachricht *** \n\n Sie haben sich soeben aus der Arbeitsgruppe ausgetragen\: \n\nGruppenname\: $groupname\nBeschreibung\: $groupdescription\n\n
-notification.mail.removed.self.subject=OLAT-Arbeitsgruppe $groupname\: Sie haben sich ausgetragen.
-notification.mail.removed.subject=OLAT-Arbeitsgruppe $groupname\: Sie wurden ausgetragen.
+notification.mail.removed.self.subject=Gruppe $groupname\: Sie haben sich ausgetragen.
+notification.mail.removed.subject=Gruppe $groupname\: Sie wurden ausgetragen.
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_el.properties
index 6b6bb92a14a..02b90871db7 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_el.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_el.properties
@@ -1,6 +1,4 @@
 #Mon Sep 13 14:12:18 CEST 2010
-buddy.header=\u039F\u03BC\u03AC\u03B4\u03B5\u03C2 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2
-buddy.intro=\u0397 \u03C0\u03B1\u03C1\u03B1\u03BA\u03AC\u03C4\u03C9 \u03BB\u03AF\u03C3\u03C4\u03B1 \u03C0\u03B1\u03C1\u03BF\u03C5\u03C3\u03B9\u03AC\u03B6\u03B5\u03B9 \u03CC\u03BB\u03B5\u03C2 \u03C4\u03B9\u03C2 \u03BF\u03BC\u03AC\u03B4\u03B5\u03C2 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2 \u03C3\u03C4\u03B9\u03C2 \u03BF\u03C0\u03BF\u03AF\u03B5\u03C2 \u03C3\u03C5\u03BC\u03BC\u03B5\u03C4\u03AD\u03C7\u03B5\u03C4\u03B5. 
 create.form.title=\u0394\u03B7\u03BC\u03B9\u03BF\u03C1\u03B3\u03AF\u03B1 \u03BD\u03AD\u03B1\u03C2 \u03BF\u03BC\u03AC\u03B4\u03B1\u03C2 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2
 dialog.modal.bg.delete.text=\u0395\u03AF\u03C3\u03C4\u03B5 \u03C3\u03AF\u03B3\u03BF\u03C5\u03C1\u03BF\u03B9 \u03CC\u03C4\u03B9 \u03B8\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03B5\u03C4\u03B5 \u03C4\u03B7\u03BD \u03BF\u03BC\u03AC\u03B4\u03B1 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2 "{0}" ?<p>
 dialog.modal.bg.leave.text=\u0395\u03AC\u03BD \u03B5\u03B3\u03BA\u03B1\u03C4\u03B1\u03BB\u03B5\u03AF\u03C8\u03B5\u03C4\u03B5 \u03C4\u03B7\u03BD \u03BF\u03BC\u03AC\u03B4\u03B1 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2 "{0}" \u03B4\u03B5\u03BD \u03B8\u03B1 \u03AD\u03C7\u03B5\u03C4\u03B5 \u03C0\u03BB\u03AD\u03BF\u03BD \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7. <br>\u0395\u03AF\u03C3\u03C4\u03B5 \u03C3\u03AF\u03B3\u03BF\u03C5\u03C1\u03BF\u03B9 \u03CC\u03C4\u03B9 \u03B8\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B5\u03B3\u03BA\u03B1\u03C4\u03B1\u03BB\u03B5\u03AF\u03C8\u03B5\u03C4\u03B5 \u03C4\u03B7\u03BD \u03BF\u03BC\u03AC\u03B4\u03B1 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2?<p>
@@ -16,8 +14,6 @@ menu.index=\u039F\u03BC\u03AC\u03B4\u03B5\u03C2
 menu.index.alt=\u0395\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03BC\u03B5 \u03C4\u03B9\u03C2 \u03BF\u03BC\u03AC\u03B4\u03B5\u03C2 \u03C3\u03B1\u03C2
 menu.learninggroups=\u039F\u03B9 \u03BF\u03BC\u03AC\u03B4\u03B5\u03C2 \u03BC\u03AC\u03B8\u03B7\u03C3\u03AE\u03C2 \u03BC\u03BF\u03C5
 menu.learninggroups.alt=\u0395\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03BC\u03B5 \u03C4\u03B9\u03C2 \u03C0\u03C1\u03BF\u03C3\u03C9\u03C0\u03B9\u03BA\u03AD\u03C2 \u03C3\u03B1\u03C2 \u03BF\u03BC\u03AC\u03B4\u03B5\u03C2 \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2
-menu.rightgroups=\u039F\u03B9 \u03BF\u03BC\u03AC\u03B4\u03B5\u03C2 \u03B4\u03B9\u03BA\u03B1\u03B9\u03C9\u03BC\u03AC\u03C4\u03C9\u03BD \u03BC\u03BF\u03C5
-menu.rightgroups.alt=\u0395\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03BC\u03B5 \u03C4\u03B9\u03C2 \u03C0\u03C1\u03BF\u03C3\u03C9\u03C0\u03B9\u03BA\u03AD\u03C2 \u03C3\u03B1\u03C2 \u03BF\u03BC\u03AC\u03B4\u03B5\u03C2 \u03B4\u03B9\u03BA\u03B1\u03B9\u03C9\u03BC\u03AC\u03C4\u03C9\u03BD
 msg.atleastone=\u03A0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9 \u03C4\u03BF\u03C5\u03BB\u03AC\u03C7\u03B9\u03C3\u03C4\u03BF\u03BD \u03AD\u03BD\u03B1\u03C2 \u03BA\u03AC\u03C4\u03BF\u03C7\u03BF\u03C2 \u03C3\u03C4\u03B7\u03BD \u03BF\u03BC\u03AC\u03B4\u03B1 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2.
 right.header=\u039F\u03BC\u03AC\u03B4\u03B5\u03C2 \u03B4\u03B9\u03BA\u03B1\u03B9\u03C9\u03BC\u03AC\u03C4\u03C9\u03BD
 right.intro=\u0397 \u03C0\u03B1\u03C1\u03B1\u03BA\u03AC\u03C4\u03C9 \u03BB\u03AF\u03C3\u03C4\u03B1 \u03C0\u03B1\u03C1\u03BF\u03C5\u03C3\u03B9\u03AC\u03B6\u03B5\u03B9 \u03CC\u03BB\u03B5\u03C2 \u03C4\u03B9\u03C2 \u03BF\u03BC\u03AC\u03B4\u03B5\u03C2 \u03B4\u03B9\u03BA\u03B1\u03B9\u03C9\u03BC\u03AC\u03C4\u03C9\u03BD \u03C3\u03C4\u03B9\u03C2 \u03BF\u03C0\u03BF\u03AF\u03B5\u03C2 \u03C3\u03C5\u03BC\u03BC\u03B5\u03C4\u03AD\u03C7\u03B5\u03C4\u03B5. 
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_en.properties
index 20091206e37..3914f6ce5d6 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_en.properties
@@ -1,6 +1,4 @@
 #Wed Aug 15 14:23:55 CEST 2012
-buddy.header=Groups
-buddy.intro=The following list shows all groups you participate in. 
 cif.coursetitle=Course title
 cif.description=Description
 cif.displayname=Name
@@ -37,10 +35,9 @@ menu.learninggroups=My learning groups
 menu.learninggroups.alt=Work with your personal groups
 menu.opengroups=Published groups
 menu.opengroups.alt=Groups that are published and bookable.
-menu.rightgroups=My right groups
-menu.rightgroups.alt=Work with your personal right groups
 merge.group=Merge
 msg.atleastone=There must be at least one owner in this group.
+msg.alleastone.editable.group=You must select at least one group you own.
 notification.mail.added.body=*** This is an automated message. Please do not reply *** \r\n\r\nYou were invited to a group by {0} {1} ({3})\: \r\n\r\nGroup name\: $groupname\r\nDescription\: $groupdescription\r\n\r\nIf you do not agree, you can sign out from this group.
 notification.mail.added.self.body=*** This is an automated message. Please do not reply *** \r\n\r\nYou have created a group in OLAT\: \r\n\r\nGroup name\: $groupname\r\nDescription\: $groupdescription\r\n\r\nYou can delete this group anytime.
 notification.mail.added.self.subject=Group $groupname
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_es.properties
index 3596594b9d3..407a8b2a1c8 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_es.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_es.properties
@@ -1,6 +1,4 @@
 #Wed Mar 04 19:19:37 CET 2009
-buddy.header=Grupos de colaboraci\u00F3n
-buddy.intro=La lista siguiente muestra todos los grupos de colaboraci\u00F3n en los que participas.
 create.form.title=Crear un nuevo grupo de colaboraci\u00F3n
 dialog.modal.bg.delete.text=\u00BFEst\u00E1s seguro de querer eliminar el grupo de colaboraci\u00F3n "{0}"?<p>
 dialog.modal.bg.leave.text=Si abandonas el grupo de colaboraci\u00F3n "{0}" no volver\u00E1s a tener acceso. <br>\u00BFEst\u00E1s seguro de querer abandonar este grupo de colaboraci\u00F3n?<p>
@@ -16,8 +14,6 @@ menu.index=Grupos
 menu.index.alt=Trabaja con tus grupos
 menu.learninggroups=Mis grupos de estudios
 menu.learninggroups.alt=Trabaja con tus grupos de estudios personales
-menu.rightgroups=Mis grupos de permisos
-menu.rightgroups.alt=Trabaja con tus permisos de grupo personales
 msg.atleastone=Al menos debe haber un propietario en el grupo de colaboraci\u00F3n.
 right.header=Grupos de permisos
 right.intro=La lista siguiente muestra todos los grupos de permisos en los que participas.
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_fa.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_fa.properties
index e5dd10d577d..7f39a30a294 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_fa.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_fa.properties
@@ -1,6 +1,4 @@
 #Mon Mar 02 09:54:13 CET 2009
-buddy.header=\u06AF\u0631\u0648\u0647 \u06A9\u0627\u0631\u06CC
-buddy.intro=\u0644\u064A\u0633\u062A \u067E\u0627\u064A\u064A\u0646 \u062A\u0645\u0627\u0645\u064A  \u06AF\u0631\u0648\u0647 \u0647\u0627\u064A\u064A \u06A9\u0627\u0631\u06CC \u0631\u0627 \u06A9\u0647 \u062F\u0631 \u0622\u0646 \u0645\u0634\u0627\u0631\u06A9\u062A \u062F\u0627\u0634\u062A\u0647 \u0627\u064A\u062F \u0646\u0645\u0627\u064A\u0634 \u0645\u064A \u062F\u0647\u062F
 create.form.title=\u0627\u06CC\u062C\u0627\u062F \u06CC\u06A9 \u06AF\u0631\u0648\u0647 \u06A9\u0627\u0631\u06CC \u062C\u062F\u06CC\u062F
 dialog.modal.bg.delete.text=\u0627\u06CC\u0627 \u0634\u0645\u0627 \u0648\u0627\u0642\u0639\u0627 \u0645\u06CC\u062E\u0648\u0627\u0647\u06CC\u062F \u0627\u06CC\u0646 \u06AF\u0631\u0648\u0647 \u06A9\u0627\u0631\u06CC \u0631\u0627 \u062D\u0630\u0641 \u06A9\u0646\u06CC\u062F "{0}"\u0621 ?<p>
 dialog.modal.bg.leave.text=\u0627\u06AF\u0631 \u0634\u0645\u0627 \u0645\u06CC \u062E\u0648\u0627\u0647\u06CC\u062F \u0627\u06CC\u0646 \u06AF\u0631\u0648\u0647 \u06A9\u0627\u0631\u06CC \u0631\u0627 \u062A\u0631\u06A9 \u06A9\u0646\u06CC\u062F "{0}" \u062F\u0633\u062A\u0631\u0633\u06CC \u0634\u0645\u0627 \u0627\u0632 \u0627\u06CC\u0646 \u0628\u0647 \u0628\u0639\u062F \u0645\u0633\u062F\u0648\u062F \u0645\u06CC\u0634\u0648\u062F <br>\u0627\u06CC\u0627 \u0634\u0645\u0627 \u0648\u0627\u0642\u0639\u0627 \u0645\u06CC\u062E\u0648\u0627\u0647\u06CC\u062F \u0628\u0631\u0627\u06CC \u0645\u062F\u062A \u0637\u0648\u0644\u0627\u0646\u06CC \u0627\u06CC\u0646 \u067E\u0631\u0648\u0698\u0647 \u0631\u0627 \u062A\u0631\u06A9 \u06A9\u0646\u06CC\u062F?<p>
@@ -15,8 +13,6 @@ menu.index=\u06AF\u0631\u0648\u0647 \u0647\u0627
 menu.index.alt=\u0641\u0639\u0627\u0644\u06CC\u062A \u062F\u0631 \u0627\u06CC\u0646 \u06AF\u0631\u0648\u0647
 menu.learninggroups=\u06AF\u0631\u0648\u0647 \u0622\u0645\u0648\u0632\u0634\u06CC \u0645\u0646
 menu.learninggroups.alt=\u0641\u0639\u0627\u0644\u06CC\u062A \u062F\u0631 \u06AF\u0631\u0648\u0647 \u06A9\u0627\u0631\u06CC \u0634\u062E\u0635\u06CC \u0634\u0645\u0627
-menu.rightgroups=\u0631\u0627\u06CC\u062A \u06AF\u0631\u0648\u0647 \u0634\u062E\u0635\u06CC
-menu.rightgroups.alt=\u0641\u0639\u0627\u0644\u06CC\u062A \u062F\u0631 \u0631\u0627\u06CC\u062A \u06AF\u0631\u0648\u0647 \u0634\u062E\u0635\u06CC \u0634\u0645\u0627
 msg.atleastone=\u0634\u0645\u0627 \u062D\u062F\u0627\u0642\u0644 \u0628\u0627\u06CC\u062F \u062F\u0631 \u0627\u06CC\u0646 \u06AF\u0631\u0648\u0647 \u06A9\u0627\u0631\u06CC \u0645\u0634\u0627\u0631\u06A9\u062A \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u06CC\u062F
 right.header=\u06AF\u0631\u0648\u0647\u0647\u0627\u06CC \u062F\u0631\u0633\u062A
 right.intro=\u0644\u064A\u0633\u062A \u067E\u0627\u064A\u064A\u0646 \u062A\u0645\u0627\u0645\u064A \u0631\u0627\u064A\u062A \u06AF\u0631\u0648\u0647 \u0647\u0627\u064A\u064A \u0631\u0627 \u06A9\u0647 \u062F\u0631 \u0622\u0646 \u0645\u0634\u0627\u0631\u06A9\u062A \u062F\u0627\u0634\u062A\u0647 \u0627\u064A\u062F \u0646\u0645\u0627\u064A\u0634 \u0645\u064A \u062F\u0647\u062F
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_fr.properties
index add3547140e..0f71c7ac3b4 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_fr.properties
@@ -1,6 +1,4 @@
 #Thu Aug 09 15:23:28 CEST 2012
-buddy.header=Groupes de travail
-buddy.intro=Dans la liste ci-dessus, vous trouvez tous les groupes de travail dont vous faites partie.
 cif.coursetitle=Titre du cours
 cif.description=Description
 cif.displayname=Nom
@@ -37,10 +35,9 @@ menu.learninggroups=Mes groupes d'\u00E9tude
 menu.learninggroups.alt=Travaillez avec vos groupes d'\u00E9tude
 menu.opengroups=Groupes publi\u00E9s
 menu.opengroups.alt=Les groupes qui ont \u00E9t\u00E9 publi\u00E9s et auxquels je peux prendre part.
-menu.rightgroups=Mes groupes de droits
-menu.rightgroups.alt=Travaillez avec vos groupes de droits
 merge.group=R\u00E9unir
 msg.atleastone=Il faut qu'au moins un propri\u00E9taire fasse partie du groupe de travail.
+msg.alleastone.editable.group=Vous devez choisir au moins un groupe dont vous êtes propriétaire,
 notification.mail.added.body=*** Ceci est un message g\u00E9n\u00E9r\u00E9 de mani\u00E8re automatique. Veuillez, SVP., ne pas r\u00E9pondre \u00E0 ce message. *** \r\n\r\nVous avez \u00E9t\u00E9 invit\u00E9(e) par {0} {1} ({3}) dans un groupe de travail \: \r\n\r\nNom du groupe\: $groupname\r\nDescription\: $groupdescription\r\n\r\nSi vous ne y donnez pas votre accord, vous pouvez vous d\u00E9sinscrire du groupe de travail.
 notification.mail.added.self.body=*** Ceci est un message g\u00E9n\u00E9r\u00E9 de mani\u00E8re automatique. Veuillez, SVP., ne pas r\u00E9pondre \u00E0 ce message *** \n\n Vous avez cr\u00E9\u00E9 un groupe de travail dans OLAT \:\n\nNom du groupe\: $groupname\nDescription\: $groupdescription\n\nVous pourrez annuler ce groupe \u00E0 tout moment. 
 notification.mail.added.self.subject=Groupe de travail OLAT $groupname
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_it.properties
index b9c76685ce3..00d8c243a36 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_it.properties
@@ -1,6 +1,4 @@
 #Fri Aug 27 14:54:05 CEST 2010
-buddy.header=Gruppi di lavoro
-buddy.intro=Nella lista sottostante trova tutti i gruppi di lavoro a cui partecipa.
 create.form.title=Creare un nuovo gruppo di lavoro
 dialog.modal.bg.delete.text=Vuole veramente eliminare il gruppo di lavoro "{0}"?<p>
 dialog.modal.bg.leave.text=Se abbandona ora il gruppo di lavoro "{0}" non potr\u00E0 pi\u00F9 accedervi. <br> Vuole veramente abbandonare il gruppo di lavoro?<p>
@@ -16,8 +14,6 @@ menu.index=Gruppi
 menu.index.alt=Lavori con i Suoi gruppi.
 menu.learninggroups=I miei gruppi di studio
 menu.learninggroups.alt=Lavori con i Suoi gruppi di studio.
-menu.rightgroups=I miei gruppi con diritti
-menu.rightgroups.alt=Lavori con i Suoi gruppi con diritti.
 msg.atleastone=Nel gruppo di lavoro deve essere registrato almeno una/un proprietaria/o.
 right.header=Gruppi con diritti
 right.intro=In questa lista trova tutti i gruppi con diritti a cui partecipa.
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_jp.properties
index 4db71d626ae..d151d67dad6 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_jp.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_jp.properties
@@ -1,6 +1,4 @@
 #Thu Jul 15 06:20:46 CEST 2010
-buddy.header=\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B0\u30EB\u30FC\u30D7
-buddy.intro=\u4EE5\u4E0B\u306E\u30EA\u30B9\u30C8\u3067\u306F\u3001\u3042\u306A\u305F\u304C\u53C2\u52A0\u3057\u3066\u3044\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B0\u30EB\u30FC\u30D7\u3059\u3079\u3066\u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059\u3002
 create.form.title=\u65B0\u3057\u3044\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B0\u30EB\u30FC\u30D7\u3092\u4F5C\u6210\u3059\u308B
 dialog.modal.bg.leave.text=\u3042\u306A\u305F\u304C\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B0\u30EB\u30FC\u30D7\u300C{0}\u300D\u3092\u96E2\u308C\u305F\u5834\u5408\u3001\u3053\u308C\u4EE5\u4E0A\u3001\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002<br />\u672C\u5F53\u306B\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B0\u30EB\u30FC\u30D7\u304B\u3089\u96E2\u308C\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B?
 index.header=\u30B0\u30EB\u30FC\u30D7
@@ -12,7 +10,6 @@ learning.intro=\u4EE5\u4E0B\u306E\u30EA\u30B9\u30C8\u3067\u306F\u3001\u3042\u306
 menu.buddygroups=\u30DE\u30A4\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B0\u30EB\u30FC\u30D7
 menu.index=\u30B0\u30EB\u30FC\u30D7
 menu.learninggroups=\u30DE\u30A4\u5B66\u7FD2\u30B0\u30EB\u30FC\u30D7
-menu.rightgroups=\u30DE\u30A4\u6A29\u5229\u30B0\u30EB\u30FC\u30D7
 right.header=\u6A29\u5229\u30B0\u30EB\u30FC\u30D7
 right.intro=\u4EE5\u4E0B\u306E\u30EA\u30B9\u30C8\u3067\u306F\u3001\u3042\u306A\u305F\u304C\u53C2\u52A0\u3057\u3066\u3044\u308B\u3001\u3059\u3079\u3066\u306E\u6A29\u5229\u30B0\u30EB\u30FC\u30D7\u304C\u8868\u793A\u3055\u308C\u3066\u3044\u307E\u3059\u3002
 table.header.bgname=\u540D\u79F0
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_lt.properties
index 9e3104dc10d..43ce0ffb9e7 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_lt.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_lt.properties
@@ -1,6 +1,4 @@
 #Mon Mar 02 09:54:02 CET 2009
-buddy.header=Projekt\u0173 grup\u0117s
-buddy.intro=\u0160is s\u0105ra\u0161as parodo visas projekt\u0173 grupes, kuriose j\u016Bs dalyvaujate.
 create.form.title=Sukurti nauj\u0105 projekto grup\u0119
 dialog.modal.bg.delete.text=Ar j\u016Bs tikrai norite pa\u0161alinti grup\u0119 "{0}" ?<p>
 dialog.modal.bg.leave.text=Jeigu j\u016Bs paliekate projekto grup\u0119 "{0}", j\u016Bs daugiau netur\u0117site pri\u0117jimo. <br>Ar j\u016Bs tikrai norite palikti \u0161i\u0105 projekto grup\u0119?<p>
@@ -15,8 +13,6 @@ menu.index=Grup\u0117s
 menu.index.alt=Dirbti su savo grup\u0117mis
 menu.learninggroups=Mano mokymo grup\u0117s
 menu.learninggroups.alt=Dirbti su mano asmenin\u0117mis mokymo grup\u0117mis
-menu.rightgroups=Mano teisi\u0173 grup\u0117s
-menu.rightgroups.alt=Dirbti su mano asmenin\u0117mis teisi\u0173 grup\u0117mis
 msg.atleastone=Turi b\u016Bti ma\u017Eiausiai vienas savininkas \u0161ioje projekto grup\u0117je.
 right.header=Teisi\u0173 grup\u0117s
 right.intro=\u0160is s\u0105ra\u0161as parodo visas teisi\u0173 grupes, kuriose j\u016Bs dalyvaujate.
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_nl_NL.properties
index c1ffd972028..f179ec89a88 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_nl_NL.properties
@@ -1,6 +1,4 @@
 #Thu Sep 08 16:42:45 CEST 2011
-buddy.header=Projectgroepen
-buddy.intro=De volgende lijst toont alle projectgroepen waaraan u deelneemt.
 create.form.title=Maak een nieuwe projectgroep aan
 dialog.modal.bg.delete.text=Weet u zeker dat u de projectgroep "{0}" ?<p> wilt verwijderen?
 dialog.modal.bg.leave.text=Als u de projectgroep "{0}" verlaat, zal u niet langer toegang hebben. <br>Weet u zeker dat u deze projectgroep wilt verlaten?<p>
@@ -16,8 +14,6 @@ menu.index=Groepen
 menu.index.alt=Werk met jouw groepen
 menu.learninggroups=Mijn leergroepen
 menu.learninggroups.alt=Werk met jouw persoonlijke leergroepen
-menu.rightgroups=Mijn rechtgroepen
-menu.rightgroups.alt=Werk met jouw persoonlijke rechtgroepen
 msg.atleastone=Er moet minstens een eigenaar zijn in deze werkgroep.
 right.header=Rechtgroepen
 right.intro=Volgende link toont alle rechtgroepen waaraan je deelneemt.
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pl.properties
index ed416e389bf..ccb7f1490ad 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pl.properties
@@ -1,6 +1,4 @@
 #Mon Mar 02 09:54:17 CET 2009
-buddy.header=Grupy projektu
-buddy.intro=Poni\u017Csza lista pokazuje wszystkie grupy projektu, w kt\u00F3rych uczestniczysz.
 create.form.title=Utw\u00F3rz now\u0105 grup\u0119 projektu
 dialog.modal.bg.delete.text=Czy na pewno chcesz usn\u0105\u0107 grup\u0119 projektu "{0}" ?<p>
 dialog.modal.bg.leave.text=Je\u015Bli opu\u015Bcisz grup\u0119 projektu "{0}" nie b\u0119dziesz mia\u0142 do niej dost\u0119pu. <br>Czy jeste\u015B pewien?<p>
@@ -18,8 +16,6 @@ menu.learninggroups=Moje grupy edukacyjne
 menu.learninggroups.alt=Pracuj ze swoimi grupami edukacyjnymi
 menu.opengroups=Grupy "opublikowane"
 menu.opengroups.alt=Grupy projektu, kt\u00F3re s\u0105 opublikowane i mo\u017Cna si\u0119 do nich zapisywa\u0107
-menu.rightgroups=Moje grupy uprawnie\u0144
-menu.rightgroups.alt=Pracuj ze swoimi grupami uprawnie\u0144
 msg.atleastone=W grupie projektu musi by\u0107 co najmniej jeden w\u0142a\u015Bciciel.
 right.header=Grupy uprawnie\u0144
 right.intro=Poni\u017Csza lista pokazuje wszystkie grupy uprawnie\u0144, w kt\u00F3rych uczestniczysz.
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pt_BR.properties
index 1b47295f8ac..67efaaf3f6b 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pt_BR.properties
@@ -1,6 +1,4 @@
 #Tue Apr 03 15:05:18 CEST 2012
-buddy.header=Grupos de projeto
-buddy.intro=A seguinte lista mostra todos os grupos de projeto que voc\u00EA participa. 
 cif.description=Descri\u00E7\u00E3o
 cif.displayname=Nome
 cif.error.allempty=Por favor, preencha pelo menos um campo de formul\u00E1rio.
@@ -25,8 +23,6 @@ menu.learninggroups=Meus grupos de estudo
 menu.learninggroups.alt=Trabalhar com seus grupos de estudo pessoais
 menu.opengroups=Grupos publicados
 menu.opengroups.alt=Grupos de projetos que s\u00E3o publicados e reservados.
-menu.rightgroups=Meus grupos de direitos
-menu.rightgroups.alt=Trabalhar com seus grupos de direitos pessoais
 msg.atleastone=Deve haver no m\u00EDnimo um propriet\u00E1rio neste grupo de projeto.
 open.header=Grupos de projetos p\u00FAblicos
 open.intro=Nesta lista voc\u00EA encontrar\u00E1 todos os grupos de projetos publicados que voc\u00EA pode participar
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pt_PT.properties
index 4c0680f8c62..e37f71a3647 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pt_PT.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_pt_PT.properties
@@ -1,6 +1,4 @@
 #Mon Mar 02 09:54:05 CET 2009
-buddy.header=Grupos de projeto
-buddy.intro=A seguinte lista mostra todos os grupos de projeto que voc\u00EA participa. 
 create.form.title=Criar novo grupo de projeto
 dialog.modal.bg.delete.text=Voc\u00EA realmente quer apagar o grupo de projeto "{0}" ?<p>
 dialog.modal.bg.leave.text=Se voc\u00EA deixar o grupo de projeto "{0}" voc\u00EA n\u00E3o ter\u00E1 acesso. <br>Voc\u00EA realmente quer deixar este grupo de projeto?<p>
@@ -15,8 +13,6 @@ menu.index=Grupos
 menu.index.alt=Trabalhar com seus grupos
 menu.learninggroups=Meus grupos de estudo
 menu.learninggroups.alt=Trabalhar com seus grupos de estudo pessoais
-menu.rightgroups=Meus grupos de direitos
-menu.rightgroups.alt=Trabalhar com seus grupos de direitos pessoais
 msg.atleastone=Deve haver no m\u00EDnimo um propriet\u00E1rio neste grupo de projeto.
 right.header=Grupos de direitos
 right.intro=A seguinte lista mostra todos os grupos de direitos que voc\u00EA participa. 
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_ru.properties
index 76f591b8a95..c3cc76c2a14 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_ru.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_ru.properties
@@ -1,6 +1,4 @@
 #Thu Sep 24 00:32:55 CEST 2009
-buddy.header=\u0420\u0430\u0431\u043E\u0447\u0438\u0435 \u0433\u0440\u0443\u043F\u043F\u044B
-buddy.intro=\u0412 \u043D\u0438\u0436\u0435\u0443\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u043C \u0441\u043F\u0438\u0441\u043A\u0435 \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0432\u0441\u0435 \u0440\u0430\u0431\u043E\u0447\u0438\u0435 \u0433\u0440\u0443\u043F\u043F\u044B, \u0432 \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0432\u044B \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442\u0435. 
 create.form.title=\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u0443\u044E \u0440\u0430\u0431\u043E\u0447\u0443\u044E \u0433\u0440\u0443\u043F\u043F\u0443
 dialog.modal.bg.delete.text=\u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0440\u0430\u0431\u043E\u0447\u0443\u044E \u0433\u0440\u0443\u043F\u043F\u0443 "{0}"?<p>
 dialog.modal.bg.leave.text=\u0415\u0441\u043B\u0438 \u0412\u044B \u043F\u043E\u043A\u0438\u043D\u0435\u0442\u0435 \u0440\u0430\u0431\u043E\u0447\u0443\u044E \u0433\u0440\u0443\u043F\u043F\u0443 "{0}", \u0442\u043E \u0443 \u0412\u0430\u0441 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043A \u043D\u0435\u0439. <br> \u0412\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u043F\u043E\u043A\u0438\u043D\u0443\u0442\u044C \u0440\u0430\u0431\u043E\u0447\u0443\u044E \u0433\u0440\u0443\u043F\u043F\u0443?<p>
@@ -16,8 +14,6 @@ menu.index=\u0413\u0440\u0443\u043F\u043F\u044B
 menu.index.alt=\u0420\u0430\u0431\u043E\u0442\u0430 \u0441 \u0412\u0430\u0448\u0438\u043C\u0438 \u0433\u0440\u0443\u043F\u043F\u0430\u043C\u0438 
 menu.learninggroups=\u041C\u043E\u0438 \u0433\u0440\u0443\u043F\u043F\u044B \u043E\u0431\u0443\u0447\u0435\u043D\u0438\u044F
 menu.learninggroups.alt=\u0420\u0430\u0431\u043E\u0442\u0430 \u0441 \u0412\u0430\u0448\u0438\u043C\u0438 \u0433\u0440\u0443\u043F\u043F\u0430\u043C\u0438 \u043E\u0431\u0443\u0447\u0435\u043D\u0438\u044F
-menu.rightgroups=\u041C\u043E\u0438 \u0433\u0440\u0443\u043F\u043F\u044B \u043F\u0440\u0430\u0432 \u0434\u043E\u0441\u0442\u0443\u043F\u0430
-menu.rightgroups.alt=\u0420\u0430\u0431\u043E\u0442\u0430 \u0441 \u0412\u0430\u0448\u0438\u043C\u0438 \u0433\u0440\u0443\u043F\u043F\u0430\u043C\u0438 \u043F\u0440\u0430\u0432 \u0434\u043E\u0441\u0442\u0443\u043F\u0430
 msg.atleastone=\u041F\u043E \u043A\u0440\u0430\u0439\u043D\u0435\u0439 \u043C\u0435\u0440\u0435 \u043E\u0434\u0438\u043D \u0432\u043B\u0430\u0434\u0435\u043B\u0435\u0446 \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0437\u0430\u043D\u0435\u0441\u0451\u043D \u0432 \u0440\u0430\u0431\u043E\u0447\u0443\u044E \u0433\u0440\u0443\u043F\u043F\u0443. 
 right.header=\u0413\u0440\u0443\u043F\u043F\u044B \u043F\u0440\u0430\u0432 \u0434\u043E\u0441\u0442\u0443\u043F\u0430
 right.intro=\u0412 \u043D\u0438\u0436\u0435\u0443\u043A\u0430\u0437\u0430\u043D\u043D\u043E\u043C \u0441\u043F\u0438\u0441\u043A\u0435 \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0432\u0441\u0435 \u0433\u0440\u0443\u043F\u043F\u044B \u043F\u0440\u0430\u0432 \u0434\u043E\u0441\u0442\u0443\u043F\u0430, \u0432 \u043A\u043E\u0442\u043E\u0440\u044B\u0445 \u0432\u044B \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u0435\u0442\u0435.  
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_sq.properties
index ade8deda500..54309def1e7 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_sq.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_sq.properties
@@ -1,6 +1,4 @@
 #Mon Mar 02 09:54:11 CET 2009
-buddy.header=Grupet e projekteve
-buddy.intro=Lista n\u00EB vijim shfaq t\u00EB gjitha grupet e projektit q\u00EB ju i p\u00EBrkisnit. 
 create.form.title=Krijo grup t\u00EB ri t\u00EB m\u00EBsimit
 dialog.modal.bg.delete.text=A doni me t\u00EB v\u00EBrtet\u00EB t\u00EB fshini grupin e projektit "{0}" ?<p>
 dialog.modal.bg.leave.text=N\u00EBse ju e braktisni grupin e projektit "{0}" ju m\u00EB nuk do t\u00EB keni qasje n\u00EB t\u00EB. <br>A doni me t\u00EB v\u00EBrtet\u00EB ta braktisni k\u00EBt\u00EB grup t\u00EB projektit?<p>
@@ -15,8 +13,6 @@ menu.index=Grupet
 menu.index.alt=Puna me grupet tuaja
 menu.learninggroups=Grupe e mia t\u00EB m\u00EBsimit
 menu.learninggroups.alt=Puno me grupet tuaja personale t\u00EB m\u00EBsimit
-menu.rightgroups=Grupet e mia t\u00EB t\u00EB drejtave
-menu.rightgroups.alt=Puna me  grupet personale t\u00EB t\u00EB drejtave
 msg.atleastone=Duhet t\u00EB ket\u00EB t\u00EB pakt\u00EBn nj\u00EB pronar n\u00EB grup projekti.
 right.header=Grupet e t\u00EB t\u00EB drejtave
 right.intro=Lisa n\u00EB vijim shfaq t\u00EB gjitha grupet e t\u00EB drejtave n\u00EB t\u00EB cilat ju i p\u00EBrkisni. 
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_zh_CN.properties
index 17b70020325..3915f79f4ff 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_zh_CN.properties
@@ -1,6 +1,4 @@
 #Tue Dec 01 18:46:08 CET 2009
-buddy.header=\u9879\u76EE\u7EC4
-buddy.intro=\u4E0B\u8868\u662F\u6240\u6709\u4F60\u53C2\u52A0\u7684\u9879\u76EE\u7EC4
 create.form.title=\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u9879\u76EE\u7EC4
 dialog.modal.bg.delete.text=\u4F60\u771F\u7684\u60F3\u8981\u5220\u9664\u9879\u76EE\u7EC4"{0}" \uFF1F<p>
 dialog.modal.bg.leave.text=\u5982\u679C\u4F60\u79BB\u5F00\u9879\u76EE\u7EC4"{0}"\uFF0C\u4F60\u5C06\u5931\u53BB\u8BBF\u95EE\u6743\u9650\u3002<br>\u4F60\u786E\u5B9A\u8981\u79BB\u5F00\u8BE5\u9879\u76EE\u7EC4\u5417\uFF1F<p>
@@ -16,8 +14,6 @@ menu.index=\u7FA4\u7EC4
 menu.index.alt=\u5C0F\u7EC4\u534F\u4F5C
 menu.learninggroups=\u6211\u7684\u5B66\u4E60\u7EC4
 menu.learninggroups.alt=\u4E0E\u4F60\u7684\u5B66\u4E60\u7EC4\u6210\u5458\u534F\u4F5C
-menu.rightgroups=\u6211\u7684\u6743\u9650\u7EC4
-menu.rightgroups.alt=\u4E0E\u4F60\u7684\u6743\u9650\u7EC4\u6210\u5458\u534F\u4F5C
 msg.atleastone=\u8BE5\u9879\u76EE\u7EC4\u4E2D\u81F3\u5C11\u8981\u6709\u4E00\u4E2A\u6240\u6709\u8005\u3002
 right.header=\u6743\u9650\u7EC4
 right.intro=\u4E0B\u8868\u662F\u6240\u6709\u4F60\u53C2\u52A0\u7684\u6743\u9650\u7EC4
diff --git a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_zh_TW.properties
index 0e865caa45b..2ef6d253886 100644
--- a/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_zh_TW.properties
+++ b/src/main/java/org/olat/group/ui/main/_i18n/LocalStrings_zh_TW.properties
@@ -1,6 +1,4 @@
 #Mon Mar 02 09:54:06 CET 2009
-buddy.header=\u5C08\u6848\u7FA4\u7D44
-buddy.intro=\u4E0B\u5217\u7684\u6E05\u55AE\u986F\u793A\u6240\u6709\u60A8\u53C3\u8207\u7684\u5C08\u6848\u7FA4\u7D44\u3002 
 create.form.title=\u5EFA\u7ACB\u4E00\u500B\u65B0\u5C08\u6848\u7FA4\u7D44
 dialog.modal.bg.delete.text=\u60A8\u771F\u7684\u8981\u522A\u9664\u5C08\u6848\u7FA4\u7D44 "{0}" \u55CE\uFF1F<p>
 dialog.modal.bg.leave.text=\u5982\u679C\u60A8\u9000\u51FA\u5C08\u6848\u7FA4\u7D44 "{0}" \u60A8\u5C07\u7121\u6CD5\u518D\u5B58\u53D6\u3002 <br>\u60A8\u771F\u7684\u8981\u9000\u51FA\u9019\u500B\u5C08\u6848\u7FA4\u7D44\u55CE\uFF1F<p>
@@ -16,8 +14,6 @@ menu.index=\u7FA4\u7D44
 menu.index.alt=\u8207\u60A8\u7684\u7FA4\u7D44\u5DE5\u4F5C
 menu.learninggroups=\u6211\u7684\u5B78\u7FD2\u7FA4\u7D44
 menu.learninggroups.alt=\u8207\u60A8\u7684\u500B\u4EBA\u5B78\u7FD2\u7FA4\u7D44\u5DE5\u4F5C
-menu.rightgroups=\u6211\u7684\u6B0A\u9650\u7FA4\u7D44
-menu.rightgroups.alt=\u8207\u60A8\u7684\u500B\u4EBA\u6B0A\u9650\u7FA4\u7D44\u5DE5\u4F5C
 msg.atleastone=\u9019\u500B\u5C08\u6848\u7FA4\u7D44\u81F3\u5C11\u8981\u6709\u4E00\u540D\u64C1\u6709\u8005\u3002
 right.header=\u6B0A\u9650\u7FA4\u7D44
 right.intro=\u4E0B\u5217\u7684\u6E05\u55AE\u986F\u793A\u6240\u6709\u60A8\u53C3\u8207\u7684\u6B0A\u9650\u7FA4\u7D44\u3002 
diff --git a/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java b/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java
index 85062ab7bf5..85defdff7b1 100644
--- a/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java
+++ b/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java
@@ -78,6 +78,7 @@ import org.olat.core.util.resource.OLATResourceableJustBeforeDeletedEvent;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.course.nodes.iq.AssessmentEvent;
 import org.olat.group.BusinessGroup;
+import org.olat.group.BusinessGroupMembership;
 import org.olat.group.BusinessGroupService;
 import org.olat.group.GroupLoggingAction;
 import org.olat.group.model.DisplayMembers;
@@ -232,6 +233,19 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im
 			putInitialPanel(columnLayoutCtr.getInitialComponent());
 			return;
 		}
+		
+
+		List<BusinessGroupMembership> memberships = businessGroupService.getBusinessGroupMembership(getIdentity(), Collections.singletonList(bGroup.getKey()));
+		if(isOnWaitinglist(memberships)) {
+			VelocityContainer vc = createVelocityContainer("waiting");
+			vc.contextPut("name", bGroup.getName());
+			columnLayoutCtr = new LayoutMain3ColsController(ureq, getWindowControl(), null, null, vc, "grouprun");
+			listenTo(columnLayoutCtr); // cleanup on dispose
+			putInitialPanel(columnLayoutCtr.getInitialComponent());
+			return;
+		}
+		
+		
 
 		addLoggingResourceable(LoggingResourceable.wrap(businessGroup));
 		ThreadLocalUserActivityLogger.log(GroupLoggingAction.GROUP_OPEN, getClass());
@@ -306,6 +320,18 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im
 			return;
 		}
 	}
+	
+	private boolean isOnWaitinglist(List<BusinessGroupMembership> memberships) {
+		boolean waiting = false;
+		for(BusinessGroupMembership membership:memberships) {
+			if(membership.getOwnerGroupKey() != null || membership.getParticipantGroupKey() != null) {
+				return false;
+			} else if (membership.getWaitingGroupKey() != null) {
+				waiting = true;
+			}
+		}
+		return waiting;
+	}
 
 	private void exposeGroupDetailsToVC(BusinessGroup currBusinessGroup) {
 		main.contextPut("BuddyGroup", currBusinessGroup);
diff --git a/src/main/java/org/olat/group/ui/run/_content/waiting.html b/src/main/java/org/olat/group/ui/run/_content/waiting.html
new file mode 100644
index 00000000000..f3857c669df
--- /dev/null
+++ b/src/main/java/org/olat/group/ui/run/_content/waiting.html
@@ -0,0 +1,4 @@
+<h4 class="b_with_small_icon_left b_group_icon">
+	$name
+</h4>
+$r.translate("group.on.waitinglist")
\ No newline at end of file
diff --git a/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_de.properties
index 8cce2553a63..1d962d5c143 100644
--- a/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/group/ui/run/_i18n/LocalStrings_de.properties
@@ -2,6 +2,7 @@
 businessgroup.contact.bodytext=\n\n---\nGehe direkt zur Gruppe {0} \: "{1}"
 businessgroup.contact.subject={0} \:
 group.deleted=$org.olat.group.ui\:group.deleted
+group.on.waitinglist=Sie sind auf dem Waiting List. Ein bisschen Geduld!
 groupchat.not.available=$org.olat.instantMessaging.groupchat\:groupchat.not.available
 grouprun.configurationchanged=Die Konfiguration dieser Gruppe wurde ver\u00E4ndert. Die Gruppe wurde neu gestartet.
 grouprun.details.description=Beschreibung
diff --git a/src/main/java/org/olat/group/ui/wizard/BGConfigToolsStep.java b/src/main/java/org/olat/group/ui/wizard/BGConfigToolsStep.java
index 447779b5483..cac267d3c75 100644
--- a/src/main/java/org/olat/group/ui/wizard/BGConfigToolsStep.java
+++ b/src/main/java/org/olat/group/ui/wizard/BGConfigToolsStep.java
@@ -32,17 +32,28 @@ import org.olat.core.gui.control.generic.wizard.StepsRunContext;
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  */
 public class BGConfigToolsStep extends BasicStep {
+	
+	private final boolean isAuthor;
 
-	public BGConfigToolsStep(UserRequest ureq) {
+	public BGConfigToolsStep(UserRequest ureq, boolean isAuthor) {
 		super(ureq);
+		this.isAuthor = isAuthor;
 		
-		setNextStep(new BGConfigResourcesStep(ureq));
+		if(isAuthor) {
+			setNextStep(new BGConfigResourcesStep(ureq));
+		} else {
+			setNextStep(NOSTEP);
+		}
 		setI18nTitleAndDescr("config.tools.title", "config.tools.desc");
 	}
 
 	@Override
 	public PrevNextFinishConfig getInitialPrevNextFinishConfig() {
-		return new PrevNextFinishConfig(false, true, true);
+		if(isAuthor) {
+			return new PrevNextFinishConfig(false, true, true);
+		} else {
+			return new PrevNextFinishConfig(false, false, true);
+		}
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/group/ui/wizard/BGConfigToolsStepController.java b/src/main/java/org/olat/group/ui/wizard/BGConfigToolsStepController.java
index dbb1c942c4f..85e189bc96e 100644
--- a/src/main/java/org/olat/group/ui/wizard/BGConfigToolsStepController.java
+++ b/src/main/java/org/olat/group/ui/wizard/BGConfigToolsStepController.java
@@ -107,11 +107,13 @@ public class BGConfigToolsStepController extends StepFormBasicController {
 				config.configContainer.add("folder", config.folderCtrl.getInitialFormItem());
 				config.folderCtrl.getInitialFormItem().setVisible(false);
 				
-				//add quota configuration
-				Quota quota = quotaManager.createQuota(null, null, null);
-				config.quotaCtrl = new BGConfigQuotaController(ureq, getWindowControl(), quota);
-				config.configContainer.add("quota", config.quotaCtrl.getInitialFormItem());
-				config.quotaCtrl.getInitialFormItem().setVisible(false);
+				//add quota configuration for admin only
+				if(ureq.getUserSession().getRoles().isOLATAdmin()) {
+					Quota quota = quotaManager.createQuota(null, null, null);
+					config.quotaCtrl = new BGConfigQuotaController(ureq, getWindowControl(), quota);
+					config.configContainer.add("quota", config.quotaCtrl.getInitialFormItem());
+					config.quotaCtrl.getInitialFormItem().setVisible(false);
+				}
 			}
 
 			selectEl.setUserObject(config);		
@@ -158,8 +160,11 @@ public class BGConfigToolsStepController extends StepFormBasicController {
 					configuration.setCalendarAccess(config.calendarCtrl.getCalendarAccess());
 				} else if (tool.equals(CollaborationTools.TOOL_FOLDER)) {
 					configuration.setFolderAccess(config.folderCtrl.getFolderAccess());
-					Quota quota = quotaManager.createQuota(null, config.quotaCtrl.getQuotaKB(), config.quotaCtrl.getULLimit());
-					configuration.setQuota(quota);
+					//only admin are allowed to configure quota
+					if(ureq.getUserSession().getRoles().isOLATAdmin() && config.quotaCtrl != null) {
+						Quota quota = quotaManager.createQuota(null, config.quotaCtrl.getQuotaKB(), config.quotaCtrl.getULLimit());
+						configuration.setQuota(quota);
+					}
 				}
 			}
 		}
diff --git a/src/main/java/org/olat/repository/RepositoryTableModel.java b/src/main/java/org/olat/repository/RepositoryTableModel.java
index e009cb8404c..0ef10dda24a 100644
--- a/src/main/java/org/olat/repository/RepositoryTableModel.java
+++ b/src/main/java/org/olat/repository/RepositoryTableModel.java
@@ -180,6 +180,11 @@ public class RepositoryTableModel extends DefaultTableDataModel<RepositoryEntry>
 			repoEntriesWithOffer.put(withOffer.getResource().getKey(), withOffer);
 		}
 	}
+	
+	public void removeObject(RepositoryEntry object) {
+		getObjects().remove(object);
+		repoEntriesWithOffer.remove(object.getOlatResource().getKey());
+	}
 
 	/**
 	 * Get displayname of a repository entry. If repository entry a course 
diff --git a/src/main/java/org/olat/resource/accesscontrol/manager/ACFrontendManager.java b/src/main/java/org/olat/resource/accesscontrol/manager/ACFrontendManager.java
index e99292d812a..eba4bb1efde 100644
--- a/src/main/java/org/olat/resource/accesscontrol/manager/ACFrontendManager.java
+++ b/src/main/java/org/olat/resource/accesscontrol/manager/ACFrontendManager.java
@@ -384,23 +384,21 @@ public class ACFrontendManager extends BasicManager implements ACService {
 					public Boolean execute() {
 						
 						ResourceReservation reservation = reservationDao.loadReservation(identity, group.getResource());
-						if(group.getWaitingListEnabled() != null && group.getWaitingListEnabled().booleanValue()) {
+						if(reservation != null
+								|| (group.getMaxParticipants() == null || group.getMaxParticipants().intValue() <=0)
+								|| (group.getMaxParticipants() != null && (group.getMaxParticipants().intValue() > 
+								   (countReservations(group.getResource()) + securityManager.countIdentitiesOfSecurityGroup(group.getPartipiciantGroup()))))) {
+							if(!securityManager.isIdentityInSecurityGroup(identity, group.getPartipiciantGroup())) {
+								securityManager.addIdentityToSecurityGroup(identity, group.getPartipiciantGroup());
+							}
+						} else if(group.getWaitingListEnabled() != null && group.getWaitingListEnabled().booleanValue()) {
 							if(!securityManager.isIdentityInSecurityGroup(identity, group.getWaitingGroup())) {
 								securityManager.addIdentityToSecurityGroup(identity, group.getWaitingGroup());
 							}
 						} else {
-							if(reservation != null
-									|| (group.getMaxParticipants() == null && group.getMaxParticipants().intValue() <=0)
-									|| (group.getMaxParticipants() != null && (group.getMaxParticipants().intValue() > 
-									   (countReservations(group.getResource()) + securityManager.countIdentitiesOfSecurityGroup(group.getPartipiciantGroup()))))) {
-								if(!securityManager.isIdentityInSecurityGroup(identity, group.getPartipiciantGroup())) {
-									securityManager.addIdentityToSecurityGroup(identity, group.getPartipiciantGroup());
-								}
-							} else {
-								return Boolean.FALSE;
-							}
+							return Boolean.FALSE;
 						}
-						
+
 						if(reservation != null) {
 							reservationDao.deleteReservation(reservation);
 						}
diff --git a/src/main/java/org/olat/resource/accesscontrol/model/AccessMethod.java b/src/main/java/org/olat/resource/accesscontrol/model/AccessMethod.java
index 14e14b205db..18c2cd8b750 100644
--- a/src/main/java/org/olat/resource/accesscontrol/model/AccessMethod.java
+++ b/src/main/java/org/olat/resource/accesscontrol/model/AccessMethod.java
@@ -45,6 +45,8 @@ public interface AccessMethod {
 	public String getType();
 	
 	public boolean isNeedUserInteraction();
+	
+	public boolean isPaymentMethod();
 
 	public String getMethodCssClass();
 }
diff --git a/src/main/java/org/olat/resource/accesscontrol/model/FreeAccessMethod.java b/src/main/java/org/olat/resource/accesscontrol/model/FreeAccessMethod.java
index 59a25337fed..2a654576dc9 100644
--- a/src/main/java/org/olat/resource/accesscontrol/model/FreeAccessMethod.java
+++ b/src/main/java/org/olat/resource/accesscontrol/model/FreeAccessMethod.java
@@ -50,6 +50,11 @@ public class FreeAccessMethod extends AbstractAccessMethod {
 	public boolean isNeedUserInteraction() {
 		return false;
 	}
+	
+	@Override
+	public boolean isPaymentMethod() {
+		return false;
+	}
 
 	@Override
 	public int hashCode() {
diff --git a/src/main/java/org/olat/resource/accesscontrol/model/TokenAccessMethod.java b/src/main/java/org/olat/resource/accesscontrol/model/TokenAccessMethod.java
index 53b14576980..935d19b02ec 100644
--- a/src/main/java/org/olat/resource/accesscontrol/model/TokenAccessMethod.java
+++ b/src/main/java/org/olat/resource/accesscontrol/model/TokenAccessMethod.java
@@ -50,6 +50,11 @@ public class TokenAccessMethod extends AbstractAccessMethod {
 	public boolean isNeedUserInteraction() {
 		return true;
 	}
+	
+	@Override
+	public boolean isPaymentMethod() {
+		return false;
+	}
 
 	@Override
 	public int hashCode() {
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/paypal/PaypalAccessHandler.java b/src/main/java/org/olat/resource/accesscontrol/provider/paypal/PaypalAccessHandler.java
index 447f87cf9e8..078745f9548 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/paypal/PaypalAccessHandler.java
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/paypal/PaypalAccessHandler.java
@@ -59,7 +59,7 @@ import org.olat.resource.accesscontrol.ui.FormController;
 public class PaypalAccessHandler implements AccessMethodHandler {
 	
 	public static final String METHOD_TYPE = "paypal.method";
-	public static final String METHOD_CSS_CLASS = "fx_access_method_paypal";
+	public static final String METHOD_CSS_CLASS = "b_access_method_paypal";
 
 	@Override
 	public boolean isPaymentMethod() {
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/paypal/model/PaypalAccessMethod.java b/src/main/java/org/olat/resource/accesscontrol/provider/paypal/model/PaypalAccessMethod.java
index fb6df08919e..74ff2304b1e 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/paypal/model/PaypalAccessMethod.java
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/paypal/model/PaypalAccessMethod.java
@@ -51,6 +51,11 @@ public class PaypalAccessMethod extends AbstractAccessMethod {
 	public boolean isNeedUserInteraction() {
 		return true;
 	}
+	
+	@Override
+	public boolean isPaymentMethod() {
+		return true;
+	}
 
 	@Override
 	public int hashCode() {
diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/AccessMethodRenderer.java b/src/main/java/org/olat/resource/accesscontrol/ui/AccessMethodRenderer.java
index 87ed5b8b29f..60a007e1d0a 100644
--- a/src/main/java/org/olat/resource/accesscontrol/ui/AccessMethodRenderer.java
+++ b/src/main/java/org/olat/resource/accesscontrol/ui/AccessMethodRenderer.java
@@ -19,8 +19,8 @@
  */
 package org.olat.resource.accesscontrol.ui;
 
+import java.util.Collection;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Locale;
 import java.util.Set;
 
@@ -55,9 +55,9 @@ public class AccessMethodRenderer implements CustomCellRenderer {
 			AccessTransaction transaction = (AccessTransaction)val;
 			Set<String> uniqueType = new HashSet<String>(3);
 			render(sb, transaction, uniqueType, locale);
-		} else if (val instanceof List) {
+		} else if (val instanceof Collection) {
 			@SuppressWarnings("unchecked")
-			List<AccessTransaction> transactions = (List<AccessTransaction>)val;
+			Collection<AccessTransaction> transactions = (Collection<AccessTransaction>)val;
 			Set<String> uniqueType = new HashSet<String>((transactions.size() * 2) + 1);
 			for(AccessTransaction transaction : transactions) {
 				render(sb, transaction, uniqueType, locale);
diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/OrdersDataModel.java b/src/main/java/org/olat/resource/accesscontrol/ui/OrdersDataModel.java
index c3c7d7faeb0..ed728b3670a 100644
--- a/src/main/java/org/olat/resource/accesscontrol/ui/OrdersDataModel.java
+++ b/src/main/java/org/olat/resource/accesscontrol/ui/OrdersDataModel.java
@@ -21,6 +21,7 @@
 package org.olat.resource.accesscontrol.ui;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
@@ -81,9 +82,17 @@ public class OrdersDataModel implements TableDataModel<OrderTableItem> {
 				return order.getTransactions();
 			}
 			case total: {
-				String total = PriceFormat.fullFormat(order.getOrder().getTotal());
-				if(StringHelper.containsNonWhitespace(total)) {
-					return total;
+				boolean paymentMethod = false;
+				Collection<AccessTransaction> transactions = order.getTransactions();
+				for(AccessTransaction transaction:transactions) {
+					paymentMethod |= transaction.getMethod().isPaymentMethod();
+				}
+				
+				if(paymentMethod) {
+					String total = PriceFormat.fullFormat(order.getOrder().getTotal());
+					if(StringHelper.containsNonWhitespace(total)) {
+						return total;
+					}
 				}
 				return "-";
 			}
-- 
GitLab