diff --git a/src/main/java/org/olat/commons/file/filechooser/FileChooseCreateEditController.java b/src/main/java/org/olat/commons/file/filechooser/FileChooseCreateEditController.java
index fe66f26ab9918b39b446bbe4d8d6e5202b28ea5a..845765e9cb9d43fb2b2abd2ba8110d739bda9f05 100644
--- a/src/main/java/org/olat/commons/file/filechooser/FileChooseCreateEditController.java
+++ b/src/main/java/org/olat/commons/file/filechooser/FileChooseCreateEditController.java
@@ -137,6 +137,7 @@ public class FileChooseCreateEditController extends BasicController{
 	public static final Event FILE_CONTENT_CHANGED_EVENT = new Event("filecontentchanged");
 	/** Event fired when configuration option to allow relative links has been changed **/
 	public static final Event ALLOW_RELATIVE_LINKS_CHANGED_EVENT = new Event("allowrelativelinkschanged");
+	public static final Event DELIVERY_OPTIONS_CHANGED_EVENT = new Event("deliveryoptionschanged");
 	private Link editButton;
 	private Link deleteButton;
 	private Link changeFileButtonOne;
@@ -187,7 +188,7 @@ public class FileChooseCreateEditController extends BasicController{
 		this.chosenFile = file;		
 		this.rootContainer = rContainer;
 		this.allowRelativeLinks = allowRelLinks == null ? false : allowRelLinks.booleanValue();
-		this.myContent = createVelocityContainer("chosenfile");
+		myContent = createVelocityContainer("chosenfile");
 		editButton = LinkFactory.createButtonSmall("command.edit", myContent, this);
 		editButton.setElementCssClass("o_sel_filechooser_edit");
 		deleteButton = LinkFactory.createButtonSmall("command.delete", myContent, this);
@@ -215,7 +216,7 @@ public class FileChooseCreateEditController extends BasicController{
 		
 		allowRelativeLinksForm = new AllowRelativeLinksForm(ureq, wControl, allowRelativeLinks);
 		listenTo(allowRelativeLinksForm);
-
+		
 		VFSContainer namedCourseFolder = new NamedContainerImpl(getTranslator().translate(NLS_FOLDER_DISPLAYNAME), rContainer);
 		rootContainer = namedCourseFolder;
 		FolderComponent folderComponent = new FolderComponent(ureq, "foldercomp", namedCourseFolder, null, null);
@@ -385,7 +386,7 @@ public class FileChooseCreateEditController extends BasicController{
 				allowRelativeLinks = allowRelativeLinksForm.getAllowRelativeLinksConfig();
 				fireEvent(ureq, ALLOW_RELATIVE_LINKS_CHANGED_EVENT);
 			}
-		}	 
+		}
 	}
 
 	/**
@@ -485,14 +486,19 @@ public class FileChooseCreateEditController extends BasicController{
 	 * @return The choosen file name
 	 */
 	public String getChosenFile(){
-	    return this.chosenFile;
+	    return chosenFile;
+	}
+	
+	public boolean isEditorEnabled() {
+		Boolean editable = (Boolean)myContent.getContext().get(VC_ENABLEEDIT);
+		return editable != null && editable.booleanValue();
 	}
 	
 	/**
 	 * @return The configuration for the allow relative links flag
 	 */
 	public Boolean getAllowRelativeLinks() {
-		return this.allowRelativeLinks;
+		return allowRelativeLinks;
 	}
 	
 	/**
@@ -512,10 +518,10 @@ public class FileChooseCreateEditController extends BasicController{
 			// add form to velocity
 			myContent.put("allowRelativeLinksForm", allowRelativeLinksForm.getInitialComponent());
 			if (file.toLowerCase().endsWith(".html") || file.toLowerCase().endsWith(".htm")) {
-					myContent.contextPut(VC_ENABLEEDIT, Boolean.TRUE);
-				} else {
-					myContent.contextPut(VC_ENABLEEDIT, Boolean.FALSE);
-				}
+				myContent.contextPut(VC_ENABLEEDIT, Boolean.TRUE);
+			} else {
+				myContent.contextPut(VC_ENABLEEDIT, Boolean.FALSE);
+			}
 		} else {
 			myContent.contextPut(VC_CHANGE, Boolean.FALSE);
 			fileChooser.contextPut(VC_CHANGE, Boolean.FALSE);			
diff --git a/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java b/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java
index bdcbc8953ec92453097797daf50151d8a280d3e1..207b639d8f78ea71d479ffdb5c28371514d7d8d2 100644
--- a/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java
+++ b/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java
@@ -45,6 +45,7 @@ import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.control.generic.clone.CloneableController;
 import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.gui.control.generic.iframe.IFrameDisplayController;
 import org.olat.core.gui.control.generic.iframe.NewIframeUriEvent;
 import org.olat.core.gui.media.RedirectMediaResource;
@@ -87,6 +88,7 @@ public class SinglePageController extends BasicController implements CloneableCo
 	
 	// mapper for the external site
 	private String amapPath;
+	private DeliveryOptions deliveryOptions;
 	private IFrameDisplayController idc;
 	
 	private String g_curURI;
@@ -116,9 +118,10 @@ public class SinglePageController extends BasicController implements CloneableCo
 	 * @param allowRelativeLinks
 	 * @param showHomeLink
 	 */
-	public SinglePageController(UserRequest ureq, WindowControl wControl, final VFSContainer rootContainer, final String fileName, String currentUri, boolean allowRelativeLinks) {
+	public SinglePageController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, String fileName, String currentUri,
+			boolean allowRelativeLinks) {
 		//default behavior is to show the home link in a single page
-		this(ureq, wControl, rootContainer, fileName, currentUri, allowRelativeLinks, null);
+		this(ureq, wControl, rootContainer, fileName, currentUri, allowRelativeLinks, null, null);
 	}
 
 	 /**
@@ -142,7 +145,8 @@ public class SinglePageController extends BasicController implements CloneableCo
 	  * 
 	  * 
 	  */
-	public SinglePageController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, String fileName, String currentUri, boolean allowRelativeLinks, OLATResourceable contextResourcable) {
+	public SinglePageController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, String fileName, String currentUri,
+			boolean allowRelativeLinks, OLATResourceable contextResourcable, DeliveryOptions config) {
 		super(ureq, wControl);
 		
 		Panel mainP = new Panel("iframemain");
@@ -151,6 +155,7 @@ public class SinglePageController extends BasicController implements CloneableCo
 		// remember values in case of later cloning
 		// g_fileName : initial file name given (no root correction), e.g. bla.html or f/g/blu.html
 		// always use non-iframe mode for screenreaders
+		this.deliveryOptions = config;
 		this.g_inIframe = !getWindowControl().getWindowBackOffice().getWindowManager().isForScreenReader();
 		this.g_allowRelativeLinks = allowRelativeLinks;
 		this.g_fileName = fileName;
@@ -206,7 +211,7 @@ public class SinglePageController extends BasicController implements CloneableCo
 		// b) page is a direct jump in (unclear why not in this case, code was like that)
 		// c) when page type can not be inline rendered (e.g. when page is a pdf file)
 		if (g_inIframe || jumpIn || !HtmlStaticPageComponent.isFileTypeSupported(startURI)) {
-			idc = new IFrameDisplayController(ureq, getWindowControl(), g_new_rootContainer, contextResourcable);
+			idc = new IFrameDisplayController(ureq, getWindowControl(), g_new_rootContainer, contextResourcable, deliveryOptions);
 			listenTo(idc);
 			
 			idc.setCurrentURI(startURI);
@@ -392,7 +397,7 @@ public class SinglePageController extends BasicController implements CloneableCo
 	 * @see org.olat.core.gui.control.generic.clone.CloneableController#cloneController(org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl)
 	 */
 	public Controller cloneController(UserRequest ureq, WindowControl control) {
-		return new SinglePageController(ureq, control, g_rootContainer, g_fileName, g_curURI, g_allowRelativeLinks, null);
+		return new SinglePageController(ureq, control, g_rootContainer, g_fileName, g_curURI, g_allowRelativeLinks, null, deliveryOptions);
 	}
 
 	/**
diff --git a/src/main/java/org/olat/core/gui/components/tabbedpane/TabbedPane.java b/src/main/java/org/olat/core/gui/components/tabbedpane/TabbedPane.java
index 03465af175da19afcf312aee58b7d92ddf32ce37..e310ecf889c684c60ec8cc6abc51e8b39d25959c 100644
--- a/src/main/java/org/olat/core/gui/components/tabbedpane/TabbedPane.java
+++ b/src/main/java/org/olat/core/gui/components/tabbedpane/TabbedPane.java
@@ -137,6 +137,26 @@ public class TabbedPane extends Container implements Activateable2 {
 		}
 		return tabbedPanes.size() - 1;
 	}
+	
+	public boolean containsTab(Component component) {
+		return tabbedPanes.contains(component);
+	}
+	
+	public boolean containsTab(String displayName) {
+		return displayNames.contains(displayName);
+	}
+	
+	public void removeTab(Component component) {
+		int index = tabbedPanes.indexOf(component);
+		if(index >= 0 && index < tabbedPanes.size()) {
+			tabbedPanes.remove(index);
+			displayNames.remove(index);
+			if(selectedPane == index) {
+				setSelectedPane(0);
+			}
+			setDirty(true);
+		}
+	}
 
 	public void removeAll() {
 		if (this.selectedPane != -1) {
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/DeliveryOptions.java b/src/main/java/org/olat/core/gui/control/generic/iframe/DeliveryOptions.java
new file mode 100644
index 0000000000000000000000000000000000000000..b103dc0d9575b381a4e867fe90a01c49957919f4
--- /dev/null
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/DeliveryOptions.java
@@ -0,0 +1,147 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.core.gui.control.generic.iframe;
+
+import java.io.Serializable;
+
+/**
+ * 
+ * Initial date: 29.05.2013<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ */
+public class DeliveryOptions implements Cloneable, Serializable {
+
+	private static final long serialVersionUID = 4863839055413222066L;
+	
+	public static final String CONFIG_HEIGHT_AUTO = "auto";
+	
+	private Boolean inherit;
+	private Boolean standardMode;
+	private Boolean jQueryEnabled;
+	private Boolean prototypeEnabled;
+	private Boolean glossaryEnabled;
+	
+	private Boolean openolatCss;
+	
+	private String height;
+	private String contentEncoding;
+	private String javascriptEncoding;
+	
+	public DeliveryOptions() {
+		//
+	}
+	
+	public DeliveryOptions(Boolean standardMode) {
+		this.standardMode = standardMode;
+	}
+
+	public Boolean getInherit() {
+		return inherit;
+	}
+
+	public void setInherit(Boolean inherit) {
+		this.inherit = inherit;
+	}
+
+	public Boolean getStandardMode() {
+		return standardMode;
+	}
+
+	public void setStandardMode(Boolean standardMode) {
+		this.standardMode = standardMode;
+	}
+
+	public Boolean getjQueryEnabled() {
+		return jQueryEnabled;
+	}
+
+	public void setjQueryEnabled(Boolean jQueryEnabled) {
+		this.jQueryEnabled = jQueryEnabled;
+	}
+
+	public Boolean getPrototypeEnabled() {
+		return prototypeEnabled;
+	}
+
+	public void setPrototypeEnabled(Boolean prototypeEnabled) {
+		this.prototypeEnabled = prototypeEnabled;
+	}
+
+	public Boolean getGlossaryEnabled() {
+		return glossaryEnabled;
+	}
+
+	public void setGlossaryEnabled(Boolean glossarEnabled) {
+		this.glossaryEnabled = glossarEnabled;
+	}
+
+	public Boolean getOpenolatCss() {
+		return openolatCss;
+	}
+
+	public void setOpenolatCss(Boolean openolatCss) {
+		this.openolatCss = openolatCss;
+	}
+	
+	public String getHeight() {
+		return height;
+	}
+
+	public void setHeight(String height) {
+		this.height = height;
+	}
+
+	public String getContentEncoding() {
+		return contentEncoding;
+	}
+
+	public void setContentEncoding(String contentEncoding) {
+		this.contentEncoding = contentEncoding;
+	}
+
+	public String getJavascriptEncoding() {
+		return javascriptEncoding;
+	}
+
+	public void setJavascriptEncoding(String javascriptEncoding) {
+		this.javascriptEncoding = javascriptEncoding;
+	}
+
+	public boolean rawContent() {
+		return (jQueryEnabled == null || !jQueryEnabled.booleanValue())
+				&& (prototypeEnabled == null || !prototypeEnabled.booleanValue())
+				&& (openolatCss == null || !openolatCss.booleanValue());
+	}
+
+	@Override
+	protected DeliveryOptions clone() {
+		DeliveryOptions config = new DeliveryOptions();
+		config.jQueryEnabled = jQueryEnabled;
+		config.prototypeEnabled = prototypeEnabled;
+		config.glossaryEnabled = glossaryEnabled;
+		config.height = height;
+		config.contentEncoding = contentEncoding;
+		config.javascriptEncoding = javascriptEncoding;
+		config.openolatCss = openolatCss;
+		config.standardMode = standardMode;
+		config.inherit = inherit;
+		return config;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/DeliveryOptionsConfigurationController.java b/src/main/java/org/olat/core/gui/control/generic/iframe/DeliveryOptionsConfigurationController.java
new file mode 100644
index 0000000000000000000000000000000000000000..81fb50cc8be1cbb288c69dd5a929a20501b71f5b
--- /dev/null
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/DeliveryOptionsConfigurationController.java
@@ -0,0 +1,416 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.core.gui.control.generic.iframe;
+
+import java.nio.charset.Charset;
+import java.util.Arrays;
+import java.util.Locale;
+import java.util.Map;
+
+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.MultipleSelectionElement;
+import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
+import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
+import org.olat.core.gui.components.form.flexible.impl.FormEvent;
+import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.course.editor.NodeEditController;
+
+/**
+ * 
+ * Initial date: 29.05.2013<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class DeliveryOptionsConfigurationController extends FormBasicController {
+	
+	private DeliveryOptions config, parentConfig;
+	
+	private SingleSelection standardModeEl, inheritEl;
+	private SingleSelection jsOptionEl, cssOptionEl;
+	private SingleSelection encodingContentEl, encodingJSEl, heightEl;
+	private MultipleSelectionElement glossarEl;
+	
+	private static final String[] jsKeys = new String[] {"none", "jQuery", "prototypejs" };
+	private static final String[] cssKeys = new String[] {"none", "openolat" };
+	
+	private static final String[] keys = new String[]{ DeliveryOptions.CONFIG_HEIGHT_AUTO, "460", "480", 
+			"500", "520", "540", "560", "580",
+			"600", "620", "640", "660", "680",
+			"700", "720", "730", "760", "780",
+			"800", "820", "840", "860", "880",
+			"900", "920", "940", "960", "980",
+			"1000", "1020", "1040", "1060", "1080",
+			"1100", "1120", "1140", "1160", "1180",
+			"1200", "1220", "1240", "1260", "1280",
+			"1300", "1320", "1340", "1360", "1380"
+	};
+
+	private String[] encodingContentKeys;
+	private String[] encodingJSKeys;
+	
+	private static final String[] standardModeKeys = new String[]{ "standard", "configured" };
+	private static final String[] inheritKeys = new String[]{ "inherit", "custom"};
+	
+	public DeliveryOptionsConfigurationController(UserRequest ureq, WindowControl wControl, DeliveryOptions config) {
+		this(ureq, wControl, config, null);
+	}
+	
+	public DeliveryOptionsConfigurationController(UserRequest ureq, WindowControl wControl, DeliveryOptions config, DeliveryOptions parentConfig) {
+		super(ureq, wControl);
+		this.config = (config == null ? new DeliveryOptions() : config.clone());
+		this.parentConfig = parentConfig;
+		initForm(ureq);
+
+		if(parentConfig != null && config != null && config.getInherit() != null && config.getInherit().booleanValue()) {
+			setValues(parentConfig);
+		} else {
+			setValues(config);
+		}
+		updateEnabled();
+	}
+	
+	/**
+	 * Return null if the configuration parameter was null and the settings
+	 * were not changed.
+	 * @return
+	 */
+	public DeliveryOptions getDeliveryOptions() {
+		return config;
+	}
+	
+	public DeliveryOptions getParentDeliveryOptions() {
+		return parentConfig;
+	}
+	
+	public void setParentDeliveryOptions(DeliveryOptions parentConfig) {
+		this.parentConfig = parentConfig;
+		if(parentConfig == null) {
+			inheritEl.select(inheritKeys[1], true);
+			inheritEl.setVisible(false);
+			setValues(config);
+		} else if(inheritEl.isVisible()) {
+			if(inheritEl.isSelected(0)) {
+				//update inherit values
+				setValues(parentConfig);
+			}
+		} else {
+			inheritEl.setVisible(true);
+			inheritEl.select(inheritKeys[0], true);
+			persistRawOptions(config);
+			persistEncoding(config);
+			setValues(parentConfig);
+		}
+		updateEnabled();
+		flc.setDirty(true);
+	}
+	
+	public DeliveryOptions getOptionsForPreview() {
+		if(isInherit()) {
+			return parentConfig;
+		} else {
+			DeliveryOptions previewOptions = new DeliveryOptions();
+			persistValues(previewOptions);
+			return previewOptions;
+		}
+	}
+	
+	public boolean isInherit() {
+		return parentConfig != null && config != null && config.getInherit() != null && config.getInherit().booleanValue();
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		setFormDescription("option.desc");
+		String[] inheritValues = new String[]{
+				translate("inherit"), translate("custom")	
+		};
+		inheritEl = uifactory.addRadiosVertical("inherit.label", formLayout, inheritKeys, inheritValues);
+		inheritEl.addActionListener(this, FormEvent.ONCHANGE);
+		if(config != null && config.getInherit() != null && config.getInherit().booleanValue()) {
+			inheritEl.select(inheritKeys[0], true);
+		} else {
+			inheritEl.select(inheritKeys[1], true);
+		}
+		inheritEl.setVisible(parentConfig != null);
+		
+		String[] standardModeValues = new String[]{
+			translate("mode.standard"), translate("mode.configured")	
+		};
+		standardModeEl = uifactory.addRadiosVertical("mode", formLayout, standardModeKeys, standardModeValues);
+		standardModeEl.addActionListener(this, FormEvent.ONCHANGE);
+		
+		String[] jsValues = new String[] {
+				translate("option.js.none"), translate("option.js.jQuery"), translate("option.js.prototypejs")
+		};
+		jsOptionEl = uifactory.addRadiosVertical("option.js", formLayout, jsKeys, jsValues);
+		jsOptionEl.addActionListener(this, FormEvent.ONCHANGE);
+		
+		glossarEl = uifactory.addCheckboxesHorizontal("option.glossary", formLayout, new String[]{"on"}, new String[]{""}, null);
+
+		String[] values = new String[]{ translate("height.auto"), "460px", "480px", 
+				"500px", "520px", "540px", "560px", "580px",
+				"600px", "620px", "640px", "660px", "680px",
+				"700px", "720px", "730px", "760px", "780px",
+				"800px", "820px", "840px", "860px", "880px",
+				"900px", "920px", "940px", "960px", "980px",
+				"1000px", "1020px", "1040px", "1060px", "1080px",
+				"1100px", "1120px", "1140px", "1160px", "1180px",
+				"1200px", "1220px", "1240px", "1260px", "1280px",
+				"1300px", "1320px", "1340px", "1360px", "1380px"
+		};
+		heightEl = uifactory.addDropdownSingleselect("height", "height.label", formLayout, keys, values, null);
+
+		String[] cssValues = new String[] {
+				translate("option.css.none"), translate("option.css.openolat")
+		};
+		cssOptionEl = uifactory.addRadiosVertical("option.css", formLayout, cssKeys, cssValues);
+
+		uifactory.addSpacerElement("spaceman", formLayout, false);
+		
+		Map<String,Charset> charsets = Charset.availableCharsets();
+		int numOfCharsets = charsets.size() + 1;
+		
+		encodingContentKeys = new String[numOfCharsets];
+		encodingContentKeys[0] = NodeEditController.CONFIG_CONTENT_ENCODING_AUTO;
+
+		String[] encodingContentValues = new String[numOfCharsets];
+		encodingContentValues[0] = translate("encoding.auto");
+		
+		encodingJSKeys = new String[numOfCharsets];
+		encodingJSKeys[0] = NodeEditController.CONFIG_JS_ENCODING_AUTO;
+
+		String[] encodingJSValues = new String[numOfCharsets];
+		encodingJSValues[0] =	translate("encoding.same");
+		
+		int count = 1;
+		Locale locale = getLocale();
+		for(Map.Entry<String, Charset> charset:charsets.entrySet()) {
+			encodingContentKeys[count] = charset.getKey();
+			encodingContentValues[count] = charset.getValue().displayName(locale);
+			encodingJSKeys[count] = charset.getKey();
+			encodingJSValues[count] = charset.getValue().displayName(locale);
+			count++;
+		}
+		
+		encodingContentEl = uifactory.addDropdownSingleselect("encoContent", "encoding.content", formLayout, encodingContentKeys, encodingContentValues, null);
+		encodingJSEl = uifactory.addDropdownSingleselect("encoJS", "encoding.js", formLayout, encodingJSKeys, encodingJSValues, null);
+
+		FormLayoutContainer buttonsLayout = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
+		buttonsLayout.setRootForm(mainForm);
+		formLayout.add(buttonsLayout);
+		uifactory.addFormSubmitButton("save", buttonsLayout);
+	}
+	
+	private void updateEnabled() {
+		boolean inherit = (inheritEl.isVisible() && inheritEl.isSelected(0));
+		
+		encodingContentEl.setEnabled(!inherit);
+		encodingJSEl.setEnabled(!inherit);
+		standardModeEl.setEnabled(!inherit);
+		if(inherit) {
+			//disabled all
+			jsOptionEl.setEnabled(false);
+			cssOptionEl.setEnabled(false);
+			heightEl.setEnabled(false);
+			glossarEl.setEnabled(false);
+			//set inherited values
+		} else {
+			boolean standard = standardModeEl.isSelected(0);
+			boolean jQueryEnabled = jsOptionEl.isSelected(1);
+			jsOptionEl.setEnabled(!standard);
+			cssOptionEl.setEnabled(!standard);
+			heightEl.setEnabled(!standard);
+			glossarEl.setEnabled(!standard && jQueryEnabled);
+		}
+	}
+	
+	private void setValues(DeliveryOptions cfg) {
+		Boolean mode = (cfg == null ? null : cfg.getStandardMode());
+		if(mode == null || mode.booleanValue()) {
+			standardModeEl.select("standard", true);
+		} else {
+			standardModeEl.select("configured", true);
+		}
+		
+		if(cfg != null) {
+			if(cfg.getjQueryEnabled() != null && cfg.getjQueryEnabled().booleanValue()) {
+				jsOptionEl.select(jsKeys[1], true);//jQuery
+			} else if(cfg.getPrototypeEnabled() != null && cfg.getPrototypeEnabled().booleanValue()) {
+				jsOptionEl.select(jsKeys[2], true);//prototype
+			} else {
+				jsOptionEl.select(jsKeys[0], true);//default is none
+			}
+		} else {
+			jsOptionEl.select(jsKeys[0], true);//default is none
+		}
+		
+		Boolean glossarEnabled = (cfg == null ? null : cfg.getGlossaryEnabled());
+		if(glossarEnabled != null && glossarEnabled.booleanValue()) {
+			glossarEl.select("on", true);
+		}
+		
+		String height = cfg == null ? null :  cfg.getHeight();
+		if (height != null && Arrays.asList(keys).contains(height)) {
+			heightEl.select(height, true);
+		} else {
+			heightEl.select(DeliveryOptions.CONFIG_HEIGHT_AUTO, true);
+		}
+		
+		if(cfg != null && cfg.getOpenolatCss() != null && cfg.getOpenolatCss().booleanValue()) {
+			cssOptionEl.select(cssKeys[1], true);
+		} else {
+			cssOptionEl.select(cssKeys[0], false);//default none
+		}
+		
+		String encodingContent = (cfg == null ? null : cfg.getContentEncoding());
+		if (encodingContent != null && Arrays.asList(encodingContentKeys).contains(encodingContent)) {
+			encodingContentEl.select(encodingContent, true);
+		} else {
+			encodingContentEl.select(NodeEditController.CONFIG_CONTENT_ENCODING_AUTO, true);
+		}
+		
+		String encodingJS = (cfg == null ? null : cfg.getJavascriptEncoding());
+		if (encodingJS != null && Arrays.asList(encodingJSKeys).contains(encodingJS)) {
+			encodingJSEl.select(encodingJS, true);
+		} else {
+			encodingJSEl.select(NodeEditController.CONFIG_JS_ENCODING_AUTO, true);
+		}
+	}
+	
+	@Override
+	protected void doDispose() {
+		//
+	}
+	
+	
+
+	@Override
+	protected boolean validateFormLogic(UserRequest ureq) {
+		boolean allOk = true;
+		
+		if(!isInherit()) {
+			glossarEl.clearError();
+			if(glossarEl.isAtLeastSelected(1)) {
+				if(!jsOptionEl.isSelected(1)) {
+					allOk &= false;
+					glossarEl.setErrorKey("glossary.need.jQuery", null);
+				}	
+			}
+		}
+		
+		return allOk & super.validateFormLogic(ureq);
+	}
+
+	@Override
+	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+		if(standardModeEl == source) {
+			updateEnabled();
+		} else if(jsOptionEl == source) {
+			updateEnabled();
+		} else if(inheritEl == source) {
+			if(parentConfig != null ) {
+				if(inheritEl.isSelected(0)) {
+					persistRawOptions(config);
+					persistEncoding(config);
+					setValues(parentConfig);
+				} else {
+					setValues(config);
+				}
+			}
+			updateEnabled();
+			flc.setDirty(true);
+		}
+		super.formInnerEvent(ureq, source, event);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		if(parentConfig != null && inheritEl.isVisible() && inheritEl.isSelected(0)) {
+			config = new DeliveryOptions();
+			config.setInherit(Boolean.TRUE);
+		} else {
+			if(config == null) {
+				config = new DeliveryOptions();
+			}
+			
+			persistValues(config); 
+		}
+		fireEvent(ureq, Event.DONE_EVENT);
+	}
+	
+	private void persistValues(DeliveryOptions options) {
+		options.setInherit(Boolean.FALSE);
+		if(standardModeEl.isSelected(0)) {
+			//standard mode
+			options.setStandardMode(Boolean.TRUE);
+			options.setjQueryEnabled(Boolean.FALSE);
+			options.setPrototypeEnabled(Boolean.FALSE);
+			options.setGlossaryEnabled(Boolean.FALSE);
+			options.setHeight(null);
+			options.setOpenolatCss(Boolean.FALSE);
+		} else {
+			options.setStandardMode(Boolean.FALSE);
+			//js
+			if(jsOptionEl.isSelected(0)) {
+				options.setjQueryEnabled(Boolean.FALSE);
+				options.setPrototypeEnabled(Boolean.FALSE);
+				options.setGlossaryEnabled(Boolean.FALSE);
+				options.setHeight(null);
+			} else {
+				options.setjQueryEnabled(jsOptionEl.isSelected(1));
+				options.setPrototypeEnabled(jsOptionEl.isSelected(2));
+				options.setGlossaryEnabled(glossarEl.isAtLeastSelected(1));
+				options.setHeight(heightEl.getSelectedKey());
+			}
+			//css
+			options.setOpenolatCss(cssOptionEl.isSelected(1));
+		}
+		persistEncoding(config);
+	}
+	
+	private void persistRawOptions(DeliveryOptions options) {
+		options.setStandardMode(standardModeEl.isSelected(0));
+		options.setjQueryEnabled(jsOptionEl.isSelected(1));
+		options.setPrototypeEnabled(jsOptionEl.isSelected(2));
+		options.setGlossaryEnabled(glossarEl.isAtLeastSelected(1));
+		options.setHeight(heightEl.getSelectedKey());
+	}
+	
+	private void persistEncoding(DeliveryOptions options) {
+		String contentEncoding = encodingContentEl.getSelectedKey();
+		if(NodeEditController.CONFIG_CONTENT_ENCODING_AUTO.equals(contentEncoding)) {
+			options.setContentEncoding(null);
+		} else {
+			options.setContentEncoding(contentEncoding);
+		}
+		
+		String javascriptEncoding = encodingJSEl.getSelectedKey();
+		if(NodeEditController.CONFIG_JS_ENCODING_AUTO.equals(javascriptEncoding)) {
+			options.setJavascriptEncoding(null);
+		} else {
+			options.setJavascriptEncoding(javascriptEncoding);
+		}
+	}
+}
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDeliveryMapper.java b/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDeliveryMapper.java
index 74b74ded143f00e27c60e0950ad20f0a92067268..102c673f365a87ced297b2ebe11fec673147aa7b 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDeliveryMapper.java
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDeliveryMapper.java
@@ -81,6 +81,10 @@ public class IFrameDeliveryMapper implements Mapper, Serializable {
 	private String themeBaseUri;
 	private String customHeaderContent;
 	
+	private Boolean jQueryEnabled;
+	private Boolean prototypeEnabled;
+	private Boolean openolatCss;
+	
 	private transient boolean checkForInlineEvent;
 	private transient long suppressEndlessReload;
 	
@@ -107,6 +111,29 @@ public class IFrameDeliveryMapper implements Mapper, Serializable {
 		this.themeBaseUri = themeBaseUri;
 		this.customHeaderContent = customHeaderContent;
 	}
+	
+	public void setDeliveryOptions(DeliveryOptions config) {
+		if(config != null) {
+			jQueryEnabled = config.getjQueryEnabled();
+			prototypeEnabled = config.getPrototypeEnabled();
+			if(config.getGlossaryEnabled() != null) {
+				enableTextmarking = config.getGlossaryEnabled().booleanValue();
+			}
+			openolatCss = config.getOpenolatCss();
+			if(config.getContentEncoding() != null) {
+				g_encoding = config.getContentEncoding();
+			}
+			if(config.getJavascriptEncoding() != null) {
+				jsEncoding = config.getJavascriptEncoding();
+			}
+			
+			if(DeliveryOptions.CONFIG_HEIGHT_AUTO.equals(config.getHeight())) {
+				adjusteightAutomatically = true;
+			} else if(StringHelper.containsNonWhitespace(config.getHeight())) {
+				adjusteightAutomatically = false;
+			}
+		}
+	}
 
 	public void setCheckForInlineEvent(boolean checkForInlineEvent) {
 		this.checkForInlineEvent = checkForInlineEvent;
@@ -224,7 +251,11 @@ public class IFrameDeliveryMapper implements Mapper, Serializable {
 		} else {
 			String agent = httpRequest.getHeader("User-Agent");
 			boolean firefoxWorkaround = agent != null && agent.indexOf("Firefox/") > 0;
-			smr.setData(injectJavaScript(page, mimetype, checkForInlineEvent, firefoxWorkaround));			     
+			if(rawContent) {
+				smr.setData(page);	
+			} else {
+				smr.setData(injectJavaScript(page, mimetype, checkForInlineEvent, firefoxWorkaround));	
+			}
 			// When loading next page, check if it was an inline user click
 			this.checkForInlineEvent = true; 
 
@@ -249,11 +280,6 @@ public class IFrameDeliveryMapper implements Mapper, Serializable {
 	 * when puttings js to the end or menachism like ext.onReady is needed
 	 */
 	private String injectJavaScript(String page, String mimetype, boolean addCheckForInlineEvents, boolean anchorFirefoxWorkaround) {
-		//if raw content, add nothing
-		if(rawContent) {
-			return page;
-		}
-		
 		//do not use parser and just check for css and script stuff myself and append just before body and head
 		SimpleHtmlParser parser = new SimpleHtmlParser(page);
 		if (!parser.isValidHtml()) {
@@ -261,7 +287,7 @@ public class IFrameDeliveryMapper implements Mapper, Serializable {
 		}
 
 		String docType = parser.getHtmlDocType();	
-		StringOutput sb = new StringOutput(page.length() + 1000);
+		HtmlOutput sb = new HtmlOutput(docType, themeBaseUri, page.length() + 1000);
 		if (docType != null) sb.append(docType).append("\n");
 		if (parser.getXhtmlNamespaces() == null) sb.append("<html><head>");
 		else {
@@ -273,46 +299,35 @@ public class IFrameDeliveryMapper implements Mapper, Serializable {
 		if (docType != null && docType.indexOf("XHTML") > 0) sb.append("/"); // close tag only when xhtml to validate
 		sb.append(">");
 		
-		if (!parser.hasOwnCss()) {
-			// add olat content css as used in html editor
-			sb.append("<link href=\"").append(themeBaseUri).append("all/content.css\" rel=\"stylesheet\" type=\"text/css\" ");
-			if (docType != null && docType.indexOf("XHTML") > 0) sb.append("/"); // close tag only when xhtml to validate
-			sb.append(">\n");
+		if(openolatCss != null && openolatCss.booleanValue()) {
+			sb.appendOpenolatCss();
+		}
+		
+		if(!parser.hasOwnCss()) {
+			if(openolatCss == null || openolatCss.booleanValue()) {
+				//add olat content css as used in html editor
+				sb.appendOpenolatCss();//css only loaded once in HtmlOutput
+			}
 			if (customCssURL != null) {
 				// add the custom  CSS, e.g. the course css that overrides the standard content css
-				sb.append("<link href=\"").append(customCssURL).append("\" rel=\"stylesheet\" type=\"text/css\" ");
-				if (docType != null && docType.indexOf("XHTML") > 0) sb.append("/"); // close tag only when xhtml to validate
-				sb.append(">\n");				
+				sb.appendCss(customCssURL);				
 			}
 		}
 		
-		//TODO:gs:a do not include if it is a scorm packge!! may results in problems
 		if (enableTextmarking) {
 			if (log.isDebug()) {
 				log.debug("Textmarking is enabled, including tooltips js files into iframe source...");
 			}
-			sb.append("\n<script type=\"text/javascript\" src=\"");
-			StaticMediaDispatcher.renderStaticURI(sb, "js/jquery/jquery-1.9.1.min.js");
-			sb.append("\"></script>\n<script type=\"text/javascript\" src=\"");
-			StaticMediaDispatcher.renderStaticURI(sb, "js/jquery/jquery-migrate-1.1.1.min.js");
-			sb.append("\"></script>\n<script type=\"text/javascript\" src=\"");
-			StaticMediaDispatcher.renderStaticURI(sb, "js/jshashtable-2.1_src.js");
-			sb.append("\"></script>\n<script type=\"text/javascript\" src=\"");
-			StaticMediaDispatcher.renderStaticURI(sb, "js/jquery/ui/jquery-ui-1.10.2.custom.min.js");
-			sb.append("\"></script>");
-			// Load glossary code now			
-			sb.append("\n<script type=\"text/javascript\" id=\"textmarkerLib\" src=\"");
-		  StaticMediaDispatcher.renderStaticURI(sb, "js/openolat/glossaryhighlighter.js");
-			sb.append("\"></script>");
-			sb.append("\n<link rel=\"stylesheet\" type=\"text/css\" id=\"textmarkercss\" href=\"");
-		  StaticMediaDispatcher.renderStaticURI(sb, "js/openolat/glossaryhighlighter.css");
-		  sb.append("\"");
-			if (docType != null && docType.indexOf("XHTML") > 0) sb.append("/"); // close tag only when xhtml to validate
-			sb.append(">\n<link rel=\"stylesheet\" type=\"text/css\" id=\"jqueryiocss\" href=\"");
-		  StaticMediaDispatcher.renderStaticURI(sb, "js/jquery/ui/jquery-ui-1.10.2.custom.min.css");
-		  sb.append("\" ");
-			if (docType != null && docType.indexOf("XHTML") > 0) sb.append("/"); // close tag only when xhtml to validate
-			sb.append(">\n");
+			sb.appendJQuery();	
+			sb.appendGlossary();
+		}
+		
+		if(jQueryEnabled != null && jQueryEnabled.booleanValue()) {
+			sb.appendJQuery();
+		}
+		
+		if(prototypeEnabled != null && prototypeEnabled.booleanValue()) {
+			sb.appendPrototype();
 		}
 		
 		// Load some iframe.js helper code
@@ -347,29 +362,23 @@ public class IFrameDeliveryMapper implements Mapper, Serializable {
 			}
 			sb.append("b_addOnloadEvent(b_changeLinkTargets);");
 			
-			if (this.enableTextmarking){
+			if(enableTextmarking){
 				sb.append("b_addOnloadEvent(b_glossaryHighlight);");
 			}
 			
 			if(anchorFirefoxWorkaround) {
 				sb.append("b_addOnloadEvent(b_anchorFirefoxWorkaround);");
 			}
-			
 			sb.append("\n/* ]]> */\n</script>");
 		}		
-		
-		
+
 		String origHTMLHead = parser.getHtmlHead();
 		// jsMath brute force approach to render latex formulas: add library if
 		// a jsmath class is found in the code and the library is not already in
 		// the header of the page
 		if (BaseChiefController.isJsMathEnabled()) {
 			if ((page.indexOf("class=\"math\"") != -1 || page.indexOf("class='math'") != -1) && (origHTMLHead == null || origHTMLHead.indexOf("jsMath/easy/load.js") == -1)) {
-				sb.append("\n<script type=\"text/javascript\" src=\"");
-				StaticMediaDispatcher.renderStaticURI(sb, "js/jsMath/easy/load.js");
-				sb.append("\"></script>");			
-				// don't show jsmath info box, aready visible in parent window
-				sb.append("<style type='text/css'>#jsMath_button {display:none}</style>");			
+				sb.appendJsMath();		
 			}			
 		}
 
@@ -523,6 +532,76 @@ public class IFrameDeliveryMapper implements Mapper, Serializable {
 		}
 	}
 	
+	private static class HtmlOutput extends StringOutput {
+		private boolean ooCssLoaded = false;
+		private boolean jqueryLoaded = false;
+
+		private final String docType;
+		private final String themeBaseUri;
+		
+		public HtmlOutput(String docType, String themeBaseUri, int length) {
+			super(length);
+			this.docType = docType;
+			this.themeBaseUri = themeBaseUri;
+		}
+		
+		private void appendOpenolatCss() {
+			if(ooCssLoaded) return;
+			
+			append("<link href=\"").append(themeBaseUri).append("all/content.css\" rel=\"stylesheet\" type=\"text/css\" ");
+			if (docType != null && docType.indexOf("XHTML") > 0) append("/"); // close tag only when xhtml to validate
+			append(">\n");
+			ooCssLoaded = true;
+		}
+		
+		public void appendJQuery() {
+			if(jqueryLoaded) return;
+			
+			appendStaticJs("js/jquery/jquery-1.9.1.min.js");
+			appendStaticJs("js/jshashtable-2.1_src.js");
+			appendStaticJs("js/jquery/ui/jquery-ui-1.10.2.custom.min.js");
+		  appendStaticCss("js/jquery/ui/jquery-ui-1.10.2.custom.min.css");
+		  jqueryLoaded = true;
+		}
+
+		public void appendPrototype() {
+			appendStaticJs("js/prototype/prototype.js");
+		}
+		
+		public void appendJsMath() {
+			append("\n<script type=\"text/javascript\" src=\"");
+			StaticMediaDispatcher.renderStaticURI(this, "js/jsMath/easy/load.js");
+			append("\"></script>");			
+			// don't show jsmath info box, aready visible in parent window
+			append("<style type='text/css'>#jsMath_button {display:none}</style>");	
+		}
+		
+		public void appendGlossary() {
+			appendStaticJs("js/openolat/glossaryhighlighter.js");
+			appendStaticJs("js/openolat/glossaryhighlighter.css");
+		}
+
+		public void appendStaticJs(String javascript) {
+			append("<script type=\"text/javascript\" src=\"");
+			StaticMediaDispatcher.renderStaticURI(this, javascript);
+			append("\"></script>\n");
+		}
+		
+		public void appendStaticCss(String css) {
+			append("\n<link rel=\"stylesheet\" type=\"text/css\" id=\"textmarkercss\" href=\"");
+		  StaticMediaDispatcher.renderStaticURI(this, css);
+		  append("\"");
+			if (docType != null && docType.indexOf("XHTML") > 0) append("/"); // close tag only when xhtml to validate
+			append(">\n");
+		}
+		
+		public void appendCss(String css) {
+			append("\n<link rel=\"stylesheet\" type=\"text/css\" id=\"textmarkercss\" href=\"").append(css).append("\"");
+			if (docType != null && docType.indexOf("XHTML") > 0) append("/"); // close tag only when xhtml to validate
+			append(">\n");
+		}
+	}
+	
 	private static class Page {
 		private String encoding;
 		private String contentType;
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDisplayController.java b/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDisplayController.java
index 36baf52d5b3698a014f405147e44e5451f8c6bc3..b88aa2d271ce9bbda4aa94307a36734ff0fe494a 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDisplayController.java
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDisplayController.java
@@ -71,7 +71,7 @@ public class IFrameDisplayController extends BasicController implements GenericE
 	private Panel newUriEventPanel;
 	private Panel main;
 	private IFrameDeliveryMapper contentMapper;
-
+	private DeliveryOptions deliveryOptions;
 	/**
 	 * Base URI of contentMapper
 	 */
@@ -92,7 +92,7 @@ public class IFrameDisplayController extends BasicController implements GenericE
 	 * @param fileRoot File that points to the root directory of the resource 
 	 */
 	public IFrameDisplayController(UserRequest ureq, WindowControl wControl, File fileRoot) {
-		this(ureq, wControl, new LocalFolderImpl(fileRoot), null);
+		this(ureq, wControl, new LocalFolderImpl(fileRoot), null, null);
 	}
 	
 	/**
@@ -103,7 +103,7 @@ public class IFrameDisplayController extends BasicController implements GenericE
 	 * @param ores - send an OLATresourcable of the context (e.g. course) where the iframe runs and it will be checked if the user has textmarking (glossar) enabled in this course
 	 */
 	public IFrameDisplayController(UserRequest ureq, WindowControl wControl, File fileRoot, OLATResourceable ores) {
-		this(ureq, wControl, new LocalFolderImpl(fileRoot), null, ores);
+		this(ureq, wControl, new LocalFolderImpl(fileRoot), null, ores, null);
 	}
 	/**
 	 * 
@@ -112,7 +112,7 @@ public class IFrameDisplayController extends BasicController implements GenericE
 	 * @param rootDir VFSItem that points to the root folder of the resource
 	 */
 	public IFrameDisplayController(UserRequest ureq, WindowControl wControl, VFSContainer rootDir) {
-		this(ureq, wControl, rootDir, null, null);
+		this(ureq, wControl, rootDir, null, null, null);
 	}
 	/**
 	 * 
@@ -121,8 +121,8 @@ public class IFrameDisplayController extends BasicController implements GenericE
 	 * @param rootDir
 	 * @param ores - send an OLATresourcable of the context (e.g. course) where the iframe runs and it will be checked if the user has textmarking (glossar) enabled in this course
 	 */
-	public IFrameDisplayController(UserRequest ureq, WindowControl wControl, VFSContainer rootDir, OLATResourceable ores) {
-		this(ureq, wControl, rootDir, null, ores);
+	public IFrameDisplayController(UserRequest ureq, WindowControl wControl, VFSContainer rootDir, OLATResourceable ores, DeliveryOptions deliveryOptions) {
+		this(ureq, wControl, rootDir, null, ores, deliveryOptions);
 	}
 	/**
 	 * 
@@ -132,7 +132,8 @@ public class IFrameDisplayController extends BasicController implements GenericE
 	 * @param frameId if you need access to the iframe html id, provide it here
 	 * @param enableTextmarking to enable textmakring of the content in the iframe enable it here
 	 */
-	public IFrameDisplayController(final UserRequest ureq, WindowControl wControl, VFSContainer rootDir, String frameId, OLATResourceable contextRecourcable) {
+	public IFrameDisplayController(final UserRequest ureq, WindowControl wControl, VFSContainer rootDir, String frameId,
+			OLATResourceable contextRecourcable, DeliveryOptions options) {
 		super(ureq, wControl);
 		
 		//register this object for textMarking on/off events
@@ -140,6 +141,7 @@ public class IFrameDisplayController extends BasicController implements GenericE
 		if (contextRecourcable != null) {
 			ureq.getUserSession().getSingleUserEventCenter().registerFor(this, getIdentity(), contextRecourcable);
 		}
+		this.deliveryOptions = options;
 		
 		boolean  enableTextmarking = TextMarkerManagerImpl.getInstance().isTextmarkingEnabled(ureq, contextRecourcable);
 		// Set correct user content theme
@@ -157,6 +159,7 @@ public class IFrameDisplayController extends BasicController implements GenericE
 		contentMapper = new IFrameDeliveryMapper(rootDir, false, enableTextmarking, adjusteightAutomatically,
 				null /*g_encoding*/, null /*jsEncoding*/, null /*contentEncoding*/,
 				frameId, null /*customCssURL*/, themeBaseUri, null /*customHeaderContent*/);
+		contentMapper.setDeliveryOptions(options);
 
 		String mapperID = VFSManager.getRealPath(rootDir);
 		if (mapperID == null) {
@@ -244,6 +247,15 @@ public class IFrameDisplayController extends BasicController implements GenericE
 	public void setJSEncoding(String encoding) {
 		contentMapper.setJsEncoding(encoding);
 	}
+	
+	public DeliveryOptions getDeliveryOptions() {
+		return deliveryOptions;
+	}
+	
+	public void setDeliveryOptions(DeliveryOptions config) {
+		deliveryOptions = config;
+		contentMapper.setDeliveryOptions(config);
+	}
 
 	/**
 	 * Add a custom HTML header element. This string will be added into the HTML
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/NewIframeUriEvent.java b/src/main/java/org/olat/core/gui/control/generic/iframe/NewIframeUriEvent.java
index 385c5accacd26dacd7d0a7f516635ea0c31ea138..5ad0b988c4541b1d97249b575e7a32d2568ade74 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/NewIframeUriEvent.java
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/NewIframeUriEvent.java
@@ -35,6 +35,7 @@ import org.olat.core.util.event.MultiUserEvent;
  * @author Florian Gnägi, frentix GmbH, http://www.frentix.com
  */
 public class NewIframeUriEvent extends MultiUserEvent {
+	private static final long serialVersionUID = -7164902238543271949L;
 	private String newUri;
 
 	/**
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ar.properties
index 77dabe43c36198e7890abb2de581a68c984f8dbf..d74da9d9d767160c4283b2938c85733487af5b4d 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ar.properties
@@ -1,3 +1,6 @@
 #Sun Feb 14 22:21:45 CET 2010
 command.download=\u062A\u0646\u0632\u064A\u0644
 iframe.content=\u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u0635\u0641\u062D\u0629 \u062F\u0627\u062E\u0644 \u0627\u0644\u0625\u0637\u0627\u0631
+height.auto=\u062A\u0644\u0642\u0627\u0626\u0649
+height.label=\u0639\u0631\u0636 \u0627\u0644\u0627\u0631\u062A\u0641\u0627\u0639
+
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_bg.properties
index d58d29fbe7eef9352e92aea053bcd2c28964a007..f251ec29a4137a23a0f1f132f04b65e1a142e03c 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_bg.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_bg.properties
@@ -1,3 +1,5 @@
 #Thu Oct 01 15:51:56 CEST 2009
 command.download=\u0418\u0437\u0442\u0435\u0433\u043B\u0435\u0442\u0435
 iframe.content=\u0421\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435 \u043D\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u0432 iframe
+height.auto=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u043D
+height.label=\u041F\u043E\u043A\u0430\u0436\u0435\u0442\u0435 \u0432\u0438\u0441\u043E\u0447\u0438\u043D\u0430
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_cs.properties
index 9aa84fee010328f2ddcce35efa4e54afe4cf0c7c..bc1f704c7904807f23444d454d70d0ea53bdf42a 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_cs.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_cs.properties
@@ -1,2 +1,4 @@
 #Mon Mar 02 09:54:13 CET 2009
 iframe.content=Obsah str\u00E1nky v iframe
+height.auto=Automaticky
+height.label=Zobrazit v\u00FD\u0161ku
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_de.properties
index 9f343e07b82f2189ab073ef727e5afcb49164b3f..2b136e6fdc70a81f780ab4af72cb7d01f5fe853a 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_de.properties
@@ -1,3 +1,26 @@
 #Mon Mar 02 09:54:04 CET 2009
 command.download=Datei herunterladen
 iframe.content=Seiteninhalt im iframe
+option.delivery=Layout
+mode=Standard Mode
+mode.standard=Strict
+mode.configured=Anpassen
+option.css=CSS Library
+option.css.none=Keine
+option.css.openolat=OpenOLAT Stylesheets
+option.desc=Layout Optionen
+option.js=Javascript Library
+option.js.none=Keine
+option.js.jQuery=jQuery
+option.js.prototypejs=prototypejs
+option.glossary=Glossar
+encoding.content=Zeichensatz Inhalt
+encoding.js=Zeichensatz Javascript
+encoding.auto=Automatisch
+encoding.same=Gleich wie Inhalt
+height.auto=Automatisch
+height.label=H\u00F6he Anzeigefl\u00E4che
+inherit.label=Inehrit
+inherit=Verherbt
+custom=Anpassen
+glossary.need.jQuery=Glossar braucht jQuery
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_el.properties
index 5259b46665e38c77376d8a6eb5c379386c28c0d2..d9a4220aed85b696c9a8df515115c7bce12f2794 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_el.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_el.properties
@@ -1,3 +1,9 @@
 #Sat Sep 26 16:33:26 CEST 2009
 command.download=\u039B\u03AE\u03C8\u03B7
 iframe.content=\u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03C4\u03B7\u03C2 \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1\u03C2 \u03BC\u03AD\u03C3\u03B1 \u03C3\u03C4\u03BF iframe
+encoding.auto=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1
+encoding.content=\u03A3\u03AD\u03C4 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03C9\u03BD \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5
+encoding.js=\u03A3\u03AD\u03C4 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03C9\u03BD Javascript
+encoding.same=\u038A\u03B4\u03B9\u03BF \u03BC\u03B5 \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF
+height.auto=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03BF
+height.label=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03CD\u03C8\u03BF\u03C5\u03C2
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_en.properties
index b8ecbeb385d7b6f75e639cd903741e900f66f7e9..ca77cd89db6162c6021d83b65ca8b61aea0884ec 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_en.properties
@@ -1,3 +1,28 @@
 #Thu Jan 20 20:06:41 CET 2011
 command.download=Download file
 iframe.content=Page content within iframe
+option.delivery=Layout
+mode=Standard Mode
+mode.standard=Strict
+mode.configured=Modified
+option.css=CSS Library
+option.css.none=None
+option.css.openolat=OpenOLAT stylesheets
+option.desc=Layout options
+option.js=Javascript library
+option.js.none=None
+option.js.jQuery=jQuery
+option.js.prototypejs=prototypejs
+option.glossary=Glossary
+encoding.content=Content character set
+encoding.js=Javascript character set
+encoding.auto=Automatically
+encoding.same=Same as content
+height.auto=Automatic
+height.label=Display height
+inherit.label=Inherit
+inherit=Inheritance
+custom=Modified
+glossary.need.jQuery=Glossary needs jQuery
+rawcontent.height.error=If "$\:rawcontent.label" is set, you need to specify the height of the window
+rawcontent.label=Standard mode
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_es.properties
index 0c80f4ca5445ca8caef50757b215088a5dbe040a..90d0d2f810ee96bfe43a45cbe218f5b24541e6b1 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_es.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_es.properties
@@ -1,3 +1,5 @@
 #Tue Oct 13 00:03:57 CEST 2009
 command.download=Descargar
 iframe.content=Contenido de la p\u00E1gina en iframe
+height.auto=Autom\u00E1tico
+height.label=Motrar altura
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_fr.properties
index a3394f037ae0bd342cc5148c5f3ff0df28a9074c..68bd400291faeaf6a480d798794399419b298b2c 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_fr.properties
@@ -1,3 +1,27 @@
 #Mon Feb 08 12:20:50 CET 2010
 command.download=T\u00E9l\u00E9charger fichier
 iframe.content=Contenu de la page dans iframe
+option.delivery=Layout
+mode=Mode standard 
+mode.standard=Strict
+mode.configured=Modifié
+option.css=Librairie CSS
+option.css.none=Aucune
+option.css.openolat=Feuille de styles OpenOLAT 
+option.desc=Options de layout
+option.js=Librairie Javascript 
+option.js.none=Aucune
+option.js.jQuery=jQuery
+option.js.prototypejs=prototypejs
+option.glossary=Glossaire
+encoding.content=Set de caract\u00E8res pour le contenu
+encoding.js=Set de caract\u00E8res Javascript
+encoding.auto=Automatiquement
+encoding.same=Identique au contenu
+height.auto=Automatiquement
+height.label=Hauteur du champ d'affichage
+inherit.label=Héritage
+inherit=Hérité
+custom=Modifié
+glossary.need.jQuery=Glossaire a besoin de jQuery
+rawcontent.height.error=Si vous avez s\u00E9lectionn\u00E9 "$\:rawcontent.label", vous devez choisir une hauteur de champ d'affichage.
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_it.properties
index 254a5ecfe4f3131458a4efd02fc61f121568fa5a..a3f4bf4a4eb225bff8de06881a419fd093d5572a 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_it.properties
@@ -1,3 +1,9 @@
 #Sun Mar 14 12:57:28 CET 2010
 command.download=Scaricare file
 iframe.content=Contenuto pagina in iframe
+encoding.auto=Automaticamente
+encoding.content=Set di caratteri per il contenuto
+encoding.js=Set di caratteri Javascript
+encoding.same=Uguale al contenuto
+height.auto=Automatica
+height.label=Altezza area visibile
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_jp.properties
index c977dc02a07d06568919bb31ccdd740b28db5aac..cabe818c650d55a9400542cde4d93c347cc83aaa 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_jp.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_jp.properties
@@ -1,3 +1,9 @@
 #Tue Nov 10 19:15:03 CET 2009
 command.download=\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9
 iframe.content=iframe\u5185\u306E\u30DA\u30FC\u30B8\u30B3\u30F3\u30C6\u30F3\u30C4
+encoding.auto=\u81EA\u52D5
+encoding.content=\u30B3\u30F3\u30C6\u30F3\u30C4\u6587\u5B57\u30BB\u30C3\u30C8
+encoding.js=Java\u30B9\u30AF\u30EA\u30D7\u30C8\u6587\u5B57\u30BB\u30C3\u30C8
+encoding.same=\u30B3\u30F3\u30C6\u30F3\u30C4\u3068\u540C\u3058
+height.auto=\u81EA\u52D5
+height.label=\u8868\u793A\u9AD8
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_nl_NL.properties
index b29c195bb07072d78097633fd342c2863a0e0bf4..4de2f24d739356bcd27ef60f9d1e461753ad7e90 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_nl_NL.properties
@@ -1,3 +1,9 @@
 #Tue Feb 02 13:57:54 CET 2010
 command.download=Download
 iframe.content=Pagina-inhoud binnen iframe 
+encoding.auto=Automatisch
+encoding.content=Inhoud tekenset
+encoding.js=Javascript tekenset
+encoding.same=Dezelfde als inhoud
+height.auto=Automatisch
+height.label=Toon hoogte
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pl.properties
index bab8e67e038283ab8fcfd94a0ec7657eb44bf2fa..dd3ecf4396a93ada8f5d1011858e6d69defff081 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pl.properties
@@ -1,3 +1,9 @@
 #Tue Oct 13 12:27:11 CEST 2009
 command.download=Pobierz
 iframe.content=Zawarto\u015B\u0107 strony wewn\u0105trz ramki iframe
+encoding.auto=Automatycznie
+encoding.content=Kodowanie znak\u00F3w zawarto\u015Bci
+encoding.js=Kodowanie znak\u00F3w Javascript
+encoding.same=Tak samo, jak zawarto\u015B\u0107
+height.auto=Automatycznie
+height.label=Wy\u015Bwietl wysoko\u015B\u0107
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pt_BR.properties
index 3f2904548f8b91f5a578b7d9c6c42702c526da23..e6b79823eb5de5285720ac0f61072f367b8eb195 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_pt_BR.properties
@@ -1,3 +1,10 @@
 #Fri Dec 11 19:51:53 CET 2009
 command.download=Download
 iframe.content=Conte\u00FAdo da p\u00E1gina dentro do iframe
+encoding.auto=Automaticamente
+encoding.content=Caractere de conte\u00FAdo definido
+encoding.js=Caractere do Javascript definido
+encoding.same=Mesmo que conte\u00FAdo
+height.auto=Autom\u00E1tico
+height.label=Mostrar altura
+rawcontent.height.error=Se "$\:rawcontent.label" est\u00E1 selecionado, voc\u00EA precisa especificar a altura da janela
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ru.properties
index f6d0b9652b480ddf5f3f616d1134694488428f73..d3eff2c59072e0c5bf1da80fc68452d31d656002 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ru.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_ru.properties
@@ -1,3 +1,5 @@
 #Mon Sep 21 17:21:10 CEST 2009
 command.download=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C
 iframe.content=\u0421\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u0432 iframe
+height.auto=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438
+height.label=\u0412\u044B\u0441\u043E\u0442\u0430 \u043F\u0430\u043D\u0435\u043B\u0438 \u043F\u043E\u043A\u0430\u0437\u0430
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_CN.properties
index 93e3e23cc28acf2f323cd0d22231883a34290d30..8487ed0eff14636f08fbee8bb349f4625cacce41 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_CN.properties
@@ -1,3 +1,8 @@
 #Fri Oct 23 09:22:07 CEST 2009
 command.download=\u4E0B\u8F7D
 iframe.content=\u5728\u6D6E\u52A8\u7A97\u4F53\u4E2D\u7684\u9875\u9762\u5185\u5BB9
+encoding.content=\u5185\u5BB9\u5B57\u7B26\u96C6
+encoding.js=Javascript\u5B57\u7B26\u96C6
+encoding.same=\u4E0E\u5185\u5BB9\u76F8\u540C
+height.auto=\u81EA\u52A8
+height.label=\u663E\u793A\u9AD8\u5EA6
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_TW.properties
index 5206a5860200b8bd1fb0febe6bb9adf03f11f839..6340219688b11fde61ba3ca0db250012c0ea4007 100644
--- a/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_TW.properties
+++ b/src/main/java/org/olat/core/gui/control/generic/iframe/_i18n/LocalStrings_zh_TW.properties
@@ -1,3 +1,5 @@
 #Mon Sep 21 14:41:10 CEST 2009
 command.download=\u4E0B\u8F09
 iframe.content=\u5728 iframe \u5167\u7684\u9801\u9762\u5167\u5BB9
+height.auto=\u81EA\u52D5
+height.label=\u986F\u793A\u9AD8\u5EA6
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/util/mail/MailAttachment.java b/src/main/java/org/olat/core/util/mail/MailAttachment.java
index fccdbd9a62563513f19c9e2049e9e41041f7329d..33e4f14b4e91f6cb77a4524eb930328d9f07ed1f 100644
--- a/src/main/java/org/olat/core/util/mail/MailAttachment.java
+++ b/src/main/java/org/olat/core/util/mail/MailAttachment.java
@@ -1,3 +1,22 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
 package org.olat.core.util.mail;
 
 /**
diff --git a/src/main/java/org/olat/course/CourseXStreamAliases.java b/src/main/java/org/olat/course/CourseXStreamAliases.java
index 781205e9e70e07d9950b01abecab55806bb9e75b..e84a9f8de4593ce0eb46d4e2d1fa13d5bd217842 100644
--- a/src/main/java/org/olat/course/CourseXStreamAliases.java
+++ b/src/main/java/org/olat/course/CourseXStreamAliases.java
@@ -20,6 +20,7 @@
 */
 package org.olat.course;
 
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.util.xml.XStreamHelper;
 import org.olat.course.condition.Condition;
 import org.olat.course.condition.ExtendedCondition;
@@ -138,6 +139,9 @@ public class CourseXStreamAliases {
 		readXstream.alias("HasAttributeOperator", HasAttributeOperator.class);
 		readXstream.alias("HasNotAttributeOperator", HasNotAttributeOperator.class);
 		readXstream.alias("AttributeStartswithOperator", AttributeStartswithOperator.class);
+		
+		//deleted attributes
+		readXstream.omitField(DeliveryOptions.class, "noJavascript");
 	}
 	
 	/**
diff --git a/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java b/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java
index ae94108cfdd5c6c5f82790cae84c5772cd5bf6f3..ae186b4dac23d3f80084ea8d8d92e2dcc4e0dbfb 100644
--- a/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java
+++ b/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java
@@ -31,6 +31,7 @@ import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.stack.StackedController;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.gui.control.generic.tabbable.TabbableController;
 import org.olat.core.id.Identity;
 import org.olat.core.logging.OLATRuntimeException;
@@ -43,7 +44,6 @@ import org.olat.course.editor.StatusDescription;
 import org.olat.course.nodes.basiclti.LTIConfigForm;
 import org.olat.course.nodes.basiclti.LTIEditController;
 import org.olat.course.nodes.basiclti.LTIRunController;
-import org.olat.course.nodes.scorm.ScormEditController;
 import org.olat.course.run.navigation.NodeRunConstructionResult;
 import org.olat.course.run.scoring.ScoreEvaluation;
 import org.olat.course.run.userview.NodeEvaluation;
@@ -71,7 +71,7 @@ public class BasicLTICourseNode extends AbstractAccessableCourseNode implements
 	public static final String CONFIG_KEY_PASSED_CUT_VALUE = MSCourseNode.CONFIG_KEY_PASSED_CUT_VALUE;
 	public static final String CONFIG_HEIGHT = "displayHeight";
 	public static final String CONFIG_WIDTH = "displayWidth";
-	public static final String CONFIG_HEIGHT_AUTO = ScormEditController.CONFIG_HEIGHT_AUTO;
+	public static final String CONFIG_HEIGHT_AUTO = DeliveryOptions.CONFIG_HEIGHT_AUTO;
 	public static final String CONFIG_DISPLAY = "display";
 	
 	
diff --git a/src/main/java/org/olat/course/nodes/CPCourseNode.java b/src/main/java/org/olat/course/nodes/CPCourseNode.java
index 3053ad18da781c98a43975d976f473bd1bae49ee..f63f1100825db09638a5bb572778a45e28c8950e 100644
--- a/src/main/java/org/olat/course/nodes/CPCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/CPCourseNode.java
@@ -33,6 +33,7 @@ import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.stack.StackedController;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.gui.control.generic.tabbable.TabbableController;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
@@ -49,6 +50,8 @@ import org.olat.course.repository.ImportReferencesController;
 import org.olat.course.run.navigation.NodeRunConstructionResult;
 import org.olat.course.run.userview.NodeEvaluation;
 import org.olat.course.run.userview.UserCourseEnvironment;
+import org.olat.ims.cp.CPManager;
+import org.olat.ims.cp.ui.CPPackageConfig;
 import org.olat.modules.ModuleConfiguration;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryImportExport;
@@ -60,6 +63,8 @@ import org.olat.repository.RepositoryEntryImportExport;
  * @author BPS (<a href="http://www.bps-system.de/">BPS Bildungsportal Sachsen GmbH</a>)
  */
 public class CPCourseNode extends AbstractAccessableCourseNode {
+
+	private static final long serialVersionUID = -4317662219173515498L;
 	private static final String TYPE = "cp";
 
 	/**
@@ -201,11 +206,49 @@ public class CPCourseNode extends AbstractAccessableCourseNode {
 				config.setConfigurationVersion(3);
 			}
 			
-			//fxdiff VCRP-13: cp navigation
 			if(config.getConfigurationVersion() < 4) {
 				config.setBooleanEntry(CPEditController.CONFIG_SHOWNAVBUTTONS, Boolean.TRUE.booleanValue());
 				config.setConfigurationVersion(4);
 			}
+			
+			if(config.getConfigurationVersion() < 5) {
+				String contentEncoding = (String)config.get(NodeEditController.CONFIG_CONTENT_ENCODING);
+				String jsEncoding = (String)config.get(NodeEditController.CONFIG_JS_ENCODING);
+
+				CPPackageConfig reConfig = null;
+				DeliveryOptions nodeDeliveryOptions = new DeliveryOptions();
+				RepositoryEntry re = getReferencedRepositoryEntry();
+				if(re != null) {
+					reConfig = CPManager.getInstance().getCPPackageConfig(re.getOlatResource());
+
+					//move the settings from the node to the repo
+					if(reConfig == null || reConfig.getDeliveryOptions() == null) {
+						if(reConfig == null) {
+							reConfig = new CPPackageConfig();
+						}
+						reConfig.setDeliveryOptions(new DeliveryOptions());
+						nodeDeliveryOptions.setInherit(Boolean.TRUE);
+						nodeDeliveryOptions.setStandardMode(Boolean.TRUE);
+						reConfig.getDeliveryOptions().setStandardMode(Boolean.TRUE);
+						reConfig.getDeliveryOptions().setContentEncoding(contentEncoding);
+						reConfig.getDeliveryOptions().setJavascriptEncoding(jsEncoding);
+						CPManager.getInstance().setCPPackageConfig(re.getOlatResource(), reConfig);
+					} else {
+						DeliveryOptions repoDeliveryOptions = reConfig.getDeliveryOptions();
+						if(((contentEncoding == null && repoDeliveryOptions.getContentEncoding() == null) || (contentEncoding != null && contentEncoding.equals(repoDeliveryOptions.getContentEncoding())))
+							&& ((jsEncoding == null && repoDeliveryOptions.getJavascriptEncoding() == null) || (jsEncoding != null && jsEncoding.equals(repoDeliveryOptions.getJavascriptEncoding())))) {
+							nodeDeliveryOptions.setInherit(Boolean.TRUE);	
+						} else {
+							nodeDeliveryOptions.setInherit(Boolean.FALSE);	
+							nodeDeliveryOptions.setContentEncoding(contentEncoding);
+							nodeDeliveryOptions.setJavascriptEncoding(jsEncoding);
+						}
+					}
+				}
+				
+				config.setConfigurationVersion(5);
+			}
+			
 			// else node is up-to-date - nothing to do
 		}
 	}
diff --git a/src/main/java/org/olat/course/nodes/STCourseNode.java b/src/main/java/org/olat/course/nodes/STCourseNode.java
index 16daeab80b756dcebcdbd7f03261e6afb2a0fd89..7248767997b6014487d822426c2043c66e7f006e 100644
--- a/src/main/java/org/olat/course/nodes/STCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/STCourseNode.java
@@ -40,6 +40,7 @@ import org.olat.core.gui.control.creator.ControllerCreator;
 import org.olat.core.gui.control.generic.clone.CloneController;
 import org.olat.core.gui.control.generic.clone.CloneLayoutControllerCreatorCallback;
 import org.olat.core.gui.control.generic.clone.CloneableController;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.gui.control.generic.tabbable.TabbableController;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
@@ -94,6 +95,7 @@ import org.olat.util.logging.activity.LoggingResourceable;
  */
 public class STCourseNode extends AbstractAccessableCourseNode implements AssessableCourseNode {
 
+	private static final long serialVersionUID = -7460670977531082040L;
 	private static final String TYPE = "st";
 	private static final String ICON_CSS_CLASS = "o_st_icon";
 
@@ -149,9 +151,10 @@ public class STCourseNode extends AbstractAccessableCourseNode implements Assess
 			if(allowRelativeLinks == null) {
 				allowRelativeLinks = Boolean.FALSE;
 			}
+			DeliveryOptions deliveryOptions = (DeliveryOptions)getModuleConfiguration().get(SPEditController.CONFIG_KEY_DELIVERYOPTIONS);
 			OLATResourceable ores = OresHelper.createOLATResourceableInstance(CourseModule.class, userCourseEnv.getCourseEnvironment().getCourseResourceableId());
-			SinglePageController spCtr = new SinglePageController(ureq, wControl, userCourseEnv.getCourseEnvironment().getCourseFolderContainer(), relPath, null, allowRelativeLinks
-					.booleanValue(), ores);
+			SinglePageController spCtr = new SinglePageController(ureq, wControl, userCourseEnv.getCourseEnvironment().getCourseFolderContainer(),
+					relPath, null, allowRelativeLinks.booleanValue(), ores, deliveryOptions);
 			// check if user is allowed to edit the page in the run view
 			CourseGroupManager cgm = userCourseEnv.getCourseEnvironment().getCourseGroupManager();
 			boolean hasEditRights = (cgm.isIdentityCourseAdministrator(ureq.getIdentity()) || cgm.hasRight(ureq.getIdentity(),
diff --git a/src/main/java/org/olat/course/nodes/ScormCourseNode.java b/src/main/java/org/olat/course/nodes/ScormCourseNode.java
index 077a456bdd967d6268eb4e3a2bebf121420aede3..1c3ba6394848e40ddd299d8cd94a7ed9215c28fa 100644
--- a/src/main/java/org/olat/course/nodes/ScormCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/ScormCourseNode.java
@@ -34,6 +34,7 @@ import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.stack.StackedController;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.gui.control.generic.tabbable.TabbableController;
 import org.olat.core.id.Identity;
 import org.olat.core.util.Util;
@@ -53,6 +54,8 @@ import org.olat.course.run.scoring.ScoreEvaluation;
 import org.olat.course.run.userview.NodeEvaluation;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.modules.ModuleConfiguration;
+import org.olat.modules.scorm.ScormMainManager;
+import org.olat.modules.scorm.ScormPackageConfig;
 import org.olat.modules.scorm.assessment.ScormResultDetailsController;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryImportExport;
@@ -63,8 +66,16 @@ import org.olat.repository.RepositoryEntryImportExport;
  * @author BPS (<a href="http://www.bps-system.de/">BPS Bildungsportal Sachsen GmbH</a>)
  */
 public class ScormCourseNode extends AbstractAccessableCourseNode implements AssessableCourseNode {
+
+	private static final long serialVersionUID = 2970594874787761801L;
 	private static final String TYPE = "scorm";
-	private static final int CURRENT_CONFIG_VERSION = 4;
+	private static final int CURRENT_CONFIG_VERSION = 5;
+	
+
+	private static final String CONFIG_RAW_CONTENT = "rawcontent";
+	private static final String CONFIG_HEIGHT = "height";	
+	private final static String CONFIG_HEIGHT_AUTO = "auto";
+	
 
 	/**
 	 * Constructor for a course building block of the type IMS CP learning content
@@ -183,7 +194,7 @@ public class ScormCourseNode extends AbstractAccessableCourseNode implements Ass
 			config.setBooleanEntry(NodeEditController.CONFIG_STARTPAGE, Boolean.TRUE.booleanValue());
 			config.setBooleanEntry(NodeEditController.CONFIG_COMPONENT_MENU, Boolean.TRUE.booleanValue());
 			config.setBooleanEntry(ScormEditController.CONFIG_SHOWNAVBUTTONS, Boolean.TRUE.booleanValue());
-			config.set(ScormEditController.CONFIG_HEIGHT, "680");
+			config.set(CONFIG_HEIGHT, "680");
 			config.set(NodeEditController.CONFIG_CONTENT_ENCODING, NodeEditController.CONFIG_CONTENT_ENCODING_AUTO);	
 			config.set(NodeEditController.CONFIG_JS_ENCODING, NodeEditController.CONFIG_JS_ENCODING_AUTO);	
 			//fxdiff FXOLAT-116: SCORM improvements
@@ -193,7 +204,10 @@ public class ScormCourseNode extends AbstractAccessableCourseNode implements Ass
 			config.setBooleanEntry(ScormEditController.CONFIG_ATTEMPTSDEPENDONSCORE, false);
 			config.setIntValue(ScormEditController.CONFIG_MAXATTEMPTS, 0);
 			config.setConfigurationVersion(CURRENT_CONFIG_VERSION);
-			config.setBooleanEntry(ScormEditController.CONFIG_RAW_CONTENT, true);
+			
+			DeliveryOptions deliveryOptions = new DeliveryOptions();
+			deliveryOptions.setInherit(Boolean.TRUE);
+			config.set(ScormEditController.CONFIG_DELIVERY_OPTIONS, deliveryOptions);
 		} else {
 			int version = config.getConfigurationVersion();
 			if (version < CURRENT_CONFIG_VERSION) {
@@ -204,7 +218,7 @@ public class ScormCourseNode extends AbstractAccessableCourseNode implements Ass
 					config.remove(NodeEditController.CONFIG_INTEGRATION);
 					// add new parameter 'shownavbuttons' and 'height'
 					config.setBooleanEntry(ScormEditController.CONFIG_SHOWNAVBUTTONS, Boolean.TRUE.booleanValue());
-					config.set(ScormEditController.CONFIG_HEIGHT, ScormEditController.CONFIG_HEIGHT_AUTO);					
+					config.set(CONFIG_HEIGHT, CONFIG_HEIGHT_AUTO);					
 				}
 				
 				if (version == 2) {
@@ -223,6 +237,66 @@ public class ScormCourseNode extends AbstractAccessableCourseNode implements Ass
 					config.setIntValue(ScormEditController.CONFIG_MAXATTEMPTS, 0);
 				}
 				
+				if (version == 4) {
+					boolean rawContent = config.getBooleanSafe(CONFIG_RAW_CONTENT, true);
+					
+					String height = (String)config.get(CONFIG_HEIGHT);
+					String contentEncoding = (String)config.get(NodeEditController.CONFIG_CONTENT_ENCODING);
+					String jsEncoding = (String)config.get(NodeEditController.CONFIG_JS_ENCODING);
+
+					ScormPackageConfig reConfig = null;
+					DeliveryOptions nodeDeliveryOptions = new DeliveryOptions();
+					RepositoryEntry re = getReferencedRepositoryEntry();
+					if(re != null) {
+						reConfig = ScormMainManager.getInstance().getScormPackageConfig(re.getOlatResource());
+
+						//move the settings from the node to the repo
+						if(reConfig == null || reConfig.getDeliveryOptions() == null) {
+							if(reConfig == null) {
+								reConfig = new ScormPackageConfig();
+							}
+							reConfig.setDeliveryOptions(new DeliveryOptions());
+							nodeDeliveryOptions.setInherit(Boolean.TRUE);
+							if(rawContent) {
+								nodeDeliveryOptions.setStandardMode(Boolean.TRUE);
+							} else {	
+								nodeDeliveryOptions.setStandardMode(Boolean.FALSE);
+								reConfig.getDeliveryOptions().setOpenolatCss(Boolean.TRUE);
+								reConfig.getDeliveryOptions().setPrototypeEnabled(Boolean.TRUE);
+								reConfig.getDeliveryOptions().setHeight(height);
+							}
+							reConfig.getDeliveryOptions().setContentEncoding(contentEncoding);
+							reConfig.getDeliveryOptions().setJavascriptEncoding(jsEncoding);
+							ScormMainManager.getInstance().setScormPackageConfig(re.getOlatResource(), reConfig);
+						} else {
+							DeliveryOptions repoDeliveryOptions = reConfig.getDeliveryOptions();
+							boolean reRawContent = repoDeliveryOptions.getStandardMode() == null ? true : repoDeliveryOptions.getStandardMode().booleanValue();
+							if(((height == null && repoDeliveryOptions.getHeight() == null) || (height != null && height.equals(repoDeliveryOptions.getHeight())))
+									&& ((contentEncoding == null && repoDeliveryOptions.getContentEncoding() == null) || (contentEncoding != null && contentEncoding.equals(repoDeliveryOptions.getContentEncoding())))
+									&& ((jsEncoding == null && repoDeliveryOptions.getJavascriptEncoding() == null) || (jsEncoding != null && jsEncoding.equals(repoDeliveryOptions.getJavascriptEncoding())))
+									&& rawContent == reRawContent) {
+								nodeDeliveryOptions.setInherit(Boolean.TRUE);	
+							} else {
+								nodeDeliveryOptions.setInherit(Boolean.FALSE);	
+								nodeDeliveryOptions.setContentEncoding(contentEncoding);
+								nodeDeliveryOptions.setJavascriptEncoding(jsEncoding);
+								nodeDeliveryOptions.setHeight(height);
+								if(rawContent) {
+									nodeDeliveryOptions.setStandardMode(Boolean.TRUE);
+								} else {
+									nodeDeliveryOptions.setStandardMode(Boolean.FALSE);
+									nodeDeliveryOptions.setOpenolatCss(Boolean.TRUE);
+									nodeDeliveryOptions.setPrototypeEnabled(Boolean.TRUE);
+									nodeDeliveryOptions.setHeight(height);
+								}
+							}
+						}
+					}
+
+					config.set(ScormEditController.CONFIG_DELIVERY_OPTIONS, nodeDeliveryOptions);
+					version = 5;
+				}
+				
 				//version is now set to current version
 				config.setConfigurationVersion(CURRENT_CONFIG_VERSION);
 			}
diff --git a/src/main/java/org/olat/course/nodes/cp/CPCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/cp/CPCourseNodeConfiguration.java
index d500965f422dbc6e8128c7803176e44bdd8d4786..ad58b2e67089f3d2578655b914f403abd94dbb99 100644
--- a/src/main/java/org/olat/course/nodes/cp/CPCourseNodeConfiguration.java
+++ b/src/main/java/org/olat/course/nodes/cp/CPCourseNodeConfiguration.java
@@ -25,10 +25,8 @@
 
 package org.olat.course.nodes.cp;
 
-import java.util.List;
 import java.util.Locale;
 
-import org.olat.core.extensions.ExtensionResource;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.util.Util;
 import org.olat.course.nodes.AbstractCourseNodeConfiguration;
@@ -76,36 +74,4 @@ public class CPCourseNodeConfiguration extends AbstractCourseNodeConfiguration i
 	public String getAlias() {
 		return "cp";
 	}
-
-	//
-	// OLATExtension interface implementations.
-	//
-
-	public String getName() {
-		return getAlias();
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionResources()
-	 */
-	public List getExtensionResources() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionCSS()
-	 */
-	public ExtensionResource getExtensionCSS() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#setURLBuilder(org.olat.core.gui.render.URLBuilder)
-	 */
-	public void setExtensionResourcesBaseURI(String ubi) {
-	// no need for the URLBuilder
-	}
-
 }
diff --git a/src/main/java/org/olat/course/nodes/cp/CPEditController.java b/src/main/java/org/olat/course/nodes/cp/CPEditController.java
index 8e1b1bb272348dd0369f55657ac35e23de315178..da76256fbd7e19ec2248351cee3eacae5632d8cb 100644
--- a/src/main/java/org/olat/course/nodes/cp/CPEditController.java
+++ b/src/main/java/org/olat/course/nodes/cp/CPEditController.java
@@ -26,10 +26,6 @@
 package org.olat.course.nodes.cp;
 
 import java.io.File;
-import java.nio.charset.Charset;
-import java.util.Arrays;
-import java.util.Locale;
-import java.util.Map;
 
 import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.basesecurity.Constants;
@@ -37,7 +33,6 @@ import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.elements.SelectionElement;
-import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.link.Link;
 import org.olat.core.gui.components.link.LinkFactory;
@@ -50,6 +45,8 @@ import org.olat.core.gui.control.ControllerEventListener;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptionsConfigurationController;
 import org.olat.core.gui.control.generic.tabbable.ActivateableTabbableDefaultController;
 import org.olat.core.id.Identity;
 import org.olat.core.logging.AssertException;
@@ -64,6 +61,8 @@ import org.olat.course.nodes.CourseNodeFactory;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.fileresource.FileResourceManager;
 import org.olat.fileresource.types.ImsCPFileResource;
+import org.olat.ims.cp.CPManager;
+import org.olat.ims.cp.ui.CPPackageConfig;
 import org.olat.modules.ModuleConfiguration;
 import org.olat.modules.cp.CPUIFactory;
 import org.olat.repository.RepositoryEntry;
@@ -81,10 +80,12 @@ public class CPEditController extends ActivateableTabbableDefaultController impl
 
 	public static final String PANE_TAB_CPCONFIG = "pane.tab.cpconfig";
 	private static final String PANE_TAB_ACCESSIBILITY = "pane.tab.accessibility";
+	private static final String PANE_TAB_DELIVERYOPTIONS = "pane.tab.deliveryOptions";
 	private static final String CONFIG_KEY_REPOSITORY_SOFTKEY = "reporef";
 	private static final String VC_CHOSENCP = "chosencp";
 	//fxdiff VCRP-13: cp navigation
 	public static final String CONFIG_SHOWNAVBUTTONS = "shownavbuttons";
+	public static final String CONFIG_DELIVERYOPTIONS = "deliveryOptions";
   
 	// NLS support:	
 	private static final String NLS_ERROR_CPREPOENTRYMISSING = "error.cprepoentrymissing";
@@ -99,6 +100,7 @@ public class CPEditController extends ActivateableTabbableDefaultController impl
 	
 	private ModuleConfiguration config;
 	private ReferencableEntriesSearchController searchController;
+	private DeliveryOptionsConfigurationController deliveryOptionsCtrl;
 	
 	private ConditionEditController accessibilityCondContr;
 	private CPCourseNode cpNode;
@@ -137,12 +139,13 @@ public class CPEditController extends ActivateableTabbableDefaultController impl
 		changeCPButton = LinkFactory.createButtonSmall(NLS_COMMAND_CHANGECP, cpConfigurationVc, this);
 		changeCPButton.setElementCssClass("o_sel_cp_change_repofile");
 		
+		DeliveryOptions parentConfig = null;
 		if (config.get(CONFIG_KEY_REPOSITORY_SOFTKEY) != null) {
 			// fetch repository entry to display the repository entry title of the chosen cp
 			RepositoryEntry re = getCPReference(config, false);
 			if (re == null) { // we cannot display the entries name, because the
 				// repository entry had been deleted between the time when it was chosen here, and now				
-				this.showError(NLS_ERROR_CPREPOENTRYMISSING);
+				showError(NLS_ERROR_CPREPOENTRYMISSING);
 				cpConfigurationVc.contextPut("showPreviewButton", Boolean.FALSE);
 				cpConfigurationVc.contextPut(VC_CHOSENCP, translate("no.cp.chosen"));
 			} else {
@@ -153,6 +156,9 @@ public class CPEditController extends ActivateableTabbableDefaultController impl
 				previewLink = LinkFactory.createCustomLink("command.preview", "command.preview", re.getDisplayname(), Link.NONTRANSLATED, cpConfigurationVc, this);
 				previewLink.setCustomEnabledLinkCSS("b_preview");
 				previewLink.setTitle(getTranslator().translate("command.preview"));
+				
+				CPPackageConfig cpConfig = CPManager.getInstance().getCPPackageConfig(re.getOlatResource());
+				parentConfig = (cpConfig == null ? null : cpConfig.getDeliveryOptions());
 			}
 		} else {
 			// no valid config yet
@@ -176,6 +182,10 @@ public class CPEditController extends ActivateableTabbableDefaultController impl
 				accessCondition, "accessabilityConditionForm", AssessmentHelper.getAssessableNodes(course.getEditorTreeModel(), cpNode), euce);		
 		listenTo(accessibilityCondContr);
 
+		DeliveryOptions deliveryOptions = (DeliveryOptions)config.get(CPEditController.CONFIG_DELIVERYOPTIONS);
+		deliveryOptionsCtrl = new DeliveryOptionsConfigurationController(ureq, getWindowControl(), deliveryOptions, parentConfig);
+		listenTo(deliveryOptionsCtrl);
+
 		main.setContent(cpConfigurationVc);
 	}
 
@@ -209,7 +219,9 @@ public class CPEditController extends ActivateableTabbableDefaultController impl
 				// pre: showMenuB != null
 				removeAsListenerAndDispose(previewCtr);
 				
-				previewCtr = CPUIFactory.getInstance().createMainLayoutPreviewController_v2(ureq, getWindowControl(), new LocalFolderImpl(cpRoot), showMenuB.booleanValue());
+				DeliveryOptions previewOptions = deliveryOptionsCtrl.getOptionsForPreview();
+				previewCtr = CPUIFactory.getInstance().createMainLayoutPreviewController_v2(ureq, getWindowControl(), new LocalFolderImpl(cpRoot),
+						showMenuB.booleanValue(), previewOptions);
 				stackPanel.pushController(translate("preview.cp"), previewCtr);
 			}
 		} else if (source == editLink) {
@@ -244,6 +256,11 @@ public class CPEditController extends ActivateableTabbableDefaultController impl
 					}
 					// fire event so the updated config is saved by the editormaincontroller
 					fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT);
+					
+					CPPackageConfig cpConfig = CPManager.getInstance().getCPPackageConfig(re.getOlatResource());
+					if(cpConfig != null && cpConfig.getDeliveryOptions() != null) {
+						deliveryOptionsCtrl.setParentDeliveryOptions(cpConfig.getDeliveryOptions());
+					}
 				}
 			}
 			// else cancelled repo search
@@ -258,9 +275,11 @@ public class CPEditController extends ActivateableTabbableDefaultController impl
 				config.setBooleanEntry(NodeEditController.CONFIG_COMPONENT_MENU, cpMenuForm.isCpMenu());
 				//fxdiff VCRP-13: cp navigation
 				config.setBooleanEntry(CPEditController.CONFIG_SHOWNAVBUTTONS, cpMenuForm.isCpNavButtons());
-				config.set(NodeEditController.CONFIG_CONTENT_ENCODING, cpMenuForm.getContentEncoding());
-				config.set(NodeEditController.CONFIG_JS_ENCODING, cpMenuForm.getJSEncoding());
-				
+				fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT);
+			}
+		} else if (source == deliveryOptionsCtrl) {
+			if (event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) {
+				config.set(CPEditController.CONFIG_DELIVERYOPTIONS, deliveryOptionsCtrl.getDeliveryOptions());
 				fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT);
 			}
 		}
@@ -285,6 +304,7 @@ public class CPEditController extends ActivateableTabbableDefaultController impl
 
 		tabbedPane.addTab(translate(PANE_TAB_ACCESSIBILITY), accessibilityCondContr.getWrappedDefaultAccessConditionVC(translate(NLS_CONDITION_ACCESSIBILITY_TITLE)));
 		tabbedPane.addTab(translate(PANE_TAB_CPCONFIG), main);
+		tabbedPane.addTab(translate(PANE_TAB_DELIVERYOPTIONS), deliveryOptionsCtrl.getInitialComponent());
 	}
 
 	/**
@@ -369,73 +389,27 @@ class CompMenuForm extends FormBasicController {
 
 	// NLS support:
 	private static final String NLS_DISPLAY_CONFIG_COMPMENU = "display.config.compMenu";
-	//fxdiff VCRP-13: cp navigation
 	private static final String NLS_DISPLAY_CONFIG_COMP_NEXT_PREVIOUS = "display.config.compNextPrevious";
 
 	private SelectionElement cpMenu;
-	//fxdiff VCRP-13: cp navigation
 	private SelectionElement cpNavButtons;
-	private SingleSelection encodingContentEl;
-	private SingleSelection encodingJSEl;
-	
+
 	private boolean compMenuConfig;
-	//fxdiff VCRP-13: cp navigation
 	private boolean compNavButtonsConfig;
-	private String contentEncoding;
-	private String jsEncoding;
-	
-	private String[] encodingContentKeys, encodingContentValues;
-	private String[] encodingJSKeys, encodingJSValues;
+
 	
 	CompMenuForm(UserRequest ureq, WindowControl wControl, Boolean compMenuConfig, Boolean compNavButtons, String contentEncoding, String jsEncoding) {
 		super(ureq, wControl);
-		this.compMenuConfig = compMenuConfig == null ? true:compMenuConfig.booleanValue();
+		compMenuConfig = compMenuConfig == null ? true:compMenuConfig.booleanValue();
 		//fxdiff VCRP-13: cp navigation
-		this.compNavButtonsConfig = compNavButtons == null ? true:compNavButtons.booleanValue();
-		this.contentEncoding = contentEncoding;
-		this.jsEncoding = jsEncoding;
-		
-		Map<String,Charset> charsets = Charset.availableCharsets();
-		int numOfCharsets = charsets.size() + 1;
-		
-		encodingContentKeys = new String[numOfCharsets];
-		encodingContentKeys[0] = NodeEditController.CONFIG_CONTENT_ENCODING_AUTO;
-
-		encodingContentValues = new String[numOfCharsets];
-		encodingContentValues[0] = translate("encoding.auto");
-		
-		encodingJSKeys = new String[numOfCharsets];
-		encodingJSKeys[0] = NodeEditController.CONFIG_JS_ENCODING_AUTO;
-
-		encodingJSValues = new String[numOfCharsets];
-		encodingJSValues[0] =	translate("encoding.same");
-
-		int count = 1;
-		Locale locale = ureq.getLocale();
-		for(Map.Entry<String, Charset> charset:charsets.entrySet()) {
-			encodingContentKeys[count] = charset.getKey();
-			encodingContentValues[count] = charset.getValue().displayName(locale);
-			encodingJSKeys[count] = charset.getKey();
-			encodingJSValues[count] = charset.getValue().displayName(locale);
-			count++;
-		}
-		
+		compNavButtonsConfig = compNavButtons == null ? true:compNavButtons.booleanValue();
 		initForm(ureq);
 	}
-	
-	public Object getJSEncoding() {
-		return encodingJSEl.getSelectedKey();
-	}
-
-	public Object getContentEncoding() {
-		return encodingContentEl.getSelectedKey();
-	}
 
 	public boolean isCpMenu() {
 		return cpMenu.isSelected(0);
 	}
 	
-	//fxdiff VCRP-13: cp navigation
 	public boolean isCpNavButtons() {
 		return cpNavButtons.isSelected(0);
 	}
@@ -450,24 +424,9 @@ class CompMenuForm extends FormBasicController {
 		cpMenu = uifactory.addCheckboxesVertical("cpMenu", NLS_DISPLAY_CONFIG_COMPMENU, formLayout, new String[]{"xx"}, new String[]{null}, null, 1);
 		cpMenu.select("xx",compMenuConfig);
 		
-		//fxdiff VCRP-13: cp navigation
 		cpNavButtons = uifactory.addCheckboxesVertical("cpNextPrevious", NLS_DISPLAY_CONFIG_COMP_NEXT_PREVIOUS, formLayout, new String[]{"xx"}, new String[]{null}, null, 1);
 		cpNavButtons.select("xx",compNavButtonsConfig);
 		
-		encodingContentEl = uifactory.addDropdownSingleselect("encoContent", "encoding.content", formLayout, encodingContentKeys, encodingContentValues, null);
-		if (Arrays.asList(encodingContentKeys).contains(contentEncoding)) {
-			encodingContentEl.select(contentEncoding, true);
-		} else {
-			encodingContentEl.select(NodeEditController.CONFIG_CONTENT_ENCODING_AUTO, true);
-		}
-		
-		encodingJSEl = uifactory.addDropdownSingleselect("encoJS", "encoding.js", formLayout, encodingJSKeys, encodingJSValues, null);
-		if (Arrays.asList(encodingJSKeys).contains(jsEncoding)) {
-			encodingJSEl.select(jsEncoding, true);
-		} else {
-			encodingJSEl.select(NodeEditController.CONFIG_JS_ENCODING_AUTO, true);
-		}
-		
 		uifactory.addFormSubmitButton("submit", formLayout);
 	}
 
diff --git a/src/main/java/org/olat/course/nodes/cp/CPRunController.java b/src/main/java/org/olat/course/nodes/cp/CPRunController.java
index 0c319b3ff728f272e3ec57967230c5dd3df9109e..9e03e1e086ffc6dea13c5b02d596d0eec0ddc7e8 100644
--- a/src/main/java/org/olat/course/nodes/cp/CPRunController.java
+++ b/src/main/java/org/olat/course/nodes/cp/CPRunController.java
@@ -39,6 +39,7 @@ import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.control.generic.dtabs.Activateable2;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.context.BusinessControl;
 import org.olat.core.id.context.ContextEntry;
@@ -46,6 +47,7 @@ import org.olat.core.id.context.StateEntry;
 import org.olat.core.logging.AssertException;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
+import org.olat.core.util.resource.OresHelper;
 import org.olat.core.util.vfs.LocalFolderImpl;
 import org.olat.course.editor.NodeEditController;
 import org.olat.course.nodes.CPCourseNode;
@@ -53,6 +55,8 @@ import org.olat.course.nodes.TitledWrapperHelper;
 import org.olat.course.run.navigation.NodeRunConstructionResult;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.fileresource.FileResourceManager;
+import org.olat.ims.cp.CPManager;
+import org.olat.ims.cp.ui.CPPackageConfig;
 import org.olat.modules.ModuleConfiguration;
 import org.olat.modules.cp.CPDisplayController;
 import org.olat.modules.cp.CPManifestTreeModel;
@@ -84,7 +88,7 @@ public class CPRunController extends BasicController implements ControllerEventL
 	private ControllerEventListener treeNodeClickListener;
 	private String nodecmd;
 	private String selNodeId;
-	private OLATResourceable ores;
+	private OLATResourceable courseResource;
 
 	
 	/**
@@ -101,7 +105,7 @@ public class CPRunController extends BasicController implements ControllerEventL
 	public CPRunController(ModuleConfiguration config, UserRequest ureq, UserCourseEnvironment userCourseEnv, WindowControl wControl, CPCourseNode cpNode, String nodecmd, OLATResourceable course) {
 		super(ureq, wControl);
 		this.nodecmd = nodecmd;
-		this.ores = course;
+		this.courseResource = OresHelper.clone(course);
 		// assertion to make sure the moduleconfig is valid
 		if (!CPEditController.isModuleConfigValid(config)) throw new AssertException("cprun controller had an invalid module config:"	+ config.toString());
 		this.config = config;
@@ -166,6 +170,8 @@ public class CPRunController extends BasicController implements ControllerEventL
 	}
 
 	private void doLaunch(UserRequest ureq) {
+		DeliveryOptions deliveryOptions = (DeliveryOptions)config.get(CPEditController.CONFIG_DELIVERYOPTIONS);
+		
 		if (cpRoot == null) {
 			// it is the first time we start the contentpackaging from this instance
 			// of this controller.
@@ -176,6 +182,13 @@ public class CPRunController extends BasicController implements ControllerEventL
 			// should always exist because references cannot be deleted as long as
 			// nodes reference them
 			if (cpRoot == null) throw new AssertException("file of repository entry " + re.getKey() + " was missing");
+			
+			if(deliveryOptions != null && deliveryOptions.getInherit() != null && deliveryOptions.getInherit().booleanValue()) {
+				CPPackageConfig packageConfig = CPManager.getInstance().getCPPackageConfig(re.getOlatResource());
+				if(packageConfig != null && packageConfig.getDeliveryOptions() != null) {
+					deliveryOptions = packageConfig.getDeliveryOptions();
+				}
+			}
 		}
 		// else cpRoot is already set (save some db access if the user opens /
 		// closes / reopens the cp from the same CPRuncontroller instance)
@@ -185,7 +198,7 @@ public class CPRunController extends BasicController implements ControllerEventL
 		}
 		//fxdiff VCRP-13: cp navigation
 		boolean navButtons = isNavButtonConfigured();
-		cpDispC = CPUIFactory.getInstance().createContentOnlyCPDisplayController(ureq, getWindowControl(), new LocalFolderImpl(cpRoot), activateFirstPage, navButtons, nodecmd, ores);
+		cpDispC = CPUIFactory.getInstance().createContentOnlyCPDisplayController(ureq, getWindowControl(), new LocalFolderImpl(cpRoot), activateFirstPage, navButtons, deliveryOptions, nodecmd, courseResource);
 		cpDispC.setContentEncoding(getContentEncoding());
 		cpDispC.setJSEncoding(getJSEncoding());
 		cpDispC.addControllerListener(this);
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ar.properties
index 3e9d7c43c07e2d304c20dda6e4069dccef59fddf..e87c0d66cc9aef8f540586d7dfa3ca71b9cc4440 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ar.properties
@@ -44,3 +44,4 @@ help.hover.cp-filename=\u0645\u0633\u0627\u0639\u062F\u0629 \u0641\u0649 \u0639\
 no.cp.chosen=<i>\u0644\u0645 \u064A\u062A\u0645 \u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u062D\u062A\u0648\u0649 \u062D\u0632\u0645\u0629 \u0627\u0644\u062A\u0639\u0644\u064A\u0645</i>
 pane.tab.accessibility=\u0648\u0635\u0648\u0644
 pane.tab.cpconfig=\u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u062A\u0639\u0644\u064A\u0645
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_bg.properties
index 32ff4de25a02720b64d87103991d622661d718d6..596feaf42d578912c782fba92220496f3c00da25 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_bg.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_bg.properties
@@ -43,3 +43,4 @@ help.hover.cp-filename=\u041F\u043E\u043C\u043E\u0449 \u0437\u0430 \u0438\u0437\
 no.cp.chosen=<i>\u041D\u0435 \u0435 \u0438\u0437\u0431\u0440\u0430\u043D\u043E CP \u0443\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435</i>
 pane.tab.accessibility=\u0414\u043E\u0441\u0442\u044A\u043F
 pane.tab.cpconfig=\u0423\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_cs.properties
index b2b0ba1759a0436f91c8ba7792360be62a84bf14..236c8a106d1d670ca6b698ea6c19ba5001473b9d 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_cs.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_cs.properties
@@ -43,3 +43,4 @@ help.hover.cp-filename=N\u00E1pov\u011Bda k v\u00FDb\u011Bru studijn\u00EDch mat
 no.cp.chosen=<i>\u017D\u00E1dn\u00FD studijn\u00ED materi\u00E1l CP nebyl vybr\u00E1n</i>
 pane.tab.accessibility=P\u0159\u00EDstup
 pane.tab.cpconfig=Studijn\u00ED obsah CP
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_da.properties
index 5bbbe74e257e9bf68ce75544a869a020e69c2278..ba603fb72563f364521ff67cb5d080fa5f70cf34 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_da.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_da.properties
@@ -43,3 +43,4 @@ help.hover.cp-filename=Hj\u00E6lp til at v\u00E6lge et CP l\u00E6ringsindhold
 no.cp.chosen=<i>Ingen CP l\u00E6ringsindhold er valgt</i> 
 pane.tab.accessibility=Adgange
 pane.tab.cpconfig=L\u00E6ringsindhold
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_de.properties
index de63da5c3e7922702c0b4743fcaed88d04b791de..ba496c7d38a4284207a883881166c94fa435c219 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_de.properties
@@ -40,10 +40,6 @@ display.config.fieldset=Darstellung
 display.config.startPage=Mit Startseite?
 display.config.startPage.false=Nein, Inhalt direkt starten
 display.config.startPage.true=Ja, anzeigen
-encoding.content=Zeichensatz Inhalt
-encoding.js=Zeichensatz Javascript
-encoding.auto=Automatisch
-encoding.same=Gleich wie Inhalt
 error.cprepoentrymissing=Der CP-Lerninhalt, den Sie anzeigen m\u00F6chten, wurde in der Zwischenzeit in der Ablage der Lernressourcen gel\u00F6scht. 
 error.launch=CP-Lerninhalt konnte nicht gestartet werden.
 error.noreference.long=F\u00FCr "{0}" muss in der Konfiguration ein CP-Lerninhalt im Tab "Lerninhalt" ausgew\u00E4hlt werden.
@@ -54,3 +50,4 @@ help.hover.cp-choose=Hilfe zur Auswahl eines CP-Lerninhaltes
 no.cp.chosen=<i>Kein CP-Lerninhalt ausgew\u00E4hlt</i>
 pane.tab.accessibility=Zugang
 pane.tab.cpconfig=Lerninhalt
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_el.properties
index a1fd0c74a66bfa4bcef16d7e776750b23a776b87..258adee0730ad96e0e3cf9daa5ddb8f5779c2b14 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_el.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_el.properties
@@ -37,10 +37,6 @@ display.config.fieldset=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7
 display.config.startPage=\u039C\u03B5 \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1 \u03BA\u03B1\u03BB\u03C9\u03C3\u03BF\u03C1\u03AF\u03C3\u03BC\u03B1\u03C4\u03BF\u03C2;
 display.config.startPage.false=\u038C\u03C7\u03B9, \u03AC\u03C1\u03C7\u03B9\u03C3\u03B5 \u03B1\u03BC\u03AD\u03C3\u03C9\u03C2 \u03BC\u03B5 \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF.
 display.config.startPage.true=\u039D\u03B1\u03B9, \u03B5\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B5 \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1 \u03BA\u03B1\u03BB\u03C9\u03C3\u03BF\u03C1\u03AF\u03C3\u03BC\u03B1\u03C4\u03BF\u03C2.
-encoding.auto=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1
-encoding.content=\u03A3\u03AD\u03C4 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03C9\u03BD \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5
-encoding.js=\u03A3\u03AD\u03C4 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03C9\u03BD Javascript
-encoding.same=\u038A\u03B4\u03B9\u03BF \u03BC\u03B5 \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF
 error.cprepoentrymissing=\u03A4\u03BF \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 CP \u03C0\u03BF\u03C5 \u03B5\u03C0\u03B9\u03B8\u03C5\u03BC\u03B5\u03AF\u03C4\u03B5 \u03BD\u03B1 \u03B4\u03B5\u03AF\u03C4\u03B5 \u03AD\u03C7\u03B5\u03B9 \u03B4\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03B5\u03AF.
 error.launch=\u0397 \u03B5\u03BA\u03C4\u03AD\u03BB\u03B5\u03C3\u03B7 \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 CP \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B4\u03C5\u03BD\u03B1\u03C4\u03AE.
 error.noreference.long=\u0393\u03B9\u03B1 \u03C4\u03BF "{0}" \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03C0\u03B9\u03BB\u03AD\u03BE\u03B5\u03C4\u03B5 \u03BA\u03AC\u03C0\u03BF\u03B9\u03BF \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 CP \u03C3\u03C4\u03BF \u03C3\u03B7\u03BC\u03B5\u03AF\u03BF "\u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2" \u03C4\u03BF\u03C5 \u03C4\u03BC\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2 \u03B4\u03B9\u03B1\u03BC\u03CC\u03C1\u03C6\u03C9\u03C3\u03B7\u03C2.
@@ -51,4 +47,5 @@ help.hover.cp-filename=\u0392\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1 \u03B3\u03B9\u
 no.cp.chosen=<i>\u0394\u03B5\u03BD \u03B5\u03C0\u03B9\u03BB\u03AD\u03C7\u03B8\u03B7\u03BA\u03B5 \u03BA\u03AC\u03C0\u03BF\u03B9\u03BF \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 CP</i>
 pane.tab.accessibility=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7
 pane.tab.cpconfig=\u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 title_cp=\u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 CP
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_en.properties
index 25cba1d22ea6489840b1185b41ad3c4a3be10338..8fe67d5962635074f47af306c42215758ef3e980 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_en.properties
@@ -38,10 +38,6 @@ display.config.fieldset=Display
 display.config.startPage=With welcome page?
 display.config.startPage.false=No, start with content immediately.
 display.config.startPage.true=Yes, display welcome page.
-encoding.auto=Automatically
-encoding.content=Content character set
-encoding.js=Javascript character set
-encoding.same=Same as content
 error.cprepoentrymissing=The CP learning content you would like to see has been deleted in the meantime.
 error.launch=Unable to launch CP learning content.
 error.noreference.long=For "{0}" you have to select a CP learning content within the tab "Learning content" in the configuration section.
@@ -52,5 +48,7 @@ help.hover.cp-filename=Help to display a CP learning content
 no.cp.chosen=<i>No CP learning content selected</i>
 pane.tab.accessibility=Access
 pane.tab.cpconfig=Learning content
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 preview.cp=Preview
 title_cp=CP learning content
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_es.properties
index a148c7ba74c78cc3cfc9ca51902f5f8e5ca49b86..1595e27f4c477f8a6797cb8f03e0c3c0c799aa50 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_es.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_es.properties
@@ -43,3 +43,4 @@ help.hover.cp-filename=Ayuda para seleccionar un contenido did\u00E1ctico CP
 no.cp.chosen=<i>No hay contenido did\u00E1ctico CP seleccionado</i>
 pane.tab.accessibility=Acceso
 pane.tab.cpconfig=Contenido did\u00E1ctico
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_fr.properties
index 23afa63459abe5029b74c9fec3ac0fe4b9040b75..0f04c03e1c8fec6679ed6760e480c48a447e39e9 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_fr.properties
@@ -38,10 +38,6 @@ display.config.fieldset=Affichage
 display.config.startPage=Avec page d'accueil?
 display.config.startPage.false=Non, d\u00E9marrer le contenu tout de suite
 display.config.startPage.true=Oui, afficher svp
-encoding.auto=Automatiquement
-encoding.content=Set de caract\u00E8res pour le contenu
-encoding.js=Set de caract\u00E8res Javascript
-encoding.same=Identique au contenu
 error.cprepoentrymissing=Le contenu didactique CP que vous voulez afficher a entre-temps \u00E9t\u00E9 supprim\u00E9 du dossier de stockage digital. 
 error.launch=Contenu didactique CP n'a pas pu d\u00E9marrer. 
 error.noreference.long=Pour "{0}", il faut s\u00E9lectionner, dans la configuration, un contenu didactique CP dans l'onglet "contenu didactique".
@@ -52,5 +48,6 @@ help.hover.cp-filename=Aide \u00E0 la repr\u00E9sentation d'un contenu didactiqu
 no.cp.chosen=<i>Aucun contenu didactique CP choisi</i>
 pane.tab.accessibility=Acc\u00E8s
 pane.tab.cpconfig=Contenu didactique
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 preview.cp=Aper\u00E7u
 title_cp=Contenu didactique CP
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_it.properties
index 2083a778ad1dcb1e1319fb26c455cad247196679..b11eb6e78215089cea7c90c302f588fb2d4c1ac4 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_it.properties
@@ -37,10 +37,6 @@ display.config.fieldset=Visualizzazione
 display.config.startPage=Con pagina iniziale?
 display.config.startPage.false=No, avviare il contenuto direttemente
 display.config.startPage.true=S\u00EC, visualizza, p.f.
-encoding.auto=Automaticamente
-encoding.content=Set di caratteri per il contenuto
-encoding.js=Set di caratteri Javascript
-encoding.same=Uguale al contenuto
 error.cprepoentrymissing=Nel frattempo, il contenuto didattico CP che desidera visualizzare \u00E8 stato eliminato dal deposito delle risorse didattiche.
 error.launch=Risulta impossibile avviare il contenuto didattico CP.
 error.noreference.long=Per "{0}", un contenuto didattico CP deve venire selezionato nella scheda.
@@ -51,4 +47,5 @@ help.hover.cp-filename=Aiuto per la rappresentazione di un contenuto didattico C
 no.cp.chosen=<i>Nessun contenuto didattico CP selezionato</i>
 pane.tab.accessibility=Accesso
 pane.tab.cpconfig=Contenuto didattico
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 title_cp=Contenuto didattico CP
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_jp.properties
index a100a47df713c13ac1fc56f57e1f99b5bcb3b924..0079f527297277f33c66f0a8fb787429bea589ba 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_jp.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_jp.properties
@@ -37,10 +37,6 @@ display.config.fieldset=\u8868\u793A
 display.config.startPage=\u30A6\u30A7\u30EB\u30AB\u30E0\u30DA\u30FC\u30B8?
 display.config.startPage.false=\u3044\u3044\u3048\u3001\u3059\u3050\u306B\u30B3\u30F3\u30C6\u30F3\u30C4\u30DA\u30FC\u30B8\u3092\u958B\u59CB\u3057\u307E\u3059\u3002
 display.config.startPage.true=\u306F\u3044\u3001\u30A6\u30A7\u30EB\u30AB\u30E0\u30DA\u30FC\u30B8\u3092\u8868\u793A\u3057\u307E\u3059\u3002
-encoding.auto=\u81EA\u52D5
-encoding.content=\u30B3\u30F3\u30C6\u30F3\u30C4\u6587\u5B57\u30BB\u30C3\u30C8
-encoding.js=Java\u30B9\u30AF\u30EA\u30D7\u30C8\u6587\u5B57\u30BB\u30C3\u30C8
-encoding.same=\u30B3\u30F3\u30C6\u30F3\u30C4\u3068\u540C\u3058
 error.cprepoentrymissing=\u3042\u306A\u305F\u304C\u95B2\u89A7\u3057\u305F\u3044CP\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u306F\u3001\u73FE\u5728\u524A\u9664\u3055\u308C\u3066\u3044\u307E\u3059\u3002
 error.launch=CP\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093\u3002
 error.noreference.long=\u300C {0} \u300D\u306E\u305F\u3081\u306B\u3001\u3042\u306A\u305F\u306F\u8A2D\u5B9A\u30BB\u30AF\u30B7\u30E7\u30F3\u5185\u306E\u300C\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u300D\u30BF\u30D6\u3088\u308ACP\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u9078\u629E\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
@@ -51,4 +47,5 @@ help.hover.cp-filename=CP\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u8868\
 no.cp.chosen=<i>\u9078\u629E\u3055\u308C\u305FCP\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u306F\u3042\u308A\u307E\u305B\u3093\u3002</i>
 pane.tab.accessibility=\u30A2\u30AF\u30BB\u30B9
 pane.tab.cpconfig=\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 title_cp=CP\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_lt.properties
index f9f67fb8fdb0e0b9114e8a343fc86840814512c2..45e0e47e80bf8e4936abbc4208dad83ea0903d1f 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_lt.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_lt.properties
@@ -38,3 +38,4 @@ help.hover.cp-filename=Padeda pa\u017Eym\u0117ti CP mokymosi turin\u012F
 no.cp.chosen=<i>N\u0117ra pa\u017Eym\u0117to CP mokymosi turinio</i>
 pane.tab.accessibility=Prieiga
 pane.tab.cpconfig=Mokymosi turinys
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_nl_NL.properties
index 7e5a4cbfa9e6ae02453725f083f4ef7558597d70..6a6f7bbd0f6d0f4baea7dfc5f60f3130a69fb54d 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_nl_NL.properties
@@ -37,10 +37,6 @@ display.config.fieldset=Toon
 display.config.startPage=Met welkomspagina?
 display.config.startPage.false=Nee, start onmiddelijk met inhoud.
 display.config.startPage.true=Ja, toon welkomspagina.
-encoding.auto=Automatisch
-encoding.content=Inhoud karakterset
-encoding.js=Jacascript karakterset
-encoding.same=Zelfde als inhoud
 error.cprepoentrymissing=De CP leerinhoud die u wilt zien is inmiddels al verwijdert.
 error.launch=Niet in staat om CP leerinhoud te lanceren.
 error.noreference.long=Voor "{0}" moet u CP leerinhoud selecteren binnen de tab "Leerinhoud " in de configuratie sectie.
@@ -51,4 +47,5 @@ help.hover.cp-filename=Help CP leerinhoud te tonen
 no.cp.chosen=<i>Geen CP inhoud geselecteerd</i>
 pane.tab.accessibility=Toegang
 pane.tab.cpconfig=Leerinhoud
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 title_cp=CP leerinhoud
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pl.properties
index 00baf62233411aab4bac27124d245ee5173bc042..e75e39ee2c0cc8fa85379ea09b6fb73c662c648c 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pl.properties
@@ -37,10 +37,6 @@ display.config.fieldset=Wy\u015Bwietl
 display.config.startPage=Ze stron\u0105 powitaln\u0105?
 display.config.startPage.false=Nie, od razu wy\u015Bwietl zawarto\u015B\u0107.
 display.config.startPage.true=Tak, poka\u017C stron\u0119 powitaln\u0105.
-encoding.auto=Automatycznie
-encoding.content=Kodowanie znak\u00F3w zawarto\u015Bci
-encoding.js=Kodowanie znak\u00F3w Javascript
-encoding.same=Tak samo, jak zawarto\u015B\u0107
 error.cprepoentrymissing=Zawarto\u015B\u0107 edukacyjna CP, kt\u00F3r\u0105 chcia\u0142e\u015B obejrze\u0107, zosta\u0142a usuni\u0119ta w mi\u0119dzyczasie.
 error.launch=Nie mo\u017Cna uruchomi\u0107 zawarto\u015Bci edukacyjnej CP
 error.noreference.long=Dla "{0}" musisz wybra\u0107 zawarto\u015B\u0107 edukacyjn\u0105 CP w zak\u0142adce "Zawarto\u015B\u0107 edukacyjna" w sekcji konfiguracji.
@@ -51,5 +47,6 @@ help.hover.cp-filename=Pom\u00F3\u017C wybra\u0107 zawarto\u015B\u0107 edukacyjn
 no.cp.chosen=<i>Nie wybrano zawarto\u015Bci edukacyjnej CP</i>
 pane.tab.accessibility=Dost\u0119p
 pane.tab.cpconfig=Zawarto\u015B\u0107 edukacyjna
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 preview.cp=Podgl\u0105d
 title_cp=Zawarto\u015B\u0107 edukacyjna CP
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_BR.properties
index 665fefec8c591da7c4508ca9ba918a769225ec0d..525fb80948aa6d93a719c1161b992653bca2ef23 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_BR.properties
@@ -38,10 +38,6 @@ display.config.fieldset=Exibir
 display.config.startPage=Com p\u00E1gina de boas vindas?
 display.config.startPage.false=N\u00E3o, executar o m\u00F3dulo imediatamente.
 display.config.startPage.true=Sim, mostrar p\u00E1gina de boas vindas.
-encoding.auto=Automaticamente
-encoding.content=conte\u00FAdo de caracter definido
-encoding.js=Conjunto de Caracter Javascript
-encoding.same=Mesmo que o conte\u00FAdo
 error.cprepoentrymissing=O m\u00F3dulo IMS-CP que voc\u00EA gostaria de ver foi apagado neste \u00EDnterim.
 error.launch=Impossibilitado de executar m\u00F3dulo IMS-CP.
 error.noreference.long=Para "{0}" voc\u00EA tem que selecionar um m\u00F3dulo IMS-CP dentro de "M\u00F3dulo did\u00E1tico" na sess\u00E3o de configura\u00E7\u00E3o.
@@ -52,5 +48,6 @@ help.hover.cp-filename=Ajuda para selecionar um m\u00F3dulo IMS-CP
 no.cp.chosen=<i>Nenhum m\u00F3dulo IMS-CP selecionado</i>
 pane.tab.accessibility=Acesso
 pane.tab.cpconfig=M\u00F3dulo did\u00E1tico
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 preview.cp=Amostra
 title_cp=CP learning content
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_PT.properties
index 814efa8d22fedde0c65a8366a32c1a53e72acfc6..dc4b9aa7e2ae3a1a08d375392f94eeab0c7aacea 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_PT.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_pt_PT.properties
@@ -43,3 +43,4 @@ help.hover.cp-filename=Ajuda para selecionar um m\u00F3dulo IMS-CP
 no.cp.chosen=<i>Nenhum m\u00F3dulo IMS-CP selecionado</i>
 pane.tab.accessibility=Acesso
 pane.tab.cpconfig=M\u00F3dulo did\u00E1tico
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ru.properties
index 8dab50a5f63f3a599d7923e6c61125e2e3c96bf1..5be8d393d86fc496c010c3902a64237621ca2810 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ru.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_ru.properties
@@ -35,3 +35,4 @@ help.hover.cp-filename=\u041F\u043E\u043C\u043E\u0449\u044C \u043A \u043F\u043E\
 no.cp.chosen=<i>\u041D\u0438 \u043E\u0434\u043D\u043E\u0433\u043E \u0443\u0447\u0435\u0431\u043D\u043E\u0433\u043E \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u044F CP \u043D\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043E</i>
 pane.tab.accessibility=\u0414\u043E\u0441\u0442\u0443\u043F
 pane.tab.cpconfig=\u0423\u0447\u0435\u0431\u043D\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_sq.properties
index 1d9f29eda2c9d53e0d3b88a9cc4a7a9c57e61793..94dd895e72d501b9072dd12d38c85af14e184b56 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_sq.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_sq.properties
@@ -43,3 +43,4 @@ help.hover.cp-filename=Ndihma n\u00EB p\u00EBrzgjedhjen e nj\u00EB p\u00EBrmbajt
 no.cp.chosen=<i>Nuk u p\u00EBrzgjedh ndonj\u00EB p\u00EBrmbajtje m\u00EBsimi CP</i>
 pane.tab.accessibility=Qasje
 pane.tab.cpconfig=P\u00EBrmbajtje m\u00EBsimi
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_CN.properties
index 69b744cb85356f6bd3e29088c8ef77fc46d17edc..6ceff545425db8931db441a9ba2526cdf9be23e0 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_CN.properties
@@ -37,10 +37,6 @@ display.config.fieldset=\u663E\u793A
 display.config.startPage=\u542F\u7528\u6B22\u8FCE\u9875\u9762?
 display.config.startPage.false=\u5426, \u7ACB\u5373\u663E\u793A\u5185\u5BB9
 display.config.startPage.true=\u662F, \u663E\u793A\u6B22\u8FCE\u9875\u9762.
-encoding.auto=\u81EA\u52A8\u5339\u914D
-encoding.content=\u5185\u5BB9\u5B57\u7B26\u96C6
-encoding.js=Javascript\u5B57\u7B26\u96C6
-encoding.same=\u4E0E\u5185\u5BB9\u76F8\u540C
 error.cprepoentrymissing=\u60A8\u60F3\u8981\u8BBF\u95EE\u7684CP\u5B66\u4E60\u5185\u5BB9\u5DF2\u7ECF\u5220\u9664
 error.launch=\u65E0\u6CD5\u542F\u52A8CP\u5B66\u4E60\u5185\u5BB9
 error.noreference.long=\u5728\u914D\u7F6E\u9636\u6BB5\uFF0C\u60A8\u5FC5\u987B\u5728"\u5B66\u4E60\u5185\u5BB9"\u6807\u7B7E\u4E2D\u4E3A\u201D{0}\u201C\u9009\u62E9\u4E00\u4E2ACP\u5B66\u4E60\u5185\u5BB9
@@ -51,4 +47,5 @@ help.hover.cp-filename=\u5173\u4E8E\u5982\u4F55\u663E\u793ACP\u5B66\u4E60\u5185\
 no.cp.chosen=<i>\u6CA1\u6709\u9009\u62E9CP\u5B66\u4E60\u5185\u5BB9</i>
 pane.tab.accessibility=\u8BBF\u95EE
 pane.tab.cpconfig=\u5B66\u4E60\u5185\u5BB9
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 title_cp=CP\u5B66\u4E60\u5185\u5BB9\u5305
diff --git a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_TW.properties
index 87c70843fdba5528299d4f33703f4b302a4ea62e..868c159162a0ef02723465cdb7b5ec81a5678e59 100644
--- a/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_TW.properties
+++ b/src/main/java/org/olat/course/nodes/cp/_i18n/LocalStrings_zh_TW.properties
@@ -44,4 +44,5 @@ help.hover.cp-filename=\u9078\u64C7\u4E00\u500B CP \u5B78\u7FD2\u5167\u5BB9\u768
 no.cp.chosen=<i>\u6C92\u6709 CP \u5B78\u7FD2\u5167\u5BB9\u88AB\u9078\u53D6</i>
 pane.tab.accessibility=\u5B58\u53D6
 pane.tab.cpconfig=\u5B78\u7FD2\u5167\u5BB9
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 title_cp=CP \u5B78\u7FD2\u5167\u5BB9
diff --git a/src/main/java/org/olat/course/nodes/iq/AssessmentEvent.java b/src/main/java/org/olat/course/nodes/iq/AssessmentEvent.java
index 5a0d1413f10cd4deb0f5611b5f1a76f5d7c95675..ef03e1bacb563803cc195c166c1c6601dc3cdbaa 100644
--- a/src/main/java/org/olat/course/nodes/iq/AssessmentEvent.java
+++ b/src/main/java/org/olat/course/nodes/iq/AssessmentEvent.java
@@ -46,7 +46,9 @@ import org.olat.instantMessaging.InstantMessagingService;
  * @author Lavinia Dumitrescu
  */
 public class AssessmentEvent extends MultiUserEvent {
-	
+
+	private static final long serialVersionUID = -4619743031390573124L;
+
 	public static enum TYPE {STARTED, STOPPED}
 	
 	private TYPE eventType = TYPE.STARTED;
diff --git a/src/main/java/org/olat/course/nodes/iq/IQEditController.java b/src/main/java/org/olat/course/nodes/iq/IQEditController.java
index 424f9d60bfc6cde0d6820068012a1c2510a82a80..a8187f440a71b2f8acf0f0c254096bb6ac663744 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQEditController.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQEditController.java
@@ -334,7 +334,7 @@ public class IQEditController extends ActivateableTabbableDefaultController impl
 			allowRelativeLinks=Boolean.FALSE;
 		}
 		fccecontr = new LinkChooseCreateEditController(ureq, wControl, disclaimer, allowRelativeLinks, course.getCourseFolderContainer(), type, legend, new CourseInternalLinkTreeModel(course.getEditorTreeModel()) );		
-		this.listenTo(fccecontr);
+		listenTo(fccecontr);
 		
 		Component fcContent = fccecontr.getInitialComponent();
 		myContent.put("filechoosecreateedit", fcContent);
diff --git a/src/main/java/org/olat/course/nodes/iq/IQEditForm.java b/src/main/java/org/olat/course/nodes/iq/IQEditForm.java
index 435f2b45dd8eed2186f9db3f6e86ce01db34c593..f08836bbc7dda0e5761a49d5198ed5158de79aa3 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQEditForm.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQEditForm.java
@@ -376,7 +376,6 @@ class IQEditForm extends FormBasicController {
 		update();
 	}
 	
-	@SuppressWarnings("unused")
 	@Override
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		update();
diff --git a/src/main/java/org/olat/course/nodes/iq/IQSELFCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/iq/IQSELFCourseNodeConfiguration.java
index ef795713e4bf379036141cbd91fb9383744b2a29..5472adaaa3edd75678a57141fe46b6bcc12d1966 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQSELFCourseNodeConfiguration.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQSELFCourseNodeConfiguration.java
@@ -25,10 +25,8 @@
 
 package org.olat.course.nodes.iq;
 
-import java.util.List;
 import java.util.Locale;
 
-import org.olat.core.extensions.ExtensionResource;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.util.Util;
 import org.olat.course.nodes.AbstractCourseNodeConfiguration;
@@ -76,36 +74,4 @@ public class IQSELFCourseNodeConfiguration extends AbstractCourseNodeConfigurati
 	public String getAlias() {
 		return "iqself";
 	}
-
-	//
-	// OLATExtension interface implementations.
-	//
-
-	public String getName() {
-		return getAlias();
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionResources()
-	 */
-	public List getExtensionResources() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionCSS()
-	 */
-	public ExtensionResource getExtensionCSS() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#setURLBuilder(org.olat.core.gui.render.URLBuilder)
-	 */
-	public void setExtensionResourcesBaseURI(String ubi) {
-	// no need for the URLBuilder
-	}
-
 }
diff --git a/src/main/java/org/olat/course/nodes/iq/IQSURVCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/iq/IQSURVCourseNodeConfiguration.java
index 7a3ee71086b30655a4ab67a020fd6dc7104559cb..91c2aab13436af1ab8edaa299cad93945110e635 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQSURVCourseNodeConfiguration.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQSURVCourseNodeConfiguration.java
@@ -25,10 +25,8 @@
 
 package org.olat.course.nodes.iq;
 
-import java.util.List;
 import java.util.Locale;
 
-import org.olat.core.extensions.ExtensionResource;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.util.Util;
 import org.olat.course.nodes.AbstractCourseNodeConfiguration;
@@ -76,36 +74,4 @@ public class IQSURVCourseNodeConfiguration extends AbstractCourseNodeConfigurati
 	public String getAlias() {
 		return "iqsurv";
 	}
-
-	//
-	// OLATExtension interface implementations.
-	//
-
-	public String getName() {
-		return getAlias();
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionResources()
-	 */
-	public List getExtensionResources() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionCSS()
-	 */
-	public ExtensionResource getExtensionCSS() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#setURLBuilder(org.olat.core.gui.render.URLBuilder)
-	 */
-	public void setExtensionResourcesBaseURI(String ubi) {
-	// no need for the URLBuilder
-	}
-
 }
diff --git a/src/main/java/org/olat/course/nodes/iq/IQTESTCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/iq/IQTESTCourseNodeConfiguration.java
index 0def90aec199c60e49303bfb23c88c33087294a1..75a556a455c23009053a324fbd7ced28f2aacbf6 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQTESTCourseNodeConfiguration.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQTESTCourseNodeConfiguration.java
@@ -25,10 +25,8 @@
 
 package org.olat.course.nodes.iq;
 
-import java.util.List;
 import java.util.Locale;
 
-import org.olat.core.extensions.ExtensionResource;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.util.Util;
 import org.olat.course.nodes.AbstractCourseNodeConfiguration;
@@ -80,36 +78,4 @@ public class IQTESTCourseNodeConfiguration extends AbstractCourseNodeConfigurati
 	public String getAlias() {
 		return "iqtest";
 	}
-
-	//
-	// OLATExtension interface implementations.
-	//
-
-	public String getName() {
-		return getAlias();
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionResources()
-	 */
-	public List getExtensionResources() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionCSS()
-	 */
-	public ExtensionResource getExtensionCSS() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#setURLBuilder(org.olat.core.gui.render.URLBuilder)
-	 */
-	public void setExtensionResourcesBaseURI(String ubi) {
-	// no need for the URLBuilder
-	}
-
 }
diff --git a/src/main/java/org/olat/course/nodes/ms/MSCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/ms/MSCourseNodeConfiguration.java
index cad63002f854312dc136bb7c525e4e04a27f3af8..edaf45cd7f4ab8c4abd5f09f0bfbc70b138f4705 100644
--- a/src/main/java/org/olat/course/nodes/ms/MSCourseNodeConfiguration.java
+++ b/src/main/java/org/olat/course/nodes/ms/MSCourseNodeConfiguration.java
@@ -25,11 +25,8 @@
 
 package org.olat.course.nodes.ms;
 
-import java.util.List;
 import java.util.Locale;
 
-import org.olat.core.extensions.ExtensionResource;
-import org.olat.core.gui.translator.PackageTranslator;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.util.Util;
 import org.olat.course.nodes.AbstractCourseNodeConfiguration;
@@ -78,36 +75,4 @@ public class MSCourseNodeConfiguration extends AbstractCourseNodeConfiguration i
 	public String getAlias() {
 		return "ms";
 	}
-
-	//
-	// OLATExtension interface implementations.
-	//
-
-	public String getName() {
-		return getAlias();
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionResources()
-	 */
-	public List getExtensionResources() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionCSS()
-	 */
-	public ExtensionResource getExtensionCSS() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#setURLBuilder(org.olat.core.gui.render.URLBuilder)
-	 */
-	public void setExtensionResourcesBaseURI(String ubi) {
-	// no need for the URLBuilder
-	}
-
 }
diff --git a/src/main/java/org/olat/course/nodes/scorm/ScormCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/scorm/ScormCourseNodeConfiguration.java
index 057f3449ecefb22978e7c029472a01fde49c66d0..107fd854a48700bef4aeb758175f6949d979f145 100644
--- a/src/main/java/org/olat/course/nodes/scorm/ScormCourseNodeConfiguration.java
+++ b/src/main/java/org/olat/course/nodes/scorm/ScormCourseNodeConfiguration.java
@@ -25,10 +25,8 @@
 
 package org.olat.course.nodes.scorm;
 
-import java.util.List;
 import java.util.Locale;
 
-import org.olat.core.extensions.ExtensionResource;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.util.Util;
 import org.olat.course.nodes.AbstractCourseNodeConfiguration;
@@ -84,39 +82,4 @@ public class ScormCourseNodeConfiguration extends AbstractCourseNodeConfiguratio
 	public String getAlias() {
 		return "scorm";
 	}
-
-	//
-	// OLATExtension interface implementations.
-	//
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getName()
-	 */
-	public String getName() {
-		return getAlias();
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionResources()
-	 */
-	public List getExtensionResources() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionCSS()
-	 */
-	public ExtensionResource getExtensionCSS() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#setExtensionResourcesBaseURI(java.lang.String)
-	 */
-	public void setExtensionResourcesBaseURI(String ubi) {
-	// no need for the URLBuilder
-	}
-
 }
diff --git a/src/main/java/org/olat/course/nodes/scorm/ScormEditController.java b/src/main/java/org/olat/course/nodes/scorm/ScormEditController.java
index c9fafa3d617cbb6d054f70442c67b7f40f01cb43..74703cf787b9a4dbf734c4b0352dd0aae5c13276 100644
--- a/src/main/java/org/olat/course/nodes/scorm/ScormEditController.java
+++ b/src/main/java/org/olat/course/nodes/scorm/ScormEditController.java
@@ -26,10 +26,6 @@
 package org.olat.course.nodes.scorm;
 
 import java.io.File;
-import java.nio.charset.Charset;
-import java.util.Arrays;
-import java.util.Locale;
-import java.util.Map;
 
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
@@ -51,10 +47,11 @@ import org.olat.core.gui.control.ControllerEventListener;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptionsConfigurationController;
 import org.olat.core.gui.control.generic.tabbable.ActivateableTabbableDefaultController;
 import org.olat.core.logging.AssertException;
 import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
-import org.olat.core.util.StringHelper;
 import org.olat.course.ICourse;
 import org.olat.course.assessment.AssessmentHelper;
 import org.olat.course.condition.Condition;
@@ -68,6 +65,7 @@ import org.olat.modules.ModuleConfiguration;
 import org.olat.modules.scorm.ScormAPIandDisplayController;
 import org.olat.modules.scorm.ScormConstants;
 import org.olat.modules.scorm.ScormMainManager;
+import org.olat.modules.scorm.ScormPackageConfig;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 import org.olat.repository.controllers.ReferencableEntriesSearchController;
@@ -84,6 +82,8 @@ public class ScormEditController extends ActivateableTabbableDefaultController i
 
 	public static final String PANE_TAB_CPCONFIG = "pane.tab.cpconfig";
 	private static final String PANE_TAB_ACCESSIBILITY = "pane.tab.accessibility";
+	private static final String PANE_TAB_DELIVERY = "pane.tab.delivery";
+
 
 	private static final String CONFIG_KEY_REPOSITORY_SOFTKEY = "reporef";
 	public static final String CONFIG_SHOWMENU = "showmenu";
@@ -94,9 +94,8 @@ public class ScormEditController extends ActivateableTabbableDefaultController i
 	public static final String CONFIG_ASSESSABLE_TYPE_SCORE = "score";
 	public static final String CONFIG_ASSESSABLE_TYPE_PASSED = "passed";
 	public static final String CONFIG_CUTVALUE = "cutvalue";
-	public static final String CONFIG_RAW_CONTENT = "rawcontent";
-	public static final String CONFIG_HEIGHT = "height";	
-	public final static String CONFIG_HEIGHT_AUTO = "auto";
+	
+	public static final String CONFIG_DELIVERY_OPTIONS = "deliveryOptions";
 	//fxdiff FXOLAT-116: SCORM improvements
 	public final static String CONFIG_FULLWINDOW = "fullwindow";
 	public final static String CONFIG_CLOSE_ON_FINISH = "CLOSEONFINISH";
@@ -125,6 +124,7 @@ public class ScormEditController extends ActivateableTabbableDefaultController i
 	private CloseableModalController cmc;
 	
 	private ConditionEditController accessibilityCondContr;
+	private DeliveryOptionsConfigurationController deliveryOptionsCtrl;
 	private ScormCourseNode scormNode;
 
 	private TabbedPane myTabbedPane;
@@ -156,13 +156,14 @@ public class ScormEditController extends ActivateableTabbableDefaultController i
 		chooseCPButton = LinkFactory.createButtonSmall("command.importcp", cpConfigurationVc, this);
 		changeCPButton = LinkFactory.createButtonSmall("command.changecp", cpConfigurationVc, this);
 		
+		DeliveryOptions parentConfig = null;
 		if (config.get(CONFIG_KEY_REPOSITORY_SOFTKEY) != null) {
 			// fetch repository entry to display the repository entry title of the
 			// chosen cp
 			RepositoryEntry re = getScormCPReference(config, false);
 			if (re == null) { // we cannot display the entries name, because the repository entry had been deleted 
 												// between the time when it was chosen here, and now				
-				this.showError(NLS_ERROR_CPREPOENTRYMISSING);
+				showError(NLS_ERROR_CPREPOENTRYMISSING);
 				cpConfigurationVc.contextPut("showPreviewButton", Boolean.FALSE);
 				cpConfigurationVc.contextPut(VC_CHOSENCP, translate(NLS_NO_CP_CHOSEN));
 			} else {
@@ -170,7 +171,9 @@ public class ScormEditController extends ActivateableTabbableDefaultController i
 				previewLink = LinkFactory.createCustomLink("command.preview", "command.preview", re.getDisplayname(), Link.NONTRANSLATED, cpConfigurationVc, this);
 				previewLink.setCustomEnabledLinkCSS("b_preview");
 				previewLink.setTitle(getTranslator().translate("command.preview"));
-
+				
+				ScormPackageConfig scormConfig = ScormMainManager.getInstance().getScormPackageConfig(re.getOlatResource());
+				parentConfig = scormConfig == null ? null : scormConfig.getDeliveryOptions();
 			}
 		} else {
 			// no valid config yet
@@ -194,17 +197,13 @@ public class ScormEditController extends ActivateableTabbableDefaultController i
 		boolean advanceScore = config.getBooleanSafe(CONFIG_ADVANCESCORE, true);
 		// </OLATCE-289>
 		int cutvalue = config.getIntegerSafe(CONFIG_CUTVALUE, 0);
-		boolean rawContent = config.getBooleanSafe(CONFIG_RAW_CONTENT, true);
-		String height = (String) config.get(CONFIG_HEIGHT);
-		String encContent = (String) config.get(NodeEditController.CONFIG_CONTENT_ENCODING);
-		String encJS = (String) config.get(NodeEditController.CONFIG_JS_ENCODING);
 		//fxdiff FXOLAT-116: SCORM improvements
 		boolean fullWindow = config.getBooleanSafe(CONFIG_FULLWINDOW, true);
 		boolean closeOnFinish = config.getBooleanSafe(CONFIG_CLOSE_ON_FINISH, false);
 		
 		//= conf.get(CONFIG_CUTVALUE);
 		scorevarform = new VarForm(ureq, wControl, showMenu, skipLaunchPage, showNavButtons,
-				rawContent, height, encContent, encJS, assessableType, cutvalue, fullWindow,
+				assessableType, cutvalue, fullWindow,
 				closeOnFinish, maxAttempts, advanceScore, attemptsDependOnScore);
 		listenTo(scorevarform);
 		cpConfigurationVc.put("scorevarform", scorevarform.getInitialComponent());
@@ -214,7 +213,11 @@ public class ScormEditController extends ActivateableTabbableDefaultController i
 		accessibilityCondContr = new ConditionEditController(ureq, getWindowControl(), course.getCourseEnvironment().getCourseGroupManager(), 
 				accessCondition, "accessabilityConditionForm",
 				AssessmentHelper.getAssessableNodes(course.getEditorTreeModel(), scormNode), euce);		
-		this.listenTo(accessibilityCondContr);
+		listenTo(accessibilityCondContr);
+
+		DeliveryOptions deliveryOptions = (DeliveryOptions)config.get(CONFIG_DELIVERY_OPTIONS);
+		deliveryOptionsCtrl = new DeliveryOptionsConfigurationController(ureq, getWindowControl(), deliveryOptions, parentConfig);
+		listenTo(deliveryOptionsCtrl);
 
 		main.setContent(cpConfigurationVc);
 	}
@@ -240,7 +243,7 @@ public class ScormEditController extends ActivateableTabbableDefaultController i
 			if (re == null) { // we cannot preview it, because the repository entry
 												// had been deleted between the time when it was
 												// chosen here, and now				
-				this.showError("error.cprepoentrymissing");
+				showError("error.cprepoentrymissing");
 			} else {
 				File cpRoot = FileResourceManager.getInstance().unzipFileResource(re.getOlatResource());
 				boolean showMenu = config.getBooleanSafe(CONFIG_SHOWMENU, true);
@@ -252,18 +255,9 @@ public class ScormEditController extends ActivateableTabbableDefaultController i
 				// configure some display options
 				boolean showNavButtons = config.getBooleanSafe(ScormEditController.CONFIG_SHOWNAVBUTTONS, true);
 				previewController.showNavButtons(showNavButtons);
-				String height = (String) config.get(ScormEditController.CONFIG_HEIGHT);
-				if ( ! height.equals(ScormEditController.CONFIG_HEIGHT_AUTO)) {
-					previewController.setHeightPX(Integer.parseInt(height));
-				}
-				String contentEncoding = (String) config.get(NodeEditController.CONFIG_CONTENT_ENCODING);
-				if ( ! contentEncoding.equals(NodeEditController.CONFIG_CONTENT_ENCODING_AUTO)) {
-					previewController.setContentEncoding(contentEncoding);
-				}
-				String jsEncoding = (String) config.get(NodeEditController.CONFIG_JS_ENCODING);
-				if ( ! jsEncoding.equals(NodeEditController.CONFIG_JS_ENCODING_AUTO)) {
-					previewController.setJSEncoding(jsEncoding);
-				}
+				
+				DeliveryOptions deliveryOptions = deliveryOptionsCtrl.getOptionsForPreview();
+				previewController.setDeliveryOptions(deliveryOptions);
 				previewController.activate();
 			}
 		}
@@ -288,6 +282,10 @@ public class ScormEditController extends ActivateableTabbableDefaultController i
 					// fire event so the updated config is saved by the
 					// editormaincontroller
 					fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT);
+					
+					ScormPackageConfig scormConfig = ScormMainManager.getInstance().getScormPackageConfig(re.getOlatResource());
+					DeliveryOptions parentConfig = scormConfig == null ? null : scormConfig.getDeliveryOptions();
+					deliveryOptionsCtrl.setParentDeliveryOptions(parentConfig);
 				}
 				// else cancelled repo search
 			}
@@ -316,15 +314,15 @@ public class ScormEditController extends ActivateableTabbableDefaultController i
 				config.setBooleanEntry(CONFIG_ADVANCESCORE, scorevarform.isAdvanceScore());
 				config.setBooleanEntry(CONFIG_ATTEMPTSDEPENDONSCORE, scorevarform.getAttemptsDependOnScore());
 				// </OLATCE-289>
-				config.setBooleanEntry(CONFIG_RAW_CONTENT, scorevarform.isRawContent());
-				config.set(CONFIG_HEIGHT, scorevarform.getHeightValue());
-				config.set(NodeEditController.CONFIG_CONTENT_ENCODING, scorevarform.getEncodingContentValue());
-				config.set(NodeEditController.CONFIG_JS_ENCODING, scorevarform.getEncodingJSValue());
-				
 				// fire event so the updated config is saved by the
 				// editormaincontroller
 				fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT);
 			}
+		} else if(source == deliveryOptionsCtrl) {
+			if(event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) {
+				config.set(CONFIG_DELIVERY_OPTIONS, deliveryOptionsCtrl.getDeliveryOptions());
+				fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT);
+			}
 		}
 	}
 
@@ -335,6 +333,7 @@ public class ScormEditController extends ActivateableTabbableDefaultController i
 		myTabbedPane = tabbedPane;
 		tabbedPane.addTab(translate(PANE_TAB_ACCESSIBILITY), accessibilityCondContr.getWrappedDefaultAccessConditionVC(translate(NLS_CONDITION_ACCESSIBILITY_TITLE)));
 		tabbedPane.addTab(translate(PANE_TAB_CPCONFIG), main); // the choose learning content tab
+		tabbedPane.addTab(translate(PANE_TAB_DELIVERY), deliveryOptionsCtrl.getInitialComponent());
 	}
 
 	/**
@@ -405,25 +404,13 @@ class VarForm extends FormBasicController {
 	private SelectionElement closeOnFinishEl;//fxdiff FXOLAT-116: SCORM improvements
 	private SelectionElement isAssessableEl;
 	private SelectionElement skipLaunchPageEl; //fxdiff FXOLAT-322 : skip start-page / auto-launch
-	private SelectionElement rawContentEl;
 	private IntegerElement cutValueEl;
-	private SingleSelection heightEl;
-	private SingleSelection encodingContentEl;
-	private SingleSelection encodingJSEl;
-	
 	
-	private boolean showMenu, showNavButtons, isAssessable, skipLaunchPage, rawContent;
+	private boolean showMenu, showNavButtons, skipLaunchPage;
 	private String assessableType;
-	private String height;
-	private String encodingContent;
-	private String encodingJS;
 	private int cutValue;
 	private boolean fullWindow;//fxdiff FXOLAT-116: SCORM improvements
 	private boolean closeOnFinish;//fxdiff FXOLAT-116: SCORM improvements
-	private String[] keys, values;
-	private String[] encodingContentKeys, encodingContentValues;
-	private String[] encodingJSKeys, encodingJSValues;
-	
 	private String[] assessableKeys, assessableValues;
 
 	// <OLATCE-289>
@@ -441,7 +428,6 @@ class VarForm extends FormBasicController {
 	 * @param name  Name of the form
 	 */
 	public VarForm(UserRequest ureq, WindowControl wControl, boolean showMenu, boolean skipLaunchPage, boolean showNavButtons, 
-			boolean rawContent, String height, String encodingContent, String encodingJS, 
 			String assessableType, int cutValue, boolean fullWindow, boolean closeOnFinish,
 			// <OLATCE-289>
 			int maxattempts, boolean advanceScore, boolean attemptsDependOnScore
@@ -456,10 +442,6 @@ class VarForm extends FormBasicController {
 		//fxdiff FXOLAT-116: SCORM improvements
 		this.fullWindow = fullWindow;
 		this.closeOnFinish = closeOnFinish;
-		this.rawContent = rawContent;
-		this.height = height;
-		this.encodingContent = encodingContent;
-		this.encodingJS = encodingJS;
 		
 		// <OLATCE-289>
 		this.advanceScore = advanceScore;
@@ -467,55 +449,6 @@ class VarForm extends FormBasicController {
 		this.maxattempts = maxattempts;
 		// </OLATCE-289>
 		
-		keys = new String[]{ ScormEditController.CONFIG_HEIGHT_AUTO, "460", "480", 
-				"500", "520", "540", "560", "580",
-				"600", "620", "640", "660", "680",
-				"700", "720", "730", "760", "780",
-				"800", "820", "840", "860", "880",
-				"900", "920", "940", "960", "980",
-				"1000", "1020", "1040", "1060", "1080",
-				"1100", "1120", "1140", "1160", "1180",
-				"1200", "1220", "1240", "1260", "1280",
-				"1300", "1320", "1340", "1360", "1380"
-		};
-		
-		values = new String[]{ translate("height.auto"), "460px", "480px", 
-				"500px", "520px", "540px", "560px", "580px",
-				"600px", "620px", "640px", "660px", "680px",
-				"700px", "720px", "730px", "760px", "780px",
-				"800px", "820px", "840px", "860px", "880px",
-				"900px", "920px", "940px", "960px", "980px",
-				"1000px", "1020px", "1040px", "1060px", "1080px",
-				"1100px", "1120px", "1140px", "1160px", "1180px",
-				"1200px", "1220px", "1240px", "1260px", "1280px",
-				"1300px", "1320px", "1340px", "1360px", "1380px"
-		};
-		
-		Map<String,Charset> charsets = Charset.availableCharsets();
-		int numOfCharsets = charsets.size() + 1;
-		
-		encodingContentKeys = new String[numOfCharsets];
-		encodingContentKeys[0] = NodeEditController.CONFIG_CONTENT_ENCODING_AUTO;
-
-		encodingContentValues = new String[numOfCharsets];
-		encodingContentValues[0] = translate("encoding.auto");
-		
-		encodingJSKeys = new String[numOfCharsets];
-		encodingJSKeys[0] = NodeEditController.CONFIG_JS_ENCODING_AUTO;
-
-		encodingJSValues = new String[numOfCharsets];
-		encodingJSValues[0] =	translate("encoding.same");
-
-		int count = 1;
-		Locale locale = ureq.getLocale();
-		for(Map.Entry<String, Charset> charset:charsets.entrySet()) {
-			encodingContentKeys[count] = charset.getKey();
-			encodingContentValues[count] = charset.getValue().displayName(locale);
-			encodingJSKeys[count] = charset.getKey();
-			encodingJSValues[count] = charset.getValue().displayName(locale);
-			count++;
-		}
-		
 		assessableKeys = new String[]{ "off", ScormEditController.CONFIG_ASSESSABLE_TYPE_SCORE,
 				ScormEditController.CONFIG_ASSESSABLE_TYPE_PASSED };
 		assessableValues = new String[]{
@@ -567,21 +500,7 @@ class VarForm extends FormBasicController {
 		return null;
 	}
 	
-	public boolean isRawContent() {
-		return rawContentEl.isSelected(0);
-	}
-	
-	public String getHeightValue() {
-		return heightEl.getSelectedKey();
-	}
-	
-	public String getEncodingContentValue() {
-		return encodingContentEl.getSelectedKey();
-	}
-	
-	public String getEncodingJSValue() {
-		return encodingJSEl.getSelectedKey();
-	}
+
 	
 	@Override
 	protected void formOK(UserRequest ureq) {
@@ -592,14 +511,6 @@ class VarForm extends FormBasicController {
 	protected boolean validateFormLogic(UserRequest ureq) {
 		boolean allOk = true;
 
-		heightEl.clearError();
-		if(isRawContent()) {
-			String height = getHeightValue();
-			if(!StringHelper.containsNonWhitespace(height) || ScormEditController.CONFIG_HEIGHT_AUTO.equals(height)) {
-				allOk &= false;
-				heightEl.setErrorKey("rawcontent.height.error", null);
-			}	
-		}
 		return allOk && super.validateFormLogic(ureq);
 	}
 
@@ -623,31 +534,6 @@ class VarForm extends FormBasicController {
 		closeOnFinishEl = uifactory.addCheckboxesVertical("closeonfinish", "closeonfinish.label", formLayout, new String[]{"closeonfinish"}, new String[]{null}, null, 1);
 		closeOnFinishEl.select("closeonfinish", closeOnFinish);
 
-		rawContentEl = uifactory.addCheckboxesVertical("rawcontent", "rawcontent.label", formLayout, new String[]{"rawcontent"}, new String[]{null}, null, 1);
-		rawContentEl.select("rawcontent", rawContent);
-		
-		heightEl = uifactory.addDropdownSingleselect("height", "height.label", formLayout, keys, values, null);
-		if (Arrays.asList(keys).contains(height)) {
-			heightEl.select(height, true);
-		} else {
-			heightEl.select(ScormEditController.CONFIG_HEIGHT_AUTO, true);
-		}
-
-		encodingContentEl = uifactory.addDropdownSingleselect("encoContent", "encoding.content", formLayout, encodingContentKeys, encodingContentValues, null);
-		if (Arrays.asList(encodingContentKeys).contains(encodingContent)) {
-			encodingContentEl.select(encodingContent, true);
-		} else {
-			encodingContentEl.select(NodeEditController.CONFIG_CONTENT_ENCODING_AUTO, true);
-		}
-		
-		encodingJSEl = uifactory.addDropdownSingleselect("encoJS", "encoding.js", formLayout, encodingJSKeys, encodingJSValues, null);
-		if (Arrays.asList(encodingJSKeys).contains(encodingJS)) {
-			encodingJSEl.select(encodingJS, true);
-		} else {
-			encodingJSEl.select(NodeEditController.CONFIG_JS_ENCODING_AUTO, true);
-		}
-		
-
 		isAssessableEl = uifactory.addRadiosVertical("isassessable", "assessable.label", formLayout, assessableKeys, assessableValues);
 		if(ScormEditController.CONFIG_ASSESSABLE_TYPE_SCORE.equals(assessableType)) {
 			isAssessableEl.select(assessableKeys[1], true);
diff --git a/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java b/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java
index 6a971ccd89821b912a4654f57906bbc5ec53e9ca..118114bd0290b172ec32f5d81061bee4d8e938ce 100644
--- a/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java
+++ b/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java
@@ -40,6 +40,7 @@ import org.olat.core.gui.control.ControllerEventListener;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.logging.AssertException;
 import org.olat.core.util.CodeHelper;
 import org.olat.core.util.event.GenericEventListener;
@@ -58,6 +59,7 @@ import org.olat.modules.scorm.ScormAPIandDisplayController;
 import org.olat.modules.scorm.ScormCPManifestTreeModel;
 import org.olat.modules.scorm.ScormConstants;
 import org.olat.modules.scorm.ScormMainManager;
+import org.olat.modules.scorm.ScormPackageConfig;
 import org.olat.repository.RepositoryEntry;
 import org.olat.util.logging.activity.LoggingResourceable;
 
@@ -300,22 +302,16 @@ public class ScormRunController extends BasicController implements ScormAPICallb
 		// configure some display options
 		boolean showNavButtons = config.getBooleanSafe(ScormEditController.CONFIG_SHOWNAVBUTTONS, true);
 		scormDispC.showNavButtons(showNavButtons);
-		boolean rawContent = config.getBooleanSafe(ScormEditController.CONFIG_RAW_CONTENT, true);
-		scormDispC.setRawContent(rawContent);
-		String height = (String) config.get(ScormEditController.CONFIG_HEIGHT);
-		if (!height.equals(ScormEditController.CONFIG_HEIGHT_AUTO)) {
-			scormDispC.setHeightPX(Integer.parseInt(height));
-		} else if(config.getBooleanSafe(ScormEditController.CONFIG_RAW_CONTENT, true)) {
-			//height auto but raw content set -> set default
-			scormDispC.setHeightPX(680);
-		}
-		String contentEncoding = (String) config.get(NodeEditController.CONFIG_CONTENT_ENCODING);
-		if (!contentEncoding.equals(NodeEditController.CONFIG_CONTENT_ENCODING_AUTO)) {
-			scormDispC.setContentEncoding(contentEncoding);
+		DeliveryOptions deliveryOptions = (DeliveryOptions)config.get(ScormEditController.CONFIG_DELIVERY_OPTIONS);
+		if(deliveryOptions != null && deliveryOptions.getInherit() != null && deliveryOptions.getInherit().booleanValue()) {
+			ScormPackageConfig pConfig = ScormMainManager.getInstance().getScormPackageConfig(cpRoot);
+			deliveryOptions = (pConfig == null ? null : pConfig.getDeliveryOptions());
 		}
-		String jsEncoding = (String) config.get(NodeEditController.CONFIG_JS_ENCODING);
-		if (!jsEncoding.equals(NodeEditController.CONFIG_JS_ENCODING_AUTO)) {
-			scormDispC.setJSEncoding(jsEncoding);
+		
+		if(deliveryOptions == null) {
+			scormDispC.setHeightPX(680);
+		} else {
+			scormDispC.setDeliveryOptions(deliveryOptions);
 		}
 		listenTo(scormDispC);
 		// the scormDispC activates itself
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ar.properties
index b726f4301805db6d5f1fa09a3bb9b8eeafa11fb5..8290668af3c1de6d8ca5da3592dce41197000e43 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ar.properties
@@ -41,13 +41,12 @@ form.scormmode.nocredit=\u0644\u0627 \u062A\u0648\u062C\u062F \u062F\u0631\u062C
 form.scormmode.normal=\u0639\u0627\u062F\u0649
 header=\u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u062A\u0639\u0644\u064A\u0645 \u0627\u0633\u0643\u0648\u0631\u0645
 headerform=\u0625\u0639\u062F\u0627\u062F\u0627\u062A
-height.auto=\u062A\u0644\u0642\u0627\u0626\u0649
-height.label=\u0639\u0631\u0636 \u0627\u0644\u0627\u0631\u062A\u0641\u0627\u0639
 help.hover.scorm-filename=\u0645\u0633\u0627\u0639\u062F\u0629 \u0641\u0649 \u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u062A\u0639\u0644\u064A\u0645 \u0627\u0633\u0643\u0648\u0631\u0645
 help.hover.scorm-settings-filename=\u0645\u0633\u0627\u0639\u062F\u0629 \u0628\u0634\u0623\u0646 \u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0633\u0643\u0648\u0631\u0645
 no.cp.chosen=<i>\u0644\u0645 \u064A\u062A\u0645 \u0627\u062E\u062A\u064A\u0627\u0631 \u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u062A\u0639\u0644\u064A\u0645 \u0627\u0633\u0643\u0648\u0631\u0645</i>
 pane.tab.accessibility=\u0648\u0635\u0648\u0644
 pane.tab.cpconfig=\u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u062A\u0639\u0644\u064A\u0645
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=\u063A\u064A\u0631 \u0646\u0627\u062C\u062D
 passed.yes=\u0646\u0627\u062C\u062D
 passed.yourpassed=\u0627\u0644\u062D\u0627\u0644\u0629
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_bg.properties
index 313c40f1be7b2984cd9e901a9677294c14d11bdf..364c7aa2a5634f88e5f6d34d00498d47d1d18746 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_bg.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_bg.properties
@@ -40,13 +40,12 @@ form.scormmode.nocredit=\u041D\u044F\u043C\u0430 \u0440\u0435\u0437\u0443\u043B\
 form.scormmode.normal=\u041D\u043E\u0440\u043C\u0430\u043B\u0435\u043D
 header=\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 SCORM \u0443\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435
 headerform=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
-height.auto=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u043D
-height.label=\u041F\u043E\u043A\u0430\u0436\u0435\u0442\u0435 \u0432\u0438\u0441\u043E\u0447\u0438\u043D\u0430
 help.hover.scorm-filename=\u041F\u043E\u043C\u043E\u0449 \u0437\u0430 \u0438\u0437\u0431\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 SCORM \u0443\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435
 help.hover.scorm-settings-filename=\u041F\u043E\u043C\u043E\u0449 \u0437\u0430 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u044F\u043D\u0435 \u043D\u0430 SCORM \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
 no.cp.chosen=<i>\u041D\u0435 \u0435 \u0438\u0437\u0431\u0440\u0430\u043D\u043E SCORM \u0443\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435</i>
 pane.tab.accessibility=\u0414\u043E\u0441\u0442\u044A\u043F
 pane.tab.cpconfig=\u0423\u0447\u0435\u0431\u043D\u043E \u0441\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=\u041D\u0435\u0438\u0437\u0434\u044A\u0440\u0436\u0430\u043B
 passed.yes=\u0418\u0437\u0434\u044A\u0440\u0436\u0430\u043B
 passed.yourpassed=\u0421\u0442\u0430\u0442\u0443\u0442
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_cs.properties
index 47925247f30757575a41073bf28ca8eba6a62a1f..9b4aec76a1c0016e9542479c5a8ac1a2d81d11cf 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_cs.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_cs.properties
@@ -33,13 +33,12 @@ form.scormmode.nocredit=Bez v\u00FDsledku
 form.scormmode.normal=Normaln\u00ED 
 header=Vybrat studijn\u00ED materi\u00E1l SCORM
 headerform=Nastaven\u00ED
-height.auto=Automaticky
-height.label=Zobrazit v\u00FD\u0161ku
 help.hover.scorm-filename=N\u00E1pov\u011Bda pro v\u00FDb\u011Br studijn\u00EDho materi\u00E1lu SCORM
 help.hover.scorm-settings-filename=N\u00E1pov\u011Bda pro nastaven\u00ED SCORMu
 no.cp.chosen=<i>Z\u00E1dn\u00FD studijn\u00ED materi\u00E1l SCORM nebyl vybr\u00E1n</i>
 pane.tab.accessibility=P\u0159\u00EDstup
 pane.tab.cpconfig=Studijn\u00ED materi\u00E1l
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Ne\u00FAsp\u011Bch
 passed.yes=\u00DAsp\u011Bch
 passed.yourpassed=Stav
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_da.properties
index ee5541b9cfa887459dff9be4b63485b5114eb90d..25bf8f8e77c6d2a6d5d27e58866d7657692f76a6 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_da.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_da.properties
@@ -38,6 +38,7 @@ help.hover.scorm-settings-filename=Hj\u00E6lp til s\u00E6tte SCORM indstillinger
 no.cp.chosen=<i>Ingen SCORM l\u00E6ringsindhold valgt</i>
 pane.tab.accessibility=Adgange
 pane.tab.cpconfig=L\u00E6ringsindhold
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Ikke best\u00E5et
 passed.yes=Best\u00E5et
 passed.yourpassed=Status
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_de.properties
index 26060e76c95d54815ea68423b33d8d922de2bc87..cf260611ff11dcfac4b5316b95faf257f93946c3 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_de.properties
@@ -42,12 +42,6 @@ command.showscorm=SCORM-Lerninhalt anzeigen
 condition.accessibility.title=Zugang
 cutvalue.label=Notwendige Punktzahl f\u00FCr 'bestanden'
 cutvalue.validation=Geben Sie eine Ganzzahl ein
-rawcontent.height.error=Wenn Sie "$\:rawcontent.label" ausgew\u00E4hlt haben, m\u00FCssen Sie die H\u00F6he der Anzeigefl\u00E4che setzen.
-rawcontent.label=Standardmodus
-encoding.content=Zeichensatz Inhalt
-encoding.js=Zeichensatz Javascript
-encoding.auto=Automatisch
-encoding.same=Gleich wie Inhalt
 error.cprepoentrymissing=Der SCORM-Lerninhalt, den Sie anzeigen m\u00F6chten, wurde in der Zwischenzeit in der Ablage der Lernressourcen gel\u00F6scht 
 error.launch=SCORM-Lerninhalt konnte nicht gestartet werden.
 error.noreference.long=F\u00FCr "{0}" muss in der Konfiguration ein SCORM-Lerninhalt im Tab "Lerninhalt" ausgew\u00E4hlt werden.
@@ -60,13 +54,12 @@ header=SCORM-Lerninhalt ausw\u00E4hlen
 headerform=Einstellungen
 fullwindow.label=Nur Modul anzeigen, LMS ausblenden
 closeonfinish.label=Modul automatisch schliessen wenn beendet
-height.auto=Automatisch
-height.label=H\u00F6he Anzeigefl\u00E4che
 help.hover.scorm-filename=Hilfe zur Auswahl eines SCORM-Lerninhaltes
 help.hover.scorm-settings-filename=Hilfe zu den SCORM-Einstellungen
 no.cp.chosen=<i>Kein SCORM-Lerninhalt ausgew\u00E4hlt</i>
 pane.tab.accessibility=Zugang
 pane.tab.cpconfig=Lerninhalt
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Nicht bestanden
 passed.yes=Bestanden
 passed.yourpassed=Status
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_el.properties
index 1ca2caa0adb43ccb0b0c68a337ac309623d52fc4..47235fd10498312558d9ab2d97ff696c908220c5 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_el.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_el.properties
@@ -31,10 +31,6 @@ command.showscorm=\u03A0\u03C1\u03BF\u03B2\u03BF\u03BB\u03AE \u03C0\u03B5\u03C1\
 condition.accessibility.title=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7
 cutvalue.label=\u03A7\u03C1\u03B5\u03B9\u03AC\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03B2\u03B1\u03B8\u03BC\u03BF\u03AF \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03AC\u03C3\u03B5\u03B9
 cutvalue.validation=\u03A0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03CE \u03B5\u03B9\u03C3\u03AC\u03B3\u03B5\u03C4\u03B5 \u03B1\u03BA\u03AD\u03C1\u03B1\u03B9\u03BF \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC
-encoding.auto=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B1
-encoding.content=\u03A3\u03AD\u03C4 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03C9\u03BD \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5
-encoding.js=\u03A3\u03AD\u03C4 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03AE\u03C1\u03C9\u03BD Javascript
-encoding.same=\u038A\u03B4\u03B9\u03BF \u03BC\u03B5 \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF
 error.cprepoentrymissing=\u03A4\u03BF \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 SCORM \u03AD\u03C7\u03B5\u03B9 \u03B4\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03B5\u03AF \u03B1\u03C0\u03CC \u03C4\u03BF \u03C6\u03AC\u03BA\u03B5\u03BB\u03BF \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7\u03C2 \u03C4\u03C9\u03BD \u03C0\u03CC\u03C1\u03C9\u03BD \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2.
 error.launch=\u039C\u03B7 \u03B4\u03C5\u03BD\u03B1\u03C4\u03AE \u03B7 \u03B5\u03BA\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 SCORM.
 error.noreference.long=\u0393\u03B9\u03B1 \u03C4\u03BF "{0}" \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03C0\u03B9\u03BB\u03AD\u03BE\u03B5\u03C4\u03B5 \u03AD\u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 SCORM \u03C3\u03C4\u03B7\u03BD \u03BA\u03B1\u03C1\u03C4\u03AD\u03BB\u03B1 "\u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2" \u03C3\u03C4\u03BF \u03C4\u03BC\u03AE\u03BC\u03B1 \u03B4\u03B9\u03B1\u03BC\u03CC\u03C1\u03C6\u03C9\u03C3\u03B7\u03C2.
@@ -45,13 +41,12 @@ form.scormmode.nocredit=\u03A7\u03C9\u03C1\u03AF\u03C2 \u03B2\u03B1\u03B8\u03BC\
 form.scormmode.normal=\u039A\u03B1\u03BD\u03BF\u03BD\u03B9\u03BA\u03AE
 header=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03BF\u03BC\u03AD\u03BD\u03BF\u03C5 \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 \u03C4\u03CD\u03C0\u03BF\u03C5 SCORM
 headerform=\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2
-height.auto=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03BF
-height.label=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03CD\u03C8\u03BF\u03C5\u03C2
 help.hover.scorm-filename=\u0392\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1 \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF\u03C5 \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 SCORM
 help.hover.scorm-settings-filename=\u0392\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1 \u03B3\u03B9\u03B1 \u03C1\u03CD\u03B8\u03BC\u03B9\u03C3\u03B7 \u03C4\u03C9\u03BD \u03C1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03C9\u03BD SCORM
 no.cp.chosen=<i>\u0394\u03B5\u03BD \u03AD\u03C7\u03B5\u03B9 \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03B5\u03AF \u03C0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2 SCORM</i>
 pane.tab.accessibility=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7
 pane.tab.cpconfig=\u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03BC\u03AC\u03B8\u03B7\u03C3\u03B7\u03C2
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=\u0391\u03C0\u03BF\u03C4\u03C5\u03C7\u03AE\u03C2
 passed.yes=\u0395\u03C0\u03B9\u03C4\u03C5\u03C7\u03AE\u03C2
 passed.yourpassed=\u039A\u03B1\u03C4\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_en.properties
index fdfd76f51bb067047646c99ccfcfae5a6f89350e..c625f90dba0bec48b632fd20222aded91a065084 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_en.properties
@@ -48,10 +48,6 @@ command.showscorm=Show SCORM learning content
 condition.accessibility.title=Access
 cutvalue.label=Score needed to pass
 cutvalue.validation=Please enter an integer
-encoding.auto=Automatically
-encoding.content=Content character set
-encoding.js=Javascript character set
-encoding.same=Same as content
 error.cprepoentrymissing=This SCORM learning content was deleted in the meantime within the storage folder of learning resources.
 error.launch=Unable to start SCORM learning content.
 error.noreference.long=For "{0}" you have to select a SCORM learning content in the tab "Learning content" within the configuration section.
@@ -63,18 +59,15 @@ form.scormmode.normal=Normal
 fullwindow.label=Display only module, hide LMS
 header=Choose SCORM learning content
 headerform=Settings
-height.auto=Automatic
-height.label=Display height
 help.hover.scorm-filename=Help to select a SCORM learning content
 help.hover.scorm-settings-filename=Help to set SCORM settings
 no.cp.chosen=<i>No SCORM learning content selected</i>
 pane.tab.accessibility=Access
 pane.tab.cpconfig=Learning content
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Failed
 passed.yes=Passed
 passed.yourpassed=Status
-rawcontent.height.error=If "$\:rawcontent.label" is set, you need to specify the height of the window
-rawcontent.label=Standard mode
 score.noscoreinfoyet=There is no score available for this SCORM object since you have never used it before.
 score.title=Score
 score.yourscore=Score achieved
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_es.properties
index c65062f58c888ab3ab89e04bbb14498bdabea0a3..3bb86ab22d82fb348601892d26a8a63110ef11ab 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_es.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_es.properties
@@ -40,13 +40,12 @@ form.scormmode.nocredit=Sin puntuaci\u00F3n
 form.scormmode.normal=Normal
 header=Elige el contenido did\u00E1ctico SCORM
 headerform=Preferencias/Opciones
-height.auto=Autom\u00E1tico
-height.label=Motrar altura
 help.hover.scorm-filename=Ayuda para seleccionar un contenido did\u00E1ctico SCORM
 help.hover.scorm-settings-filename=Ayuda para ajustar el contenido did\u00E1ctico SCORM
 no.cp.chosen=<i>No se ha seleccionado el contenido did\u00E1ctico SCORM </i>
 pane.tab.accessibility=Acceso
 pane.tab.cpconfig=Contenido did\u00E1ctico
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=No aprobado
 passed.yes=Aprobado
 passed.yourpassed=Estado
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fa.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fa.properties
index c83ac536f7a38206177696cbfe94916c2b897025..18104e93d63e450315e160eb9a45890d8d5bed43 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fa.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fa.properties
@@ -23,3 +23,4 @@ help.hover.scorm-filename=Help to select a SCORM learning content
 no.cp.chosen=<i>No SCORM learning content selected</i>
 pane.tab.accessibility=\u062F\u0633\u062A\u0631\u0633\u06CC
 pane.tab.cpconfig=Learning content
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties
index 908480beb805a50ffb26b695b6ce15ce4e519b8b..0bdc0bd98fb9a62cbed242484c5643faf9efd6dd 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties
@@ -44,10 +44,6 @@ command.showscorm=Afficher contenu didactique SCORM
 condition.accessibility.title=Acc\u00E8s
 cutvalue.label=Nombre de points n\u00E9cessaire pour 'R\u00E9ussi'
 cutvalue.validation=Introduisez un nombre entier
-encoding.auto=Automatiquement
-encoding.content=Set de caract\u00E8res pour le contenu
-encoding.js=Set de caract\u00E8res Javascript
-encoding.same=Identique au contenu
 error.cprepoentrymissing=Le contenu didactique SCORM que vous voulez afficher a \u00E9t\u00E9 effac\u00E9 entre-temps du dossier des contenus didactiques.
 error.launch=Contenu didactique SCORM n'a pas pu \u00EAtre lanc\u00E9.
 error.noreference.long=Pour "{0}", il faut s\u00E9lectionner, dans la configuration, un contenu didactique SCORM dans l'onglet "contenu didactique".
@@ -59,18 +55,15 @@ form.scormmode.normal=normal
 fullwindow.label=Montr\u00E9 le module seul, masqu\u00E9 le LMS
 header=S\u00E9lectionner contenu didactique SCORM
 headerform=R\u00E8glages
-height.auto=Automatiquement
-height.label=Hauteur du champ d'affichage
 help.hover.scorm-filename=Aide \u00E0 la s\u00E9lection d'un contenu didactique SCORM
 help.hover.scorm-settings-filename=Aide aux r\u00E9glages de SCORM
 no.cp.chosen=<i>Aucun contenu didactique SCORM s\u00E9lectionn\u00E9</i>
 pane.tab.accessibility=Acc\u00E8s
 pane.tab.cpconfig=Contenu didactique
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Pas r\u00E9ussi
 passed.yes=R\u00E9ussi
 passed.yourpassed=Statut
-rawcontent.height.error=Si vous avez s\u00E9lectionn\u00E9 "$\:rawcontent.label", vous devez choisir une hauteur de champ d'affichage.
-rawcontent.label=Contenu brut
 score.noscoreinfoyet=Il n'y a pas d'indications de poinst pour cet objet SCORM, car vous ne l'avez encore jamais effectu\u00E9.
 score.title=Points
 score.yourscore=Nombre de points obtenus
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_it.properties
index dfb251fe323421260193d4d9258e9fdc6a8888d5..338bc1d57b49d52822baf7083b28dd09ed2bbb6d 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_it.properties
@@ -33,10 +33,6 @@ command.showscorm=Mostrare contenuto didattico SCORM
 condition.accessibility.title=Accesso
 cutvalue.label=Punteggio richiesto per 'Superato'
 cutvalue.validation=Immetta un numero intero
-encoding.auto=Automaticamente
-encoding.content=Set di caratteri per il contenuto
-encoding.js=Set di caratteri Javascript
-encoding.same=Uguale al contenuto
 error.cprepoentrymissing=Nel frattempo, il contenuto didattico SCORM che desidera visualizzare \u00E8 stato eliminato dal deposito delle risorse didattiche.
 error.launch=Risulta impossibile avviare il contenuto didattico SCORM.
 error.noreference.long=Per "{0}", un contenuto didattico SCORM deve venire selezionato nella scheda "Contenuto didattico".
@@ -47,13 +43,12 @@ form.scormmode.nocredit=Nessuna assegnazione di punti
 form.scormmode.normal=normale
 header=Selezione del contenuto didattico SCORM
 headerform=Preferenze
-height.auto=Automatica
-height.label=Altezza area visibile
 help.hover.scorm-filename=Aiuto per la selezione di un contenuto didattico SCORM
 help.hover.scorm-settings-filename=Aiuto per le preferenze SCORM
 no.cp.chosen=<i>Nessun contenuto didattico SCORM selezionato</i>
 pane.tab.accessibility=Accesso
 pane.tab.cpconfig=Contenuto didattico
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Non superato
 passed.yes=Superato
 passed.yourpassed=Stato
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_jp.properties
index 2e937893ff710a4ad13dd9a5ea365d318b837f16..2759d30b7ee3564d9d633e559124a118a1197d49 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_jp.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_jp.properties
@@ -32,10 +32,6 @@ command.showscorm=SCORM\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8868\u7
 condition.accessibility.title=\u30A2\u30AF\u30BB\u30B9
 cutvalue.label=\u5408\u683C\u70B9
 cutvalue.validation=\u6574\u6570\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002
-encoding.auto=\u81EA\u52D5
-encoding.content=\u30B3\u30F3\u30C6\u30F3\u30C4\u6587\u5B57\u30BB\u30C3\u30C8
-encoding.js=Java\u30B9\u30AF\u30EA\u30D7\u30C8\u6587\u5B57\u30BB\u30C3\u30C8
-encoding.same=\u30B3\u30F3\u30C6\u30F3\u30C4\u3068\u540C\u3058
 error.cprepoentrymissing=\u3053\u306ESCORM\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u306F\u3001\u5B66\u7FD2\u30EA\u30BD\u30FC\u30B9\u306E\u30B9\u30C8\u30EC\u30FC\u30B8\u30D5\u30A9\u30EB\u30C0\u3088\u308A\u524A\u9664\u3055\u308C\u307E\u3057\u305F\u3002
 error.launch=SCORM\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u30B9\u30BF\u30FC\u30C8\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3002
 error.noreference.long=\u300C {0} \u300D\u306E\u305F\u3081\u306B\u3001\u3042\u306A\u305F\u306F\u8A2D\u5B9A\u30BB\u30AF\u30B7\u30E7\u30F3\u5185\u306E\u300C\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u300D\u30BF\u30D6\u3088\u308ASCORM\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u9078\u629E\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
@@ -46,13 +42,12 @@ form.scormmode.nocredit=\u8A55\u70B9\u306A\u3057
 form.scormmode.normal=\u30CE\u30FC\u30DE\u30EB
 header=SCORM\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u9078\u629E\u3059\u308B
 headerform=\u8A2D\u5B9A
-height.auto=\u81EA\u52D5
-height.label=\u8868\u793A\u9AD8
 help.hover.scorm-filename=SCORM\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u9078\u629E\u306B\u95A2\u3059\u308B\u30D8\u30EB\u30D7
 help.hover.scorm-settings-filename=SCORM\u8A2D\u5B9A\u306B\u95A2\u3059\u308B\u30D8\u30EB\u30D7
 no.cp.chosen=SCORM\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4\u306F\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
 pane.tab.accessibility=\u30A2\u30AF\u30BB\u30B9
 pane.tab.cpconfig=\u5B66\u7FD2\u30B3\u30F3\u30C6\u30F3\u30C4
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=\u4E0D\u5408\u683C
 passed.yes=\u5408\u683C
 passed.yourpassed=\u30B9\u30C6\u30FC\u30BF\u30B9
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_lt.properties
index f38bba54acbfc27bd88e28257565e1a977234b49..e61f81321742345409ed856803682069e19a1746 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_lt.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_lt.properties
@@ -31,3 +31,4 @@ help.hover.scorm-filename=Padeda pa\u017Eym\u0117ti SCORM mokymosi turin\u012F
 no.cp.chosen=<i>N\u0117ra pa\u017Eym\u0117tas SCORM mokymosi turinys</i>
 pane.tab.accessibility=Prieiga
 pane.tab.cpconfig=Mokymosi turinys
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_nl_NL.properties
index 6b82aaa0c0dc797e0f625482eefa79148201ad15..019a580cda399dbf99a3b7c574c87ef8a3b04650 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_nl_NL.properties
@@ -33,10 +33,6 @@ command.showscorm=Toon SCORM leerinhoud
 condition.accessibility.title=Toegang
 cutvalue.label=Score nodig om te slagen
 cutvalue.validation=Gelieve een geheel getal in te geven
-encoding.auto=Automatisch
-encoding.content=Inhoud tekenset
-encoding.js=Javascript tekenset
-encoding.same=Dezelfde als inhoud
 error.cprepoentrymissing=Deze SCORM leerinhoud werd in de tussentijd verwijderd uit de bewaarmap van de leermiddelen.
 error.launch=Niet in staat om SCORM leerinhoud te starten.
 error.noreference.long=Voor "{0}" moet u een SCORM leerinhoud selecteren in de tab "Leerinhoud" binnen de configuratie sectie.
@@ -47,13 +43,12 @@ form.scormmode.nocredit=Geen scoring
 form.scormmode.normal=Normaal
 header=Kies SCORM leerinhoud
 headerform=Instellingen
-height.auto=Automatisch
-height.label=Toon hoogte
 help.hover.scorm-filename=Help om een SCORM leerinhoud te selecteren
 help.hover.scorm-settings-filename=Help om SCORM instellingen in te stellen
 no.cp.chosen=<i>Geen SCORM inhoud geselecteerd</i>
 pane.tab.accessibility=Toegang
 pane.tab.cpconfig=Leerinhoud
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Niet geslaagd
 passed.yes=Geslaagd
 passed.yourpassed=Status
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pl.properties
index 00f19fec9a782acbad8a561d89ae9a33b90d7e6e..37eae56ba146b4d05373d7c07de5c950480d3473 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pl.properties
@@ -31,10 +31,6 @@ command.showscorm=Poka\u017C zawarto\u015B\u0107 edukacyjn\u0105 SCORM
 condition.accessibility.title=Dost\u0119p
 cutvalue.label=Liczba punkt\u00F3w wymagana do zaliczenia
 cutvalue.validation=Wprowad\u017A liczb\u0119 ca\u0142kowit\u0105
-encoding.auto=Automatycznie
-encoding.content=Kodowanie znak\u00F3w zawarto\u015Bci
-encoding.js=Kodowanie znak\u00F3w Javascript
-encoding.same=Tak samo, jak zawarto\u015B\u0107
 error.cprepoentrymissing=Ta zawarto\u015B\u0107 edukacyjn\u0105 SCORM zosta\u0142a w mi\u0119dzyczasie usuni\u0119ta z folderu z zasobami edukacyjnymi.
 error.launch=Nie uda\u0142o si\u0119 uruchomi\u0107 zawarto\u015Bci edukacyjnej SCORM.
 error.noreference.long=Dla"{0}" musisz wybra\u0107 zawarto\u015B\u0107 edukacyjn\u0105 SCORM w zak\u0142adce "Zawarto\u015B\u0107 edukacyjna" wewn\u0105trz sekcji konfiguracji.
@@ -45,13 +41,12 @@ form.scormmode.nocredit=Bez punkt\u00F3w
 form.scormmode.normal=Normalny
 header=Wybierz zawarto\u015B\u0107 edukacyjn\u0105 SCORM
 headerform=Ustawienia
-height.auto=Automatycznie
-height.label=Wy\u015Bwietl wysoko\u015B\u0107
 help.hover.scorm-filename=Pomoc do\: zawarto\u015B\u0107 edukacyjn\u0105 SCORM
 help.hover.scorm-settings-filename=Pomoc do\: ustawienia zawarto\u015Bci edukacyjnej SCORM
 no.cp.chosen=<i>Nie wybrano zawarto\u015Bci edukacyjnej SCORM</i>
 pane.tab.accessibility=Dost\u0119p
 pane.tab.cpconfig=Zawarto\u015B\u0107 edukacyjna
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Nie zaliczono
 passed.yes=Zaliczono
 passed.yourpassed=Status
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_BR.properties
index c150db563a0bcbea2c7658175a1920c3526c50dc..66ac5632767b7d29270147849c57738d1a091dd2 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_BR.properties
@@ -45,10 +45,6 @@ command.showscorm=Exibir conte\u00FAdo
 condition.accessibility.title=Acesso
 cutvalue.label=Pontua\u00E7\u00E3o necess\u00E1ria para passar
 cutvalue.validation=Favor inserir um inteiro
-encoding.auto=Automaticamente
-encoding.content=Caractere de conte\u00FAdo definido
-encoding.js=Caractere do Javascript definido
-encoding.same=Mesmo que conte\u00FAdo
 error.cprepoentrymissing=Este m\u00F3dulo SCORM foi apagado neste meio tempo da pasta de armazenamento de recursos did\u00E1ticos.
 error.launch=N\u00E3o \u00E9 poss\u00EDvel executar o m\u00F3dulo SCORM
 error.noreference.long=Para "{0}" voc\u00EA tem que selecionar um m\u00F3dulo SCORM no guia "M\u00F3dulo did\u00E1tico" dentro da sess\u00E3o de configura\u00E7\u00E3o.
@@ -60,18 +56,15 @@ form.scormmode.normal=Normal
 fullwindow.label=Mostrar s\u00F3 o m\u00F3dulo, ocultar LMS
 header=Selecionar m\u00F3dulo SCORM
 headerform=Configura\u00E7\u00F5es
-height.auto=Autom\u00E1tico
-height.label=Mostrar altura
 help.hover.scorm-filename=Ajuda para selecionar um m\u00F3dulo SCORM 
 help.hover.scorm-settings-filename=Ajuda para configurar par\u00E2metros SCORM
 no.cp.chosen=<i>Nenhum m\u00F3dulo SCORM selecionado</i>
 pane.tab.accessibility=Acesso
 pane.tab.cpconfig=M\u00F3dulo did\u00E1tico
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=N\u00E3o passou
 passed.yes=Passou
 passed.yourpassed=Status
-rawcontent.height.error=Se "$\:rawcontent.label" est\u00E1 selecionado, voc\u00EA precisa especificar a altura da janela
-rawcontent.label=Conte\u00FAdo bruto
 score.noscoreinfoyet=N\u00E3o h\u00E1 pontua\u00E7\u00E3o para este objeto SCORM pois n\u00E3o ocorreram tentativas.
 score.title=Pontos
 score.yourscore=pontua\u00E7\u00E3o atingida
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_PT.properties
index bfba70a5d71f6f8973fa862b4372a3936ac42ea9..7e4bcab84375ca4abe6e19165c7749c5ba9864b3 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_PT.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_pt_PT.properties
@@ -38,6 +38,7 @@ help.hover.scorm-settings-filename=Ajuda para configurar par\u00E2metros SCORM
 no.cp.chosen=<i>Nenhum m\u00F3dulo SCORM selecionado</i>
 pane.tab.accessibility=Acesso
 pane.tab.cpconfig=M\u00F3dulo did\u00E1tico
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=N\u00E3o passou
 passed.yes=Passou
 passed.yourpassed=Status
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ru.properties
index 8f3f9a26e69a988345970b30686369b3952e5ec2..2966c7cf414fed607f3f5a3e57e12085cffcf921 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ru.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_ru.properties
@@ -29,13 +29,12 @@ form.scormmode.nocredit=\u0411\u0435\u0437 \u043F\u0440\u043E\u0441\u0442\u0430\
 form.scormmode.normal=\u041D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E 
 header=\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0443\u0447\u0435\u0431\u043D\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435 SCORM
 headerform=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
-height.auto=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u0438
-height.label=\u0412\u044B\u0441\u043E\u0442\u0430 \u043F\u0430\u043D\u0435\u043B\u0438 \u043F\u043E\u043A\u0430\u0437\u0430
 help.hover.scorm-filename=\u041F\u043E\u043C\u043E\u0449\u044C \u043F\u0440\u0438 \u0432\u044B\u0431\u043E\u0440\u0435 \u0443\u0447\u0435\u0431\u043D\u043E\u0433\u043E \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u044F SCORM
 help.hover.scorm-settings-filename=\u041F\u043E\u043C\u043E\u0449\u044C \u043A \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430\u043C SCORM
 no.cp.chosen=<i>\u0423\u0447\u0435\u0431\u043D\u043E\u0433\u043E \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u044F SCORM \u043D\u0435 \u0432\u044B\u0431\u0440\u0430\u043D\u043E</i>
 pane.tab.accessibility=\u0414\u043E\u0441\u0442\u0443\u043F
 pane.tab.cpconfig=\u0423\u0447\u0435\u0431\u043D\u043E\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=\u041D\u0435\u0443\u0434\u043E\u0432\u043B\u0435\u0442\u0432\u043E\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u043E
 passed.yes=\u0417\u0430\u0447\u0442\u0435\u043D\u043E
 passed.yourpassed=\u0421\u0442\u0430\u0442\u0443\u0441
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_sq.properties
index 9cbfb56654e2b41cfdf9804d89ce5314c9f7a5c3..40b202053c1731d789b624d55b63887b3f38f4c8 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_sq.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_sq.properties
@@ -38,6 +38,7 @@ help.hover.scorm-settings-filename=Ndihma p\u00EBr t\u00EB p\u00EBrcaktuar SCORM
 no.cp.chosen=<i>Nuk \u00EBsht\u00EB p\u00EBrzgjedhur materia m\u00EBsimi SCORM </i>
 pane.tab.accessibility=Qasshm\u00EBria
 pane.tab.cpconfig=Material m\u00EBsimi
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Nuk kaloi
 passed.yes=Kaloi
 passed.yourpassed=Gjendja
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_CN.properties
index 5890e2e28d1d5685b7baa79b877b7d98bbdce9e6..4128da48a192f90296772b15ed6fd841134c0025 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_CN.properties
@@ -31,9 +31,6 @@ command.showscorm=\u663E\u793ASCORM \u5B66\u4E60\u5185\u5BB9
 condition.accessibility.title=\u8BBF\u95EE
 cutvalue.label=\u5206\u6570\u7EBF
 cutvalue.validation=\u8BF7\u8F93\u5165\u4E00\u4E2A\u6574\u6570
-encoding.content=\u5185\u5BB9\u5B57\u7B26\u96C6
-encoding.js=Javascript\u5B57\u7B26\u96C6
-encoding.same=\u4E0E\u5185\u5BB9\u76F8\u540C
 error.cprepoentrymissing=\u8BE5SCORM \u5B66\u4E60\u5185\u5BB9\u540C\u65F6\u5DF2\u5728\u5B58\u50A8\u5939\u4E2D\u88AB\u5220\u9664.
 error.launch=\u65E0\u6CD5\u542F\u52A8SCORM \u5B66\u4E60\u5185\u5BB9
 error.noreference.long=\u4F60\u5FC5\u987B\u4E3A\u201C{0}\u201D\u5728\u914D\u7F6E\u90E8\u5206\u7684\u201C\u5B66\u4E60\u5185\u5BB9\u201D\u6807\u7B7E\u91CC\u9009\u62E9\u4E00\u4E2ASCORM \u5B66\u4E60\u5185\u5BB9
@@ -44,13 +41,12 @@ form.scormmode.nocredit=\u8DDF\u8E2A\u5B66\u4E60\u8F68\u8FF9\u6A21\u5F0F [\u4E0D
 form.scormmode.normal=\u8DDF\u8E2A\u5B66\u4E60\u8F68\u8FF9\u6A21\u5F0F [\u63D0\u4F9B\u6210\u7EE9\u7EDF\u8BA1\u548C\u80FD\u529B\u5206\u6790]
 header=\u9009\u62E9SCORM\u5B66\u4E60\u5185\u5BB9
 headerform=\u8BBE\u7F6E
-height.auto=\u81EA\u52A8
-height.label=\u663E\u793A\u9AD8\u5EA6
 help.hover.scorm-filename=\u5982\u4F55\u9009\u62E9\u4E00\u4E2ASCORM \u5B66\u4E60\u5185\u5BB9
 help.hover.scorm-settings-filename=\u5982\u4F55\u8BBE\u7F6Escorm\u5185\u5BB9
 no.cp.chosen=<i>\u672A\u9009\u62E9SCORM\u5B66\u4E60\u5185\u5BB9 </i>
 pane.tab.accessibility=\u8BBF\u95EE
 pane.tab.cpconfig=\u5B66\u4E60\u5185\u5BB9
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=\u672A\u901A\u8FC7
 passed.yes=\u5DF2\u901A\u8FC7
 passed.yourpassed=\u72B6\u6001
diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_TW.properties
index b2f7ee7fe81736fbcbe2f97d633af70be285d1af..a3f3a5d9266f2acee957e630e10dc5c00270d827 100644
--- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_TW.properties
+++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_zh_TW.properties
@@ -41,13 +41,12 @@ form.scormmode.nocredit=\u6C92\u6709\u8A08\u5206
 form.scormmode.normal=\u6B63\u5E38 
 header=\u9078\u53D6 SCORM \u5B78\u7FD2\u5167\u5BB9
 headerform=\u8A2D\u5B9A\u6A94
-height.auto=\u81EA\u52D5
-height.label=\u986F\u793A\u9AD8\u5EA6
 help.hover.scorm-filename=\u9078\u64C7\u4E00\u500B SCORM \u5B78\u7FD2\u5167\u5BB9\u7684\u8AAA\u660E
 help.hover.scorm-settings-filename=\u8A2D\u5B9A SCORM \u8A2D\u5B9A\u6A94\u7684\u8AAA\u660E
 no.cp.chosen=<i>\u6C92\u6709 SCORM \u5B78\u7FD2\u5167\u5BB9\u88AB\u9078\u53D6</i>
 pane.tab.accessibility=\u5B58\u53D6
 pane.tab.cpconfig=\u5B78\u7FD2\u5167\u5BB9
+pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=\u4E0D\u53CA\u683C
 passed.yes=\u53CA\u683C
 passed.yourpassed=\u72C0\u614B
diff --git a/src/main/java/org/olat/course/nodes/sp/SPCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/sp/SPCourseNodeConfiguration.java
index 302aa6a83e30376bac3ca21acfa2e8c3406238fa..9bca068b194800d2d3278f07b3e41ebd91a2c33e 100644
--- a/src/main/java/org/olat/course/nodes/sp/SPCourseNodeConfiguration.java
+++ b/src/main/java/org/olat/course/nodes/sp/SPCourseNodeConfiguration.java
@@ -25,10 +25,8 @@
 
 package org.olat.course.nodes.sp;
 
-import java.util.List;
 import java.util.Locale;
 
-import org.olat.core.extensions.ExtensionResource;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.util.Util;
 import org.olat.course.nodes.AbstractCourseNodeConfiguration;
@@ -76,36 +74,4 @@ public class SPCourseNodeConfiguration extends AbstractCourseNodeConfiguration i
 	public String getAlias() {
 		return "sp";
 	}
-
-	//
-	// OLATExtension interface implementations.
-	//
-
-	public String getName() {
-		return getAlias();
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionResources()
-	 */
-	public List getExtensionResources() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionCSS()
-	 */
-	public ExtensionResource getExtensionCSS() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#setURLBuilder(org.olat.core.gui.render.URLBuilder)
-	 */
-	public void setExtensionResourcesBaseURI(String ubi) {
-	// no need for the URLBuilder
-	}
-
 }
diff --git a/src/main/java/org/olat/course/nodes/sp/SPEditController.java b/src/main/java/org/olat/course/nodes/sp/SPEditController.java
index a9ea567302184eede32537d2b699fba6719138db..0415ad0ebc45315efcea23de97f27b314630dcb1 100644
--- a/src/main/java/org/olat/course/nodes/sp/SPEditController.java
+++ b/src/main/java/org/olat/course/nodes/sp/SPEditController.java
@@ -36,6 +36,8 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.ControllerEventListener;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptionsConfigurationController;
 import org.olat.core.gui.control.generic.tabbable.ActivateableTabbableDefaultController;
 import org.olat.course.ICourse;
 import org.olat.course.assessment.AssessmentHelper;
@@ -62,8 +64,10 @@ public class SPEditController extends ActivateableTabbableDefaultController impl
 
 	public static final String PANE_TAB_SPCONFIG = "pane.tab.spconfig";
 	private static final String PANE_TAB_ACCESSIBILITY = "pane.tab.accessibility";
+	private static final  String PANE_TAB_DELIVERYOPTIONS = "pane.tab.layout";
 	/** configuration key for the filename */
 	public static final String CONFIG_KEY_FILE = "file";
+	public static final String CONFIG_KEY_DELIVERYOPTIONS = "deliveryOptions";
 	/** configuration key: should relative links like ../otherfolder/my.css be allowed? **/
 	public static final String CONFIG_KEY_ALLOW_RELATIVE_LINKS = "allowRelativeLinks";
 
@@ -82,6 +86,7 @@ public class SPEditController extends ActivateableTabbableDefaultController impl
 
 	private ConditionEditController accessibilityCondContr;
 	private FileChooseCreateEditController fccecontr;
+	private DeliveryOptionsConfigurationController deliveryOptionsCtrl;
 	private TabbedPane myTabbedPane;
 
 	
@@ -106,6 +111,7 @@ public class SPEditController extends ActivateableTabbableDefaultController impl
 		config.remove("statefulMicroWeb");
 		String chosenFile = (String) config.get(CONFIG_KEY_FILE);
 		allowRelativeLinks  = moduleConfiguration.getBooleanEntry(CONFIG_KEY_ALLOW_RELATIVE_LINKS);
+
 		fccecontr = new LinkChooseCreateEditController(ureq, getWindowControl(), chosenFile, allowRelativeLinks, course.getCourseFolderContainer(), new CourseInternalLinkTreeModel(course.getEditorTreeModel()) );		
 		listenTo(fccecontr);
 		fccecontr.setAllFileSuffixesAllowed(true);
@@ -121,8 +127,11 @@ public class SPEditController extends ActivateableTabbableDefaultController impl
 		Condition accessCondition = courseNode.getPreConditionAccess();
 		accessibilityCondContr = new ConditionEditController(ureq, getWindowControl(), groupMgr, accessCondition,
 				"accessabilityConditionForm", AssessmentHelper.getAssessableNodes(editorModel, spCourseNode), euce);		
-		this.listenTo(accessibilityCondContr);
-		
+		listenTo(accessibilityCondContr);
+
+		DeliveryOptions deliveryOptions = (DeliveryOptions)config.get(CONFIG_KEY_DELIVERYOPTIONS);
+		deliveryOptionsCtrl = new DeliveryOptionsConfigurationController(ureq, getWindowControl(), deliveryOptions);
+		listenTo(deliveryOptionsCtrl);
 	}
 
 	/**
@@ -153,6 +162,13 @@ public class SPEditController extends ActivateableTabbableDefaultController impl
 				    moduleConfiguration.remove(CONFIG_KEY_FILE);
 				}
 				fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT);
+				if(fccecontr.isEditorEnabled()) {
+					if(!myTabbedPane.containsTab(deliveryOptionsCtrl.getInitialComponent())) {
+						myTabbedPane.addTab(translate(PANE_TAB_DELIVERYOPTIONS), deliveryOptionsCtrl.getInitialComponent());
+					}
+				} else {
+					myTabbedPane.removeTab(deliveryOptionsCtrl.getInitialComponent());
+				}
 			} else if (event == FileChooseCreateEditController.FILE_CONTENT_CHANGED_EVENT) {
 				fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT);
 			} else if (event == FileChooseCreateEditController.ALLOW_RELATIVE_LINKS_CHANGED_EVENT) {
@@ -160,6 +176,14 @@ public class SPEditController extends ActivateableTabbableDefaultController impl
 				courseNode.getModuleConfiguration().setBooleanEntry(CONFIG_KEY_ALLOW_RELATIVE_LINKS, allowRelativeLinks.booleanValue());
 				fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT);
 			}
+		} else if(source == deliveryOptionsCtrl) {
+			if(event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) {
+				DeliveryOptions config = deliveryOptionsCtrl.getDeliveryOptions();
+				if (config != null) {
+					moduleConfiguration.set(CONFIG_KEY_DELIVERYOPTIONS, config);
+					fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT);
+				}
+			}
 		}
 	}
 
@@ -170,6 +194,9 @@ public class SPEditController extends ActivateableTabbableDefaultController impl
 		myTabbedPane = tabbedPane;
 		tabbedPane.addTab(translate(PANE_TAB_ACCESSIBILITY), accessibilityCondContr.getWrappedDefaultAccessConditionVC(translate(NLS_CONDITION_ACCESSIBILITY_TITLE)));
 		tabbedPane.addTab(translate(PANE_TAB_SPCONFIG), myContent);
+		if(fccecontr != null && fccecontr.isEditorEnabled()) {
+			tabbedPane.addTab(translate(PANE_TAB_DELIVERYOPTIONS), deliveryOptionsCtrl.getInitialComponent());
+		}
 	}
 	
 	/**
diff --git a/src/main/java/org/olat/course/nodes/sp/SPPeekviewController.java b/src/main/java/org/olat/course/nodes/sp/SPPeekviewController.java
index 80880d46ab416f3ef932f5d2ef3351b32b5faac1..b33b1ce8c58f30e8f19b46bc051dab19e48950c7 100644
--- a/src/main/java/org/olat/course/nodes/sp/SPPeekviewController.java
+++ b/src/main/java/org/olat/course/nodes/sp/SPPeekviewController.java
@@ -33,6 +33,7 @@ import org.olat.core.gui.components.velocity.VelocityContainer;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSItem;
@@ -65,6 +66,7 @@ public class SPPeekviewController extends BasicController {
 		super(ureq, wControl);
 		// just display the page
 		String file = config.getStringValue(SPEditController.CONFIG_KEY_FILE);
+		DeliveryOptions deliveryOptions = (DeliveryOptions)config.get(SPEditController.CONFIG_KEY_DELIVERYOPTIONS);
 		Component resPanel = new Panel("empty"); // empty panel to use if no file could be found
 		if (file != null) {
 			String fileLC = file.toLowerCase();
@@ -72,8 +74,8 @@ public class SPPeekviewController extends BasicController {
 				// Render normal view but scaled down to 75%
 				SinglePageController spController =  new SinglePageController(ureq, wControl, 
 						userCourseEnv.getCourseEnvironment().getCourseFolderContainer(), 
-						file, null, 
-						config.getBooleanEntry(SPEditController.CONFIG_KEY_ALLOW_RELATIVE_LINKS), ores);		
+						file, null, config.getBooleanEntry(SPEditController.CONFIG_KEY_ALLOW_RELATIVE_LINKS),
+						ores, deliveryOptions);		
 				// but add scaling to fit preview into minimized space
 				spController.setScaleFactorAndHeight(0.75f, 400, true);
 				listenTo(spController);
diff --git a/src/main/java/org/olat/course/nodes/sp/SPRunController.java b/src/main/java/org/olat/course/nodes/sp/SPRunController.java
index 2beb5d45e5b86958491bf8f90383c967f5f261be..70f58254e5d03a8a052f04f21a6f6b2538777c47 100644
--- a/src/main/java/org/olat/course/nodes/sp/SPRunController.java
+++ b/src/main/java/org/olat/course/nodes/sp/SPRunController.java
@@ -25,8 +25,6 @@
 
 package org.olat.course.nodes.sp;
 
-import java.util.Map;
-
 import org.olat.core.commons.controllers.linkchooser.CustomLinkTreeModel;
 import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
 import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory;
@@ -44,12 +42,12 @@ import org.olat.core.gui.control.creator.ControllerCreator;
 import org.olat.core.gui.control.generic.clone.CloneController;
 import org.olat.core.gui.control.generic.clone.CloneLayoutControllerCreatorCallback;
 import org.olat.core.gui.control.generic.clone.CloneableController;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.logging.AssertException;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.course.CourseFactory;
-import org.olat.course.CourseModule;
 import org.olat.course.ICourse;
 import org.olat.course.groupsandrights.CourseGroupManager;
 import org.olat.course.groupsandrights.CourseRights;
@@ -74,8 +72,6 @@ import org.olat.util.logging.activity.LoggingResourceable;
  */
 public class SPRunController extends BasicController {
 	
-	private static final String KEY_CURRENT_URI = "cururi";
-	
 	private SPCourseNode courseNode;
 	private Panel main;
 	private SinglePageController spCtr;
@@ -160,12 +156,15 @@ public class SPRunController extends BasicController {
 		Boolean allowRelativeLinks = config.getBooleanEntry(SPEditController.CONFIG_KEY_ALLOW_RELATIVE_LINKS);
 		// create the possibility to float
 		OLATResourceable ores = OresHelper.createOLATResourceableInstance(ICourse.class, userCourseEnv.getCourseEnvironment().getCourseResourceableId());
-		spCtr = new SinglePageController(ureq, getWindowControl(), courseFolderContainer, fileName, null, allowRelativeLinks.booleanValue(), ores);
+
+		DeliveryOptions deliveryOptions = (DeliveryOptions)config.get(SPEditController.CONFIG_KEY_DELIVERYOPTIONS);
+		spCtr = new SinglePageController(ureq, getWindowControl(), courseFolderContainer, fileName, null,
+				allowRelativeLinks.booleanValue(), ores, deliveryOptions);
 		spCtr.setAllowDownload(true);
 		
 		// only for inline integration: register for controller event to forward a olatcmd to the course,
 		// and also to remember latest position in the script		
-		this.listenTo(spCtr);
+		listenTo(spCtr);
 		// enable edit mode if user has the according rights
 		if (hasEditRightsTo) {
 			spCtr.allowPageEditing();
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ar.properties
index edafa7cd7b9e9a15f7bc697f2854a00f6118e104..ed8326857c1d60b328c24cc8bcab8572a11c2790 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ar.properties
@@ -47,4 +47,5 @@ folder.displayname=\u0645\u062C\u0644\u062F \u0627\u0644\u062A\u062E\u0632\u064A
 header=\u0627\u062E\u062A\u064A\u0627\u0631 \u0635\u0641\u062D\u0629 \u0623\u062A\u0634 \u062A\u0649 \u0623\u0645 \u0623\u0644
 pane.tab.accessibility=\u0648\u0635\u0648\u0644
 pane.tab.spconfig=\u0645\u062D\u062A\u0648\u0649 \u0627\u0644\u0635\u0641\u062D\u0629
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=\u0627\u062E\u062A\u064A\u0627\u0631 \u0647\u0630\u0627 \u0627\u0644\u0645\u0644\u0641
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_bg.properties
index b7fde8d0eb6fa40fc4478e4b3a173ee63cb1316a..7d3ecf5846de4c6c1583c979f91020e9622d9d6d 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_bg.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_bg.properties
@@ -47,4 +47,5 @@ folder.displayname=\u041F\u0430\u043F\u043A\u0430 \u0437\u0430 \u0441\u044A\u044
 header=\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 HTML \u0444\u0430\u0439\u043B
 pane.tab.accessibility=\u0414\u043E\u0441\u0442\u044A\u043F
 pane.tab.spconfig=\u0421\u044A\u0434\u044A\u0440\u0436\u0430\u043D\u0438\u0435 \u043D\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0442\u043E\u0437\u0438 \u0444\u0430\u0439\u043B
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_cs.properties
index 15d06c8716487fc810379f32297de900d6aed5c4..d42907d2c71fcf1673b807d3b1da3c74248c971a 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_cs.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_cs.properties
@@ -47,4 +47,5 @@ folder.displayname=Zdrojov\u00E1 slo\u017Eka
 header=Vybrat HTML str\u00E1nku
 pane.tab.accessibility=P\u0159\u00EDstup
 pane.tab.spconfig=HTML str\u00E1nka
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=Vybrat tento soubor
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_da.properties
index a215102fae97d9d0d8d40c22b256b6e6fba54736..809b41080ee8b7806919817068438fb88a328f47 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_da.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_da.properties
@@ -41,4 +41,5 @@ folder.displayname=Gemmemappe
 header=V\u00E6lg HTML side
 pane.tab.accessibility=Adgange
 pane.tab.spconfig=HTML side
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=V\u00E6lg denne fil
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_de.properties
index 18bbb9a44c2130178228e0312343b0983786caa5..c8127c6a2fb80e3084c4b989524f879635b91760 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_de.properties
@@ -49,4 +49,5 @@ folder.displayname=Ablageordner
 header=HTML-Seite ausw\u00E4hlen
 pane.tab.accessibility=Zugang
 pane.tab.spconfig=Seiteninhalt
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=Diese Seite w\u00E4hlen
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_el.properties
index 534fdfa4cc505d99470741ad4e5a1fb35d28a0ad..583f33440c96ec572a5153125ab1741bfbceb906 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_el.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_el.properties
@@ -49,4 +49,5 @@ folder.displayname=\u03A6\u03AC\u03BA\u03B5\u03BB\u03BF\u03C2 \u03B1\u03C0\u03BF
 header=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03C3\u03B5\u03BB\u03AF\u03B4\u03B1\u03C2 HTML
 pane.tab.accessibility=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7
 pane.tab.spconfig=\u03A0\u03B5\u03C1\u03B9\u03B5\u03C7\u03CC\u03BC\u03B5\u03BD\u03BF \u03A3\u03B5\u03BB\u03AF\u03B4\u03B1\u03C2
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=\u0395\u03C0\u03B9\u03BB\u03AD\u03BE\u03C4\u03B5 \u03C4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_en.properties
index 63d292cb570a4d33a855ff77a06fdb754feed3a7..cd8a10b38463889ce1076b738fa89ab98a3bd930 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_en.properties
@@ -49,4 +49,5 @@ folder.displayname=Storage folder
 header=Choose HTML file
 pane.tab.accessibility=Access
 pane.tab.spconfig=Page content
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=Select this file
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_es.properties
index 7e14d64e63dbeb9ab3daa0726e7733c27a125eff..f4acead58ed4ef43699f3cd7c476cd6d071c9367 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_es.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_es.properties
@@ -47,4 +47,5 @@ folder.displayname=Carpeta de dep\u00F3sito
 header=Elegir p\u00E1gina HTML
 pane.tab.accessibility=Acceso
 pane.tab.spconfig=Contenido p\u00E1gina
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=Seleccionar esta p\u00E1gina
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fa.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fa.properties
index 75dddc059666bc801f1ccfea34278feaaa6dc3bd..4e4e295c17e867c6eb845ea82f2e2dc632f823d6 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fa.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fa.properties
@@ -28,4 +28,5 @@ folder.displayname=\u067E\u0648\u0634\u0647 \u062E\u0632\u0627\u0646\u0647
 header=\u0628\u0633\u062A\u0646 \u0635\u0641\u062D\u0647 \u0627\u0686 \u062A\u06CC \u0627\u0645 \u0627\u0644
 pane.tab.accessibility=\u062F\u0633\u062A\u06CC\u0627\u0628\u06CC
 pane.tab.spconfig=HTML \u0635\u0641\u062D\u0647
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=\u0627\u0646\u062A\u062E\u0627\u0628 \u0627\u06CC\u0646 \u0641\u0627\u06CC\u0644
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fr.properties
index 6c9cfe69dcc37d7edf88d4521d39431c1b9390f3..1c492be276bc2b827e5bde13b133d373afa239d7 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_fr.properties
@@ -49,4 +49,5 @@ folder.displayname=Dossier de stockage
 header=S\u00E9lectionner fichier HTML
 pane.tab.accessibility=Acc\u00E8s
 pane.tab.spconfig=Contenu de la page
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=S\u00E9lectionner ce fichier
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_it.properties
index 02cc14140de917061bb09c9b1718884649508426..6000867b3fe9e718da8cabfd2a54bac4c447f37a 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_it.properties
@@ -49,4 +49,5 @@ folder.displayname=Cartella di deposito
 header=Selezione del file HTML
 pane.tab.accessibility=Accesso
 pane.tab.spconfig=Contenuto pagina
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=Selezionare questo file
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_jp.properties
index 6debd30443bd9ec6a1df2055453357a488a0aea1..159398408788767c9d280ed85eacd647d0074875 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_jp.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_jp.properties
@@ -36,4 +36,5 @@ folder.displayname=\u30B9\u30C8\u30EC\u30FC\u30B8\u30D5\u30A9\u30EB\u30C0
 header=HTML\u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E\u3059\u308B
 pane.tab.accessibility=\u30A2\u30AF\u30BB\u30B9
 pane.tab.spconfig=\u30DA\u30FC\u30B8\u30B3\u30F3\u30C6\u30F3\u30C4
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E\u3059\u308B
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_lt.properties
index efc90edc2c86b263759d73298f7891a9d296ce62..118c9126f62c029d8dcfbfbcd3e3395b49c5d1ce 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_lt.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_lt.properties
@@ -38,4 +38,5 @@ folder.displayname=Saugojimo aplankas
 header=Pasirinkite HTML puslap\u012F
 pane.tab.accessibility=Prieiga
 pane.tab.spconfig=HTML puslapis
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=Pa\u017Eym\u0117kite \u0161i\u0105 rinkmen\u0105
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_nl_NL.properties
index 7fa4192eea8e884c6b9dee60f77534a674675d55..636bca95a96af69365497645c52315afc42567df 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_nl_NL.properties
@@ -49,4 +49,5 @@ folder.displayname=Bewaarmap
 header=Kies HTML bestand
 pane.tab.accessibility=Toegang
 pane.tab.spconfig=Pagina inhoud
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=Selecteer dit bestand
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pl.properties
index 650e018fa6102a35d52fc1d6b0b97c9450bf906b..681cca0a295312db98f59d5f89fbf50fe7806340 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pl.properties
@@ -49,4 +49,5 @@ folder.displayname=Folder sk\u0142adowania
 header=Wybierz stron\u0119 HTML
 pane.tab.accessibility=Dost\u0119p
 pane.tab.spconfig=Strona HTML
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=Wybierz ten plik
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_BR.properties
index a27a80ba06356179c959f7e77fdba35def61401d..a21abb65580109f8c48d7ab8f172d7e38825370b 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_BR.properties
@@ -49,4 +49,5 @@ folder.displayname=Pasta de armazenamento
 header=Escolher p\u00E1gina HTML
 pane.tab.accessibility=Acesso
 pane.tab.spconfig=P\u00E1gina HTML
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=Selecionar este arquivo
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_PT.properties
index 1ba57c4213eaf21b29cd04c27038526710984fea..2fcf833c6f1935ac0de3e40f599b438125751e60 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_PT.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_pt_PT.properties
@@ -47,4 +47,5 @@ folder.displayname=Pasta de armazenamento
 header=Escolher p\u00E1gina HTML
 pane.tab.accessibility=Acesso
 pane.tab.spconfig=P\u00E1gina HTML
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=Selecionar este arquivo
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ru.properties
index 0d0d7218fcda20e0d2f0feee2515e53cbb9fd74c..70d79b52bc613f025065448f3748d3ffb5bd3980 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ru.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_ru.properties
@@ -31,4 +31,5 @@ folder.displayname=\u041F\u0430\u043F\u043A\u0430 \u0434\u043B\u044F \u043A\u044
 header=\u0412\u044B\u0431\u0440\u0430\u0442\u044C HTML-\u0444\u0430\u0439\u043B 
 pane.tab.accessibility=\u0414\u043E\u0441\u0442\u0443\u043F
 pane.tab.spconfig=HTML-\u0444\u0430\u0439\u043B
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u044D\u0442\u043E\u0442 \u0444\u0430\u0439\u043B 
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_sq.properties
index 58b4c820f8cae77e3f27bec4a9080512643ac35c..6bcda13cd92fdf5a93851a5bfa1bd7343a9e9561 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_sq.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_sq.properties
@@ -47,4 +47,5 @@ folder.displayname=Shteg ruajtje
 header=Zgjedhe HTML faqen
 pane.tab.accessibility=Qasshm\u00EBria
 pane.tab.spconfig=HTML faqe
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=P\u00EBrzgjedh\u00EB k\u00EBt\u00EB skedar
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_CN.properties
index bbe2dfc6ca3605786aa7765aaee3894faa9f26fd..83244eb52a408af5a64d39c9ee87ac4bb2d8e222 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_CN.properties
@@ -47,4 +47,5 @@ folder.displayname=\u5B58\u50A8\u5939
 header=\u9009\u62E9HTML\u6587\u4EF6
 pane.tab.accessibility=\u8BBF\u95EE
 pane.tab.spconfig=HTML\u6587\u4EF6
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=\u9009\u62E9\u8BE5\u6587\u4EF6
diff --git a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_TW.properties
index 68d92f79e1b683a0cfb8243ac373a8022d9607d7..a35cf548040eb8ab5765e02869ea71291f4a3356 100644
--- a/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_TW.properties
+++ b/src/main/java/org/olat/course/nodes/sp/_i18n/LocalStrings_zh_TW.properties
@@ -33,4 +33,5 @@ folder.displayname=\u5132\u5B58\u8CC7\u6599\u593E
 header=\u9078\u53D6 HTML \u6A94\u6848
 pane.tab.accessibility=\u5B58\u53D6
 pane.tab.spconfig=\u9801\u9762\u5167\u5BB9
+pane.tab.layout=$org.olat.core.gui.control.generic.iframe\:option.delivery
 selectfile=\u9078\u64C7\u9019\u500B\u6A94\u6848
diff --git a/src/main/java/org/olat/course/nodes/st/EditScoreCalculationEasyForm.java b/src/main/java/org/olat/course/nodes/st/EditScoreCalculationEasyForm.java
index 59fa690877f65c550167e7214262d439c2ea6329..a7c71bea70be1baed2c4a084fdcfd21d2acd047e 100644
--- a/src/main/java/org/olat/course/nodes/st/EditScoreCalculationEasyForm.java
+++ b/src/main/java/org/olat/course/nodes/st/EditScoreCalculationEasyForm.java
@@ -30,13 +30,10 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.olat.core.gui.UserRequest;
-
-import org.olat.core.gui.components.Component;
 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.IntegerElement;
 import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
-import org.olat.core.gui.components.form.flexible.elements.SelectionElement;
 import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
@@ -44,7 +41,6 @@ import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
-
 import org.olat.course.editor.StatusDescription;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.run.scoring.ScoreCalculator;
@@ -68,9 +64,6 @@ public class EditScoreCalculationEasyForm extends FormBasicController {
 	
 	private static final String DELETED_NODE_IDENTIFYER = "deletedNode";
   private List<CourseNode> assessableNodesList;
-
-  private String[] hasScoreKeys   = new String[] { Boolean.TRUE.toString(), Boolean.FALSE.toString() };
-  private String[] hasScoreValues = new String[] { translate("scform.hasScore.yes"), translate("no") };
   private List<CourseNode> nodeIdentList;
   /**
 	 * @param name
@@ -106,14 +99,14 @@ public class EditScoreCalculationEasyForm extends FormBasicController {
 		}
 		
 		if (hasPassed.isSelected(0)) {
-			if (passedType.getSelectedKey().equals(sc.PASSED_TYPE_INHERIT)) {
+			if (passedType.getSelectedKey().equals(ScoreCalculator.PASSED_TYPE_INHERIT)) {
 				if (passedNodeIdents.getSelectedKeys().size() == 0) {
 					passedNodeIdents.setErrorKey("scform.passedNodeIndents.error", null);
 					rv = false;
 				} else {
 					passedNodeIdents.clearError();
 				}
-			} else if (passedType.getSelectedKey().equals(sc.PASSED_TYPE_CUTVALUE)) {
+			} else if (passedType.getSelectedKey().equals(ScoreCalculator.PASSED_TYPE_CUTVALUE)) {
 				if (!hasScore.isSelected(0)) {
 					passedType.setErrorKey("scform.passedType.error", null);
 					rv = false;
@@ -212,16 +205,16 @@ public class EditScoreCalculationEasyForm extends FormBasicController {
 	 * @param allNodesList List of all assessable course nodes
 	 * @return StaticMultipleSelectionElement The configured form element
 	 */
-	private MultipleSelectionElement initNodeSelectionElement(FormItemContainer formLayout, String elemId, ScoreCalculator scoreCalculator, List selectedNodeList,
-			List allNodesList) {
+	private MultipleSelectionElement initNodeSelectionElement(FormItemContainer formLayout, String elemId, ScoreCalculator scoreCalculator,
+			List<String> selectedNodeList, List<CourseNode> allNodesList) {
 		
 		boolean addDeletedNodeIdent = false;		
 		if (scoreCalculator != null && selectedNodeList != null) {
-			for (Iterator iter = selectedNodeList.iterator(); iter.hasNext();) {
-				String nodeIdent = (String) iter.next();
+			for (Iterator<String> iter = selectedNodeList.iterator(); iter.hasNext();) {
+				String nodeIdent = iter.next();
 				boolean found = false;
-				for (Iterator nodeIter = allNodesList.iterator(); nodeIter.hasNext();) {
-					CourseNode node = (CourseNode) nodeIter.next();
+				for (Iterator<CourseNode> nodeIter = allNodesList.iterator(); nodeIter.hasNext();) {
+					CourseNode node = nodeIter.next();
 					if (node.getIdent().equals(nodeIdent)) {
 						found = true;           
 					}					
@@ -246,11 +239,11 @@ public class EditScoreCalculationEasyForm extends FormBasicController {
 		MultipleSelectionElement mse = uifactory.addCheckboxesVertical(elemId, formLayout, nodeKeys, nodeValues, null, 2);
 		// preselect nodes from configuration
 		if (scoreCalculator != null && selectedNodeList != null) {
-			for (Iterator iter = selectedNodeList.iterator(); iter.hasNext();) {
-				String nodeIdent = (String) iter.next();
+			for (Iterator<String> iter = selectedNodeList.iterator(); iter.hasNext();) {
+				String nodeIdent = iter.next();
 				boolean found = false;
-				for (Iterator nodeIter = allNodesList.iterator(); nodeIter.hasNext();) {
-					CourseNode node = (CourseNode) nodeIter.next();
+				for (Iterator<CourseNode> nodeIter = allNodesList.iterator(); nodeIter.hasNext();) {
+					CourseNode node = nodeIter.next();
 					if (node.getIdent().equals(nodeIdent)) {
 						found = true;
 					}
@@ -300,7 +293,7 @@ public class EditScoreCalculationEasyForm extends FormBasicController {
 		uifactory.addSpacerElement("spacer", formLayout, false);
 		
 		hasPassed = uifactory.addCheckboxesHorizontal("scform.passedtype", formLayout, new String[]{"xx"}, new String[]{null}, null);
-		hasPassed.select("xx", sc != null && sc.getPassedType() != null && !sc.getPassedType().equals(sc.PASSED_TYPE_NONE));
+		hasPassed.select("xx", sc != null && sc.getPassedType() != null && !sc.getPassedType().equals(ScoreCalculator.PASSED_TYPE_NONE));
 		hasPassed.addActionListener(listener, FormEvent.ONCLICK); // Radios/Checkboxes need onclick because of IE bug OLAT-5753
 		
 		String[] passedTypeKeys = new String[] {
diff --git a/src/main/java/org/olat/course/nodes/st/EditScoreCalculationExpertForm.java b/src/main/java/org/olat/course/nodes/st/EditScoreCalculationExpertForm.java
index 6e30af5ef99e9e2efd3f6b92b6fa6942c958c4c9..a48a6dfc3cd202064075a1e784237bf77eed4b3b 100644
--- a/src/main/java/org/olat/course/nodes/st/EditScoreCalculationExpertForm.java
+++ b/src/main/java/org/olat/course/nodes/st/EditScoreCalculationExpertForm.java
@@ -178,8 +178,8 @@ class EditScoreCalculationExpertForm extends FormBasicController {
 		List<String> nodeDescriptionList = new ArrayList<String>();
 		if (ce != null) {
 			Set<String> selectedNodesIds = ce.getSoftReferencesOf("courseNodeId");
-			for (Iterator nodeIter = assessableNodesList.iterator(); nodeIter.hasNext();) {
-				CourseNode node = (CourseNode) nodeIter.next();
+			for (Iterator<CourseNode> nodeIter = assessableNodesList.iterator(); nodeIter.hasNext();) {
+				CourseNode node = nodeIter.next();
 				if (selectedNodesIds.contains(node.getIdent())) {
 					StatusDescription isConfigValid = node.isConfigValid();
 					if (isConfigValid != null && isConfigValid.isError()) {
diff --git a/src/main/java/org/olat/course/nodes/st/STCourseNodeConfiguration.java b/src/main/java/org/olat/course/nodes/st/STCourseNodeConfiguration.java
index 9924726693ec2d769b62f78e8079a59927a0b5cf..64be991d1fd63470efc9740fcb1c4a2738e5fe83 100644
--- a/src/main/java/org/olat/course/nodes/st/STCourseNodeConfiguration.java
+++ b/src/main/java/org/olat/course/nodes/st/STCourseNodeConfiguration.java
@@ -25,10 +25,8 @@
 
 package org.olat.course.nodes.st;
 
-import java.util.List;
 import java.util.Locale;
 
-import org.olat.core.extensions.ExtensionResource;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.Util;
@@ -80,37 +78,6 @@ public class STCourseNodeConfiguration extends AbstractCourseNodeConfiguration i
 		return "st";
 	}
 
-	//
-	// OLATExtension interface implementations.
-	//
-
-	public String getName() {
-		return getAlias();
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionResources()
-	 */
-	public List getExtensionResources() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#getExtensionCSS()
-	 */
-	public ExtensionResource getExtensionCSS() {
-		// no ressources, part of main css
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.extensions.OLATExtension#setURLBuilder(org.olat.core.gui.render.URLBuilder)
-	 */
-	public void setExtensionResourcesBaseURI(String ubi) {
-	// no need for the URLBuilder
-	}
-
 	/**
 	 * Spring setter method to configure the maximum number of selectable child
 	 * nodes for peekview rendering.
@@ -125,5 +92,4 @@ public class STCourseNodeConfiguration extends AbstractCourseNodeConfiguration i
 					"invalid configuration for maxPeekviewChildNodes: must be greater than 0. check your olat_buildingblocks.xml config files");
 		}
 	}
-
 }
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 9c590265942c0345797d7c6ca0b0d2d56ad221a6..7937a7e42d59062a894410943c68c0a280b13b1e 100644
--- a/src/main/java/org/olat/course/nodes/st/STCourseNodeDisplayConfigFormController.java
+++ b/src/main/java/org/olat/course/nodes/st/STCourseNodeDisplayConfigFormController.java
@@ -123,8 +123,7 @@ public class STCourseNodeDisplayConfigFormController extends FormBasicController
 	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.UserRequest)
 	 */
 	@Override
-	protected void initForm(FormItemContainer formLayout, @SuppressWarnings("unused") Controller listener,
-			@SuppressWarnings("unused") UserRequest ureq) {
+	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");
 		// 
diff --git a/src/main/java/org/olat/course/nodes/st/STCourseNodeEditController.java b/src/main/java/org/olat/course/nodes/st/STCourseNodeEditController.java
index 9b73a9cd0d5c7473043ff7d0441b2851f93e85db..48c2b32555806eeb69d1110ac30b716ca8030d95 100644
--- a/src/main/java/org/olat/course/nodes/st/STCourseNodeEditController.java
+++ b/src/main/java/org/olat/course/nodes/st/STCourseNodeEditController.java
@@ -41,8 +41,9 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.ControllerEventListener;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptionsConfigurationController;
 import org.olat.core.gui.control.generic.tabbable.ActivateableTabbableDefaultController;
-import org.olat.core.gui.translator.PackageTranslator;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.util.Util;
 import org.olat.core.util.vfs.VFSContainer;
@@ -68,6 +69,7 @@ import org.olat.modules.ModuleConfiguration;
 public class STCourseNodeEditController extends ActivateableTabbableDefaultController implements ControllerEventListener {
 
 	private static final String PANE_TAB_ST_SCORECALCULATION = "pane.tab.st_scorecalculation";
+	private static final String PANE_TAB_DELIVERYOPTIONS = "pane.tab.deliveryOptions";
 	public static final String PANE_TAB_ST_CONFIG = "pane.tab.st_config";
 	private static final String PANE_TAB_ACCESSIBILITY = "pane.tab.accessibility";
 	
@@ -78,6 +80,7 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr
 	 * allowed? *
 	 */
 	public static final String CONFIG_KEY_ALLOW_RELATIVE_LINKS = "allowRelativeLinks";
+	public static final String CONFIG_KEY_DELIVERYOPTIONS = "deliveryOptions";
 	// key to store information on what to display in the run 
 	public static final String CONFIG_KEY_DISPLAY_TYPE = "display";
 	// display a custom file
@@ -108,13 +111,16 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr
 	private VFSContainer courseFolderContainer;
 	private String chosenFile;
 	private Boolean allowRelativeLinks;
+	private DeliveryOptions deliveryOptions;
 
 	private Panel fccePanel;
 	private FileChooseCreateEditController fccecontr;
+	private DeliveryOptionsConfigurationController deliveryOptionsCtrl;
 	private ConditionEditController accessibilityCondContr;
 
 	private boolean editorEnabled = false;
 	private UserCourseEnvironment euce;
+	
 	private TabbedPane myTabbedPane;
 	private CourseEditorTreeModel editorModel;
 
@@ -136,15 +142,15 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr
 		this.euce = euce;
 		this.editorModel = editorModel;
 
-		Translator fallback = new PackageTranslator(Util.getPackageName(Condition.class), ureq.getLocale());
-		Translator newTranslator = new PackageTranslator(Util.getPackageName(STCourseNodeEditController.class), ureq.getLocale(), fallback);
+		Translator fallback = Util.createPackageTranslator(Condition.class, getLocale());
+		Translator newTranslator = Util.createPackageTranslator(STCourseNodeEditController.class, getLocale(), fallback);
 		setTranslator(newTranslator);
 				
-		score = this.createVelocityContainer("scoreedit");
+		score = createVelocityContainer("scoreedit");
 		activateEasyModeButton = LinkFactory.createButtonSmall("cmd.activate.easyMode", score, this);
 		activateExpertModeButton = LinkFactory.createButtonSmall("cmd.activate.expertMode", score, this);
 				
-		configvc = this.createVelocityContainer("config");
+		configvc = createVelocityContainer("config");
 
 		// Load configured value for file if available and enable editor when in
 		// file display move, even when no file is selected (this will display the
@@ -153,6 +159,7 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr
 		editorEnabled = (CONFIG_VALUE_DISPLAY_FILE.equals(stNode.getModuleConfiguration().getStringValue(CONFIG_KEY_DISPLAY_TYPE)));
 		
 		allowRelativeLinks = stNode.getModuleConfiguration().getBooleanSafe(CONFIG_KEY_ALLOW_RELATIVE_LINKS);
+		deliveryOptions = (DeliveryOptions)stNode.getModuleConfiguration().get(CONFIG_KEY_DELIVERYOPTIONS);
 
 		nodeDisplayConfigFormController = new STCourseNodeDisplayConfigFormController(ureq, wControl, stNode.getModuleConfiguration(), editorModel.getCourseEditorNodeById(stNode.getIdent()));
 		listenTo(nodeDisplayConfigFormController);
@@ -162,6 +169,9 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr
 			configvc.contextPut("editorEnabled", Boolean.valueOf(editorEnabled));
 			addStartEditorToView(ureq);
 		}
+		
+		deliveryOptionsCtrl = new DeliveryOptionsConfigurationController(ureq, getWindowControl(), deliveryOptions);
+		listenTo(deliveryOptionsCtrl);
 
 		// Find assessable children nodes
 		assessableChildren = AssessmentHelper.getAssessableNodes(editorModel, stNode);
@@ -170,7 +180,7 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr
 		Condition accessCondition = stNode.getPreConditionAccess();
 		accessibilityCondContr = new ConditionEditController(ureq, getWindowControl(), groupMgr, accessCondition, "accessabilityConditionForm",
 				assessableChildren, euce);		
-		this.listenTo(accessibilityCondContr);
+		listenTo(accessibilityCondContr);
 
 		ScoreCalculator scoreCalc = stNode.getScoreCalculator();
 		if (scoreCalc != null) {
@@ -280,7 +290,10 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr
 			allowRelativeLinks = fccecontr.getAllowRelativeLinks();
 			stNode.getModuleConfiguration().setBooleanEntry(CONFIG_KEY_ALLOW_RELATIVE_LINKS, allowRelativeLinks.booleanValue());
 			fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
-			
+		} else if (source == deliveryOptionsCtrl) {
+			deliveryOptions = deliveryOptionsCtrl.getDeliveryOptions();
+			stNode.getModuleConfiguration().set(CONFIG_KEY_DELIVERYOPTIONS, deliveryOptions);
+			fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
 		} else if (source == nodeDisplayConfigFormController) {
 			if (event == Event.DONE_EVENT) {
 				// update the module configuration
@@ -299,6 +312,9 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr
 					//fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
 					// Let other config values from old config setup remain in config,
 					// maybe used when user switches back to other config (OLAT-5610)
+					if(myTabbedPane.containsTab(deliveryOptionsCtrl.getInitialComponent())) {
+						myTabbedPane.removeTab(deliveryOptionsCtrl.getInitialComponent());
+					}
 				}
 				fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
 			}
@@ -355,13 +371,19 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr
 	}
 
 	private void addStartEditorToView(UserRequest ureq) {
-		this.fccecontr = new LinkChooseCreateEditController(ureq, getWindowControl(), chosenFile, allowRelativeLinks, courseFolderContainer, new CourseInternalLinkTreeModel(editorModel) );		
-		this.listenTo(fccecontr);
+		fccecontr = new LinkChooseCreateEditController(ureq, getWindowControl(), chosenFile, allowRelativeLinks, courseFolderContainer, new CourseInternalLinkTreeModel(editorModel) );		
+		listenTo(fccecontr);
 
 		fccePanel = new Panel("filechoosecreateedit");
 		Component fcContent = fccecontr.getInitialComponent();
 		fccePanel.setContent(fcContent);
 		configvc.put(fccePanel.getComponentName(), fccePanel);
+		
+		if(myTabbedPane != null) {
+			if(!myTabbedPane.containsTab(deliveryOptionsCtrl.getInitialComponent())) {
+				myTabbedPane.addTab(translate(PANE_TAB_DELIVERYOPTIONS), deliveryOptionsCtrl.getInitialComponent());
+			}
+		}
 	}
 
 	/**
@@ -372,6 +394,9 @@ public class STCourseNodeEditController extends ActivateableTabbableDefaultContr
 		tabbedPane.addTab(translate(PANE_TAB_ACCESSIBILITY), accessibilityCondContr.getWrappedDefaultAccessConditionVC(translate("condition.accessibility.title")));
 		tabbedPane.addTab(translate(PANE_TAB_ST_CONFIG), configvc);
 		tabbedPane.addTab(translate(PANE_TAB_ST_SCORECALCULATION), score);
+		if(editorEnabled) {
+			tabbedPane.addTab(translate(PANE_TAB_DELIVERYOPTIONS), deliveryOptionsCtrl.getInitialComponent());
+		}
 	}
 
 	/**
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ar.properties
index 8bd6d9492efde6941d1157997edf211fd72cb393..292401f1652e46b51a17a21c720092b268d5cc4b 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ar.properties
@@ -54,6 +54,7 @@ help.st.design=\u0645\u0633\u0627\u0639\u062F\u0629 \u0628\u062E\u0635\u0648\u06
 pane.tab.accessibility=\u0648\u0635\u0648\u0644
 pane.tab.st_config=\u0646\u0638\u0631\u0629 \u0639\u0627\u0645\u0629
 pane.tab.st_scorecalculation=\u0627\u0644\u062F\u0631\u062C\u0629
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=\u0631\u0627\u0633\u0628
 passed.noinfo=\u063A\u064A\u0631 \u0645\u062A\u0627\u062D
 passed.yes=\u0646\u0627\u062C\u062D
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_bg.properties
index aa1d5cc221a24c2d8a56527a2bac1c256361735f..94ba83976e1845ec8b2c7de39f32dff1e3201289 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_bg.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_bg.properties
@@ -47,6 +47,7 @@ help.st.design=\u041F\u043E\u043C\u043E\u0449 \u0437\u0430 \u0434\u0438\u0437\u0
 pane.tab.accessibility=\u0414\u043E\u0441\u0442\u044A\u043F
 pane.tab.st_config=\u041F\u0440\u0435\u0433\u043B\u0435\u0434
 pane.tab.st_scorecalculation=\u0420\u0435\u0437\u0443\u043B\u0442\u0430\u0442
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=\u041D\u0435\u0438\u0437\u0434\u044A\u0440\u0436\u0430\u043B
 passed.noinfo=\u041D\u044F\u043C\u0430
 passed.yes=\u0418\u0437\u0434\u044A\u0440\u0436\u0430\u043B
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_cs.properties
index 8133d75971e6b8f52770561a4891100c5c556840..99fbf7a48d32fbaa16fb93656a4e78148cd21eb7 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_cs.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_cs.properties
@@ -47,6 +47,7 @@ help.st.design=N\u00E1pov\u011Bda pro tvorbu p\u0159ehledov\u00E9 str\u00E1nky
 pane.tab.accessibility=P\u0159\u00EDstup
 pane.tab.st_config=N\u00E1hled
 pane.tab.st_scorecalculation=V\u00FDsledek
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Nepro\u0161el
 passed.noinfo=Nedostupn\u00FD
 passed.yes=Pro\u0161el
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_de.properties
index 1590e5c76d15829d3c73d8f628fa021af1fffc4a..750dc875e4532d4e13c983b23e03817f8fc5a905 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_de.properties
@@ -56,6 +56,7 @@ help.st.design=Hilfe zur Gestaltung der \u00DCbersichtsseite
 pane.tab.accessibility=Zugang
 pane.tab.st_config=\u00DCbersicht
 pane.tab.st_scorecalculation=Punkte
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Nicht bestanden
 passed.noinfo=Keine Angabe
 passed.yes=Bestanden
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_el.properties
index b10d202f817c2d95a35ab424d3558183479b9b44..ce2f52d79eff8a77c00563061f7732523db36b97 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_el.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_el.properties
@@ -51,6 +51,7 @@ help.st.design=\u0392\u03BF\u03AE\u03B8\u03B5\u03B9\u03B1 \u03B3\u03B9\u03B1 \u0
 pane.tab.accessibility=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7
 pane.tab.st_config=\u0395\u03C0\u03B9\u03C3\u03BA\u03CC\u03C0\u03B7\u03C3\u03B7
 pane.tab.st_scorecalculation=\u0392\u03B1\u03B8\u03BC\u03BF\u03BB\u03BF\u03B3\u03AF\u03B1
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=\u039C\u03B7 \u03B5\u03C0\u03B9\u03C4\u03C5\u03C7\u03AE\u03C2
 passed.noinfo=\u039C\u03B7 \u03B4\u03B9\u03B1\u03B8\u03AD\u03C3\u03B9\u03BC\u03BF
 passed.yes=\u0395\u03C0\u03B9\u03C4\u03C5\u03C7\u03AE\u03C2
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_en.properties
index a93d113c0d8360f8711420331b84128ccc25756f..0c0b404f805cd0b88d4bb5567626bdb930c59516 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_en.properties
@@ -57,6 +57,7 @@ help.st.design=Help to design the overview page
 pane.tab.accessibility=Access
 pane.tab.st_config=Overview
 pane.tab.st_scorecalculation=Score
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Failed
 passed.noinfo=Not available
 passed.yes=Passed
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_es.properties
index 563a0e8e914f8a7d831eef162040d8b8d483e2a5..a81432f25f216f7f97f2a5cee8773b19e3da832a 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_es.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_es.properties
@@ -47,6 +47,7 @@ help.st.design=Ayuda para dise\u00F1ar la p\u00E1gina de vista r\u00E1pida
 pane.tab.accessibility=Acceso
 pane.tab.st_config=Vista r\u00E1pida
 pane.tab.st_scorecalculation=Puntuaci\u00F3n
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=No aprobado
 passed.noinfo=Sin indicaci\u00F3n
 passed.yes=Aprobado
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fa.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fa.properties
index a49daa960bc291cc17d05b0ebc1e9598296dec3b..7d59293968b34c93e4bc1d92e84c1eaf8a8d7751 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fa.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fa.properties
@@ -37,6 +37,7 @@ help.st.design=\u0631\u0627\u0647\u0646\u0645\u0627\u06CC\u06CC \u0646\u0645\u06
 pane.tab.accessibility=\u062F\u0633\u062A\u0631\u0633\u06CC
 pane.tab.st_config=\u0646\u06AF\u0627\u0647 \u06A9\u0644\u06CC
 pane.tab.st_scorecalculation=\u0646\u0645\u0631\u0647
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=\u0645\u0631\u062F\u0648\u062F
 passed.noinfo=\u063A\u06CC\u0631 \u0641\u0639\u0627\u0644
 passed.yes=\u0642\u0628\u0648\u0644
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fr.properties
index ee60b90e294301bbd942431507c3e58444580003..8324df6ce7517523724c878bea8d0faedc9055d5 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_fr.properties
@@ -57,6 +57,7 @@ help.st.design=Aide \u00E0 la configuration de la page r\u00E9capitulative
 pane.tab.accessibility=Acc\u00E8s
 pane.tab.st_config=Aper\u00E7u
 pane.tab.st_scorecalculation=Points
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Pas r\u00E9ussi
 passed.noinfo=Pas d'indication
 passed.yes=R\u00E9ussi
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_it.properties
index d4f1dab1ad99862e694df8d792af81b38a62911e..0a45370c33d0ebb62e86a7abbd6a8b3658fe9d89 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_it.properties
@@ -54,6 +54,7 @@ help.st.design=Aiuto per la configurazione della pagina contenente la visione d'
 pane.tab.accessibility=Accesso
 pane.tab.st_config=Visione d'insieme
 pane.tab.st_scorecalculation=Punteggio
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Non superato
 passed.noinfo=Nessuna indicazione
 passed.yes=Superato
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_jp.properties
index c71e7fbd07ad283ed9398b160ca20f88ee2781db..8c23b65cabce402aee132a9c2562d755670ddaea 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_jp.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_jp.properties
@@ -36,6 +36,7 @@ help.st.design=\u30AA\u30FC\u30D0\u30FC\u30D3\u30E5\u30FC\u30DA\u30FC\u30B8\u306
 pane.tab.accessibility=\u30A2\u30AF\u30BB\u30B9
 pane.tab.st_config=\u30AA\u30FC\u30D0\u30FC\u30D3\u30E5\u30FC
 pane.tab.st_scorecalculation=\u8A55\u70B9
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=\u5931\u6557
 passed.noinfo=\u5229\u7528\u4E0D\u53EF
 scform.deletedNode=\u30B3\u30FC\u30B9\u30A8\u30EC\u30E1\u30F3\u30C8\u304C\u524A\u9664\u3055\u308C\u305F\u304B\u3001\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u305B\u3093\u3002\u9078\u629E\u89E3\u9664\u3057\u3066\u304F\u3060\u3055\u3044\!
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_lt.properties
index f428bb456f558a945ba823d1b241545225506121..23a4e6f0577a53e309b8cdaebba32fff8bc340fb 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_lt.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_lt.properties
@@ -47,6 +47,7 @@ help.st.design=Pagalba skirta puslapi\u0173 per\u017Ei\u016Brai.
 pane.tab.accessibility=Pri\u0117jimas
 pane.tab.st_config=Per\u017Ei\u016Bra
 pane.tab.st_scorecalculation=Rezultatas
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Nepavyko
 passed.noinfo=Neprieinamas
 passed.yes=U\u017Eskaityta
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_nl_NL.properties
index 5de703a9aaa7f15276ff8d0be6035e05c91711bc..7311e6018ff380e567bc41aee9025be7c525b57c 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_nl_NL.properties
@@ -54,6 +54,7 @@ help.st.design=Hulp om de overzichtspagina te ontwerpen
 pane.tab.accessibility=Toegang
 pane.tab.st_config=Overzicht
 pane.tab.st_scorecalculation=Score
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Gezakt
 passed.noinfo=Niet beschikbaar
 passed.yes=Gelsaagd
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pl.properties
index f88999632cc1bb64e032e20fd81e5cae6e0c7bfc..af80a13dcde8a0745c154fd92d20a2a57ade084d 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pl.properties
@@ -51,6 +51,7 @@ help.st.design=Pomoc do\: projekt strony z podsumowaniem
 pane.tab.accessibility=Dost\u0119p
 pane.tab.st_config=Og\u00F3lne
 pane.tab.st_scorecalculation=Wynik
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Nie zaliczono
 passed.noinfo=Niedost\u0119pny
 passed.yes=Zaliczono
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_BR.properties
index b584f8d71d017d0ca89cdbe40d21da38bccf2120..6ad3af3491eb0c911ac1dcef13c18f9bc9b59005 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_BR.properties
@@ -57,6 +57,7 @@ help.st.design=Ajuda para projetar a p\u00E1gina de vis\u00E3o geral
 pane.tab.accessibility=Acesso
 pane.tab.st_config=Vis\u00E3o geral
 pane.tab.st_scorecalculation=Pontua\u00E7\u00E3o
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Falhou
 passed.noinfo=N\u00E3o dispon\u00EDvel
 passed.yes=Passou
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_PT.properties
index 791be18600ad22c1eaa44329b808b1d46b649507..16d764a85ce79e6943366d03cea97e4662dac2e1 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_PT.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_pt_PT.properties
@@ -47,6 +47,7 @@ help.st.design=Ajuda para projetar a p\u00E1gina de vis\u00E3o geral
 pane.tab.accessibility=Acesso
 pane.tab.st_config=Vis\u00E3o geral
 pane.tab.st_scorecalculation=Pontua\u00E7\u00E3o
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Falhou
 passed.noinfo=N\u00E3o dispon\u00EDvel
 passed.yes=Passou
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ru.properties
index 9c46e39dffcdec9b16bd00ad39c3008e8c44c135..04d6d007292839233e2d3ded4059d561de081171 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ru.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_ru.properties
@@ -39,6 +39,7 @@ help.st.design=\u041F\u043E\u043C\u043E\u0449\u044C \u043F\u0440\u0438 \u0441\u0
 pane.tab.accessibility=\u0414\u043E\u0441\u0442\u0443\u043F
 pane.tab.st_config=\u041E\u0431\u0437\u043E\u0440
 pane.tab.st_scorecalculation=\u0411\u0430\u043B\u043B\u044B
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=\u041D\u0435\u0443\u0434\u043E\u0432\u043B\u0435\u0442\u0432\u043E\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u043E
 passed.noinfo=\u041D\u0435\u0442 \u0434\u0430\u043D\u043D\u044B\u0445
 passed.yes=\u0417\u0430\u0447\u0442\u0435\u043D\u043E
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_sq.properties
index 48345b21d9dc8a2740bc248a32f05848af86661c..540bba002624184480d6f0d7965f978d20a407c1 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_sq.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_sq.properties
@@ -47,6 +47,7 @@ help.st.design=Ndihma p\u00EBr t\u00EB dizajnuar faqen e mbishikimit
 pane.tab.accessibility=Qasshm\u00EBria
 pane.tab.st_config=Mbishikimi
 pane.tab.st_scorecalculation=Pik\u00EBt
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=Nuk kaluat
 passed.noinfo=Jo e gatshme
 passed.yes=Kaluat
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_CN.properties
index 1cf40b1baa7dd5a8c86d6115ad4d60abe994515d..e2572dfb7afe483c8ec1610121e3769339afde77 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_CN.properties
@@ -54,6 +54,7 @@ help.st.design=\u5982\u4F55\u8BBE\u8BA1\u6982\u8FF0\u9875\u9762
 pane.tab.accessibility=\u8BBF\u95EE
 pane.tab.st_config=\u6982\u8FF0
 pane.tab.st_scorecalculation=\u6210\u7EE9
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=\u5931\u8D25
 passed.noinfo=\u65E0\u6548
 passed.yes=\u5DF2\u901A\u8FC7
diff --git a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_TW.properties
index 5dbf352b928c0bf49042c5e1088b4a9518043a78..8b1159129b02c845477c4b519d8b16271eb94859 100644
--- a/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_TW.properties
+++ b/src/main/java/org/olat/course/nodes/st/_i18n/LocalStrings_zh_TW.properties
@@ -23,6 +23,7 @@ help.st.design=\u8A2D\u8A08\u6982\u89C0\u9801\u9762\u7684\u8AAA\u660E
 pane.tab.accessibility=\u5B58\u53D6
 pane.tab.st_config=\u6982\u89C0
 pane.tab.st_scorecalculation=\u5206\u6578
+pane.tab.deliveryOptions=$org.olat.core.gui.control.generic.iframe\:option.delivery
 passed.no=\u4E0D\u53CA\u683C
 passed.noinfo=\u7121\u6CD5\u5F97\u77E5
 passed.yes=\u53CA\u683C\u7684
diff --git a/src/main/java/org/olat/ims/cp/CPManager.java b/src/main/java/org/olat/ims/cp/CPManager.java
index a57fabb02f2c2a08749ee90922462d41678085c0..c208e0d47c038615595365c240ba7669109f181e 100644
--- a/src/main/java/org/olat/ims/cp/CPManager.java
+++ b/src/main/java/org/olat/ims/cp/CPManager.java
@@ -34,6 +34,7 @@ import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.ims.cp.objects.CPOrganization;
 import org.olat.ims.cp.objects.CPResource;
+import org.olat.ims.cp.ui.CPPackageConfig;
 import org.olat.ims.cp.ui.CPPage;
 
 /**
@@ -52,6 +53,11 @@ public abstract class CPManager extends BasicManager {
 	public static CPManager getInstance() {
 		return INSTANCE;
 	}
+	
+	public abstract CPPackageConfig getCPPackageConfig(OLATResourceable ores);
+	
+	
+	public abstract void setCPPackageConfig(OLATResourceable ores, CPPackageConfig config);
 
 	/**
 	 * Generates a new Instance of ContentPackage and loads the xmlmanifest
diff --git a/src/main/java/org/olat/ims/cp/CPManagerImpl.java b/src/main/java/org/olat/ims/cp/CPManagerImpl.java
index 308df39b27cfa1d72bc87d4efdf0709fb37e44b7..ceda2d00ed9e5ba0e38f5143c760e8307b2c44f2 100644
--- a/src/main/java/org/olat/ims/cp/CPManagerImpl.java
+++ b/src/main/java/org/olat/ims/cp/CPManagerImpl.java
@@ -27,14 +27,20 @@
 package org.olat.ims.cp;
 
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.net.URISyntaxException;
 import java.net.URL;
 
+import org.apache.commons.io.IOUtils;
 import org.dom4j.tree.DefaultDocument;
 import org.dom4j.tree.DefaultElement;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.logging.OLATRuntimeException;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
 import org.olat.core.util.CodeHelper;
 import org.olat.core.util.FileUtils;
 import org.olat.core.util.ZipUtil;
@@ -44,13 +50,17 @@ import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.core.util.vfs.VFSManager;
 import org.olat.core.util.xml.XMLParser;
+import org.olat.core.util.xml.XStreamHelper;
 import org.olat.fileresource.FileResourceManager;
 import org.olat.ims.cp.objects.CPOrganization;
 import org.olat.ims.cp.objects.CPResource;
+import org.olat.ims.cp.ui.CPPackageConfig;
 import org.olat.ims.cp.ui.CPPage;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 
+import com.thoughtworks.xstream.XStream;
+
 /**
  * The CP manager implementation.
  * <p>
@@ -63,6 +73,16 @@ import org.olat.repository.RepositoryManager;
  */
 public class CPManagerImpl extends CPManager {
 	
+	private static final OLog log = Tracing.createLoggerFor(CPManagerImpl.class);
+
+	public static final String PACKAGE_CONFIG_FILE_NAME = "CPPackageConfig.xml";
+
+	private static XStream configXstream = XStreamHelper.createXStreamInstance();
+	static {
+		configXstream.alias("packageConfig", CPPackageConfig.class);
+		configXstream.alias("deliveryOptions", DeliveryOptions.class);
+	}
+	
 	/**
 	 * [spring]
 	 */
@@ -70,6 +90,40 @@ public class CPManagerImpl extends CPManager {
 		INSTANCE = this;
 	}
 
+	@Override
+	public CPPackageConfig getCPPackageConfig(OLATResourceable ores) {
+		FileResourceManager frm = FileResourceManager.getInstance();
+		File reFolder = frm.getFileResourceRoot(ores);
+		File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME);
+		if(configXml.exists()) {
+			CPPackageConfig config = (CPPackageConfig)configXstream.fromXML(configXml);
+			return config;
+		}
+		return null;
+	}
+
+	@Override
+	public void setCPPackageConfig(OLATResourceable ores, CPPackageConfig config) {
+		FileResourceManager frm = FileResourceManager.getInstance();
+		File reFolder = frm.getFileResourceRoot(ores);
+		File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME);
+		if(config == null) {
+			if(configXml.exists()) {
+				configXml.delete();
+			}
+		} else {
+			OutputStream out = null;
+			try {
+				out = new FileOutputStream(configXml);
+				configXstream.toXML(config, out);
+			} catch (IOException e) {
+				log.error("", e);
+			} finally {
+				IOUtils.closeQuietly(out);
+			}
+		}
+	}
+
 	/**
 	 * 
 	 * @see org.olat.ims.cp.CPManager#load(org.olat.core.util.vfs.VFSContainer)
diff --git a/src/main/java/org/olat/ims/cp/ui/CPContentController.java b/src/main/java/org/olat/ims/cp/ui/CPContentController.java
index 8f5b891f1a525b67d70c1c76c696f967b8638fa9..f7f94b4471448e5deb07a4b9e999e4b83122fc80 100644
--- a/src/main/java/org/olat/ims/cp/ui/CPContentController.java
+++ b/src/main/java/org/olat/ims/cp/ui/CPContentController.java
@@ -39,6 +39,7 @@ import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.gui.control.generic.iframe.IFrameDisplayController;
 import org.olat.core.gui.control.generic.iframe.NewIframeUriEvent;
 import org.olat.core.util.vfs.VFSContainer;
@@ -61,11 +62,17 @@ public class CPContentController extends BasicController {
 	private CloseableModalController dialogCtr;
 	private LayoutMain3ColsPreviewController previewCtr;
 	private Link editMetadataLink, previewLink;
+	private DeliveryOptions deliveryOptions;
 
 	protected CPContentController(UserRequest ureq, WindowControl control, ContentPackage cp) {
 		super(ureq, control);
 
 		this.cp = cp;
+		
+		CPPackageConfig packageConfig = CPManager.getInstance().getCPPackageConfig(cp.getResourcable());
+		if(packageConfig != null) {
+			deliveryOptions = packageConfig.getDeliveryOptions();
+		}
 
 		contentVC = createVelocityContainer("cpContent");
 		// set initial page to display
@@ -260,7 +267,7 @@ public class CPContentController extends BasicController {
 	 */
 	private void displayPreview(UserRequest ureq) {
 		if (previewCtr != null) previewCtr.dispose();
-		previewCtr = CPUIFactory.getInstance().createMainLayoutPreviewController(ureq, getWindowControl(), cp.getRootDir(), true);
+		previewCtr = CPUIFactory.getInstance().createMainLayoutPreviewController(ureq, getWindowControl(), cp.getRootDir(), true, deliveryOptions);
 		previewCtr.activate();
 	}
 
diff --git a/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java b/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java
index 640f9b581c93096c85fdba36fb5e3d24c2213c03..34138751dcc56fbd8d8bd8f98f5cc348161820eb 100644
--- a/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java
+++ b/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java
@@ -35,6 +35,7 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.MainLayoutBasicController;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.gui.control.generic.layout.MainLayout3ColumnsController;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.util.coordinate.CoordinatorManager;
@@ -54,17 +55,20 @@ public class CPEditMainController extends MainLayoutBasicController {
 	private CPTreeController treeCtr;
 	private final ContentPackage cp;
 	private LockResult lock;
+	private DeliveryOptions deliveryOptions;
 
 	public CPEditMainController(UserRequest ureq, WindowControl wControl, VFSContainer cpContainer, OLATResourceable ores) {
 		super(ureq, wControl);
 
 		// acquire lock for resource
 		lock = CoordinatorManager.getInstance().getCoordinator().getLocker().acquireLock(ores, ureq.getIdentity(), null);
-
-		CPManager cpMgm = CPManager.getInstance();
-
-		this.cp = cpMgm.load(cpContainer, ores);
-
+		cp = CPManager.getInstance().load(cpContainer, ores);
+		
+		CPPackageConfig packageConfig = CPManager.getInstance().getCPPackageConfig(ores);
+		if(packageConfig != null) {
+			deliveryOptions = packageConfig.getDeliveryOptions();
+		}
+		
 		String errorString = cp.getLastError();
 		if (errorString == null) {
 			if (lock.isSuccess()) {
@@ -75,7 +79,7 @@ public class CPEditMainController extends MainLayoutBasicController {
 			}
 		} else {
 			initErrorView(ureq, wControl, errorString);
-			this.showError("maincontroller.loaderror", errorString);
+			showError("maincontroller.loaderror", errorString);
 		}
 		logAudit("cp editor started. oresId: " + ores.getResourceableId(), null);
 	}
@@ -88,8 +92,8 @@ public class CPEditMainController extends MainLayoutBasicController {
 	 * @param root
 	 */
 	private void displayCP(UserRequest ureq, WindowControl wControl, VFSContainer root) {
-		MainLayout3ColumnsController cpCtr = CPUIFactory.getInstance().createMainLayoutController(ureq, wControl, root, true);
-		this.putInitialPanel(cpCtr.getInitialComponent());
+		MainLayout3ColumnsController cpCtr = CPUIFactory.getInstance().createMainLayoutController(ureq, wControl, root, true, deliveryOptions);
+		putInitialPanel(cpCtr.getInitialComponent());
 	}
 
 	/**
diff --git a/src/main/java/org/olat/ims/cp/ui/CPMDFlexiForm.java b/src/main/java/org/olat/ims/cp/ui/CPMDFlexiForm.java
index 2d91effc021896ffe3b8a86bbf40715ee13bd9d2..02db138d7238523faece3660a9f0f3144fe49184 100644
--- a/src/main/java/org/olat/ims/cp/ui/CPMDFlexiForm.java
+++ b/src/main/java/org/olat/ims/cp/ui/CPMDFlexiForm.java
@@ -29,10 +29,7 @@ package org.olat.ims.cp.ui;
 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.FormUIFactory;
-import org.olat.core.gui.components.form.flexible.elements.DateChooser;
 import org.olat.core.gui.components.form.flexible.elements.FormLink;
-import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
 import org.olat.core.gui.components.form.flexible.elements.TextElement;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
diff --git a/src/main/java/org/olat/ims/cp/ui/CPPackageConfig.java b/src/main/java/org/olat/ims/cp/ui/CPPackageConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..c440a1d74485dc71d7fdb68e05bb8228dbbab181
--- /dev/null
+++ b/src/main/java/org/olat/ims/cp/ui/CPPackageConfig.java
@@ -0,0 +1,44 @@
+/**
+ * <a href=“http://www.openolat.org“>
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * 2011 by frentix GmbH, http://www.frentix.com
+ * <p>
+**/
+package org.olat.ims.cp.ui;
+
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
+
+/**
+ * 
+ * Initial date: 29.05.2013<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class CPPackageConfig {
+
+	private DeliveryOptions deliveryOptions;
+
+	public DeliveryOptions getDeliveryOptions() {
+		return deliveryOptions;
+	}
+
+	public void setDeliveryOptions(DeliveryOptions options) {
+		this.deliveryOptions = options;
+	}
+	
+	
+
+}
diff --git a/src/main/java/org/olat/modules/cp/CPDisplayController.java b/src/main/java/org/olat/modules/cp/CPDisplayController.java
index 1078d27b6b154f175463b7f7f98b55d500f41123..2cc995e8b0516ec514a4b7d8863a244953912a4d 100644
--- a/src/main/java/org/olat/modules/cp/CPDisplayController.java
+++ b/src/main/java/org/olat/modules/cp/CPDisplayController.java
@@ -45,6 +45,7 @@ import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
 import org.olat.core.gui.control.generic.dtabs.Activateable2;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.gui.control.generic.iframe.IFrameDisplayController;
 import org.olat.core.gui.control.generic.iframe.NewIframeUriEvent;
 import org.olat.core.gui.control.winmgr.JSCommand;
@@ -108,7 +109,7 @@ public class CPDisplayController extends BasicController implements Activateable
 	 * @param activateFirstPage
 	 */
 	CPDisplayController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean showMenu, boolean showNavigation,
-			boolean activateFirstPage, boolean showPrint, String initialUri, OLATResourceable ores) {
+			boolean activateFirstPage, boolean showPrint, DeliveryOptions deliveryOptions, String initialUri, OLATResourceable ores) {
 		super(ureq, wControl);
 		this.rootContainer = rootContainer;
 
@@ -131,7 +132,7 @@ public class CPDisplayController extends BasicController implements Activateable
 			cpComponent.addListener(this);
 			myContent.put("cpContent", cpComponent);
 		} else {
-			cpContentCtr = new IFrameDisplayController(ureq, getWindowControl(),rootContainer, null, ores);
+			cpContentCtr = new IFrameDisplayController(ureq, getWindowControl(),rootContainer, null, ores, deliveryOptions);
 			cpContentCtr.setAllowDownload(true);
 			listenTo(cpContentCtr);
 			myContent.put("cpContent", cpContentCtr.getInitialComponent());
diff --git a/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java b/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java
index a1d578cbfc485d558d889bdedbcdab67927fcb77..7ded146c4c995ff18e1075633575b092b4e919eb 100644
--- a/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java
+++ b/src/main/java/org/olat/modules/cp/CPManifestTreeModel.java
@@ -53,6 +53,7 @@ import org.olat.ims.resources.IMSEntityResolver;
 */
 public class CPManifestTreeModel extends GenericTreeModel {
 
+	private static final long serialVersionUID = 9216107936843069562L;
 	private Element rootElement;
 	private final Map<String,String>	nsuris = new HashMap<String,String>(2);
 	private final Map<String,TreeNode> hrefToTreeNode = new HashMap<String,TreeNode>();
@@ -80,10 +81,11 @@ public class CPManifestTreeModel extends GenericTreeModel {
 		Element elResources = (Element) metares.selectSingleNode(rootElement);
 		if (elResources == null) throw new AssertException("could not find element resources");
 		
-		List resourcesList = elResources.elements("resource");
+		@SuppressWarnings("unchecked")
+		List<Element> resourcesList = elResources.elements("resource");
 		resources = new HashMap<String,String>(resourcesList.size());
-		for (Iterator iter = resourcesList.iterator(); iter.hasNext();) {
-			Element elRes = (Element) iter.next();
+		for (Iterator<Element> iter = resourcesList.iterator(); iter.hasNext();) {
+			Element elRes = iter.next();
 			String identVal = elRes.attributeValue("identifier");
 			String hrefVal = elRes.attributeValue("href");
 			if (hrefVal != null) { // href is optional element for resource element
@@ -172,10 +174,11 @@ public class CPManifestTreeModel extends GenericTreeModel {
 			else gtn.setAccessible(false);
 		}
 		
-		List chds = item.elements("item");
+		@SuppressWarnings("unchecked")
+		List<Element> chds = item.elements("item");
 		int childcnt = chds.size();
 		for (int i = 0; i < childcnt; i++) {
-			Element childitem = (Element) chds.get(i);
+			Element childitem = chds.get(i);
 			GenericTreeNode gtnchild = buildNode(childitem);
 			gtn.addChild(gtnchild);
 		}
diff --git a/src/main/java/org/olat/modules/cp/CPUIFactory.java b/src/main/java/org/olat/modules/cp/CPUIFactory.java
index 7d052abcba29daedbfe6f86e42ede380c34145ba..89d0708916700b8171cbe66984e5f7a4ef3d369c 100644
--- a/src/main/java/org/olat/modules/cp/CPUIFactory.java
+++ b/src/main/java/org/olat/modules/cp/CPUIFactory.java
@@ -28,6 +28,7 @@ import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
 import org.olat.core.commons.fullWebApp.LayoutMain3ColsPreviewController;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.gui.control.generic.layout.MainLayout3ColumnsController;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.util.controller.OLATResourceableListeningWrapperController;
@@ -71,8 +72,9 @@ public class CPUIFactory {
 	 * @param initialUri can be NULL, will use first page then
 	 * @return a CPDisplayController
 	 */
-	public CPDisplayController createContentOnlyCPDisplayController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean activateFirstPage, boolean showNavigation, String initialUri, OLATResourceable ores) {
-		return new CPDisplayController(ureq, wControl, rootContainer, false, showNavigation, activateFirstPage, true, initialUri, ores);		
+	public CPDisplayController createContentOnlyCPDisplayController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer,
+			boolean activateFirstPage, boolean showNavigation, DeliveryOptions deliveryOptions, String initialUri, OLATResourceable ores) {
+		return new CPDisplayController(ureq, wControl, rootContainer, false, showNavigation, activateFirstPage, true, deliveryOptions, initialUri, ores);		
 	}
 
 	/**
@@ -91,32 +93,9 @@ public class CPUIFactory {
 	 * @param initialUri can be NULL, will use first page then
 	 * @return A main layout controller
 	 */
-	public MainLayout3ColumnsController createMainLayoutController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean showMenu, boolean activateFirstPage, String initialUri, OLATResourceable ores) {
-		return createMainLayoutController(ureq, wControl, rootContainer, showMenu, null, null, activateFirstPage, initialUri, ores);
-	}
-
-	/**
-	 * Creates a main layout controller. The layout uses one or two columns
-	 * depending the the showMenu flag.
-	 * <p>
-	 * Use this where you have no main layout present, e.g. in a pop up in a
-	 * stand-alone view
-	 * 
-	 * @param ureq
-	 * @param wControl
-	 * @param rootContainer The VFS root container where the CP is found on disk
-	 * @param showMenu true to display the menu, false to hide the menu
-	 * @param contentEncoding A specific encoding for the content
-	 * @param jsEncoding A specific encoding for javascripts
-	 * @param activateFirstPage true to automatically activate the first node with
-	 *          content
-	 * @param initialUri can be NULL, will use first page then
-	 * @return A main layout controller
-	 */
-	public MainLayout3ColumnsController createMainLayoutController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean showMenu, String contentEncoding, String jsEncoding, boolean activateFirstPage, String initialUri, OLATResourceable ores) {
-		CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, activateFirstPage, true, initialUri, ores);
-		cpCtr.setContentEncoding(contentEncoding);
-		cpCtr.setJSEncoding(jsEncoding);
+	public MainLayout3ColumnsController createMainLayoutController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer,
+			boolean showMenu, boolean activateFirstPage, DeliveryOptions deliveryOptions, String initialUri, OLATResourceable ores) {
+		CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, activateFirstPage, true, deliveryOptions, initialUri, ores);
 		MainLayout3ColumnsController layoutCtr = new LayoutMain3ColsController(ureq, wControl, cpCtr.getMenuComponent(), null, cpCtr.getInitialComponent(), rootContainer.getName());
 		layoutCtr.addDisposableChildController(cpCtr); // cascade disposing requests
 		return layoutCtr;
@@ -135,8 +114,9 @@ public class CPUIFactory {
 	 * @param showMenu true to display the menu, false to hide the menu
 	 * @return A main layout controller
 	 */
-	public MainLayout3ColumnsController createMainLayoutController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean showMenu) {
-		return createMainLayoutController(ureq, wControl, rootContainer, showMenu, null, null, true, null, null);
+	public MainLayout3ColumnsController createMainLayoutController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer,
+			boolean showMenu, DeliveryOptions deliveryOptions) {
+		return createMainLayoutController(ureq, wControl, rootContainer, showMenu, true, deliveryOptions, null, null);
 	}
 
 	/**
@@ -158,9 +138,10 @@ public class CPUIFactory {
 	 * @return A main layout controller
 	 * @return the resource listening wrapper
 	 */
-	public OLATResourceableListeningWrapperController createMainLayoutResourceableListeningWrapperController(OLATResourceable res, UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean showMenu, boolean activateFirstPage, String initialUri) {
+	public OLATResourceableListeningWrapperController createMainLayoutResourceableListeningWrapperController(OLATResourceable res, UserRequest ureq, WindowControl wControl,
+			VFSContainer rootContainer, boolean showMenu, boolean activateFirstPage, DeliveryOptions deliveryOptions, String initialUri) {
 		//fxdiff BAKS-7 Resume function
-		CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, activateFirstPage, true, initialUri, res);
+		CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, activateFirstPage, true, deliveryOptions, initialUri, res);
 		MainLayout3ColumnsController layoutCtr = new LayoutMain3ColsController(ureq, wControl, cpCtr.getMenuComponent(), null, cpCtr.getInitialComponent(), rootContainer.getName());
 		layoutCtr.addDisposableChildController(cpCtr);
 		return new OLATResourceableListeningWrapperController(ureq, wControl, res, layoutCtr, cpCtr, ureq.getIdentity());
@@ -183,8 +164,9 @@ public class CPUIFactory {
 	 * @return A main layout controller
 	 * @return the resource listening wrapper
 	 */
-	public OLATResourceableListeningWrapperController createMainLayoutResourceableListeningWrapperController(OLATResourceable res, UserRequest ureq, WindowControl wControl, VFSContainer rootContainer) {
-		return createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, rootContainer, true, true, null);
+	public OLATResourceableListeningWrapperController createMainLayoutResourceableListeningWrapperController(OLATResourceable res, UserRequest ureq, WindowControl wControl,
+			VFSContainer rootContainer, DeliveryOptions deliveryOptions) {
+		return createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, rootContainer, true, true, deliveryOptions, null);
 	}
 
 	/**
@@ -200,8 +182,9 @@ public class CPUIFactory {
 	 * @param showMenu true to display the menu, false to hide the menu
 	 * @return A main layout preview controller
 	 */
-	public LayoutMain3ColsPreviewController createMainLayoutPreviewController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean showMenu) {
-		CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, true, true, null, null);		
+	public LayoutMain3ColsPreviewController createMainLayoutPreviewController(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer,
+			boolean showMenu, DeliveryOptions deliveryOptions) {
+		CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, true, true, deliveryOptions, null, null);		
 		LayoutMain3ColsPreviewController layoutCtr = new LayoutMain3ColsPreviewController(ureq, wControl, cpCtr.getMenuComponent(), null, cpCtr.getInitialComponent(), rootContainer.getName());
 		layoutCtr.addDisposableChildController(cpCtr); // cascade disposing requests
 		return layoutCtr;
@@ -220,8 +203,9 @@ public class CPUIFactory {
 	 * @param showMenu true to display the menu, false to hide the menu
 	 * @return A main layout preview controller
 	 */
-	public LayoutMain3ColsController createMainLayoutPreviewController_v2(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer, boolean showMenu) {
-		CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, true, true, null, null);		
+	public LayoutMain3ColsController createMainLayoutPreviewController_v2(UserRequest ureq, WindowControl wControl, VFSContainer rootContainer,
+			boolean showMenu, DeliveryOptions deliveryOptions) {
+		CPDisplayController cpCtr = new CPDisplayController(ureq, wControl, rootContainer, showMenu, true, true, true, deliveryOptions, null, null);		
 		LayoutMain3ColsController layoutCtr = new LayoutMain3ColsController(ureq, wControl, cpCtr.getMenuComponent(), null, cpCtr.getInitialComponent(), rootContainer.getName());
 		layoutCtr.addDisposableChildController(cpCtr); // cascade disposing requests
 		layoutCtr.addCssClassToMain("b_preview");
diff --git a/src/main/java/org/olat/modules/cp/TreeNodeEvent.java b/src/main/java/org/olat/modules/cp/TreeNodeEvent.java
index be9670d9396036f3db8dd18f61a7abb8cc77497f..35648e277182eb29ca9d3b407ffac807f6fecf69 100644
--- a/src/main/java/org/olat/modules/cp/TreeNodeEvent.java
+++ b/src/main/java/org/olat/modules/cp/TreeNodeEvent.java
@@ -30,6 +30,7 @@ import org.olat.core.gui.control.Event;
 
 public class TreeNodeEvent extends Event {
 
+	private static final long serialVersionUID = 4036674652971556138L;
 	private final TreeNode chosenTreeNode;
 
 	TreeNodeEvent(TreeNode chosenTreeNode) {
diff --git a/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java b/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java
index 4e48860d02139ddc0d27549c1f17f776746d5816..ad6adb8a724b5324c753009ff0f084868d7acd54 100644
--- a/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java
+++ b/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java
@@ -28,7 +28,6 @@ package org.olat.modules.scorm;
 import java.io.File;
 import java.io.IOException;
 import java.util.Iterator;
-import java.util.Locale;
 import java.util.Map;
 
 import org.olat.core.commons.fullWebApp.LayoutMain3ColsBackController;
@@ -52,9 +51,9 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.MainLayoutBasicController;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.gui.control.generic.iframe.IFrameDisplayController;
 import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.UserConstants;
 import org.olat.core.logging.AssertException;
 import org.olat.core.logging.OLATRuntimeException;
 import org.olat.core.logging.activity.LearningResourceLoggingAction;
@@ -64,6 +63,7 @@ import org.olat.core.util.WebappHelper;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.core.util.vfs.LocalFolderImpl;
 import org.olat.course.CourseModule;
+import org.olat.user.UserManager;
 
 /**
  * Description:<br>
@@ -106,7 +106,7 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController impl
 	 * @param attemptsIncremented Is the attempts counter already incremented 
 	 */
 	ScormAPIandDisplayController(UserRequest ureq, WindowControl wControl, boolean showMenu, ScormAPICallback apiCallback,
-			File cpRoot, String resourceId, String courseIdNodeId, String lesson_mode, String credit_mode,
+			File cpRoot, Long scormResourceId, String courseIdNodeId, String lesson_mode, String credit_mode,
 			boolean previewMode, String assessableType, boolean activate, boolean fullWindow, boolean attemptsIncremented) {
 		super(ureq, wControl);
 		
@@ -122,7 +122,6 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController impl
 		scorm_lesson_mode = lesson_mode;
 		
 		myContent = createVelocityContainer("display");
-		Locale loc = ureq.getLocale();
 		JSAndCSSComponent jsAdapter = new JSAndCSSComponent("apiadapter", new String[] {"js/openolat/scormApiAdapter.js"}, null);
 		myContent.put("apiadapter", jsAdapter);
 		
@@ -130,10 +129,12 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController impl
 		try {
 			scormAdapter = new OLATApiAdapter();	
 			scormAdapter.addAPIListener(apiCallback);
-			scormAdapter.init(cpRoot, resourceId, courseIdNodeId, FolderConfig.getCanonicalRoot(), this.username, ureq.getIdentity().getUser().getProperty(UserConstants.LASTNAME, loc)+", "+ureq.getIdentity().getUser().getProperty(UserConstants.FIRSTNAME, loc), lesson_mode, credit_mode, this.hashCode());
+			String fullname = UserManager.getInstance().getUserDisplayName(getIdentity().getUser());
+			String scormResourceIdStr = scormResourceId == null ? null : scormResourceId.toString();
+			scormAdapter.init(cpRoot, scormResourceIdStr, courseIdNodeId, FolderConfig.getCanonicalRoot(), username, fullname, lesson_mode, credit_mode, hashCode());
 		} catch (IOException e) {
 			showError("error.manifest.corrupted");
-			LayoutMain3ColsController ctr = new LayoutMain3ColsController(ureq, getWindowControl(), null, null, new Panel("empty"), "scorm" + resourceId);
+			LayoutMain3ColsController ctr = new LayoutMain3ColsController(ureq, getWindowControl(), null, null, new Panel("empty"), "scorm" + scormResourceId);
 			columnLayoutCtr = ctr;
 			putInitialPanel(columnLayoutCtr.getInitialComponent());
 			return;
@@ -167,7 +168,9 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController impl
 			}
 			courseOres = OresHelper.createOLATResourceableInstance(CourseModule.class, Long.valueOf(courseId));
 		}
-		iframectr = new IFrameDisplayController(ureq, wControl, new LocalFolderImpl(cpRoot), SCORM_CONTENT_FRAME,  courseOres);
+		ScormPackageConfig packageConfig = ScormMainManager.getInstance().getScormPackageConfig(cpRoot);
+		DeliveryOptions deliveryOptions = packageConfig == null ? null : packageConfig.getDeliveryOptions();
+		iframectr = new IFrameDisplayController(ureq, wControl, new LocalFolderImpl(cpRoot), SCORM_CONTENT_FRAME,  courseOres, deliveryOptions);
 		listenTo(iframectr);
 		myContent.contextPut("frameId", SCORM_CONTENT_FRAME);
 		
@@ -210,25 +213,26 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController impl
 
 		if (activate) {
 			if (previewMode) {
-				LayoutMain3ColsPreviewController ctr = new LayoutMain3ColsPreviewController(ureq, getWindowControl(), (showMenu ? menuTree : null), null, myContent, "scorm" + resourceId);
+				LayoutMain3ColsPreviewController ctr = new LayoutMain3ColsPreviewController(ureq, getWindowControl(), (showMenu ? menuTree : null), null, myContent, "scorm" + scormResourceId);
 				if(fullWindow)
 					ctr.setAsFullscreen(ureq);
 				columnLayoutCtr = ctr;
 			} else {
-				LayoutMain3ColsBackController ctr = new LayoutMain3ColsBackController(ureq, getWindowControl(), (showMenu ? menuTree : null), null, myContent, "scorm" + resourceId);
+				LayoutMain3ColsBackController ctr = new LayoutMain3ColsBackController(ureq, getWindowControl(), (showMenu ? menuTree : null), null, myContent, "scorm" + scormResourceId);
 				if(fullWindow)
 					ctr.setAsFullscreen(ureq);
 				columnLayoutCtr = ctr;
 			}
 		} else {
-			LayoutMain3ColsController ctr = new LayoutMain3ColsController(ureq, getWindowControl(), (showMenu ? menuTree : null), null, myContent, "scorm" + resourceId);
+			LayoutMain3ColsController ctr = new LayoutMain3ColsController(ureq, getWindowControl(), (showMenu ? menuTree : null), null, myContent, "scorm" + scormResourceId);
 			columnLayoutCtr = ctr;			
 			putInitialPanel(columnLayoutCtr.getInitialComponent());
 		}
 		listenTo(columnLayoutCtr);
 		
 		//scrom API calls get handled by this mapper
-		Mapper mapper = new ScormAPIMapper(ureq.getIdentity(), resourceId, courseIdNodeId, assessableType, cpRoot, scormAdapter, attemptsIncremented);
+		String scormResourceIdStr = (scormResourceId == null ? null : scormResourceId.toString());
+		Mapper mapper = new ScormAPIMapper(ureq.getIdentity(), scormResourceIdStr, courseIdNodeId, assessableType, cpRoot, scormAdapter, attemptsIncremented);
 		String scormCallbackUri = registerMapper(ureq, mapper);
 		myContent.contextPut("scormCallbackUri", scormCallbackUri+"/");
 	}
@@ -261,6 +265,14 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController impl
 		iframectr.setRawContent(rawContent);
 	}
 	
+	public DeliveryOptions getDeliveryOptions() {
+		return iframectr.getDeliveryOptions();
+	}
+	
+	public void setDeliveryOptions(DeliveryOptions config) {
+		iframectr.setDeliveryOptions(config);
+	}
+	
 	public void setContentEncoding(String encoding) {
 		iframectr.setContentEncoding(encoding);
 	}
diff --git a/src/main/java/org/olat/modules/scorm/ScormMainManager.java b/src/main/java/org/olat/modules/scorm/ScormMainManager.java
index 2291cb1ad4bc20fe6f5aeab0827a49f540d6be52..1bd39d00d358e3bf362e76e19b578a762715ea28 100644
--- a/src/main/java/org/olat/modules/scorm/ScormMainManager.java
+++ b/src/main/java/org/olat/modules/scorm/ScormMainManager.java
@@ -25,10 +25,22 @@
 package org.olat.modules.scorm;
 
 import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
 
+import org.apache.commons.io.IOUtils;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
+import org.olat.core.id.OLATResourceable;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
 import org.olat.core.manager.BasicManager;
+import org.olat.core.util.xml.XStreamHelper;
+import org.olat.fileresource.FileResourceManager;
+
+import com.thoughtworks.xstream.XStream;
 
 
 /**
@@ -40,6 +52,16 @@ import org.olat.core.manager.BasicManager;
  * @author Felix Jost, http://www.goodsolutions.ch
  */
 public class ScormMainManager extends BasicManager {
+	
+	public static final String PACKAGE_CONFIG_FILE_NAME = "ScormPackageConfig.xml";
+	
+	private static final OLog log = Tracing.createLoggerFor(ScormMainManager.class);
+	private static XStream configXstream = XStreamHelper.createXStreamInstance();
+	static {
+		configXstream.alias("packageConfig", ScormPackageConfig.class);
+		configXstream.alias("deliveryOptions", DeliveryOptions.class);
+	}
+	
 	private static ScormMainManager INSTANCE = new ScormMainManager();
 	
 	private ScormMainManager() {
@@ -50,6 +72,47 @@ public class ScormMainManager extends BasicManager {
 		return INSTANCE;
 	}
 	
+	public ScormPackageConfig getScormPackageConfig(File cpRoot) {
+		File configXml = new File(cpRoot.getParentFile(), PACKAGE_CONFIG_FILE_NAME);
+		if(configXml.exists()) {
+			ScormPackageConfig config = (ScormPackageConfig)configXstream.fromXML(configXml);
+			return config;
+		}
+		return null;
+	}
+	
+	public ScormPackageConfig getScormPackageConfig(OLATResourceable ores) {
+		FileResourceManager frm = FileResourceManager.getInstance();
+		File reFolder = frm.getFileResourceRoot(ores);
+		File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME);
+		if(configXml.exists()) {
+			ScormPackageConfig config = (ScormPackageConfig)configXstream.fromXML(configXml);
+			return config;
+		}
+		return null;
+	}
+	
+	public void setScormPackageConfig(OLATResourceable ores, ScormPackageConfig config) {
+		FileResourceManager frm = FileResourceManager.getInstance();
+		File reFolder = frm.getFileResourceRoot(ores);
+		File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME);
+		if(config == null) {
+			if(configXml.exists()) {
+				configXml.delete();
+			}
+		} else {
+			OutputStream out = null;
+			try {
+				out = new FileOutputStream(configXml);
+				configXstream.toXML(config, out);
+			} catch (IOException e) {
+				log.error("", e);
+			} finally {
+				IOUtils.closeQuietly(out);
+			}
+		}
+	}
+	
 	/**
 	 * @param ureq
 	 * @param wControl
@@ -63,12 +126,15 @@ public class ScormMainManager extends BasicManager {
 	 */
 	//fxdiff FXOLAT-116: SCORM improvements
 	public ScormAPIandDisplayController createScormAPIandDisplayController(UserRequest ureq, WindowControl wControl, boolean showMenu, ScormAPICallback apiCallback, 
-			File cpRoot, String resourceId, String courseId, String lesson_mode, String credit_mode,
+			File cpRoot, Long scormResourceId, String courseId, String lesson_mode, String credit_mode,
 			boolean previewMode, String assessableType, boolean activate, boolean fullWindow, boolean attemptsIncremented) {
 		
-		ScormAPIandDisplayController ctrl= new ScormAPIandDisplayController(ureq, wControl, showMenu, apiCallback, cpRoot, resourceId, courseId, lesson_mode, credit_mode,
+		ScormAPIandDisplayController ctrl= new ScormAPIandDisplayController(ureq, wControl, showMenu, apiCallback, cpRoot, scormResourceId, courseId, lesson_mode, credit_mode,
 				previewMode, assessableType, activate, fullWindow, attemptsIncremented);
-		ctrl.setRawContent(true);
+		
+		DeliveryOptions config = ctrl.getDeliveryOptions();
+		boolean configAllowRawContent = (config == null || config.rawContent());
+		ctrl.setRawContent(configAllowRawContent);
 		return ctrl;
 	}
 	
diff --git a/src/main/java/org/olat/modules/scorm/ScormPackageConfig.java b/src/main/java/org/olat/modules/scorm/ScormPackageConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..62090db40308c2267c2624355850b1e6b963325d
--- /dev/null
+++ b/src/main/java/org/olat/modules/scorm/ScormPackageConfig.java
@@ -0,0 +1,43 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.scorm;
+
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
+
+/**
+ * 
+ * Initial date: 29.05.2013<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ScormPackageConfig {
+
+	private DeliveryOptions deliveryOptions;
+
+	public DeliveryOptions getDeliveryOptions() {
+		return deliveryOptions;
+	}
+
+	public void setDeliveryOptions(DeliveryOptions options) {
+		this.deliveryOptions = options;
+	}
+
+
+}
diff --git a/src/main/java/org/olat/repository/controllers/RepositoryEditPropertiesController.java b/src/main/java/org/olat/repository/controllers/RepositoryEditPropertiesController.java
index 69c5bb97d2d03ee8abce5c6e4a68c660002fd285..185859e6c5389e8f5388b63894cee96c2d6aaf5b 100644
--- a/src/main/java/org/olat/repository/controllers/RepositoryEditPropertiesController.java
+++ b/src/main/java/org/olat/repository/controllers/RepositoryEditPropertiesController.java
@@ -42,6 +42,8 @@ import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.control.generic.dtabs.Activateable2;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptionsConfigurationController;
 import org.olat.core.gui.control.generic.modal.DialogBoxController;
 import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
 import org.olat.core.id.Identity;
@@ -78,10 +80,15 @@ import org.olat.fileresource.types.BlogFileResource;
 import org.olat.fileresource.types.GlossaryResource;
 import org.olat.fileresource.types.ImsCPFileResource;
 import org.olat.fileresource.types.PodcastFileResource;
+import org.olat.fileresource.types.ScormCPFileResource;
+import org.olat.ims.cp.CPManager;
+import org.olat.ims.cp.ui.CPPackageConfig;
 import org.olat.instantMessaging.InstantMessagingModule;
 import org.olat.modules.glossary.GlossaryEditSettingsController;
 import org.olat.modules.glossary.GlossaryManager;
 import org.olat.modules.glossary.GlossaryRegisterSettingsController;
+import org.olat.modules.scorm.ScormMainManager;
+import org.olat.modules.scorm.ScormPackageConfig;
 import org.olat.repository.PropPupForm;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
@@ -113,6 +120,7 @@ public class RepositoryEditPropertiesController extends BasicController implemen
 	private CourseEfficencyStatementController ceffC;
 	private CourseCalendarConfigController calCfgCtr;
 	private CourseConfigGlossaryController cglosCtr;
+	private DeliveryOptionsConfigurationController deliveryOptionsCtrl;
 	//fxdiff VCRP-1,2: access control of resources
 	private AccessConfigurationController acCtr;
 	private TabbedPane tabbedPane;
@@ -208,19 +216,19 @@ public class RepositoryEditPropertiesController extends BasicController implemen
 			  tabbedPane.addTab(translate("tab.layout"), clayoutC.getInitialComponent());
 
 			  csfC = new CourseSharedFolderController(ureq, getWindowControl(), changedCourseConfig);
-			  this.listenTo(csfC);
+			  listenTo(csfC);
 			  tabbedPane.addTab(translate("tab.sharedfolder"), csfC.getInitialComponent());
 
 			  ceffC = new CourseEfficencyStatementController(ureq, getWindowControl(), changedCourseConfig);
-			  this.listenTo(ceffC);
+			  listenTo(ceffC);
 			  efficiencyConfigPos = tabbedPane.addTab(translate("tab.efficencystatement"), ceffC.getInitialComponent());
 			
 			  calCfgCtr = new CourseCalendarConfigController(ureq, getWindowControl(), changedCourseConfig);
-			  this.listenTo(calCfgCtr);
+			  listenTo(calCfgCtr);
 			  tabbedPane.addTab(translate("tab.calendar"), calCfgCtr.getInitialComponent());
 
 			  cglosCtr = new CourseConfigGlossaryController(ureq, getWindowControl(), changedCourseConfig, course.getResourceableId());
-			  this.listenTo(cglosCtr);
+			  listenTo(cglosCtr);
 			  tabbedPane.addTab(translate("tab.glossary"), cglosCtr.getInitialComponent());		
 			}     
 		} else if (repositoryEntry.getOlatResource().getResourceableTypeName().equals(GlossaryResource.TYPE_NAME)){
@@ -237,6 +245,18 @@ public class RepositoryEditPropertiesController extends BasicController implemen
 				Controller quotaCtrl = qm.getQuotaEditorInstance(ureq, wControl, cpRoot.getRelPath(), false);
 				tabbedPane.addTab(translate("tab.quota.edit"), quotaCtrl.getInitialComponent());
 			}
+			
+			CPPackageConfig cpConfig = CPManager.getInstance().getCPPackageConfig(repositoryEntry.getOlatResource());
+			DeliveryOptions config = cpConfig == null ? null : cpConfig.getDeliveryOptions();
+			deliveryOptionsCtrl = new DeliveryOptionsConfigurationController(ureq, getWindowControl(), config);
+			tabbedPane.addTab(translate("tab.layout"), deliveryOptionsCtrl.getInitialComponent());
+			listenTo(deliveryOptionsCtrl);
+		}  else if (ScormCPFileResource.TYPE_NAME.equals(repositoryEntry.getOlatResource().getResourceableTypeName())) {
+			ScormPackageConfig scormConfig = ScormMainManager.getInstance().getScormPackageConfig(repositoryEntry.getOlatResource());
+			DeliveryOptions config = scormConfig == null ? null : scormConfig.getDeliveryOptions();
+			deliveryOptionsCtrl = new DeliveryOptionsConfigurationController(ureq, getWindowControl(), config);
+			tabbedPane.addTab(translate("tab.layout"), deliveryOptionsCtrl.getInitialComponent());
+			listenTo(deliveryOptionsCtrl);
 		} else if (BlogFileResource.TYPE_NAME.equals(repositoryEntry.getOlatResource().getResourceableTypeName())
 				|| PodcastFileResource.TYPE_NAME.equals(repositoryEntry.getOlatResource().getResourceableTypeName())) {
 			QuotaManager qm = QuotaManager.getInstance();
@@ -465,7 +485,27 @@ public class RepositoryEditPropertiesController extends BasicController implemen
 				
 				return;
 			}
+		} else if(source == deliveryOptionsCtrl) {
+			if(event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) {
+				DeliveryOptions config = deliveryOptionsCtrl.getDeliveryOptions();
+				if (ImsCPFileResource.TYPE_NAME.equals(repositoryEntry.getOlatResource().getResourceableTypeName())) {
+					CPPackageConfig cpConfig = CPManager.getInstance().getCPPackageConfig(repositoryEntry.getOlatResource());
+					if(cpConfig == null) {
+						cpConfig = new CPPackageConfig();
+					}
+					cpConfig.setDeliveryOptions(config);
+					CPManager.getInstance().setCPPackageConfig(repositoryEntry.getOlatResource(), cpConfig);
+				} else if (ScormCPFileResource.TYPE_NAME.equals(repositoryEntry.getOlatResource().getResourceableTypeName())) {
+					ScormPackageConfig scormConfig = ScormMainManager.getInstance().getScormPackageConfig(repositoryEntry.getOlatResource());
+					if(scormConfig == null) {
+						scormConfig = new ScormPackageConfig();
+					}
+					scormConfig.setDeliveryOptions(config);
+					ScormMainManager.getInstance().setScormPackageConfig(repositoryEntry.getOlatResource(), scormConfig);
+				}
+			}
 		}
+		
 	  } catch (RuntimeException e) {
 			log.warn(RELEASE_LOCK_AT_CATCH_EXCEPTION);			
 			this.dispose();
diff --git a/src/main/java/org/olat/repository/handlers/ImsCPHandler.java b/src/main/java/org/olat/repository/handlers/ImsCPHandler.java
index 37bcefb82ef46c72c93a5f37165da80b7f9a330e..26565c104f98f76737e12acc8dafd3ff29f34b40 100644
--- a/src/main/java/org/olat/repository/handlers/ImsCPHandler.java
+++ b/src/main/java/org/olat/repository/handlers/ImsCPHandler.java
@@ -34,12 +34,14 @@ import org.olat.core.commons.modules.bc.vfs.OlatRootFolderImpl;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.gui.control.generic.layout.MainLayoutController;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.context.BusinessControl;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.logging.AssertException;
+import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.coordinate.LockResult;
 import org.olat.core.util.vfs.LocalFolderImpl;
@@ -47,10 +49,11 @@ import org.olat.core.util.vfs.Quota;
 import org.olat.core.util.vfs.QuotaManager;
 import org.olat.core.util.vfs.callbacks.FullAccessWithQuotaCallback;
 import org.olat.core.util.vfs.callbacks.VFSSecurityCallback;
-import org.olat.course.nodes.cp.CPRunController;
 import org.olat.fileresource.FileResourceManager;
 import org.olat.fileresource.types.ImsCPFileResource;
+import org.olat.ims.cp.CPManager;
 import org.olat.ims.cp.ui.CPEditMainController;
+import org.olat.ims.cp.ui.CPPackageConfig;
 import org.olat.ims.cp.ui.CreateNewCPController;
 import org.olat.modules.cp.CPUIFactory;
 import org.olat.repository.RepositoryEntry;
@@ -70,6 +73,8 @@ import org.olat.resource.accesscontrol.ui.RepositoryMainAccessControllerWrapper;
  */
 public class ImsCPHandler extends FileHandler implements RepositoryHandler {
 	
+	private static final OLog log = Tracing.createLoggerFor(ImsCPHandler.class);
+	
 	public static final String PROCESS_CREATENEW = "new";
 	public static final String PROCESS_IMPORT = "add";
 	
@@ -133,22 +138,25 @@ public class ImsCPHandler extends FileHandler implements RepositoryHandler {
 		BusinessControl bc = wControl.getBusinessControl();
 		ContextEntry ce = bc.popLauncherContextEntry();
 		MainLayoutController layoutCtr;
+		
+		CPPackageConfig packageConfig = CPManager.getInstance().getCPPackageConfig(res);
+		DeliveryOptions deliveryOptions = (packageConfig == null ? null : packageConfig.getDeliveryOptions());
 		if ( ce != null ) { // a context path is left for me
-			Tracing.logDebug("businesscontrol (for further jumps) would be:"+bc, CPRunController.class);
+			log.debug("businesscontrol (for further jumps) would be:"+bc);
 			OLATResourceable ores = ce.getOLATResourceable();
-			Tracing.logDebug("OLATResourceable=" + ores, CPRunController.class);
+			log.debug("OLATResourceable=" + ores);
 			String typeName = ores.getResourceableTypeName();
 			// typeName format: 'path=/test1/test2/readme.txt'
 			// First remove prefix 'path='
 			String path = typeName.substring("path=".length());
 			if  (path.length() > 0) {
-			  Tracing.logDebug("direct navigation to container-path=" + path, CPRunController.class);
-			  layoutCtr = CPUIFactory.getInstance().createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, vfsWrapper, true, false, path);
+			  log.debug("direct navigation to container-path=" + path);
+			  layoutCtr = CPUIFactory.getInstance().createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, vfsWrapper, true, false, deliveryOptions, path);
 			} else {
-				layoutCtr = CPUIFactory.getInstance().createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, vfsWrapper);
+				layoutCtr = CPUIFactory.getInstance().createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, vfsWrapper, deliveryOptions);
 			}
 		} else {
-			layoutCtr = CPUIFactory.getInstance().createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, vfsWrapper);
+			layoutCtr = CPUIFactory.getInstance().createMainLayoutResourceableListeningWrapperController(res, ureq, wControl, vfsWrapper, deliveryOptions);
 		}
 		//fxdiff VCRP-1: access control of learn resources
 		RepositoryMainAccessControllerWrapper wrapper = new RepositoryMainAccessControllerWrapper(ureq, wControl, res, layoutCtr);
diff --git a/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java b/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java
index 5f70ce070463b09c3b23eb08004a7574fe3bb82d..b35648c21ca188004d9249870f2af8523e8aa223 100644
--- a/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java
+++ b/src/main/java/org/olat/repository/handlers/SCORMCPHandler.java
@@ -116,7 +116,7 @@ public class SCORMCPHandler extends FileHandler implements RepositoryHandler {
 		}
 		//fxdiff FXOLAT-116: SCORM improvements
 		MainLayoutController realController = ScormMainManager.getInstance().createScormAPIandDisplayController(ureq, wControl, true, null, cpRoot,
-				res.getResourceableId().toString(), null, "browse", "no-credit", false, null, false, false, false);
+				res.getResourceableId(), null, "browse", "no-credit", false, null, false, false, false);
 		//fxdiff VCRP-1: access control of learn resources
 		RepositoryMainAccessControllerWrapper wrapper = new RepositoryMainAccessControllerWrapper(ureq, wControl, res, realController);
 		return wrapper; 
diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_9_0_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_9_0_0.java
index 8b8edf0ed84d70c4f55a797d1af26fd6eab190cd..e9954fa25249d2d4950ae4820ffff39f7eca5bb0 100644
--- a/src/main/java/org/olat/upgrade/OLATUpgrade_9_0_0.java
+++ b/src/main/java/org/olat/upgrade/OLATUpgrade_9_0_0.java
@@ -1,3 +1,22 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
 package org.olat.upgrade;
 
 import java.io.ByteArrayInputStream;