diff --git a/src/main/java/org/olat/course/nodes/vitero/ViteroPeekViewController.java b/src/main/java/org/olat/course/nodes/vitero/ViteroPeekViewController.java
index e7d8f7d93ef083e02300c33a2a146f7dae7f0765..95c4e28923616ec86ca62201bcf429006601aa6c 100644
--- a/src/main/java/org/olat/course/nodes/vitero/ViteroPeekViewController.java
+++ b/src/main/java/org/olat/course/nodes/vitero/ViteroPeekViewController.java
@@ -85,6 +85,7 @@ public class ViteroPeekViewController extends BasicController {
 		listenTo(tableCtrl);
 		
 		// dummy header key, won't be used since setDisplayTableHeader is set to false
+		tableCtrl.addColumnDescriptor(new DefaultColumnDescriptor("vc.table.group", ViteroBookingDataModel.Column.name.ordinal(), null, ureq.getLocale()));
 		tableCtrl.addColumnDescriptor(new DefaultColumnDescriptor("vc.table.begin", ViteroBookingDataModel.Column.begin.ordinal(), null, ureq.getLocale()));
 		tableCtrl.addColumnDescriptor(new DefaultColumnDescriptor("vc.table.end", ViteroBookingDataModel.Column.end.ordinal(), null, ureq.getLocale()));
 		tableCtrl.setTableDataModel(new ViteroBookingDataModel(bookings));
diff --git a/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java b/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java
index 406c2c18bc18376c988bd78eb954ffe63c0291da..513926750e01a430a9b34b49dce5416a9b6e1343 100644
--- a/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java
+++ b/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java
@@ -669,13 +669,13 @@ public class ViteroManager extends BasicManager implements UserDataDeletable {
 		return roomSizes;
 	}
 	
-	public int createGroup()
+	public int createGroup(String groupName)
 	throws VmsNotAvailableException {
 		try {
 			GroupServiceStub groupWs = getGroupWebService();
 			GroupServiceStub.CreateGroupRequest createRequest = new GroupServiceStub.CreateGroupRequest();
 			GroupServiceStub.Groupnamecustomerid groupInfos = new GroupServiceStub.Groupnamecustomerid();
-			groupInfos.setGroupname("OLAT-" + UUID.randomUUID().toString().replace("-", ""));
+			groupInfos.setGroupname(groupName + "_OLAT_" + UUID.randomUUID().toString().replace("-", ""));
 			groupInfos.setCustomerid(viteroModule.getCustomerId());
 			createRequest.setGroup(groupInfos);
 			
@@ -878,7 +878,8 @@ public class ViteroManager extends BasicManager implements UserDataDeletable {
 
 		try {
 			//a group per meeting
-			int groupId = createGroup();
+			String groupName = vBooking.getGroupName();
+			int groupId = createGroup(groupName);
 			if(groupId < 0) {
 				return new ViteroStatus(ErrorCode.unkown);
 			}
diff --git a/src/main/java/org/olat/modules/vitero/model/ViteroBooking.java b/src/main/java/org/olat/modules/vitero/model/ViteroBooking.java
index b27b68df7222831d3a1daebe002404a3a18f8cf7..df64e26d2bc950e10e7be9efd10316186ec4d61a 100644
--- a/src/main/java/org/olat/modules/vitero/model/ViteroBooking.java
+++ b/src/main/java/org/olat/modules/vitero/model/ViteroBooking.java
@@ -36,6 +36,7 @@ public class ViteroBooking {
 	
 	private int bookingId;
 	private int groupId;
+	private String groupName;
 	private Date start;
 	private int startBuffer;
 	private Date end;
@@ -85,6 +86,14 @@ public class ViteroBooking {
 		this.groupId = groupId;
 	}
 
+	public String getGroupName() {
+		return groupName;
+	}
+
+	public void setGroupName(String groupName) {
+		this.groupName = groupName;
+	}
+
 	public int getRoomSize() {
 		return roomSize;
 	}
diff --git a/src/main/java/org/olat/modules/vitero/ui/ViteroAdminBookingRawInfosController.java b/src/main/java/org/olat/modules/vitero/ui/ViteroAdminBookingRawInfosController.java
index 9b63e7a99c9ce90c325e142da2b208c0a98dede7..4c4dcd6d651cc4cfbf96f6eb2a37e931ea142da4 100644
--- a/src/main/java/org/olat/modules/vitero/ui/ViteroAdminBookingRawInfosController.java
+++ b/src/main/java/org/olat/modules/vitero/ui/ViteroAdminBookingRawInfosController.java
@@ -68,7 +68,13 @@ public class ViteroAdminBookingRawInfosController extends FormBasicController {
 		uifactory.addStaticTextElement("booking.roomSize", Integer.toString(booking.getRoomSize()), formLayout);
 		uifactory.addStaticTextElement("group.numOfParticipants", Integer.toString(group.getNumOfParticipants()), formLayout);
 		uifactory.addStaticTextElement("group.id", Integer.toString(group.getGroupId()), formLayout);
-		uifactory.addStaticTextElement("group.name", group.getName(), formLayout);
+		
+		String name = group.getName();
+		int sepIndex = name.indexOf("_OLAT_");
+		if(sepIndex > 0) {
+			name = name.substring(0, sepIndex);
+		}
+		uifactory.addStaticTextElement("group.name", name, formLayout);
 
 		MultipleSelectionElement autoSignIn = uifactory.addCheckboxesHorizontal("booking.autoSignIn", formLayout, autoSignInKeys, autoSignInValues, null);
 		if(booking.isAutoSignIn()) {
diff --git a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingDataModel.java b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingDataModel.java
index 64b733659a4e40351c3362d4f76ed136ef117e6a..3730ea38ecd32be22b84b01548e27d00e2e45904 100644
--- a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingDataModel.java
+++ b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingDataModel.java
@@ -73,6 +73,10 @@ public class ViteroBookingDataModel implements TableDataModel {
 	public Object getValueAt(int row, int col) {
 		ViteroBooking booking = getObject(row);
 		switch(Column.values()[col]) {
+			case name: {
+				String name = booking.getGroupName();
+				return name;
+			}
 			case begin: return booking.getStart();
 			case end: return booking.getEnd();
 			case roomSize: {
@@ -122,6 +126,7 @@ public class ViteroBookingDataModel implements TableDataModel {
 	}
 
 	public enum Column {
+		name,
 		begin,
 		end,
 		roomSize,
diff --git a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingEditController.java b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingEditController.java
index 22cb7b5773db4b3eb46c269e611e1bb4f2448347..7d49c78ce7cf7ea3262bff154707915d14d9b8e1 100644
--- a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingEditController.java
+++ b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingEditController.java
@@ -29,12 +29,14 @@ import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.elements.DateChooser;
 import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
 import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
+import org.olat.core.gui.components.form.flexible.elements.TextElement;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.OLATResourceable;
+import org.olat.core.util.StringHelper;
 import org.olat.group.BusinessGroup;
 import org.olat.modules.vitero.manager.ViteroManager;
 import org.olat.modules.vitero.manager.VmsNotAvailableException;
@@ -52,6 +54,7 @@ import org.olat.modules.vitero.model.ViteroStatus;
  */
 public class ViteroBookingEditController extends FormBasicController {
 	
+	private TextElement groupName;
 	private DateChooser beginChooser;
 	private DateChooser endChooser;
 	private SingleSelection beginBufferEl;
@@ -106,6 +109,11 @@ public class ViteroBookingEditController extends FormBasicController {
 			setFormWarning("new.booking.warning");
 		}
 		
+		String name = booking.getGroupName();
+		groupName = uifactory.addTextElement("group.name", "group.name", 32, name, formLayout);
+		groupName.setMandatory(true);
+		groupName.setEnabled(editable);
+		
 		//begin
 		beginChooser = uifactory.addDateChooser("booking.begin", "", formLayout);
 		beginChooser.setDisplaySize(21);
@@ -161,6 +169,18 @@ public class ViteroBookingEditController extends FormBasicController {
 	@Override
 	protected boolean validateFormLogic(UserRequest ureq) {
 		boolean allOk = true;
+		
+		String name = groupName.getValue();
+		groupName.clearError();
+		if(StringHelper.containsNonWhitespace(name)) {
+			if(name.contains("_")) {
+				groupName.setErrorKey("error.bookingName", null);
+				allOk &= false;
+			}
+		} else {
+			groupName.setErrorKey("form.legende.mandatory", null);
+			allOk &= false;
+		}
 
 		Date begin = beginChooser.getDate();
 		if(beginChooser.isEnabled()) {
@@ -200,6 +220,9 @@ public class ViteroBookingEditController extends FormBasicController {
 
 	@Override
 	protected void formOK(UserRequest ureq) {
+		String name = groupName.getValue();
+		booking.setGroupName(name);
+
 		Date begin = beginChooser.getDate();
 		booking.setStart(begin);
 		
diff --git a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsAdminController.java b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsAdminController.java
index 8d878f911b82de436f1429979aa3603df6185915..528c87df923728307f112497b6702348f2aa36fd 100644
--- a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsAdminController.java
+++ b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsAdminController.java
@@ -83,7 +83,8 @@ public class ViteroBookingsAdminController extends BasicController {
 		
 		tableCtr = new TableController(tableConfig, ureq, getWindowControl(), getTranslator());
 		listenTo(tableCtr);
-		
+
+		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("group.name", ViteroBookingDataModel.Column.name.ordinal(), null, ureq.getLocale()));
 		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("booking.begin", ViteroBookingDataModel.Column.begin.ordinal(), null, ureq.getLocale()));
 		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("booking.end", ViteroBookingDataModel.Column.end.ordinal(), null, ureq.getLocale()));
 		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("booking.roomSize", ViteroBookingDataModel.Column.roomSize.ordinal(), null, ureq.getLocale()));
diff --git a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsController.java b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsController.java
index ab2bf2c5f011e10c9fb702e6bf40cb820eb6659e..d57152fb533896f934da0b8153f613e1387ffd65 100644
--- a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsController.java
+++ b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsController.java
@@ -75,6 +75,7 @@ public class ViteroBookingsController extends BasicController {
 		tableConfig.setColumnMovingOffered(true);
 		tableConfig.setSortingEnabled(true);
 		tableCtr = new TableController(tableConfig, ureq, wControl, getTranslator());
+		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("group.name", ViteroBookingDataModel.Column.name.ordinal(), null, ureq.getLocale()));
 		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("booking.begin", ViteroBookingDataModel.Column.begin.ordinal(), null, ureq.getLocale()));
 		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("booking.end", ViteroBookingDataModel.Column.end.ordinal(), null, ureq.getLocale()));
 		
diff --git a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsEditController.java b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsEditController.java
index 6e3f693d770c98d462d59e72a6b8026f41894e74..c2e6f15cba34bc7503db61936d67bb9bc488b3e1 100644
--- a/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsEditController.java
+++ b/src/main/java/org/olat/modules/vitero/ui/ViteroBookingsEditController.java
@@ -39,6 +39,7 @@ import org.olat.core.gui.control.generic.closablewrapper.CloseableModalControlle
 import org.olat.core.gui.control.generic.modal.DialogBoxController;
 import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
 import org.olat.core.id.OLATResourceable;
+import org.olat.core.util.StringHelper;
 import org.olat.course.editor.NodeEditController;
 import org.olat.group.BusinessGroup;
 import org.olat.modules.vitero.manager.ViteroManager;
@@ -249,6 +250,14 @@ public class ViteroBookingsEditController extends FormBasicController {
 		public ViteroBooking getMeeting() {
 			return meeting;
 		}
+		
+		public String getGroupName() {
+			String name = meeting.getGroupName();
+			if(StringHelper.containsNonWhitespace(name)) {
+				return name;
+			}
+			return "";
+		}
 
 		public Date getBegin() {
 			return meeting.getStart();
diff --git a/src/main/java/org/olat/modules/vitero/ui/ViteroRoomsOverviewController.java b/src/main/java/org/olat/modules/vitero/ui/ViteroRoomsOverviewController.java
index 9f94432c171b32c05e939d22e4425436186ff2b6..a3c0c86bcfb520553ad9052d44c651baeb76235f 100644
--- a/src/main/java/org/olat/modules/vitero/ui/ViteroRoomsOverviewController.java
+++ b/src/main/java/org/olat/modules/vitero/ui/ViteroRoomsOverviewController.java
@@ -67,7 +67,8 @@ public class ViteroRoomsOverviewController extends BasicController {
 		
 		tableCtr = new TableController(tableConfig, ureq, getWindowControl(), getTranslator());
 		listenTo(tableCtr);
-		
+
+		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("group.name", ViteroBookingDataModel.Column.name.ordinal(), null, ureq.getLocale()));
 		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("booking.begin", ViteroBookingDataModel.Column.begin.ordinal(), null, ureq.getLocale()));
 		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("booking.end", ViteroBookingDataModel.Column.end.ordinal(), null, ureq.getLocale()));
 		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("booking.roomSize", ViteroBookingDataModel.Column.roomSize.ordinal(), null, ureq.getLocale()));
diff --git a/src/main/java/org/olat/modules/vitero/ui/ViteroUserToGroupController.java b/src/main/java/org/olat/modules/vitero/ui/ViteroUserToGroupController.java
index 783743379a3ec206ac5eaf765f3477ca12f8d781..9575c935a86fa8da51c536d3bb13e2343b380d67 100644
--- a/src/main/java/org/olat/modules/vitero/ui/ViteroUserToGroupController.java
+++ b/src/main/java/org/olat/modules/vitero/ui/ViteroUserToGroupController.java
@@ -299,14 +299,14 @@ public class ViteroUserToGroupController extends BasicController {
 			this.selfParticipants.addAll(selfParticipants);
 			
 			//remove duplicates
-			coaches.removeAll(owners);
+			this.coaches.removeAll(owners);
 			
-			participants.removeAll(owners);
-			participants.removeAll(coaches);
+			this.participants.removeAll(owners);
+			this.participants.removeAll(coaches);
 			
-			selfParticipants.remove(owners);
-			selfParticipants.remove(coaches);
-			selfParticipants.remove(participants);
+			this.selfParticipants.removeAll(owners);
+			this.selfParticipants.removeAll(coaches);
+			this.selfParticipants.removeAll(participants);
 		}
 
 		public List<Identity> getOwners() {
diff --git a/src/main/java/org/olat/modules/vitero/ui/_content/edit.html b/src/main/java/org/olat/modules/vitero/ui/_content/edit.html
index eb6a5b57775e7f29331db819eb14d23d1810f880..d072157d5a0401b594d7c5b3e05ad20022150a7f 100644
--- a/src/main/java/org/olat/modules/vitero/ui/_content/edit.html
+++ b/src/main/java/org/olat/modules/vitero/ui/_content/edit.html
@@ -3,6 +3,7 @@
 	$r.contextHelpWithWrapper("org.olat.modules.vitero.ui","ced-vitero-config.html","help.hover.vitero")
 	<table>
 		<tr>
+			<td>$r.translate("group.name")</td>
 			<td>$r.translate("booking.begin")</td>
 			<td>$r.translate("booking.end")</td>
 			<td colspan="3"></td>
@@ -10,6 +11,7 @@
 		
 		#foreach($bookingDisplay in $bookingDisplays)
 			<tr>
+				<td>$bookingDisplay.groupName</td>
 				<td>$r.formatDateAndTime($bookingDisplay.begin)</td>
 				<td>$r.formatDateAndTime($bookingDisplay.end)</td>
 				<td>