diff --git a/src/main/java/org/olat/core/commons/services/webdav/WebDAVModule.java b/src/main/java/org/olat/core/commons/services/webdav/WebDAVModule.java
index 1ac2b49504676a7a3a758a8355148e01d385dc52..ec0b089f5cd7049e2ec9997b37466a20616a8005 100644
--- a/src/main/java/org/olat/core/commons/services/webdav/WebDAVModule.java
+++ b/src/main/java/org/olat/core/commons/services/webdav/WebDAVModule.java
@@ -46,12 +46,14 @@ public class WebDAVModule extends AbstractOLATModule implements ConfigOnOff {
 	private static final String WEBDAV_ENABLED = "webdav.enabled";
 	private static final String WEBDAV_LINKS_ENABLED = "webdav.links.enabled";
 	private static final String DIGEST_AUTH_ENABLED = "auth.digest.enabled";
+	private static final String TERMS_FOLDERS_ENABLED = "webdav.termsfolders.enabled";
 	
 	private Map<String, WebDAVProvider> webdavProviders;
 
 	private boolean enabled;
 	private boolean linkEnabled;
 	private boolean digestAuthenticationEnabled;
+	private boolean termsFoldersEnabled;
 	
 	@Override
 	public void init() {
@@ -70,6 +72,12 @@ public class WebDAVModule extends AbstractOLATModule implements ConfigOnOff {
 		if(StringHelper.containsNonWhitespace(digestEnabledObj)) {
 			digestAuthenticationEnabled = "true".equals(digestEnabledObj);
 		}
+
+		String termsFoldersEnabledObj = getStringPropertyValue(TERMS_FOLDERS_ENABLED, true);
+		if(StringHelper.containsNonWhitespace(termsFoldersEnabledObj)) {
+			termsFoldersEnabled = "true".equals(termsFoldersEnabledObj);
+		}
+
 	}
 	
 	@Override
@@ -77,6 +85,7 @@ public class WebDAVModule extends AbstractOLATModule implements ConfigOnOff {
 		enabled = getBooleanConfigParameter(WEBDAV_ENABLED, true);
 		linkEnabled = getBooleanConfigParameter(WEBDAV_LINKS_ENABLED, true);
 		digestAuthenticationEnabled = getBooleanConfigParameter(DIGEST_AUTH_ENABLED, true);
+		termsFoldersEnabled = getBooleanConfigParameter(TERMS_FOLDERS_ENABLED, true);
 	}
 
 	@Override
@@ -116,6 +125,17 @@ public class WebDAVModule extends AbstractOLATModule implements ConfigOnOff {
 		String enabledStr = digestAuthenticationEnabled ? "true" : "false";
 		setStringProperty(DIGEST_AUTH_ENABLED, enabledStr, true);
 	}
+	
+
+	public void setTermsFoldersEnabled(boolean termsFoldersEnabled) {
+		String enabledStr = termsFoldersEnabled ? "true" : "false";
+		setStringProperty(TERMS_FOLDERS_ENABLED, enabledStr, true);
+	}
+
+	public boolean isTermsFoldersEnabled() {
+		return termsFoldersEnabled;
+	}
+
 
 	/**
 	 * Return an unmodifiable map
diff --git a/src/main/java/org/olat/core/commons/services/webdav/_spring/webdavContext.xml b/src/main/java/org/olat/core/commons/services/webdav/_spring/webdavContext.xml
index 08d762118794d6f50282d54c9e923c2244855bcb..d10b16247735f82672dc9cbb80b7140c86861f67 100644
--- a/src/main/java/org/olat/core/commons/services/webdav/_spring/webdavContext.xml
+++ b/src/main/java/org/olat/core/commons/services/webdav/_spring/webdavContext.xml
@@ -32,6 +32,7 @@
 				webdav.enabled=${webdav.enabled}
 				webdav.links.enabled=${webdav.links.enabled}
 				auth.digest.enabled=${auth.digest.enabled}
+				webdav.termsfolders.enabled=${webdav.termsfolders.enabled}
 			</value>
 		</property>
 	</bean>
diff --git a/src/main/java/org/olat/core/commons/services/webdav/ui/WebDAVAdminController.java b/src/main/java/org/olat/core/commons/services/webdav/ui/WebDAVAdminController.java
index 71bb683a213ca020396ec67ef13dc81bdecc3f4c..7093868a9c469f828cdcc65eeb8d28795520b323 100644
--- a/src/main/java/org/olat/core/commons/services/webdav/ui/WebDAVAdminController.java
+++ b/src/main/java/org/olat/core/commons/services/webdav/ui/WebDAVAdminController.java
@@ -37,7 +37,7 @@ import org.olat.core.gui.control.WindowControl;
  */
 public class WebDAVAdminController extends FormBasicController {
 	
-	private MultipleSelectionElement enableModuleEl, enableLinkEl, enableDigestEl;
+	private MultipleSelectionElement enableModuleEl, enableLinkEl, enableDigestEl, enableTermsFoldersEl;
 	private final WebDAVModule webDAVModule;
 	
 	public WebDAVAdminController(UserRequest ureq, WindowControl wControl) {
@@ -69,6 +69,15 @@ public class WebDAVAdminController extends FormBasicController {
 		enableDigestEl.select("xx", webDAVModule.isDigestAuthenticationEnabled());
 		enableDigestEl.addActionListener(FormEvent.ONCHANGE);
 		enableDigestEl.setEnabled(enabled);
+		
+		uifactory.addSpacerElement("spacer1", formLayout, false);
+		
+		enableTermsFoldersEl = uifactory.addCheckboxesHorizontal("webdavTermsFolders", "webdav.termsfolders", formLayout, new String[]{"xx"}, values);
+		enableTermsFoldersEl.select("xx", webDAVModule.isTermsFoldersEnabled());
+		enableTermsFoldersEl.addActionListener(FormEvent.ONCHANGE);
+		enableTermsFoldersEl.setEnabled(enabled);
+		
+		
 	}
 
 	@Override
@@ -83,12 +92,16 @@ public class WebDAVAdminController extends FormBasicController {
 			webDAVModule.setEnabled(enabled);
 			enableLinkEl.setEnabled(enabled);
 			enableDigestEl.setEnabled(enabled);
+			enableTermsFoldersEl.setEnabled(enabled);
 		} else if(source == enableLinkEl) {
 			boolean enabled = enableLinkEl.isAtLeastSelected(1);
 			webDAVModule.setLinkEnabled(enabled);
 		} else if(source == enableDigestEl) {
 			boolean enabled = enableDigestEl.isAtLeastSelected(1);
 			webDAVModule.setDigestAuthenticationEnabled(enabled);
+		} else if(source == enableTermsFoldersEl) {
+			boolean enabled = enableTermsFoldersEl.isAtLeastSelected(1);
+			webDAVModule.setTermsFoldersEnabled(enabled);
 		}
 		super.formInnerEvent(ureq, source, event);
 	}
diff --git a/src/main/java/org/olat/core/commons/services/webdav/ui/_chelp/webdavconfig.html b/src/main/java/org/olat/core/commons/services/webdav/ui/_chelp/webdavconfig.html
index c55b27c48362196a56e78eb803d574b381225aa6..6770dbb7117a5e8173f80e7d8e20c951b5594ff2 100644
--- a/src/main/java/org/olat/core/commons/services/webdav/ui/_chelp/webdavconfig.html
+++ b/src/main/java/org/olat/core/commons/services/webdav/ui/_chelp/webdavconfig.html
@@ -22,6 +22,7 @@
 	<li><b>$r.translate("webdav.module")</b><br />$r.translate("chelp.webdav.module")</li>
 	<li><b>$r.translate("webdav.link")</b><br />$r.translate("chelp.webdav.link")</li>
 	<li><b>$r.translate("webdav.digest")</b><br />$r.translate("chelp.webdav.digest")</li>
+	<li><b>$r.translate("webdav.termsfolders")</b><br />$r.translate("chelp.webdav.termsfolders")</li>
 
 </ul>
 <p class="o_important">
diff --git a/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_de.properties
index bc61a4efaf3cd0d199c63f4019d3496f1884693f..4ed8e6b584201ebc9aa9bcb32655b5820263b14d 100644
--- a/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_de.properties
@@ -7,6 +7,7 @@ chelp.webdav.digest.disclaimer=Die Digest-Authentication Verschl\u00FCsselung ve
 chelp.webdav.link=Unabh\u00E4ngig von der WebDAV Funktion k\u00F6nnen Sie entscheiden ob die WebDAV URL in der Ordnerkomponente angezeigt werden soll oder nicht. Wenn diese Funktion ausgeschaltet ist kann WebDAV immer noch verwendet werden, es wird lediglich der Link nicht angezeigt.
 chelp.webdav.module=Schalten Sie den WebDAV Zugang systemweit ein oder aus. Wenn das Modul eingeschaltet ist k\u00F6nnen alle OpenOLAT Benutzer das System \u00FCber WebDAV nutzen (empfohlen).
 chelp.webdav.more=Weitere Informationen zur Anwendung von WebDAV in OpenOLAT\: 
+chelp.webdav.termsfolders=Aktivieren Sie diese Option um für jedes Semester einen Unterordner zu erstellen der alle Kurses dieses Semesters enthält. Diese Option erhöht die Nutzbarkeit bei vielen Kursen. 
 chelp.webdav.usage=Verwendung
 chelp.webdavconfig.intro=Das WebDAV Modul kann f\u00FCr das gesamte OpenOLAT System ein- oder ausgeschaltet werden. Die folgenden Konfigurationen k\u00F6nnen vorgenommen werden\:
 chelp.webdavconfig.title=WebDAV Modulkonfiguration
@@ -16,3 +17,4 @@ webdav.digest=Digest Authentication bei HTTP Zugang verwenden
 webdav.link=WebDAV Links anzeigen
 webdav.module=WebDAV Zugang
 webdav.on=ein
+webdav.termsfolders=Kurse nach Semesterdaten gruppieren
diff --git a/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_en.properties
index 37f95254f0356536568b791fbddc73332d2e27a0..e7f3ad82c50ed0c14cc606b46709592c38fbd4df 100644
--- a/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/core/commons/services/webdav/ui/_i18n/LocalStrings_en.properties
@@ -7,6 +7,7 @@ chelp.webdav.digest.disclaimer=The Digest Authentication method does not use str
 chelp.webdav.link=Decide if the WebDAV URL is displayed in the folder component or not. This is independent of the the WebDAV access. When disabled, WebDAV can still be used but the WebDAV link must be known by users as it is not displayed in the web interface.
 chelp.webdav.module=Enable or disable the WebDAV access. When enabled, all system users can access their OpenOLAT folder using WebDAV (recommended).
 chelp.webdav.more=More information about WebDAV usage in OpenOLAT
+chelp.webdav.termsfolders=Enable this flag to list the available semester terms first and within a semester term only the courses from this term. This greatly improves usability with many courses.
 chelp.webdav.usage=Usage
 chelp.webdavconfig.intro=The WebDAV module can be enabled/disabled system wide. The following parameters can be configured
 chelp.webdavconfig.title=WebDAV module configuration
@@ -16,3 +17,5 @@ webdav.digest=Digest Authentication for HTTP access
 webdav.link=Show WebDAV links
 webdav.module=WebDAV access
 webdav.on=enabled
+webdav.termsfolders=Group courses by semester terms
+
diff --git a/src/main/java/org/olat/course/CoursefolderWebDAVMergeSource.java b/src/main/java/org/olat/course/CoursefolderWebDAVMergeSource.java
index 6f42055cfe9f28e60923c15ef03608e72f194d7f..49907ab320f6aced80bd5e54af4e82084f140757 100644
--- a/src/main/java/org/olat/course/CoursefolderWebDAVMergeSource.java
+++ b/src/main/java/org/olat/course/CoursefolderWebDAVMergeSource.java
@@ -20,15 +20,21 @@
 package org.olat.course;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
+import org.olat.core.CoreSpringFactory;
+import org.olat.core.commons.services.webdav.WebDAVModule;
 import org.olat.core.commons.services.webdav.manager.WebDAVMergeSource;
 import org.olat.core.commons.services.webdav.servlets.RequestUtil;
 import org.olat.core.id.Identity;
 import org.olat.core.util.vfs.NamedContainerImpl;
 import org.olat.core.util.vfs.VFSContainer;
+import org.olat.core.util.vfs.VirtualContainer;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
+import org.olat.repository.model.RepositoryEntryLifecycle;
 
 /**
  * This WebDAV provider delivery all folders in courses where the user
@@ -36,8 +42,7 @@ import org.olat.repository.RepositoryManager;
  * 
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  */
-class CoursefolderWebDAVMergeSource extends WebDAVMergeSource {
-	
+class CoursefolderWebDAVMergeSource extends WebDAVMergeSource {	
 	public CoursefolderWebDAVMergeSource(Identity identity) {
 		super(identity);
 	}
@@ -47,12 +52,54 @@ class CoursefolderWebDAVMergeSource extends WebDAVMergeSource {
 		RepositoryManager rm = RepositoryManager.getInstance();
 		List<RepositoryEntry> courseEntries = rm.queryByEditor(getIdentity(), CourseModule.getCourseTypeName());
 		List<VFSContainer> containers = new ArrayList<>();
+		
+		Map<String, VFSContainer> terms = null;
+		VirtualContainer noTermContainer = null;
+		
+		WebDAVModule webDAVModule = CoreSpringFactory.getImpl(WebDAVModule.class);
+		boolean useTerms = webDAVModule.isTermsFoldersEnabled();
+		if (useTerms) {
+			// prepare no-terms folder for all resources without semester term info or private date
+			terms = new HashMap<String, VFSContainer>();
+			noTermContainer = new VirtualContainer("other");
+		}
+		
 		// Add all found repo entries to merge source
 		for (RepositoryEntry re:courseEntries) {
 			String courseTitle = RequestUtil.normalizeFilename(re.getDisplayname());
 			NamedContainerImpl cfContainer = new CoursefolderWebDAVNamedContainer(courseTitle, re.getOlatResource());
-			addContainerToList(cfContainer, containers);
+			
+			if (useTerms) {
+				RepositoryEntryLifecycle lc = re.getLifecycle();
+				if (lc != null && !lc.isPrivateCycle()) {
+					// when a semester term info is found, add it to corresponding term folder
+					String termSoftKey = lc.getSoftKey();
+					VFSContainer termContainer = terms.get(termSoftKey);
+					if (termContainer == null) {
+						// folder for this semester term does not yet exist, create one and add to map
+						String normalizedKey = RequestUtil.normalizeFilename(termSoftKey);
+						termContainer = new VirtualContainer(normalizedKey);
+						terms.put(termSoftKey, termContainer);
+						addContainerToList(termContainer, containers);
+					}
+					termContainer.getItems().add(cfContainer);
+				} else {
+					// no semester term found, add to no-term folder
+					noTermContainer.getItems().add(cfContainer);
+				
+				}
+			} else {
+				addContainerToList(cfContainer, containers);				
+			}
 		}
+
+		if (useTerms) {
+			// add no-terms folder if any have been found
+			if (noTermContainer.getItems().size() > 0) {
+				addContainerToList(noTermContainer, containers);
+			}
+		}
+
 		return containers;
 	}
 }
\ No newline at end of file
diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties
index e8487a248fb0a607e3e1480cedff586093bd16b5..8d8a4d82dc41c2835195803c4133fd2e7f18477b 100644
--- a/src/main/resources/serviceconfig/olat.properties
+++ b/src/main/resources/serviceconfig/olat.properties
@@ -438,6 +438,9 @@ webdav.enabled=true
 #webdav manager (show or don't webdav links in GUI)
 webdav.links.enabled=true
 auth.digest.enabled=true
+#sort courses using semester terms for better discoverability. Only 
+#usefull when semester terms are defined in admin area and used by courses 
+webdav.termsfolders.enabled=true
 
 ########################################################################
 # Image and PDF scale/thumbnail options