diff --git a/src/main/java/org/olat/group/manager/BusinessGroupDAO.java b/src/main/java/org/olat/group/manager/BusinessGroupDAO.java
index 47134e92332a49dfb844197e0968e1c5eff1b4a5..5ac7de6ee68992e0988b8e4b8e758466000cb41a 100644
--- a/src/main/java/org/olat/group/manager/BusinessGroupDAO.java
+++ b/src/main/java/org/olat/group/manager/BusinessGroupDAO.java
@@ -169,6 +169,17 @@ public class BusinessGroupDAO {
 		return groups == null || groups.isEmpty() ? null : groups.get(0);
 	}
 	
+	public String loadDescription(Long key) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("select bgi.description from businessgroup bgi where bgi.key=:key");
+		List<String> descriptions = dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), String.class)
+				.setParameter("key", key)
+				.setHint("org.hibernate.cacheable", Boolean.TRUE)
+				.getResultList();
+		return descriptions == null || descriptions.isEmpty() ? null : descriptions.get(0);
+	}
+	
 	public List<BusinessGroupShort> loadShort(Collection<Long> ids) {
 		if(ids == null || ids.isEmpty()) {
 			return Collections.emptyList();
diff --git a/src/main/java/org/olat/group/manager/BusinessGroupMailing.java b/src/main/java/org/olat/group/manager/BusinessGroupMailing.java
index bbf8eda8c48b89970a6bad651c767562e42dfc7b..4d558a10663a699d7df3c3f47d60a8220c49e637 100644
--- a/src/main/java/org/olat/group/manager/BusinessGroupMailing.java
+++ b/src/main/java/org/olat/group/manager/BusinessGroupMailing.java
@@ -19,25 +19,34 @@
  */
 package org.olat.group.manager;
 
+import java.io.File;
+import java.util.Collections;
 import java.util.List;
 
+import org.apache.velocity.VelocityContext;
 import org.olat.basesecurity.BaseSecurity;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.id.Identity;
 import org.olat.core.id.Roles;
+import org.olat.core.id.context.BusinessControlFactory;
+import org.olat.core.util.StringHelper;
+import org.olat.core.util.filter.FilterFactory;
 import org.olat.core.util.mail.MailBundle;
 import org.olat.core.util.mail.MailContext;
 import org.olat.core.util.mail.MailContextImpl;
-import org.olat.core.util.mail.MailPackage;
 import org.olat.core.util.mail.MailManager;
+import org.olat.core.util.mail.MailPackage;
 import org.olat.core.util.mail.MailTemplate;
 import org.olat.core.util.mail.MailerResult;
+import org.olat.group.BusinessGroup;
 import org.olat.group.BusinessGroupModule;
+import org.olat.group.BusinessGroupService;
 import org.olat.group.BusinessGroupShort;
 import org.olat.group.model.BusinessGroupMembershipChange;
 import org.olat.group.model.MembershipModification;
 import org.olat.group.ui.BGMailHelper;
 import org.olat.group.ui.main.MemberPermissionChangeEvent;
+import org.olat.repository.RepositoryEntryShort;
 
 /**
  * 
@@ -120,6 +129,10 @@ public class BusinessGroupMailing {
 		MailTemplate template = mailing == null ? null : mailing.getTemplate();
 		if(mailing == null || mailing.getTemplate() == null) {
 			template = getDefaultTemplate(type, group, ureqIdentity);
+		} else if(group != null && template.getContext() != null && needTemplateEnhancement(template)) {
+			BusinessGroupService businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class);
+			List<RepositoryEntryShort> repoEntries = businessGroupService.findShortRepositoryEntries(Collections.singletonList(group), 0, -1);
+			template = new MailTemplateDelegate(template, group, repoEntries);
 		}
 		
 		MailContext context = mailing == null ? null : mailing.getContext();
@@ -138,6 +151,16 @@ public class BusinessGroupMailing {
 			mailing.appendResult(result);
 		}
 	}
+	
+	private static boolean needTemplateEnhancement(MailTemplate template) {
+		String body = template.getBodyTemplate();
+		if(body.contains("groupname") || body.contains("groupdescription") || body.contains("courselist")) {
+			if(!StringHelper.containsNonWhitespace((String)template.getContext().get("groupname"))) {
+				return true;
+			}
+		}
+		return false;
+	}
 
 	public enum MailType {
 		addParticipant,
@@ -148,4 +171,99 @@ public class BusinessGroupMailing {
 		removeToWaitingList,
 		graduateFromWaitingListToParticpant,
 	}
-}
+	
+	public static class MailTemplateDelegate extends MailTemplate {
+		
+		private final MailTemplate delegate;
+		private final BusinessGroupShort group;
+		private final List<RepositoryEntryShort> entries;
+		
+		public MailTemplateDelegate(MailTemplate delegate, BusinessGroupShort group, List<RepositoryEntryShort> entries) {
+			super(null, null, null);
+			this.delegate = delegate;
+			this.group = group;
+			this.entries = entries;
+		}
+
+		@Override
+		public void putVariablesInMailContext(VelocityContext vContext, Identity recipient) {
+			delegate.putVariablesInMailContext(vContext, recipient);
+			
+			StringBuilder learningResources = new StringBuilder();
+			if(entries != null && entries.size() > 0) {
+				for (RepositoryEntryShort entry: entries) {
+					String title = entry.getDisplayname();
+					String url = BusinessControlFactory.getInstance().getURLFromBusinessPathString("[RepositoryEntry:" + entry.getKey() + "]");
+					learningResources.append(title);
+					learningResources.append(" (");
+					learningResources.append(url);
+					learningResources.append(")\n");
+				}
+			}
+			vContext.put("courselist", learningResources.toString());
+			
+			if(group != null) {
+				vContext.put("groupname", group.getName());
+				
+				String description;
+				if(group instanceof BusinessGroup) {
+					description = ((BusinessGroup)group).getDescription(); 
+				} else {
+					description = CoreSpringFactory.getImpl(BusinessGroupDAO.class).loadDescription(group.getKey());
+				}
+				description = FilterFactory.getHtmlTagAndDescapingFilter().filter(description); 
+				vContext.put("groupdescription", description);
+			}
+		}
+
+		@Override
+		public Boolean getCpfrom() {
+			return delegate.getCpfrom();
+		}
+
+		@Override
+		public void setCpfrom(Boolean cpfrom) {
+			delegate.setCpfrom(cpfrom);
+		}
+
+		@Override
+		public String getSubjectTemplate() {
+			return delegate.getSubjectTemplate();
+		}
+
+		@Override
+		public void setSubjectTemplate(String subjectTemplate) {
+			delegate.setSubjectTemplate(subjectTemplate);
+		}
+		
+		@Override
+		public String getBodyTemplate() {
+			return delegate.getBodyTemplate();
+		}
+
+		@Override
+		public void setBodyTemplate(String bodyTemplate) {
+			delegate.setBodyTemplate(bodyTemplate);
+		}
+
+		@Override
+		public File[] getAttachments() {
+			return delegate.getAttachments();
+		}
+
+		@Override
+		public void setAttachments(File[] attachments) {
+			delegate.setAttachments(attachments);
+		}
+
+		@Override
+		public void addToContext(String name, String value) {
+			delegate.addToContext(name, value);
+		}
+
+		@Override
+		public VelocityContext getContext() {
+			return delegate.getContext();
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/group/model/BusinessGroupShortImpl.java b/src/main/java/org/olat/group/model/BusinessGroupShortImpl.java
index 1772f18ef1ad2a2bcf2acda61953ab713c1e3f35..f9544ae0221e96edec76b874fa2818245a2d2bfb 100644
--- a/src/main/java/org/olat/group/model/BusinessGroupShortImpl.java
+++ b/src/main/java/org/olat/group/model/BusinessGroupShortImpl.java
@@ -46,7 +46,7 @@ import org.olat.group.BusinessGroupShort;
 @Entity(name="businessgroupshort")
 @Table(name="o_gp_business")
 @NamedQueries({
-	@NamedQuery(name="loadBusinessGroupShortByIds",query="select bgi from businessgroupshort bgi  where bgi.key in (:ids)")
+	@NamedQuery(name="loadBusinessGroupShortByIds",query="select bgi from businessgroupshort bgi where bgi.key in (:ids)")
 })
 public class BusinessGroupShortImpl implements Persistable, BusinessGroupShort {
 
diff --git a/src/main/java/org/olat/group/ui/BGMailHelper.java b/src/main/java/org/olat/group/ui/BGMailHelper.java
index 96ef4b21269ed6549b04f821bd9fa2cf5f834efb..bb389b9e94e8146a9fcaf37d12e76bdc96066a51 100644
--- a/src/main/java/org/olat/group/ui/BGMailHelper.java
+++ b/src/main/java/org/olat/group/ui/BGMailHelper.java
@@ -52,6 +52,7 @@ import org.olat.core.util.mail.MailTemplate;
 import org.olat.group.BusinessGroup;
 import org.olat.group.BusinessGroupService;
 import org.olat.group.BusinessGroupShort;
+import org.olat.group.manager.BusinessGroupDAO;
 import org.olat.group.ui.main.BusinessGroupListController;
 import org.olat.repository.RepositoryEntryShort;
 
@@ -207,8 +208,8 @@ public class BGMailHelper {
 		final String courselist;
 		final String groupname;
 		final String groupdescription; 
-		StringBuilder learningResources = new StringBuilder();
 		if(group != null) {
+			StringBuilder learningResources = new StringBuilder();
 			BusinessGroupService businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class);
 			List<RepositoryEntryShort> repoEntries = businessGroupService.findShortRepositoryEntries(Collections.singletonList(group), 0, -1);
 			for (RepositoryEntryShort entry: repoEntries) {
@@ -223,8 +224,14 @@ public class BGMailHelper {
 			courselist = learningResources.toString();
 			// get group name and description
 			groupname = group.getName();
-			groupdescription = (group instanceof BusinessGroup ?
-					FilterFactory.getHtmlTagAndDescapingFilter().filter(((BusinessGroup)group).getDescription()) : ""); 
+			
+			String description;
+			if(group instanceof BusinessGroup) {
+				description = ((BusinessGroup)group).getDescription(); 
+			} else {
+				description = CoreSpringFactory.getImpl(BusinessGroupDAO.class).loadDescription(group.getKey());
+			}
+			groupdescription = FilterFactory.getHtmlTagAndDescapingFilter().filter(description);
 
 			subject = subject.replace("$groupname", groupname == null ? "" : groupname);
 			body = body.replace("$groupname", groupname == null ? "" : groupname);
diff --git a/src/test/java/org/olat/group/test/BusinessGroupDAOTest.java b/src/test/java/org/olat/group/test/BusinessGroupDAOTest.java
index 58f531d8ef13f1cf236ff73232014c98c0156d7d..e2b2ddbed2875225adc6266e5c74501f37577d87 100644
--- a/src/test/java/org/olat/group/test/BusinessGroupDAOTest.java
+++ b/src/test/java/org/olat/group/test/BusinessGroupDAOTest.java
@@ -262,6 +262,17 @@ public class BusinessGroupDAOTest extends OlatTestCase {
 		Assert.assertTrue(groupShortKeys3.contains(group1.getKey()));
 		Assert.assertTrue(groupShortKeys3.contains(group2.getKey()));
 	}
+
+	@Test
+	public void loadDescription() {
+		String description = "My desc " + UUID.randomUUID();
+		BusinessGroup group = businessGroupDao.createAndPersist(null, "load descr", description, 0, 10, true, true, false, false, false);
+		dbInstance.commitAndCloseSession();
+
+		String loadDescription = businessGroupDao.loadDescription(group.getKey());
+		Assert.assertNotNull(loadDescription);
+		Assert.assertEquals(description, loadDescription);
+	}
 	
 	@Test
 	public void loadAllBusinessGroups() {