diff --git a/src/main/java/org/olat/commons/calendar/ui/_content/indexWeekly.html b/src/main/java/org/olat/commons/calendar/ui/_content/indexWeekly.html
index 7db03d41e032a76c590ce994e012dd279349bbdd..a1db2c557077c9e85ea156272a7e0eb1642fb7ee 100644
--- a/src/main/java/org/olat/commons/calendar/ui/_content/indexWeekly.html
+++ b/src/main/java/org/olat/commons/calendar/ui/_content/indexWeekly.html
@@ -4,7 +4,7 @@
 		#if ($caller == "home")
 			$r.contextHelp("org.olat.commons.calendar","personal-calendar.html","help.hover.personalcal")
 		#elseif ($caller == "course")
-			$r.contextHelp("org.olat.commons.calendar","course-calendar.html","help.hover.coursecal")
+			$r.contextHelp("Course Settings#_optionen")
 		#elseif ($caller == "collab")
 			$r.contextHelp("org.olat.commons.calendar","group-calendar.html","help.hover.groupcal")
 		#elseif ($caller == "profile")
diff --git a/src/main/java/org/olat/core/util/i18n/devtools/TranslationDevController.java b/src/main/java/org/olat/core/util/i18n/devtools/TranslationDevController.java
new file mode 100644
index 0000000000000000000000000000000000000000..a6023c9dd939f40a1483ab650a11232d0701fb63
--- /dev/null
+++ b/src/main/java/org/olat/core/util/i18n/devtools/TranslationDevController.java
@@ -0,0 +1,244 @@
+package org.olat.core.util.i18n.devtools;
+
+import java.util.Locale;
+
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.form.flexible.FormItem;
+import org.olat.core.gui.components.form.flexible.FormItemContainer;
+import org.olat.core.gui.components.form.flexible.elements.FormLink;
+import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
+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.FormEvent;
+import org.olat.core.gui.components.link.Link;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.util.i18n.I18nModule;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TranslationDevController extends FormBasicController {
+
+	@Autowired
+	private TranslationDevManager translationDevManager;
+
+	private String[] values = { "" };
+	private String[] keys = { "on" };
+
+	private TextElement moveOrigin;
+	private TextElement moveTarget;
+	private FormLink submitMove;
+
+	private MultipleSelectionElement sortDryRun;
+	private MultipleSelectionElement removeEmptyDryRun;
+	private MultipleSelectionElement removeDeletedNotDry;
+
+	private FormLink submitSort;
+
+	private FormLink submitRemoveEmpty;
+
+	private TextElement mergeOrigin;
+	private TextElement mergeTarget;
+	private FormLink submitMerge;
+
+	private TextElement removeRemoveDeletedOrigin;
+	private TextElement removeRemoveDeletedTarget;
+	private FormLink submitRemoveDeleted;
+
+	private TextElement deleteKeyLocale;
+	private TextElement deleteKeyBundle;
+	private TextElement deleteKeyKey;
+
+	private TextElement renameKeyBundle;
+	private TextElement renameKeyOrig;
+	private TextElement renameKeyTarget;
+
+	private FormLink submitRename;
+	private FormLink submitDelete;
+
+    private TextElement moveKeyOrigBundle;
+	private TextElement moveKeyKey;
+	private TextElement moveKeyTargetBundle;
+
+	private FormLink submitMoveKeyToBundle;
+	private TextElement removePackageBundle;
+	private FormLink submitRemovePackage;
+
+	private TextElement renameLanguageSource;
+	private TextElement renameLanguageTarget;
+
+	private FormLink submitRenameLanguage;
+	private FormLink submitGetDupKeys;
+	private FormLink submitGetDupVals;
+	private TextElement addKeyBundle;
+	private TextElement addKeyLocale;
+    private TextElement addKeyValue;
+	private TextElement addKeyKey;
+	private FormLink submitAdd;
+
+	public TranslationDevController(UserRequest ureq, WindowControl wControl) {
+		super(ureq, wControl);
+		setFormTitle("devtools.title");
+		initForm(ureq);
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+
+		if(!I18nModule.isTransToolEnabled()){
+			setFormWarning("devtools.warning");
+		}
+
+		// create Key
+
+		uifactory.addStaticTextElement("task.add.key", "", formLayout);
+		addKeyLocale = uifactory.addTextElement("addKeyLocale", "task.add.key.locale", 500, "", formLayout);
+		addKeyBundle = uifactory.addTextElement("addKeyBundle", "task.add.key.bundle", 500, "", formLayout);
+		addKeyKey = uifactory.addTextElement("addKeysKey", "task.add.key.key", 500, "", formLayout);
+		addKeyValue = uifactory.addTextElement("addKeyValue", "task.add.key.value", 500, "" , formLayout);
+
+		submitAdd = uifactory.addFormLink("submitAddKey", formLayout, Link.BUTTON);
+		uifactory.addSpacerElement("addKeySpacer", formLayout, false);
+
+		// rename keys
+		uifactory.addStaticTextElement("task.rename.key", "", formLayout);
+		renameKeyBundle = uifactory.addTextElement("renameKeysBundle", "task.rename.key.bundle", 500, "", formLayout);
+		renameKeyOrig = uifactory.addTextElement("renameKeyOrig", "task.rename.key.orig", 500, "", formLayout);
+		renameKeyTarget = uifactory.addTextElement("renameKeyTarget", "task.rename.key.target", 500, "", formLayout);
+
+		submitRename = uifactory.addFormLink("submitRenameKey", formLayout, Link.BUTTON);
+		uifactory.addSpacerElement("renameKeySpacer", formLayout, false);
+
+		// move Key to bundle
+		uifactory.addStaticTextElement("task.move.key.to.bundle", "", formLayout);
+		moveKeyKey = uifactory.addTextElement("moveKeysToBundleKey", "task.move.key.key", 500, "", formLayout);
+		moveKeyOrigBundle = uifactory.addTextElement("moveKeysToBundleOrig", "task.rename.key.origBundle", 500, "", formLayout);
+		moveKeyTargetBundle = uifactory.addTextElement("moveKeysToBundleTarget", "task.rename.key.targetBundle", 500, "", formLayout);
+
+		submitMoveKeyToBundle = uifactory.addFormLink("submitMoveKeyToBundle", formLayout, Link.BUTTON);
+		uifactory.addSpacerElement("moveKeySpacer", formLayout, false);
+
+		// deleteKeys
+		uifactory.addStaticTextElement("task.remove.key", "", formLayout);
+		deleteKeyLocale = uifactory.addTextElement("deleteKeyLocale", "task.remove.key.locale", 500, "", formLayout);
+		deleteKeyBundle = uifactory.addTextElement("deleteKeyBundle", "task.remove.key.bundle", 500, "", formLayout);
+		deleteKeyKey = uifactory.addTextElement("deleteKeysKey", "task.remove.key.key", 500, "", formLayout);
+
+		submitDelete = uifactory.addFormLink("submitRemoveKey", formLayout, Link.BUTTON);
+		uifactory.addSpacerElement("removeKeySpacer", formLayout, false);
+
+		// sortKeys
+		uifactory.addStaticTextElement("task.sort.keys", "", formLayout);
+		sortDryRun = uifactory.addCheckboxesHorizontal("task.sort.check", formLayout, keys, values);
+		sortDryRun.selectAll();
+
+		submitSort = uifactory.addFormLink("submitSort", formLayout, Link.BUTTON);
+		uifactory.addSpacerElement("sortSpacer", formLayout, false);
+
+		// movePackage
+		uifactory.addStaticTextElement("task.move.package", "", formLayout);
+		moveOrigin = uifactory.addTextElement("moveOrig", "task.move.package.source", 500, "", formLayout);
+		moveTarget = uifactory.addTextElement("moveTarget", "task.move.package.target", 500, "", formLayout);
+
+		submitMove = uifactory.addFormLink("submitMove", formLayout, Link.BUTTON);
+		uifactory.addSpacerElement("moveSpacer", formLayout, false);
+
+		// mergePackage
+		uifactory.addStaticTextElement("task.merge.package", "", formLayout);
+		mergeOrigin = uifactory.addTextElement("mergeOrig", "task.move.package.source", 500, "", formLayout);
+		mergeTarget = uifactory.addTextElement("mergeTarget", "task.move.package.target", 500, "", formLayout);
+
+		submitMerge = uifactory.addFormLink("submitMerge", formLayout, Link.BUTTON);
+		uifactory.addSpacerElement("mergeSpacer", formLayout, false);
+
+		// deletePackage
+		uifactory.addStaticTextElement("task.remove.package", "", formLayout);
+		removePackageBundle = uifactory.addTextElement("removeBundle", "task.remove.package.bundle", 500, "", formLayout);
+
+		submitRemovePackage = uifactory.addFormLink("submitRemovePackage", formLayout, Link.BUTTON);
+		uifactory.addSpacerElement("removeSpacer", formLayout, false);
+
+		// rename language
+		uifactory.addStaticTextElement("task.rename.language", "", formLayout);
+		renameLanguageSource = uifactory.addTextElement("renameLanguageSource", "task.rename.language.source", 500, "", formLayout);
+		renameLanguageTarget = uifactory.addTextElement("renameLanguageTarget", "task.rename.language.target", 500, "", formLayout);
+
+		submitRenameLanguage = uifactory.addFormLink("submitRenameLanguage", formLayout, Link.BUTTON);
+		uifactory.addSpacerElement("renameLanguageSpacer", formLayout, false);
+
+		// removeEmptyKeys
+		uifactory.addStaticTextElement("task.remove.emptyKeys", "", formLayout);
+		removeEmptyDryRun = uifactory.addCheckboxesHorizontal("task.remove.emptyKeysCheck", formLayout, keys, values);
+		removeEmptyDryRun.selectAll();
+
+		submitRemoveEmpty = uifactory.addFormLink("submitRemoveEmpty", formLayout, Link.BUTTON);
+		uifactory.addSpacerElement("emptyKeysSpacer", formLayout, false);
+
+		// RemoveDeletedKeys
+		uifactory.addStaticTextElement("task.remove.deletedKeys", "", formLayout);
+		removeDeletedNotDry = uifactory.addCheckboxesHorizontal("task.remove.deletedKeysCheck", formLayout, keys, values);
+		removeDeletedNotDry.selectAll();
+		removeRemoveDeletedOrigin = uifactory.addTextElement("removeDeleteKeyOrig", "task.move.package.source", 500, "", formLayout);
+		removeRemoveDeletedTarget = uifactory.addTextElement("removeDeleteKeyTarget", "task.move.package.target", 500, "", formLayout);
+
+		submitRemoveDeleted = uifactory.addFormLink("submitRemoveDeleted", formLayout, Link.BUTTON);
+		uifactory.addSpacerElement("deletedKeysSpacer", formLayout, false);
+
+		// get duplicate keys
+		submitGetDupKeys = uifactory.addFormLink("submitGetDupKeys", formLayout, Link.BUTTON);
+		uifactory.addSpacerElement("getDoupKeysSpacer", formLayout, false);
+
+		// get duplicate values
+		submitGetDupVals = uifactory.addFormLink("submitGetDupVals", formLayout, Link.BUTTON);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+
+	}
+
+	@Override
+	protected void doDispose() {
+
+	}
+
+	@Override
+	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+		if (source == submitAdd){
+			translationDevManager.addKey(new Locale(addKeyLocale.getValue()), addKeyBundle.getValue(), addKeyKey.getValue(), addKeyValue.getValue());
+		}
+		if (source == submitRename) {
+			translationDevManager.renameKeyTask(renameKeyBundle.getValue(), renameKeyOrig.getValue(), renameKeyTarget.getValue());
+		}
+		if (source == submitDelete) {
+			translationDevManager.deleteKey(new Locale(deleteKeyLocale.getValue()), deleteKeyBundle.getValue(), deleteKeyKey.getValue());
+		}
+		if (source == submitSort) {
+			translationDevManager.sortKeysTask(!sortDryRun.isSelected(0));
+		}
+		if (source == submitMoveKeyToBundle) {
+			translationDevManager.moveKeyToOtherBundle(moveKeyOrigBundle.getValue(), moveKeyTargetBundle.getValue(), moveKeyKey.getValue());
+		}
+		if (source == submitMove) {
+			translationDevManager.movePackageTask(moveOrigin.getValue(), moveTarget.getValue());
+		}
+		if (source == submitMerge) {
+			translationDevManager.mergePackageTask(mergeOrigin.getValue(), mergeTarget.getValue());
+		}
+		if (source == submitRemoveEmpty) {
+			translationDevManager.removeEmptyKeysTask(!removeEmptyDryRun.isSelected(0));
+		}
+		if (source == submitRemovePackage) {
+			translationDevManager.deletePackage(removePackageBundle.getValue());
+		}
+		if (source == submitRenameLanguage) {
+			translationDevManager.renameLanguageTask(new Locale(renameLanguageSource.getValue()), new Locale(renameLanguageTarget.getValue()));
+		}
+		if (source == submitGetDupKeys) {
+			translationDevManager.getDouplicateKeys();
+		}
+		if (source == submitGetDupVals) {
+			translationDevManager.getDouplicateValues();
+		}
+	}
+
+}
diff --git a/src/main/java/org/olat/core/util/i18n/devtools/TranslationDevManager.java b/src/main/java/org/olat/core/util/i18n/devtools/TranslationDevManager.java
index d0f51c8c69242e9c5d06c498f0ee90f53692ff3e..3776ef6f83e5b01db0341b3cbe10fccfdb9ba760 100644
--- a/src/main/java/org/olat/core/util/i18n/devtools/TranslationDevManager.java
+++ b/src/main/java/org/olat/core/util/i18n/devtools/TranslationDevManager.java
@@ -79,7 +79,7 @@ public class TranslationDevManager extends BasicManager {
 	}
 
 	protected Set<String> getAllLanguages() {
-		return I18nModule.getTranslatableLanguageKeys();
+		return I18nModule.getAvailableLanguageKeys();
 	}
 
 	protected void renameKeyTask(String bundleName, String origKey, String targetKey) {
@@ -197,7 +197,7 @@ public class TranslationDevManager extends BasicManager {
 		checkForEmptyBundleAndDelete(bundleName);
 	}
 
-	private void addKey(Locale locale, String bundleName, String key, String value) {
+	protected void addKey(Locale locale, String bundleName, String key, String value) {
 		I18nItem i18nItem = new I18nItem(bundleName, key, locale, I18nManager.DEFAULT_BUNDLE_PRIORITY, I18nManager.DEFAULT_KEY_PRIORITY);
 		i18nMgr.saveOrUpdateI18nItem(i18nItem, value);
 	}
@@ -319,13 +319,16 @@ public class TranslationDevManager extends BasicManager {
 								addKey(locale, bundleName, key.substring(0, key.length()-1), value);
 							}
 						}
-						log.info("XKEY detected in lang::" + locale.getLanguage() + " bundle::" + bundleName + " key::" + key);	
-						logText.append(i18nMgr.getPropertiesFile(locale, bundleName, I18nModule.getPropertyFilesBaseDir(locale, bundleName)) + 
-								" XKEY detected in lang::" + locale.getLanguage() + " bundle::" + bundleName + " key::" + key + " value::" + value + "\n");		
-						if (reallyRemoveIt) {
-							deleteKey(locale, bundleName, key);							
+						log.info("XKEY detected in lang::" + locale.getLanguage() + " bundle::" + bundleName + " key::" + key);
+						File propertyFileDir = I18nModule.getPropertyFilesBaseDir(locale, bundleName);
+						if(propertyFileDir != null) {
+							File propertyFile = i18nMgr.getPropertiesFile(locale, bundleName, propertyFileDir);
+							logText.append(propertyFile + " XKEY detected in lang::" + locale.getLanguage() + " bundle::" + bundleName + " key::" + key + " value::" + value + "\n");		
+							if (reallyRemoveIt) {
+								deleteKey(locale, bundleName, key);							
+							}
+							counter++;
 						}
-						counter++;
 					}
 				}
 			}
@@ -415,11 +418,14 @@ public class TranslationDevManager extends BasicManager {
 					String value = properties.getProperty(key);
 					if (!StringHelper.containsNonWhitespace(value) ) {
 						log.info("empty Key detected in lang::" + locale.getLanguage() + " bundle::" + bundleName + " key::" + key + " value::" + value);
-						logText.append(i18nMgr.getPropertiesFile(locale, bundleName, I18nModule.getPropertyFilesBaseDir(locale, bundleName)) + 
-								" empty Key detected in lang" + locale.getLanguage() + " bundle::" + bundleName + " key::" + key + " value::" + value + "\n");						
-						if (reallyRemoveIt) {
-							deleteKey(locale, bundleName, key);
-						} 
+						File propertyFileDir = I18nModule.getPropertyFilesBaseDir(locale, bundleName);
+						if(propertyFileDir != null) {
+							File propertyFile = i18nMgr.getPropertiesFile(locale, bundleName, propertyFileDir);
+							logText.append(propertyFile + " empty Key detected in lang" + locale.getLanguage() + " bundle::" + bundleName + " key::" + key + " value::" + value + "\n");						
+							if (reallyRemoveIt) {
+								deleteKey(locale, bundleName, key);
+							}
+						}
 					}
 					counter++;
 				} //each key
diff --git a/src/main/java/org/olat/core/util/i18n/devtools/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/util/i18n/devtools/_i18n/LocalStrings_de.properties
index ee6ff0008702f86d1149b597070c6cfc3ec5926c..5c5ccb11e8fd7c84cd3246d397f289c0afbf26b1 100644
--- a/src/main/java/org/olat/core/util/i18n/devtools/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/core/util/i18n/devtools/_i18n/LocalStrings_de.properties
@@ -1,16 +1,65 @@
-#Mon Mar 02 09:54:04 CET 2009
+#Fri Sep 25 09:34:26 CEST 2015
 caching.enabled=Caching ist eingeschaltet. Um die Developer-Werkzeuge verwenden zu k\u00F6nnen, sollte Caching ausgeschaltet sein.
 coreasjar=Das olatcore Framework ist als Jar geladen, wodurch daran keine \u00C4nderungen vorgenommen werden k\u00F6nnen.
 devtools.title=Developer-Werkzeuge f\u00FCr \u00DCbersetzungen
+devtools.warning=das i18nModul muss aktiviert werden. F\u00FCgen Sie hierzu die Folgenden Zeilen in ihre olat.local.properties\:<br/><br/>is.translation.server\=enabled<br/>i18n.application.src.dir\=${project.build.home.directory}/src/main/java
+menu.i18nDev=i18n maintenance
+menu.i18nDev.alt=i18n maintenance
+submitAddKey=add key\!
+submitGetDupKeys=get duplicate keys\!
+submitGetDupVals=get duplicate values\!
+submitMerge=merge it\!
+submitMove=move it\!
+submitMoveKey=move Key\!
+submitMoveKeyToBundle=move key\!
+submitRemoveDeleted=remove deleted keys\!
+submitRemoveEmpty=remove empty keys\!
+submitRemoveKey=remove key\!
+submitRemovePackage=remove Package\!
+submitRemoveTodo=remove todo keys\!
+submitRenameKey=rename key\!
+submitRenameLanguage=rename language\!
+submitSort=sort it\!
+task.add.key=add new key
+task.add.key.bundle=bundle
+task.add.key.key=key
+task.add.key.locale=locale
+task.add.key.value=value
 task.delete.key=Key l\u00F6schen
 task.delete.package=Package l\u00F6schen
 task.find.douplicates=Duplikate finden
 task.find.unreferenced.keys=Nicht referenzierte Keys finden
-task.merge.package=Packages zusammenf\u00FCgen
-task.move.key=Key verschieben
+task.merge.package=Packages zusammenf\u00FCgenf
+task.move.key.key=Key
+task.move.key.to.bundle=Key verschieben
 task.move.language=Sprache verschieben
 task.move.package=Package verschieben
+task.move.package.source=source
+task.move.package.target=target
+task.remove.deletedKeys=remove deleted keys
+task.remove.deletedKeysCheck=dryrun
+task.remove.emptyKeys=remove empty keys
+task.remove.emptyKeysCheck=dryrun
+task.remove.key=Key entfernen
+task.remove.key.bundle=bundle
+task.remove.key.key=Key
+task.remove.key.locale=Locale
+task.remove.package=remove package
+task.remove.package.bundle=bundle
+task.remove.todoKeys=remove todo keys
+task.remove.todoKeysCheck=dryrun
+task.remove.xKeys=remove x keys
+task.remove.xKeysCheck=dryrun
 task.remove.xkeys=X-Keys entfernen
 task.rename.key=Key umbenennen
+task.rename.key.bundle=Bundle
+task.rename.key.orig=origin Keyname
+task.rename.key.origBundle=Origin Bundle
+task.rename.key.target=target Keyname
+task.rename.key.targetBundle=target Bundle
 task.rename.language=Sprache umbenennen
+task.rename.language.source=source language
+task.rename.language.target=target language
+task.sort.check=dryrun
+task.sort.keys=sort all keys
 task.unknown.keys=falsche Keys anzeigen/l\u00F6schen
diff --git a/src/main/java/org/olat/core/util/i18n/devtools/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/util/i18n/devtools/_i18n/LocalStrings_en.properties
index 005475f215e5ca008af401a59c7c4f2ab1ca3ee2..e0c43abf9885d025daca177b10502265038858f2 100644
--- a/src/main/java/org/olat/core/util/i18n/devtools/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/core/util/i18n/devtools/_i18n/LocalStrings_en.properties
@@ -1,7 +1,9 @@
-#Mon Mar 02 09:54:18 CET 2009
+#Fri Sep 25 09:11:16 CEST 2015
 caching.enabled=Cache is activated. In order to be able to use developer tools it has to be deactivated first.
 coreasjar=The olatcore framework is loaded as Jar. Therefore you cannot make modifications.
 devtools.title=Developer tools for translation purposes
+menu.i18nDev=i18n maintenance
+menu.i18nDev.alt=i18n maintenance
 task.delete.key=Delete key
 task.delete.package=Delete package
 task.find.douplicates=Find duplicates
diff --git a/src/main/java/org/olat/core/util/i18n/devtools/_i18n/i18nBundleMetadata.properties b/src/main/java/org/olat/core/util/i18n/devtools/_i18n/i18nBundleMetadata.properties
deleted file mode 100644
index af659b082f11c275d3fe1d705ef60203696ddb8a..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/core/util/i18n/devtools/_i18n/i18nBundleMetadata.properties
+++ /dev/null
@@ -1,2 +0,0 @@
-#Tue Feb 17 17:00:01 CET 2009
-bundle.priority=300
diff --git a/src/main/java/org/olat/core/util/i18n/devtools/_spring/devtoolsCorecontext.xml b/src/main/java/org/olat/core/util/i18n/devtools/_spring/devtoolsCorecontext.xml
index 323365fece2a368bbf8ead069fe2318023f2a642..e4c33b1f1b5650940352fb6a16cb88dc0ea1a5ca 100644
--- a/src/main/java/org/olat/core/util/i18n/devtools/_spring/devtoolsCorecontext.xml
+++ b/src/main/java/org/olat/core/util/i18n/devtools/_spring/devtoolsCorecontext.xml
@@ -8,5 +8,23 @@
 <bean id="translationDevManager" class="org.olat.core.util.i18n.devtools.TranslationDevManager">
 	<constructor-arg ref="I18nManager" />
 </bean>
-
+	<!-- Devel / snoop user session -->
+	<bean class="org.olat.core.extensions.action.GenericActionExtension"  init-method="initExtensionPoints">
+			<property name="order" value="15120" />
+			<property name="actionController">
+				<bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype">
+					<property name="className" value="org.olat.core.util.i18n.devtools.TranslationDevController"/>
+				</bean>
+			</property>
+			<property name="navigationKey" value="i18nDev" />
+			<property name="parentTreeNodeIdentifier" value="develParent" />
+			<property name="translationPackage" value="org.olat.core.util.i18n.devtools"/>
+			<property name="i18nActionKey" value="menu.i18nDev"/>
+			<property name="i18nDescriptionKey" value="menu.i18nDev.alt"/>
+			<property name="extensionPoints">
+				<list>
+					<value>org.olat.admin.SystemAdminMainController</value>
+				</list>
+			</property>
+	</bean>
 </beans>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java b/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java
index d7157c014f46b6d4185f97f9d1fc6d0e4da105cb..5e6a704d93636db7c4ca35e59995dd1d0a8ffbe9 100644
--- a/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java
+++ b/src/main/java/org/olat/course/certificate/ui/CertificatesOptionsController.java
@@ -146,7 +146,7 @@ public class CertificatesOptionsController extends FormBasicController {
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		setFormTitle("options.certificates.title");
 		setFormTitleIconCss("o_icon o_icon_certificate");
-		setFormContextHelp("org.olat.course.config.ui","course-efficiency.html","help.hover.course-eff");
+		setFormContextHelp("Course Settings#_leistungsnachweis");
 		formLayout.setElementCssClass("o_sel_course_certificates");
 		
 		boolean effEnabled = courseConfig.isEfficencyStatementEnabled();
diff --git a/src/main/java/org/olat/course/condition/_content/defaultaccessedit.html b/src/main/java/org/olat/course/condition/_content/defaultaccessedit.html
index 1981979ba8c8da69134f603de9ab751825f75d33..8001749a2852abaf749ee7097fc93fb0a3938f53 100644
--- a/src/main/java/org/olat/course/condition/_content/defaultaccessedit.html
+++ b/src/main/java/org/olat/course/condition/_content/defaultaccessedit.html
@@ -1,5 +1,5 @@
 <fieldset>
-	<legend>$r.contextHelpWithWrapper("org.olat.course.editor","ced-acc.html","help.hover.acc")
+	<legend>$r.contextHelpWithWrapper("General Configuration of Course Elements#_zugang")
 	$title</legend>
 	$r.render("defaultAccessConditionView")
 </fieldset>
diff --git a/src/main/java/org/olat/course/config/ui/CourseOptionsController.java b/src/main/java/org/olat/course/config/ui/CourseOptionsController.java
index 599d42d58b50bb38a92c240822f98b4d20c6f4a5..e51332089e6c991d110162e7169473925a42c8e0 100644
--- a/src/main/java/org/olat/course/config/ui/CourseOptionsController.java
+++ b/src/main/java/org/olat/course/config/ui/CourseOptionsController.java
@@ -161,8 +161,8 @@ public class CourseOptionsController extends FormBasicController {
 			FormLayoutContainer calCont = FormLayoutContainer.createDefaultFormLayout("cal", getTranslator());
 			calCont.setRootForm(mainForm);
 			formLayout.add(calCont);
-			calCont.setFormContextHelp("org.olat.course.config.ui","course-calendar.html","help.hover.coursecal");
-			
+			calCont.setFormContextHelp("Course Settings#_optionen");
+
 			boolean calendarEnabled = courseConfig.isCalendarEnabled();
 			boolean managedCal = RepositoryEntryManagedFlag.isManaged(entry, RepositoryEntryManagedFlag.calendar);
 			calendarEl = uifactory.addCheckboxesHorizontal("calIsOn", "chkbx.calendar.onoff", calCont, new String[] {"xx"}, new String[] {""});
@@ -175,7 +175,6 @@ public class CourseOptionsController extends FormBasicController {
 		FormLayoutContainer chatCont = FormLayoutContainer.createDefaultFormLayout("chat", getTranslator());
 		chatCont.setRootForm(mainForm);
 		formLayout.add(chatCont);
-		chatCont.setFormContextHelp("org.olat.course.config.ui","course-chat.html","help.hover.course-chat");
 
 		boolean chatEnabled = courseConfig.isChatEnabled();
 		boolean managedChat = RepositoryEntryManagedFlag.isManaged(entry, RepositoryEntryManagedFlag.chat);
@@ -188,7 +187,6 @@ public class CourseOptionsController extends FormBasicController {
 		FormLayoutContainer glossaryCont = FormLayoutContainer.createDefaultFormLayout("glossary", getTranslator());
 		glossaryCont.setRootForm(mainForm);
 		formLayout.add(glossaryCont);
-		glossaryCont.setFormContextHelp("org.olat.course.config.ui","course-glossary.html","help.hover.course-gloss");
 
 		glossaryNameEl = uifactory.addStaticTextElement("glossaryName", "glossary.isconfigured",
 				translate("glossary.no.glossary"), glossaryCont);
@@ -206,11 +204,12 @@ public class CourseOptionsController extends FormBasicController {
 		FormLayoutContainer sharedFolderCont = FormLayoutContainer.createDefaultFormLayout("sharedfolder", getTranslator());
 		sharedFolderCont.setRootForm(mainForm);
 		formLayout.add(sharedFolderCont);
-		sharedFolderCont.setFormContextHelp("org.olat.course.config.ui","course-resfolder.html","help.hover.course-res");
 
 		folderNameEl = uifactory.addStaticTextElement("folderName", "sf.resourcetitle",
 				translate("sf.notconfigured"), sharedFolderCont);
-		
+		folderNameEl.setHelpText(translate("sf.resourcetitle.helptext"));
+		folderNameEl.setHelpUrlForManualPage("Course Settings#_detail_ressourcen");
+
 		FormLayoutContainer buttons2Cont = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
 		sharedFolderCont.add(buttons2Cont);
 		removeFolderCommand = uifactory.addFormLink("sf.unselectsfresource", buttons2Cont, Link.BUTTON);
diff --git a/src/main/java/org/olat/course/config/ui/_chelp/course-chat.html b/src/main/java/org/olat/course/config/ui/_chelp/course-chat.html
deleted file mode 100644
index 13d08fcc293f5a283ca09ea36f0e8f39ddc92d02..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/config/ui/_chelp/course-chat.html
+++ /dev/null
@@ -1,3 +0,0 @@
- <br/>
-		<b>$r.translate("chkbx.chat.onoff")</b>: $r.translate("chelp.cha1") $r.translate("chelp.cha2") $r.translate("chelp.cha3")
-
diff --git a/src/main/java/org/olat/course/config/ui/_chelp/course-efficiency.html b/src/main/java/org/olat/course/config/ui/_chelp/course-efficiency.html
deleted file mode 100644
index 09b79fdc0dde6d5161f84beb143b31c73d1f136e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/config/ui/_chelp/course-efficiency.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<p><b>$r.translate("chkbx.efficency.onoff")</b>: $r.translate("chelp.eff1")</p>
-<p>$r.translate("chelp.eff2")</p>
-<p>$r.translate("chelp.eff3")</p>
-<p>$r.translate("chelp.eff4")</p>
-<p>$r.translate("chelp.eff5")<br />$r.translate("chelp.eff6")<br />$r.translate("chelp.eff7")<br />$r.translate("chelp.eff8")<br />$r.translate("chelp.eff9")</p>
-<p>$r.translate("chelp.eff10")</p>
-<p>$r.translate("chelp.eff11")</p>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/config/ui/_chelp/course-glossary.html b/src/main/java/org/olat/course/config/ui/_chelp/course-glossary.html
deleted file mode 100644
index f3a4c9ec7f8f7f834f2f747c2f443234435c5400..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/config/ui/_chelp/course-glossary.html
+++ /dev/null
@@ -1,8 +0,0 @@
- <br/>
-	<b>$r.translate("glossary.isconfigured")</b>: $r.translate("chelp.glo2")
-	<p>
-		$r.translate("chelp.glo3") 
-	</p>
-	<p>
-		$r.translate("chelp.glo4")
-	</p>
diff --git a/src/main/java/org/olat/course/config/ui/_chelp/course-resfolder.html b/src/main/java/org/olat/course/config/ui/_chelp/course-resfolder.html
deleted file mode 100644
index ab9a7fc8267f636d7dfba37c8aabe01200e81522..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/config/ui/_chelp/course-resfolder.html
+++ /dev/null
@@ -1,20 +0,0 @@
- <br/>
-$r.translate("chelp.res1") $r.translate("chelp.res2") $r.translate("chelp.res3") $r.translate("chelp.res4") 
-(<i>$r.translateWithPackage("org.olat.core.commons.chiefcontrollers","topnav.dr")</i> 
--&gt; 
-<i>$r.translateWithPackage("org.olat.repository","tools.new.header")</i> 
--&gt; 
-<i>$r.translateWithPackage("org.olat.repository","tools.new.createsharedfolder")</i>)
-<br />
-<br />
-
-	<b>$r.translateWithPackage("org.olat.repository","tools.new.createsharedfolder")</b> 
-	$r.translate("chelp.res5")
-	<br />
-	<br />
-	$r.translate("chelp.res6") $r.translate("chelp.res7")
-	<br />
-	<br />
-	<b>$r.translateWithPackage("org.olat","chelp.caution")</b>
-	$r.translate("chelp.res8")
-
diff --git a/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_de.properties
index 9242c43e95b8cf4e011b9ee54820c3bb731d1be9..12076d06d683ec04102fc93d7473fc5025989b27 100644
--- a/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_de.properties
@@ -70,6 +70,7 @@ selectfile=Datei ausw\u00E4hlen
 sf.changesfresource=Auswechseln
 sf.notconfigured=<i>Kein Ressourcenordner ausgew\u00E4hlt</i>
 sf.resourcetitle=Gew\u00E4hlter Ressourcenordner
+sf.resourcetitle.helptext=Die im Ressourcenordner abgelegten Dateien finden Sie im Ablageordner des Kurses im Unterordner \u201E_sharedfolder\u201C.
 sf.selectsfresource=Ausw\u00E4hlen
 sf.unselectsfresource=Auswahl l\u00F6schen
 tab.calendar.title=Einstellungen
diff --git a/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_en.properties
index 8399aa61d97d0d5e0d4ad531d894ebc37b990c82..ba75668e4e8f58e2b8ed22550e43eaaf7aea25a7 100644
--- a/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/config/ui/_i18n/LocalStrings_en.properties
@@ -70,6 +70,7 @@ selectfile=Choose file
 sf.changesfresource=Replace
 sf.notconfigured=<i>No resource folder selected</i>
 sf.resourcetitle=Selected recource folder
+sf.resourcetitle.helptext=The files stored there can be found in the storage folder of your course when selecting the sub-folder "_sharedfolder".
 sf.selectsfresource=Select
 sf.unselectsfresource=Deselect
 tab.calendar.title=Settings
diff --git a/src/main/java/org/olat/course/editor/_chelp/ced-acc.html b/src/main/java/org/olat/course/editor/_chelp/ced-acc.html
deleted file mode 100644
index c097d158d89cec722ca69fae708edb34db009d0d..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/editor/_chelp/ced-acc.html
+++ /dev/null
@@ -1,17 +0,0 @@
- <br/>$r.translateWithPackage("org.olat","chelp.moreInfo") <br/>
-$r.contextHelpRelativeLink("ced-visacc-expl.html")<br/>
-$r.contextHelpRelativeLink("ced-expert-expl.html")<br/>
-$r.contextHelpRelativeLink("ced-expert-eg.html")<br/>
-$r.contextHelpRelativeLink("ced-attr.html")<br/>
-<a href="http://www.switch.ch/aai/" target="_blank"><i class="o_icon o_icon_link_extern"> </i> $r.translate("chelp.generalAAI")</a><br/><br/>
-<br/>
-<br/>
-$r.translate("chelp.coachExclusive") $r.translate("chelp.9") $r.translate("chelp.10acc") <br/><br/>
-$r.translate("chelp.dateSwitch") $r.translate("chelp.11acc") <br/><br/>
-$r.translate("chelp.groupSwitch") $r.translate("chelp.12acc") <br/><br/>
-$r.translate("chelp.assessmentSwitch") $r.translate("chelp.13") $r.translate("chelp.13acc") <br/>
-$r.translate("chelp.14acc") <br/><br/>
-$r.translate("chelp.attributeEasy") $r.translate("chelp.16acc")$r.contextHelpRelativeLink("ced-attr.html") $r.translate("chelp.and") <a href="http://www.switch.ch/aai/" target="_blank"><i class="o_icon o_icon_link_extern"> </i> $r.translate("chelp.generalAAI")</a><br/><br/>
-$r.translate("chelp.applyRulesForCoach") $r.translate("chelp.15acc") <br/><br/>
-$r.translate("chelp.16")<br/><br/>
-$r.translate("chelp.assessmentMode") $r.translate("chelp.18")<br/><br/>
diff --git a/src/main/java/org/olat/course/editor/_chelp/ced-noAcc-expl.html b/src/main/java/org/olat/course/editor/_chelp/ced-noAcc-expl.html
deleted file mode 100644
index 5463d4143c0e5e48b18b0b837eddfd8abb324a13..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/editor/_chelp/ced-noAcc-expl.html
+++ /dev/null
@@ -1,6 +0,0 @@
- <br/>
-	$r.translate("chelp.noAccText") $r.translate("chelp.noAcc1")
-<br/>
-<br/>
-$r.translateWithPackage("org.olat","chelp.see") $r.translate("chelp.fig1D"): 
-$r.contextHelpRelativeLink("ced-visacc-expl.html") 
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/editor/_chelp/ced-vis.html b/src/main/java/org/olat/course/editor/_chelp/ced-vis.html
deleted file mode 100644
index 6774403f96102941caf7858dae755604bc492ce8..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/editor/_chelp/ced-vis.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<br/>
-$r.translateWithPackage("org.olat","chelp.moreInfo") <br/>
-$r.contextHelpRelativeLink("ced-visacc-expl.html")<br/>
-$r.contextHelpRelativeLink("ced-expert-expl.html")<br/>
-$r.contextHelpRelativeLink("ced-expert-eg.html")<br/>
-$r.contextHelpRelativeLink("ced-attr.html")<br/>
-<a href="http://www.switch.ch/aai/" target="_blank"><i class="o_icon o_icon_link_extern"> </i> $r.translate("chelp.generalAAI")</a><br/><br/>
-
-$r.translate("chelp.8vis")<br/><br/>
-
-$r.translate("chelp.coachExclusive") $r.translate("chelp.9") $r.translate("chelp.10vis") <br/><br/>
-$r.translate("chelp.dateSwitch") $r.translate("chelp.11vis")<br/><br/>
-$r.translate("chelp.groupSwitch") $r.translate("chelp.12vis")<br/><br/>
-$r.translate("chelp.assessmentSwitch") $r.translate("chelp.13") $r.translate("chelp.13vis")<br/>
-$r.translate("chelp.14vis")<br/><br/>
-$r.translate("chelp.attributeEasy") $r.translate("chelp.16vis")$r.contextHelpRelativeLink("ced-attr.html") $r.translate("chelp.and") <a href="http://www.switch.ch/aai/" target="_blank"><i class="o_icon o_icon_link_extern"> </i> $r.translate("chelp.generalAAI")</a><br/><br/>
-$r.translate("chelp.applyRulesForCoach") $r.translate("chelp.15vis")<br/><br/>
-$r.translate("chelp.16")<br/><br/>
-$r.translate("chelp.assessmentMode") $r.translate("chelp.17")<br/><br/>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/editor/_content/noAccessExplEdit.html b/src/main/java/org/olat/course/editor/_content/noAccessExplEdit.html
index 2a7bb884a1a1726361777bcb0cb93812f029410c..43818cb43cc0f84a8a58972eceee0ac62e7026d7 100644
--- a/src/main/java/org/olat/course/editor/_content/noAccessExplEdit.html
+++ b/src/main/java/org/olat/course/editor/_content/noAccessExplEdit.html
@@ -1,5 +1,4 @@
 <fieldset>
-	<legend>$r.contextHelpWithWrapper("org.olat.course.editor","ced-noAcc-expl.html","help.hover.noAcc")
-	$r.translate("condition.noAccessExplanation.title")</legend>
+	<legend>$r.translate("condition.noAccessExplanation.title")</legend>
 	$r.render("noAccexplForm")
 </fieldset>
diff --git a/src/main/java/org/olat/course/editor/_content/nodeedit.html b/src/main/java/org/olat/course/editor/_content/nodeedit.html
index 78c1f685e632549e500d226adee5e8cba9424f19..c0d4dbdd720e201dbc4470c968f3b5e2f2d87db1 100644
--- a/src/main/java/org/olat/course/editor/_content/nodeedit.html
+++ b/src/main/java/org/olat/course/editor/_content/nodeedit.html
@@ -1,6 +1,6 @@
 <fieldset id="$r.getCId()" class="o_form form-horizontal" role="form">
 	<legend>
-		$r.contextHelpWithWrapper("org.olat.course.editor","ced-des.html","help.hover.des")
+		$r.contextHelpWithWrapper("General Configuration of Course Elements#_beschreibung")
 		$r.translate("nodeConfigForm.title")</legend>
 	<div class="clearfix">
 		<div class="small pull-left">Id: $nodeId</div>
diff --git a/src/main/java/org/olat/course/editor/_content/visibilityedit.html b/src/main/java/org/olat/course/editor/_content/visibilityedit.html
index 93ee6447611ea365c72b05e6a52fb44f637dbef7..8d4762c9751171283adf51433004981191665d85 100644
--- a/src/main/java/org/olat/course/editor/_content/visibilityedit.html
+++ b/src/main/java/org/olat/course/editor/_content/visibilityedit.html
@@ -1,5 +1,5 @@
 <fieldset class="o_form form-horizontal o_sel_course_visibility_condition_form">
-	<legend>$r.contextHelpWithWrapper("org.olat.course.editor","ced-vis.html","help.hover.vis")
+	<legend>$r.contextHelpWithWrapper("General Configuration of Course Elements#_zugang")
 	$r.translate("condition.visibility.title")</legend>
 	$r.render("visibilityCondition")
 </fieldset>
diff --git a/src/main/java/org/olat/course/groupsandrights/CourseGroupManager.java b/src/main/java/org/olat/course/groupsandrights/CourseGroupManager.java
index e774a02b29aaba4ad89cb4b4b1619351be84495c..64f35d62cdafac83b9d02a7fd7234cf1277fa902 100644
--- a/src/main/java/org/olat/course/groupsandrights/CourseGroupManager.java
+++ b/src/main/java/org/olat/course/groupsandrights/CourseGroupManager.java
@@ -56,6 +56,8 @@ public interface CourseGroupManager {
 	public OLATResource getCourseResource();
 	
 	public RepositoryEntry getCourseEntry();
+	
+	public void refreshRepositoryEntry(RepositoryEntry entry);
 
 	/**
 	 * Checks users course rights in any of the available right group context of
diff --git a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java
index 6d1471e3e981eecbd5c9965675f975269bf77afb..97e4e5523786c533287cfda6df340390f5e4dc95 100644
--- a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java
+++ b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java
@@ -115,6 +115,11 @@ public class PersistingCourseGroupManager extends BasicManager implements Course
 		}
 		return courseRepoEntry;
 	}
+	
+	@Override
+	public void refreshRepositoryEntry(RepositoryEntry entry) {
+		courseRepoEntry = entry;
+	}
 
 	/**
 	 * @param course The current course
diff --git a/src/main/java/org/olat/course/nodes/cal/_content/edit_access.html b/src/main/java/org/olat/course/nodes/cal/_content/edit_access.html
index deef553fc803fa993bd13d819a7341dfc90a8c17..62170d2bafa9bc376cd2764b02840efbcbbf4a25 100644
--- a/src/main/java/org/olat/course/nodes/cal/_content/edit_access.html
+++ b/src/main/java/org/olat/course/nodes/cal/_content/edit_access.html
@@ -4,7 +4,7 @@
 	$r.render("editCondition")
 </fieldset>
 <fieldset class="clearfix">
-	<legend>$r.contextHelpWithWrapper("org.olat.course.editor","ced-acc.html","help.hover.cal.acc")
+	<legend>$r.contextHelpWithWrapper("General Configuration of Course Elements#_zugang")
 	$r.translate("condition.accessibility.title")</legend>
 	$r.render("readerCondition")
 </fieldset>
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java
index f32905a624d8eb882aa0e0d888c553ffd8f3e49b..19ef18c35a94fed919af0b5060bfdfe10f5d3dc0 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java
@@ -188,7 +188,7 @@ public class CheckListAssessmentController extends FormBasicController implement
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		setFormDescription("coach.desc");
-		setFormContextHelp("org.olat.course.nodes.cl.ui", "cl-coach-assessment.html", "help.hover.coach.assessment");
+		setFormContextHelp("Assessment#_checklist_manage");
 
 		if(formLayout instanceof FormLayoutContainer) {
 			FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout;
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListBoxListEditController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListBoxListEditController.java
index 77ad3ef1824d76a065ff8df987084996214b762c..30f533e4195d3d52af00216450a53914da191d61 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListBoxListEditController.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListBoxListEditController.java
@@ -104,7 +104,7 @@ public class CheckListBoxListEditController extends FormBasicController {
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		setFormTitle("config.checkbox.title");
 		setFormDescription("config.checkbox.description");
-		setFormContextHelp("org.olat.course.nodes.cl.ui", "cl-checkbox.html", "help.hover.checkbox");
+		setFormContextHelp("Assessment#_checklist_cb");
 		if(inUse) {
 			setFormWarning("config.warning.inuse");
 		}
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListConfigurationController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListConfigurationController.java
index 1f4d28ebc7b8c8f240ebc059c57afa98d737bdf2..083da789ac1a5844e84d622dd50f96f7c4f73620 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListConfigurationController.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListConfigurationController.java
@@ -100,7 +100,7 @@ public class CheckListConfigurationController extends FormBasicController {
 		} else {
 			setFormTitle("config.title");
 			setFormDescription("config.description");
-			setFormContextHelp("org.olat.course.nodes.cl.ui", "cl-config.html", "help.hover.config");
+			setFormContextHelp("Assessment#_checklist_kursbaustein");
 			if(inUse) {
 				setFormWarning("config.warning.inuse");
 			}
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-checkbox-template.html b/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-checkbox-template.html
index 16f381f024907131d6e9eb2fb57d530a6218e509..97f792eb0b78fbea16b3edd97fadf50cbaba1813 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-checkbox-template.html
+++ b/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-checkbox-template.html
@@ -1,3 +1,3 @@
 <p>$r.translate("chelp.checkbox.template.1")</p>
 <p>$r.translate("chelp.checkbox.template.2")</p>
-<p>$r.translate("chelp.checkbox.template.3") $r.contextHelpRelativeLink("cl-checkbox.html").</p>
\ No newline at end of file
+<p>$r.translate("chelp.checkbox.template.3") $r.contextHelpRelativeLink("Assessment#_checklist_cb").</p>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-checkbox.html b/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-checkbox.html
deleted file mode 100644
index cc460dae2b7712343e279aaf073f22feff02a293..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/cl/ui/_chelp/cl-checkbox.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<p>$r.translate("chelp.checkbox.1")</p>
-<p>$r.translate("chelp.checkbox.2")</p>
-<p>$r.translate("chelp.checkbox.3")</p>
-<p>$r.translate("chelp.checkbox.4")</p>
-<p>$r.translate("chelp.checkbox.5")</p>
-<p>$r.translate("chelp.checkbox.6")</p>
-<p>$r.translate("chelp.checkbox.7")</p>
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/info/_content/edit_access.html b/src/main/java/org/olat/course/nodes/info/_content/edit_access.html
index d7eede4596dd304c1fdb428a22143666f23a57d3..567d41fcc819db99f62e4e29ceaa4d6fdc41c8f3 100644
--- a/src/main/java/org/olat/course/nodes/info/_content/edit_access.html
+++ b/src/main/java/org/olat/course/nodes/info/_content/edit_access.html
@@ -9,7 +9,7 @@
 	$r.render("editCondition")
 </fieldset>
 <fieldset class="clearfix">
-	<legend>$r.contextHelpWithWrapper("org.olat.course.editor","ced-acc.html","help.hover.info.acc")
+	<legend>$r.contextHelpWithWrapper("General Configuration of Course Elements#_zugang")
 	$r.translate("condition.accessibility.title")</legend>
 	$r.render("readerCondition")
 </fieldset>
diff --git a/src/main/java/org/olat/course/nodes/projectbroker/_content/edit_condition.html b/src/main/java/org/olat/course/nodes/projectbroker/_content/edit_condition.html
index 207e5dcebd3b6059b71bfdb16052a79fe900802c..6e7428817bd7c99ff8c5b4a9b61031e68b8f1b5d 100644
--- a/src/main/java/org/olat/course/nodes/projectbroker/_content/edit_condition.html
+++ b/src/main/java/org/olat/course/nodes/projectbroker/_content/edit_condition.html
@@ -1,6 +1,6 @@
 #if ($r.available("projectBrokerCondition"))
 <fieldset class="clearfix">
-	<legend>$r.contextHelpWithWrapper("org.olat.course.editor","ced-acc.html","help.hover.acc")
+	<legend>$r.contextHelpWithWrapper("General Configuration of Course Elements#_zugang")
 	$r.translate("projectbroker.condition.title")</legend>
 	$r.render("projectBrokerCondition")
 </fieldset>
diff --git a/src/main/java/org/olat/course/nodes/st/STCourseNodeDisplayConfigFormController.java b/src/main/java/org/olat/course/nodes/st/STCourseNodeDisplayConfigFormController.java
index 21266114889390e45316f494b912ac2187ff7b02..c25a25b8ac511683e19e1b8dd5beb9d844099ed9 100644
--- a/src/main/java/org/olat/course/nodes/st/STCourseNodeDisplayConfigFormController.java
+++ b/src/main/java/org/olat/course/nodes/st/STCourseNodeDisplayConfigFormController.java
@@ -125,8 +125,7 @@ public class STCourseNodeDisplayConfigFormController extends FormBasicController
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		setFormTitle("config.fieldset.view");
-		setFormContextHelp("org.olat.course.nodes.st", "ced-st-overview.html", "help.st.design");
-		// 
+		setFormContextHelp("Knowledge Transfer#_struktur");
 		FormUIFactory formFact = FormUIFactory.getInstance();
 		// Display type
 		String[] values_displayType = new String[] { translate("form.system"), translate("form.peekview"), translate("form.self"),
diff --git a/src/main/java/org/olat/course/nodes/st/_chelp/ced-st-overview.html b/src/main/java/org/olat/course/nodes/st/_chelp/ced-st-overview.html
deleted file mode 100644
index 469c7e721e523e869b141357ac15e4714430e5a7..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/st/_chelp/ced-st-overview.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<br/>
-		$r.translate("chelp.ov1")
-<br/>
-<br/>
-		$r.translate("chelp.as") 
-		<ul>
-			<li>$r.translate("chelp.ov2")</li>
-			<li>$r.translate("chelp.peekview")</li>
-			<li>$r.translate("chelp.ov3")</li>
-			<li>$r.translate("chelp.delegate")</li>
-		</ul>
-<br/>
-		<b>$r.translate("selectedPeekviewChildren", "10"):</b>$r.translate("chelp.peekview.children")<br/><br/>
-		<b>$r.translate("displayTwoColumns"):</b> $r.translate("chelp.columns")<br/><br/>
-
diff --git a/src/main/java/org/olat/course/nodes/st/_content/scoreedit.html b/src/main/java/org/olat/course/nodes/st/_content/scoreedit.html
index 491953832d65b873110f0ef03d7ae9647d51a677..12d0ec7dd1599c31cb8c720069bcd0129270b332 100644
--- a/src/main/java/org/olat/course/nodes/st/_content/scoreedit.html
+++ b/src/main/java/org/olat/course/nodes/st/_content/scoreedit.html
@@ -1,7 +1,7 @@
 <fieldset class="o_sel_structure_score">
-	<legend>$r.contextHelpWithWrapper("org.olat.course.nodes.st","ced-st-score.html","help.st")
+	<legend>$r.contextHelpWithWrapper("Knowledge Transfer#_displayscore")
 	$r.translate("score.fieldset.title")</legend>
-	
+
   	#if ($isExpertMode)
 	    <div class="o_button_group o_button_group_right">$r.render("cmd.activate.easyMode")</div>
 	    #else
diff --git a/src/main/java/org/olat/course/nodes/wiki/_content/edit_access.html b/src/main/java/org/olat/course/nodes/wiki/_content/edit_access.html
index e44fde325912df9e50aa0f7c605dcfe4b2c55f1e..5ba776d2a734bec625d2d02ffb881155d2a85547 100644
--- a/src/main/java/org/olat/course/nodes/wiki/_content/edit_access.html
+++ b/src/main/java/org/olat/course/nodes/wiki/_content/edit_access.html
@@ -1,5 +1,5 @@
 <fieldset class="clearfix">
-	<legend>$r.contextHelpWithWrapper("org.olat.course.editor","ced-acc.html","help.hover.acc")
+	<legend>$r.contextHelpWithWrapper("General Configuration of Course Elements#_zugang")
 	$r.translate("condition.accessibility.title")</legend>
 	$r.render("readerCondition")
 </fieldset>
diff --git a/src/main/java/org/olat/course/run/CourseRuntimeController.java b/src/main/java/org/olat/course/run/CourseRuntimeController.java
index e85e146edc7dd54c9dd642fac20fc57d01875df6..d19f24b839205e20fe13351e6f408097a65c7458 100644
--- a/src/main/java/org/olat/course/run/CourseRuntimeController.java
+++ b/src/main/java/org/olat/course/run/CourseRuntimeController.java
@@ -271,6 +271,31 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im
 		return run == null ? null : run.getUce();
 	}
 	
+	/**
+	 * Refresh the cached repository entry of the course
+	 * @return
+	 */
+	@Override
+	protected RepositoryEntry loadRepositoryEntry() {
+		RepositoryEntry refreshedEntry = super.loadRepositoryEntry();
+		ICourse course = CourseFactory.loadCourse(getRepositoryEntry());
+		CourseGroupManager cgm = course.getCourseEnvironment().getCourseGroupManager();
+		cgm.refreshRepositoryEntry(refreshedEntry);
+		return refreshedEntry;
+	}
+	
+	/**
+	 * Refresh the cached repository entry of the course
+	 * @return
+	 */
+	@Override
+	protected RepositoryEntry refreshRepositoryEntry(RepositoryEntry refreshedEntry) {
+		ICourse course = CourseFactory.loadCourse(getRepositoryEntry());
+		CourseGroupManager cgm = course.getCourseEnvironment().getCourseGroupManager();
+		cgm.refreshRepositoryEntry(refreshedEntry);
+		return super.refreshRepositoryEntry(refreshedEntry);
+	}
+
 	private RunMainController getRunMainController() {
 		return getRuntimeController() instanceof RunMainController ?
 			(RunMainController)getRuntimeController() : null;
diff --git a/src/main/java/org/olat/course/run/RunMainController.java b/src/main/java/org/olat/course/run/RunMainController.java
index 1317c6d57f6d74a47e3de050c38ef4f01a48afc6..18ebd07457504411482ddafe121e827aff30ed4c 100644
--- a/src/main/java/org/olat/course/run/RunMainController.java
+++ b/src/main/java/org/olat/course/run/RunMainController.java
@@ -782,19 +782,20 @@ public class RunMainController extends MainLayoutBasicController implements Gene
 		String type = firstEntry.getOLATResourceable().getResourceableTypeName();
 		if("CourseNode".equalsIgnoreCase(type)) {
 			CourseNode cn = course.getRunStructure().getNode(firstEntry.getOLATResourceable().getResourceableId().toString());
-
-			getWindowControl().makeFlat();
-			// add logging information for case course gets started via jump-in
-			// link/search
-			addLoggingResourceable(LoggingResourceable.wrap(course));
-			if (cn != null) {
-				addLoggingResourceable(LoggingResourceable.wrap(cn));
-			}
-			
-			if(entries.size() > 1) {
-				entries = entries.subList(1, entries.size());
+			if(currentCourseNode == null || !currentCourseNode.equals(cn)) {
+				getWindowControl().makeFlat();
+				// add logging information for case course gets started via jump-in
+				// link/search
+				addLoggingResourceable(LoggingResourceable.wrap(course));
+				if (cn != null) {
+					addLoggingResourceable(LoggingResourceable.wrap(cn));
+				}
+				
+				if(entries.size() > 1) {
+					entries = entries.subList(1, entries.size());
+				}
+				updateTreeAndContent(ureq, cn, null, entries, firstEntry.getTransientState());
 			}
-			updateTreeAndContent(ureq, cn, null, entries, firstEntry.getTransientState());
 		}
 	}
 
diff --git a/src/main/java/org/olat/course/run/preview/PreviewCourseGroupManager.java b/src/main/java/org/olat/course/run/preview/PreviewCourseGroupManager.java
index 1188ea565a3e322a0b1964dbbac7fe540645716a..36313080a36043de41eeb37e94f5302fa577c8f9 100644
--- a/src/main/java/org/olat/course/run/preview/PreviewCourseGroupManager.java
+++ b/src/main/java/org/olat/course/run/preview/PreviewCourseGroupManager.java
@@ -49,7 +49,7 @@ final class PreviewCourseGroupManager extends BasicManager implements CourseGrou
 
 	private List<BGArea> areas;
 	private List<BusinessGroup> groups;
-	private final RepositoryEntry courseResource;
+	private RepositoryEntry courseResource;
 	private boolean isCoach, isCourseAdmin;
 	
 	/**
@@ -77,6 +77,11 @@ final class PreviewCourseGroupManager extends BasicManager implements CourseGrou
 		return courseResource;
 	}
 
+	@Override
+	public void refreshRepositoryEntry(RepositoryEntry entry) {
+		this.courseResource = entry;
+	}
+
 	/**
 	 * @see org.olat.course.groupsandrights.CourseGroupManager#hasRight(org.olat.core.id.Identity, java.lang.String)
 	 */
diff --git a/src/main/java/org/olat/group/ui/area/_content/detailstab.html b/src/main/java/org/olat/group/ui/area/_content/detailstab.html
index ae977a8a96434193353b35f70dbfc99da20eec8a..6b4c534fb556d29daae142b59153bb197a030139 100644
--- a/src/main/java/org/olat/group/ui/area/_content/detailstab.html
+++ b/src/main/java/org/olat/group/ui/area/_content/detailstab.html
@@ -1,5 +1,4 @@
 <fieldset>
 	<legend>$r.translate("fieldset.legend.details")</legend>
-	$r.contextHelpWithWrapper("Using Course Tools#_lernbereich")
 	$r.render("areaForm")
 </fieldset>
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/iq/IQManager.java b/src/main/java/org/olat/modules/iq/IQManager.java
index df42024574b7eab8b98b9692fbab317f0ff50435..b29060bd0dc2729975e439aa72e003c8ab446637 100644
--- a/src/main/java/org/olat/modules/iq/IQManager.java
+++ b/src/main/java/org/olat/modules/iq/IQManager.java
@@ -175,7 +175,9 @@ public class IQManager implements UserDataDeletable {
 		// -- VERY RARE CASE -- 1) qti is open in an editor session right now on the screen (or session on the way to timeout)
 		// -- 99% of cases   -- 2) qti is ready to be run as test/survey
 		if (CoordinatorManager.getInstance().getCoordinator().getLocker().isLocked(res, null)){
-			GenericMainController glc = createLockedMessageController(ureq, wControl);
+			LockResult lockEntry = CoordinatorManager.getInstance().getCoordinator().getLocker().aquirePersistentLock(res, ureq.getIdentity(), null);
+			String fullName = userManager.getUserDisplayName(lockEntry.getOwner());
+			GenericMainController glc = createLockedMessageController(ureq, wControl, fullName);
 			return glc;
 		}else{
 			Controller controller = new IQDisplayController(resolver, type, secCallback, ureq, wControl);
@@ -185,14 +187,14 @@ public class IQManager implements UserDataDeletable {
 		}
 	}
 
-	private GenericMainController createLockedMessageController(UserRequest ureq, WindowControl wControl) {
+	private GenericMainController createLockedMessageController(UserRequest ureq, WindowControl wControl, String fullName) {
 		//wrap simple message into mainLayout
 		GenericMainController glc = new GenericMainController(ureq, wControl) {
 			@Override
 			public void init(UserRequest ureq) {
-				Panel empty = new Panel("empty");			
-				setTranslator(Util.createPackageTranslator(this.getClass(), ureq.getLocale())); 
-				Controller contentCtr = MessageUIFactory.createInfoMessage(ureq, getWindowControl(), translate("status.currently.locked.title"), translate("status.currently.locked"));
+				Panel empty = new Panel("empty");
+				setTranslator(Util.createPackageTranslator(this.getClass(), ureq.getLocale()));
+				Controller contentCtr = MessageUIFactory.createInfoMessage(ureq, getWindowControl(), translate("status.currently.locked.title"), translate("status.currently.locked", fullName));
 				listenTo(contentCtr); // auto dispose later
 				Component resComp = contentCtr.getInitialComponent();
 				LayoutMain3ColsController columnLayoutCtr = new LayoutMain3ColsController(ureq, getWindowControl(), empty, resComp, /*do not save no prefs*/null);
diff --git a/src/main/java/org/olat/repository/RepositoryEntry.java b/src/main/java/org/olat/repository/RepositoryEntry.java
index 5da47833b1a621205b7b31b67ebf9523f845e548..be04e3fc51b98f70b80ebfd118995e3e6572012e 100644
--- a/src/main/java/org/olat/repository/RepositoryEntry.java
+++ b/src/main/java/org/olat/repository/RepositoryEntry.java
@@ -68,8 +68,10 @@ import org.olat.resource.OLATResourceImpl;
 @Table(name="o_repositoryentry")
 @NamedQueries({
 	@NamedQuery(name="getRepositoryEntryRoleAndDefaults", query="select membership.role, relGroup.defaultGroup from repositoryentry as v inner join v.groups as relGroup inner join relGroup.group as baseGroup inner join baseGroup.members as membership where v.key=:repoKey and membership.identity.key=:identityKey"),
-	@NamedQuery(name="filterRepositoryEntryMembership", query="select v.key, membership.identity.key from repositoryentry as v inner join v.groups as relGroup inner join relGroup.group as baseGroup inner join baseGroup.members as membership on membership.role in ('owner','coach','.participant') where membership.identity.key=:identityKey and v.key in (:repositoryEntryKey)"),
-	@NamedQuery(name="loadRepositoryEntryByKey", query="select v from repositoryentry as v  inner join fetch v.olatResource as ores inner join fetch v.statistics as statistics left join fetch v.lifecycle as lifecycle where v.key = :repoKey")
+	@NamedQuery(name="filterRepositoryEntryMembership", query="select v.key, membership.identity.key from repositoryentry as v inner join v.groups as relGroup inner join relGroup.group as baseGroup inner join baseGroup.members as membership on membership.role in ('owner','coach','participant') where membership.identity.key=:identityKey and v.key in (:repositoryEntryKey)"),
+	@NamedQuery(name="loadRepositoryEntryByKey", query="select v from repositoryentry as v inner join fetch v.olatResource as ores inner join fetch v.statistics as statistics left join fetch v.lifecycle as lifecycle where v.key = :repoKey"),
+	@NamedQuery(name="loadRepositoryEntryByResourceKey", query="select v from repositoryentry as v inner join fetch v.olatResource as ores inner join fetch v.statistics as statistics left join fetch v.lifecycle as lifecycle where ores.key = :resourceKey")
+	
 })
 public class RepositoryEntry implements CreateInfo, Persistable , RepositoryEntryRef, ModifiedInfo, OLATResourceable {
 
diff --git a/src/main/java/org/olat/repository/_content/editproptabpub.html b/src/main/java/org/olat/repository/_content/editproptabpub.html
index b9e6362c3e7030d34e549dc3e282ed91de29b1c3..9e376a09d60163c6b071f52df2ad35f9e2492ff0 100644
--- a/src/main/java/org/olat/repository/_content/editproptabpub.html
+++ b/src/main/java/org/olat/repository/_content/editproptabpub.html
@@ -1,6 +1,6 @@
 <fieldset>
 	<legend>$r.translate("rentry.prop")</legend>
-	$r.contextHelpWithWrapper("org.olat.repository","rep-meta-olatauthorEd.html", "help.hover.rep.detail")
+	$r.contextHelpWithWrapper("Course Settings#_zugriff")
 	$r.render("proppupform")
 	
 	#if($r.available("accesscontrol") && $isGuestAccess)
diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryDAO.java b/src/main/java/org/olat/repository/manager/RepositoryEntryDAO.java
index bcd56e25f366a93ea2a1c760e7a3913110b849cf..0d6ac5051e4210ad5c380932db4fa581bd721769 100644
--- a/src/main/java/org/olat/repository/manager/RepositoryEntryDAO.java
+++ b/src/main/java/org/olat/repository/manager/RepositoryEntryDAO.java
@@ -44,15 +44,8 @@ public class RepositoryEntryDAO {
 	private DB dbInstance;
 	
 	public RepositoryEntry loadByKey(Long key) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select v from ").append(RepositoryEntry.class.getName()).append(" as v ")
-		  .append(" inner join fetch v.olatResource as ores")
-		  .append(" inner join fetch v.statistics as statistics")
-		  .append(" left join fetch v.lifecycle as lifecycle")
-		  .append(" where v.key = :repoKey");
-		
 		List<RepositoryEntry> entries = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), RepositoryEntry.class)
+				.createNamedQuery("loadRepositoryEntryByKey", RepositoryEntry.class)
 				.setParameter("repoKey", key)
 				.getResultList();
 		if(entries.isEmpty()) {
@@ -63,15 +56,8 @@ public class RepositoryEntryDAO {
 	}
 	
 	public RepositoryEntry loadByResourceKey(Long resourceKey) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("select v from ").append(RepositoryEntry.class.getName()).append(" as v ")
-		  .append(" inner join fetch v.olatResource as ores")
-		  .append(" inner join fetch v.statistics as statistics")
-		  .append(" left join fetch v.lifecycle as lifecycle")
-		  .append(" where ores.key = :resourceKey");
-		
 		List<RepositoryEntry> entries = dbInstance.getCurrentEntityManager()
-				.createQuery(sb.toString(), RepositoryEntry.class)
+				.createNamedQuery("loadRepositoryEntryByResourceKey", RepositoryEntry.class)
 				.setParameter("resourceKey", resourceKey)
 				.getResultList();
 		if(entries.isEmpty()) {
diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java b/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java
index 9f5230282b91d02c3ecec543b54f635047c759db..c80652a5755d6f29d2b6c95d511d7a592e55eb27 100644
--- a/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java
+++ b/src/main/java/org/olat/repository/manager/RepositoryEntryRelationDAO.java
@@ -189,7 +189,7 @@ public class RepositoryEntryRelationDAO {
 	 */
 	public void filterMembership(IdentityRef identity, List<Long> entries) {
 		if(entries == null || entries.isEmpty()) return;
-
+		
 		List<Object[]> membershipList = dbInstance.getCurrentEntityManager()
 				.createNamedQuery("filterRepositoryEntryMembership", Object[].class)
 				.setParameter("identityKey", identity.getKey())
diff --git a/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java b/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java
index b3d8f45cce6b520363f8ca35e0d885100a0489a3..bbbf8b756a4777668446309a4c705fa2b92adb37 100644
--- a/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java
+++ b/src/main/java/org/olat/repository/ui/RepositoryEntryRuntimeController.java
@@ -254,8 +254,14 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController
 		return re;
 	}
 	
-	protected void loadRepositoryEntry() {
+	protected RepositoryEntry loadRepositoryEntry() {
 		re = repositoryService.loadByKey(re.getKey());
+		return re;
+	}
+	
+	protected RepositoryEntry refreshRepositoryEntry(RepositoryEntry refreshedEntry) {
+		re = refreshedEntry;
+		return re;
 	}
 	
 	protected OLATResourceable getOlatResourceable() {
@@ -537,7 +543,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController
 			}
 		} else if(accessCtrl == source) {
 			if(event == Event.CHANGED_EVENT) {
-				re = accessCtrl.getEntry();
+				refreshRepositoryEntry(accessCtrl.getEntry());
 				if(ordersLink != null) {
 					boolean booking = acService.isResourceAccessControled(re.getOlatResource(), null);
 					ordersLink.setVisible(!corrupted && booking);
@@ -545,7 +551,7 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController
 			}
 		} else if(descriptionCtrl == source) {
 			if(event == Event.CHANGED_EVENT) {
-				re = descriptionCtrl.getEntry();
+				refreshRepositoryEntry(descriptionCtrl.getEntry());
 			}
 		} else if(detailsCtrl == source) {
 			if(event instanceof LeavingEvent) {
@@ -635,7 +641,8 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController
 	 */
 	protected void doAccess(UserRequest ureq) {
 		WindowControl bwControl = getSubWindowControl("Access");
-		AuthoringEditAccessController ctrl = new AuthoringEditAccessController(ureq, addToHistory(ureq, bwControl), re);
+		RepositoryEntry refreshedEntry = loadRepositoryEntry();
+		AuthoringEditAccessController ctrl = new AuthoringEditAccessController(ureq, addToHistory(ureq, bwControl), refreshedEntry);
 		listenTo(ctrl);
 		accessCtrl = pushController(ureq, translate("tab.accesscontrol"), ctrl);
 		setActiveTool(accessLink);
@@ -677,8 +684,9 @@ public class RepositoryEntryRuntimeController extends MainLayoutBasicController
 		if(!reSecurity.isEntryAdmin()) return;
 		
 		WindowControl bwControl = getSubWindowControl("Settings");
+		RepositoryEntry refreshedEntry = loadRepositoryEntry();
 		RepositoryEditDescriptionController ctrl
-			= new RepositoryEditDescriptionController(ureq, addToHistory(ureq, bwControl), re);
+			= new RepositoryEditDescriptionController(ureq, addToHistory(ureq, bwControl), refreshedEntry);
 		listenTo(ctrl);
 		descriptionCtrl = pushController(ureq, translate("settings.editor"), ctrl);
 		currentToolCtr = descriptionCtrl;
diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryPublishController.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryPublishController.java
index 3df10da29dcb0f46fd0e78a5fdba4d2ebee9f452..c8ed1af5a36404dbb341125944a1b8b713fca5f1 100644
--- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryPublishController.java
+++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryPublishController.java
@@ -184,7 +184,7 @@ public class AuthoringEntryPublishController extends FormBasicController {
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		setFormTitle("rentry.publish");
-		setFormContextHelp("org.olat.repository", "rep-meta-olatauthorEd.html", "help.hover.rep.detail");
+		setFormContextHelp("Course Settings#_zugriff");
 		formLayout.setElementCssClass("o_sel_repositoryentry_access");
 
 		String resourceType = entry.getOlatResource().getResourceableTypeName();
diff --git a/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java b/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java
index 6d0b67eb05e60dcb4d5364b23923ed2acf6c94d8..bc99019d2234778ac650831748e4b8ece53f02f0 100644
--- a/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java
+++ b/src/main/java/org/olat/repository/ui/author/RepositoryEditDescriptionController.java
@@ -137,7 +137,7 @@ public class RepositoryEditDescriptionController extends FormBasicController {
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		
 		descCont = FormLayoutContainer.createDefaultFormLayout("desc", getTranslator());
-		descCont.setFormContextHelp("org.olat.repository","rep-meta-desc.html","help.hover.lifecycle");
+		descCont.setFormContextHelp("Info Page: Add Meta Data");
 		descCont.setRootForm(mainForm);
 		formLayout.add("desc", descCont);
 
diff --git a/src/main/java/org/olat/repository/ui/list/RepositoryEntryRow.java b/src/main/java/org/olat/repository/ui/list/RepositoryEntryRow.java
index fdb134c821a81586f6736e631c658807ef5e4457..673d69569d2bb41fcaeb00a8cc2b4ffc072e67ac 100644
--- a/src/main/java/org/olat/repository/ui/list/RepositoryEntryRow.java
+++ b/src/main/java/org/olat/repository/ui/list/RepositoryEntryRow.java
@@ -182,7 +182,6 @@ public class RepositoryEntryRow implements RepositoryEntryRef {
 	public void setDisplayName(String name) {
 		this.name = name;
 	}
-	
 
 	public String getShortenedDescription() {
 		if(shortenedDescription != null) {
diff --git a/src/main/java/org/olat/resource/accesscontrol/provider/paypal/ui/_chelp/paypalMasterAccount.html b/src/main/java/org/olat/resource/accesscontrol/provider/paypal/ui/_chelp/paypalMasterAccount.html
index 7a16464aec8ffea91ea7ff7655f3c69ff46beaf2..4536a634e9d7af85cca4a636d78eb42813a3c325 100644
--- a/src/main/java/org/olat/resource/accesscontrol/provider/paypal/ui/_chelp/paypalMasterAccount.html
+++ b/src/main/java/org/olat/resource/accesscontrol/provider/paypal/ui/_chelp/paypalMasterAccount.html
@@ -11,7 +11,6 @@
 </h5>
 <p>
 	$r.translate("chelp.paypalMasterAccount.courses")
-	$r.contextHelpRelativeLink("org.olat.resource.accesscontrol.ui", "accesscontrol.html")
 </p>
 
 <p class="o_warning">
diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java b/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java
index 605d53aeaf9415c6cbed3e58578716497de7e88d..827753e0ed3cbe4fe7b995f212ec9cae45a2424c 100644
--- a/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java
+++ b/src/main/java/org/olat/resource/accesscontrol/ui/AccessConfigurationController.java
@@ -151,8 +151,7 @@ public class AccessConfigurationController extends FormBasicController {
 		
 		if(!embbed) {
 			setFormTitle("accesscontrol.title");
-			setFormContextHelp(AccessConfigurationController.class.getPackage().getName(), "accesscontrol.html", "chelp.accesscontrol.hover");
-			
+
 			if(editable) {
 				final FormLayoutContainer buttonGroupLayout = FormLayoutContainer.createButtonLayout("buttonLayout", getTranslator());
 				buttonGroupLayout.setRootForm(mainForm);
diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/_chelp/accesscontrol.html b/src/main/java/org/olat/resource/accesscontrol/ui/_chelp/accesscontrol.html
deleted file mode 100644
index 0a07368b8f5fb60f374e49363906d8a5a7ac33dd..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/resource/accesscontrol/ui/_chelp/accesscontrol.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<p>
-	$r.translate("chelp.accesscontrol.intro")
-</p>
-<p>
-	$r.translate("chelp.accesscontrol.access")
-	<ol>
- 		<li>$r.translate("chelp.accesscontrol.access.free")</li>
- 		<li>$r.translate("chelp.accesscontrol.access.order")</li>
-	</ol>
-</p>
-<p>$r.translate("chelp.accesscontrol.access.member")</p>
-<p>$r.translate("chelp.accesscontrol.methods")</p>
-<div class="o_access_create">
-	<ul>
-		<li><b><i class="o_icon o_ac_free_icon o_icon-lg"></i> $r.translate("free.method")</b>: $r.translate("chelp.accesscontrol.method.free")</li>
- 		<li><b><i class="o_icon o_ac_token_icon o_icon-lg"></i> $r.translate("token.method")</b>: $r.translate("chelp.accesscontrol.method.token")</li>
- 		<li><b><i class="o_icon o_ac_paypal_icon o_icon-lg"></i> $r.translateWithPackage("org.olat.resource.accesscontrol.provider.paypal.ui", "paypal.method")</b>: $r.translateWithPackage("org.olat.resource.accesscontrol.provider.paypal.ui", "chelp.accesscontrol_group.method.paypal")</li>
-	</ul>	
-</div>
-<p>$r.translate("chelp.accesscontrol.dates")</p>
-<p>$r.translate("chelp.accesscontrol.manual")</p>
-<p>$r.translate("chelp.accesscontrol.delete")</p>
\ No newline at end of file
diff --git a/src/main/webapp/static/js/openolat/iframe.js b/src/main/webapp/static/js/openolat/iframe.js
index 1a059c4d29358e04b073088ad77ea9556359ff71..6e089570b8003d4e61aa403323bc3f229a59dd9a 100644
--- a/src/main/webapp/static/js/openolat/iframe.js
+++ b/src/main/webapp/static/js/openolat/iframe.js
@@ -302,8 +302,19 @@ function b_changeLinkTargets() {
 		if (anchor.getAttribute('href')) {
 			var target = anchor.getAttribute('target');
 			var href = anchor.getAttribute("href");
-			if (href.indexOf("/auth/repo/go?rid=") != -1 || href.indexOf("/url/RepositoryEntry/") != -1
-					|| href.indexOf("/url/BusinessGroup/") != -1 || href.indexOf("/url/CatalogEntry/") != -1) {
+			if (href.indexOf("/auth/repo/go?rid=") != -1 
+					|| (href.indexOf("/url/") != -1 && (
+							href.indexOf("/RepositoryEntry/") != -1 
+							|| href.indexOf("/BusinessGroup/") != -1 
+							|| href.indexOf("Site/", href.indexOf("/url/")) != -1
+							|| href.indexOf("/CatalogEntry/") != -1										
+							|| href.indexOf("/Portal/") != -1
+							|| href.indexOf("/CatalogAdmin/") != -1
+							|| href.indexOf("/CoachSite/") != -1
+							|| href.indexOf("/GMCMenuTree/") != -1
+						)
+					)
+			) {
 				// absolute links to repository entries have to by opened in the parent frame
 				// /auth/repo/ is legacy format, /url/RepositoryEntry/ is new format
 				anchor.target = "_parent";
diff --git a/src/test/java/org/olat/core/util/i18n/I18nTest.java b/src/test/java/org/olat/core/util/i18n/I18nTest.java
index c47a0e29704680dd3031345e4adea1d092350a19..e98b518ca211334e68517a515fd2db002f0bf004 100644
--- a/src/test/java/org/olat/core/util/i18n/I18nTest.java
+++ b/src/test/java/org/olat/core/util/i18n/I18nTest.java
@@ -285,25 +285,29 @@ public class I18nTest extends OlatTestCase {
 	}
 	
 	//remove after execution!
-	@Test public void testRemoveXKeyTask(){
+	@Test
+	public void testRemoveXKeyTask(){
 		tDMgr.removeXKeysTask(false);		
 		tDMgr.logToFile("XKeys");
 	}
 	
 	//remove after execution!
-	@Test public void testRemoveTodoKeyTask(){
+	@Test
+	public void testRemoveTodoKeyTask(){
 		tDMgr.removeTodoKeysTask(false);
 		tDMgr.logToFile("todoKeys");
 	}
 	
 	//remove after execution!
-	@Test public void testRemoveEmptyKeysTask(){
+	@Test
+	public void testRemoveEmptyKeysTask(){
 		tDMgr.removeEmptyKeysTask(false);
 		tDMgr.logToFile("emptyKeys");
 	}
 	
 	//remove after execution!	
-	@Test public void testRemoveReferenceLanguageCopiesTask(){
+	@Test
+	public void testRemoveReferenceLanguageCopiesTask(){
 		if (I18nModule.isTransToolEnabled()) {
 			tDMgr.removeReferenceLanguageCopiesTask(false);
 			tDMgr.logToFile("refLangCopied");