diff --git a/src/main/java/org/olat/core/dispatcher/_spring/dispatcherContext.xml b/src/main/java/org/olat/core/dispatcher/_spring/dispatcherContext.xml
index 7d853b9f01f897e01d2e2d978e705cd878ee6789..6b38a3bb5ecc456bb7558d70bfd74ad446e52a75 100644
--- a/src/main/java/org/olat/core/dispatcher/_spring/dispatcherContext.xml
+++ b/src/main/java/org/olat/core/dispatcher/_spring/dispatcherContext.xml
@@ -34,9 +34,6 @@
 				<entry key="/shib/">
 					<ref bean="shibbean" />
 				</entry>
-				<entry key="/mshib/">
-					<ref bean="shibmobilebean" />
-				</entry>
 				<entry key="/admin.html">
 					<ref bean="adminbean" />
 				</entry>
@@ -189,15 +186,6 @@
 
 	<bean id="shibbean" class="org.olat.shibboleth.ShibbolethDispatcher">
 		<property name="shibbolethModule" ref="shibbolethModule"/>
-		<property name="restSecurityBean" ref="restSecurityBean"/>
-		<property name="securityManager" ref="baseSecurityManager"/>
-		<property name="userDeletionManager" ref="userDeletionManager"/>
-	</bean>
-	
-	<bean id="shibmobilebean" class="org.olat.shibboleth.ShibbolethDispatcher">
-		<property name="mobile" value="true"/>
-		<property name="shibbolethModule" ref="shibbolethModule"/>
-		<property name="restSecurityBean" ref="restSecurityBean"/>
 		<property name="securityManager" ref="baseSecurityManager"/>
 		<property name="userDeletionManager" ref="userDeletionManager"/>
 	</bean>
diff --git a/src/main/java/org/olat/core/helpers/Settings.java b/src/main/java/org/olat/core/helpers/Settings.java
index 667d7aa6bc7b71cf30de6fc679dfc02910589438..856043374a4bdee9afd3fae9715a2f29f017ba9c 100644
--- a/src/main/java/org/olat/core/helpers/Settings.java
+++ b/src/main/java/org/olat/core/helpers/Settings.java
@@ -69,7 +69,6 @@ public class Settings {
 	private static String clusterMode;
 	private static Date buildDate;
 	private static String repoRevision;
-	private static String crossOriginFilter;
 	private static File guiCustomThemePath;
 	
 	private static int securePort;
@@ -379,14 +378,6 @@ public class Settings {
 		return uri;
 	}
 	
-	public static String getCrossOriginFilter() {
-		return crossOriginFilter;
-	}
-	
-	public void setCrossOriginFilter(String crossOriginFilter) {
-		Settings.crossOriginFilter = crossOriginFilter;
-	}
-	
 	/**
 	 * @return True if this is a JUnit test.
 	 * 
diff --git a/src/main/java/org/olat/core/servlets/CrossOriginFilter.java b/src/main/java/org/olat/core/servlets/CrossOriginFilter.java
deleted file mode 100644
index acdec93b4a59ff2dca6fa3eb91ebb123c78c5e88..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/core/servlets/CrossOriginFilter.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * <p>
- * Copyright (c) frentix GmbH<br>
- * http://www.frentix.com<br>
- */
-package org.olat.core.servlets;
-
-import java.io.IOException;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.olat.core.helpers.Settings;
-import org.olat.core.util.StringHelper;
-
-/**
- * 
- * Allow cross origin for our javascript client
- * 
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- */
-public class CrossOriginFilter implements Filter {
-
-	@Override
-	public void init(FilterConfig filterConfig) throws ServletException {
-		//
-	}
-	
-	@Override
-	public void destroy() {
-		//
-	}
-
-	@Override
-	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
-		addHeaders(request, response);
-		chain.doFilter(request, response);
-		addHeaders(request, response);
-	}
-	
-	private void addHeaders(ServletRequest request, ServletResponse response) {
-		if(response instanceof HttpServletResponse) {
-			HttpServletRequest httpRequest = (HttpServletRequest)request;
-			HttpServletResponse httpResponse = (HttpServletResponse)response;
-			String origin = httpRequest.getHeader("origin");
-			if(isDomainAllowed(origin)) {
-				if(origin != null && !origin.isEmpty()) {
-					httpResponse.setHeader("Access-Control-Allow-Origin", origin);
-				}
-				String headers = httpRequest.getHeader("access-control-request-headers");
-				if(headers != null && !headers.isEmpty()) {
-					httpResponse.setHeader("Access-Control-Allow-Headers", headers);
-				}
-				httpResponse.setHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE, GET, OPTIONS");
-				httpResponse.setHeader("Access-Control-Max-Age", "1728000");
-
-				String method = httpRequest.getHeader("access-control-request-method");
-				if("OPTIONS".equals(method)) {
-					httpResponse.setHeader("Access-Control-Allow-Credentials", "true");
-				}
-			}
-		}
-	}
-	
-	private boolean isDomainAllowed(String origin) {
-		String allowedDomains = Settings.getCrossOriginFilter();
-		if(StringHelper.containsNonWhitespace(allowedDomains) && StringHelper.containsNonWhitespace(origin)) {
-			if("*".equals(allowedDomains)) {
-				return true;
-			}
-			String[] domains = allowedDomains.split(",");
-			for(String domain:domains) {
-				if(domain.equals(origin)) {
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/util/_spring/utilCorecontext.xml b/src/main/java/org/olat/core/util/_spring/utilCorecontext.xml
index 42bb91e467cf2ecdbf158b4e23929c6f4a1f10b0..8574eb3e3131b43fa9d13c5e6e2011f87862151b 100644
--- a/src/main/java/org/olat/core/util/_spring/utilCorecontext.xml
+++ b/src/main/java/org/olat/core/util/_spring/utilCorecontext.xml
@@ -73,8 +73,7 @@
 				<value>.*Gecko/200[0123456].*</value>	<!-- Gecko engine older than 2006  -->
 				<value>.*Lynx.*</value>					<!-- Lynx console browser (no js) -->
 			</list>
-		</property>
-		<property name="crossOriginFilter" value="${allow.cross.origin.domain}"/>				
+		</property>		
 		<!-- 
 			Optional path to a directory which contains custom themes. This is an alternative to placing the theme
 			into the webapp, default is to have your custom themes in olatdata/customizing/themes
diff --git a/src/main/java/org/olat/shibboleth/ShibbolethDispatcher.java b/src/main/java/org/olat/shibboleth/ShibbolethDispatcher.java
index fcf07e40c8fe4043b850ad1266368fa47cf27999..5c439d1ce910723dab6e12de61834341b664e701 100644
--- a/src/main/java/org/olat/shibboleth/ShibbolethDispatcher.java
+++ b/src/main/java/org/olat/shibboleth/ShibbolethDispatcher.java
@@ -27,7 +27,6 @@ package org.olat.shibboleth;
 
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
@@ -61,7 +60,6 @@ import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
 import org.olat.core.util.WebappHelper;
 import org.olat.core.util.i18n.I18nModule;
-import org.olat.restapi.security.RestSecurityBean;
 import org.olat.shibboleth.manager.ShibbolethAttributes;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -80,23 +78,13 @@ public class ShibbolethDispatcher implements Dispatcher{
 	public static final String PATH_SHIBBOLETH = "/shib/";
 
 	private Translator translator;
-	private boolean mobile = false;
 	private BaseSecurity securityManager;
 	private ShibbolethModule shibbolethModule;
-	private RestSecurityBean restSecurityBean;
 	private UserDeletionManager userDeletionManager;
 
 	@Autowired
 	private ShibbolethManager shibbolethManager;
 
-	/**
-	 * [used by Spring]
-	 * @param mobile
-	 */
-	public void setMobile(boolean mobile) {
-		this.mobile = mobile;
-	}
-
 	/**
 	 * [used by Spring]
 	 * @param shibbolethModule
@@ -105,14 +93,6 @@ public class ShibbolethDispatcher implements Dispatcher{
 		this.shibbolethModule = shibbolethModule;
 	}
 
-	/**
-	 * [used by Spring]
-	 * @param restSecurityBean
-	 */
-	public void setRestSecurityBean(RestSecurityBean restSecurityBean) {
-		this.restSecurityBean = restSecurityBean;
-	}
-
 	/**
 	 * [used by Spring]
 	 * @param securityManager
@@ -142,16 +122,11 @@ public class ShibbolethDispatcher implements Dispatcher{
 		if(translator==null) {
 			translator = Util.createPackageTranslator(ShibbolethDispatcher.class, I18nModule.getDefaultLocale());
 		}
-		String uri = req.getRequestURI();
+
 		if (!shibbolethModule.isEnableShibbolethLogins()){
-			throw new OLATSecurityException("Got shibboleth request but shibboleth is not enabled: " + uri);
-		}
-		try {	uri = URLDecoder.decode(uri, "UTF-8");
-		} catch (UnsupportedEncodingException e) {
-			throw new AssertException("UTF-8 encoding not supported!!!!");
+			throw new OLATSecurityException("Got shibboleth request but shibboleth is not enabled");
 		}
 		String uriPrefix = DispatcherModule.getLegacyUriPrefix(req);
-		uri = uri.substring(uriPrefix.length()); // guaranteed to exist by DispatcherAction
 
 		Map<String, String> attributesMap = getShibbolethAttributesFromRequest(req);
 		ShibbolethAttributes shibbolethAttriutes = CoreSpringFactory.getImpl(ShibbolethAttributes.class);
@@ -213,22 +188,12 @@ public class ShibbolethDispatcher implements Dispatcher{
 		ureq.getUserSession().getIdentityEnvironment().addAttributes(
 				shibbolethModule.getAttributeTranslator().translateAttributesMap(shibbolethAttriutes.toMap()));
 
-		if(mobile) {
-			String token = restSecurityBean.generateToken(ureq.getIdentity(), ureq.getHttpReq().getSession(true));
-
-			try {
-				resp.sendRedirect(WebappHelper.getServletContextPath() + "/mobile?x-olat-token=" + token + "&username=" + ureq.getIdentity().getName());
-			} catch (IOException e) {
-				log.error("Redirect to mobile app.", e);
-			}
+		MediaResource mr = ureq.getDispatchResult().getResultingMediaResource();
+		if (mr instanceof RedirectMediaResource) {
+			RedirectMediaResource rmr = (RedirectMediaResource)mr;
+			rmr.prepare(resp);
 		} else {
-			MediaResource mr = ureq.getDispatchResult().getResultingMediaResource();
-			if (mr instanceof RedirectMediaResource) {
-				RedirectMediaResource rmr = (RedirectMediaResource)mr;
-				rmr.prepare(resp);
-			} else {
-				DispatcherModule.redirectToDefaultDispatcher(resp); // error, redirect to login screen
-			}
+			DispatcherModule.redirectToDefaultDispatcher(resp); // error, redirect to login screen
 		}
 	}
 
@@ -309,15 +274,15 @@ public class ShibbolethDispatcher implements Dispatcher{
 	 * @param req
 	 * @param resp
 	 */
-	private void handleException(Throwable e, HttpServletRequest req, HttpServletResponse resp, Translator translator) {
+	private void handleException(Throwable e, HttpServletRequest req, HttpServletResponse resp, Translator transl) {
 		UserRequest ureq = new UserRequestImpl(ShibbolethDispatcher.PATH_SHIBBOLETH, req, resp);
 		if(e instanceof ShibbolethException) {
 			String userMsg = "";
 			int errorCode = ((ShibbolethException)e).getErrorCode();
 			switch (errorCode) {
-				case ShibbolethException.GENERAL_SAML_ERROR: userMsg = translator.translate("error.shibboleth.generic"); break;
-				case ShibbolethException.UNIQUE_ID_NOT_FOUND: userMsg = translator.translate("error.unqueid.notfound"); break;
-				default: userMsg = translator.translate("error.shibboleth.generic"); break;
+				case ShibbolethException.GENERAL_SAML_ERROR: userMsg = transl.translate("error.shibboleth.generic"); break;
+				case ShibbolethException.UNIQUE_ID_NOT_FOUND: userMsg = transl.translate("error.unqueid.notfound"); break;
+				default: userMsg = transl.translate("error.shibboleth.generic"); break;
 			}
 			showMessage(ureq,"org.opensaml.SAMLException: " + e.getMessage(), e, userMsg, ((ShibbolethException)e).getContactPersonEmail());
 			return;
diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties
index 3348f67dd672ce10b3df510633824703d01e3430..3f80917a7e0fc6c39e54ec2587cf423158f24058 100644
--- a/src/main/resources/serviceconfig/olat.properties
+++ b/src/main/resources/serviceconfig/olat.properties
@@ -537,11 +537,6 @@ server.port=8080
 # OLAT JMX server port (must be unique per node in a cluster)
 jmx.rmi.port=3000
 
-#allow an other web site to use the REST API with Javascript
-#list of domains separated with , or * for allow all
-allow.cross.origin.domain=
-allow.cross.origin.domain.values=*,www.frentix.com
-
 ########################################################################
 # MathJAX CDN
 ########################################################################
diff --git a/src/main/webapp-tomcat/WEB-INF/web.xml b/src/main/webapp-tomcat/WEB-INF/web.xml
index 760b48ba8e564c00f5bd43af505990eaa2a8630b..bdfa32926c5ac08d9f16db0932184a4e0f3ca59d 100644
--- a/src/main/webapp-tomcat/WEB-INF/web.xml
+++ b/src/main/webapp-tomcat/WEB-INF/web.xml
@@ -42,11 +42,6 @@
 		<filter-class>org.olat.resource.accesscontrol.provider.paypal.PaypalIPNFilter</filter-class>
 	</filter>
 	
-	<filter>
-		<filter-name>CrossOriginFilter</filter-name>
-		<filter-class>org.olat.core.servlets.CrossOriginFilter</filter-class>
-	</filter>
-	
 	<filter>
 		<filter-name>RESTApiLoginFilter</filter-name>
 		<filter-class>org.olat.restapi.security.RestApiLoginFilter</filter-class>
@@ -68,11 +63,6 @@
 		<url-pattern>/paypal/*</url-pattern>
 	</filter-mapping>
 	
-	<filter-mapping>
-		<filter-name>CrossOriginFilter</filter-name>
-		<url-pattern>/restapi/*</url-pattern>
-	</filter-mapping>
-	
 	<filter-mapping>
 		<filter-name>RESTApiLoginFilter</filter-name>
 		<url-pattern>/restapi/*</url-pattern>
diff --git a/src/main/webapp-wildfly/WEB-INF/web.xml b/src/main/webapp-wildfly/WEB-INF/web.xml
index 46eac91f6a09ed7aeb517e82c5753cd97d4f9649..5ed599594f9c9c70c8aff01f8cbaf7fd739b4add 100644
--- a/src/main/webapp-wildfly/WEB-INF/web.xml
+++ b/src/main/webapp-wildfly/WEB-INF/web.xml
@@ -47,11 +47,6 @@
 		<filter-class>org.olat.resource.accesscontrol.provider.paypal.PaypalIPNFilter</filter-class>
 	</filter>
 	
-	<filter>
-		<filter-name>CrossOriginFilter</filter-name>
-		<filter-class>org.olat.core.servlets.CrossOriginFilter</filter-class>
-	</filter>
-	
 	<filter>
 		<filter-name>RESTApiLoginFilter</filter-name>
 		<filter-class>org.olat.restapi.security.RestApiLoginFilter</filter-class>
@@ -84,11 +79,6 @@
 		<url-pattern>/paypal/*</url-pattern>
 	</filter-mapping>
 	
-	<filter-mapping>
-		<filter-name>CrossOriginFilter</filter-name>
-		<url-pattern>/restapi/*</url-pattern>
-	</filter-mapping>
-	
 	<filter-mapping>
 		<filter-name>RESTApiLoginFilter</filter-name>
 		<url-pattern>/restapi/*</url-pattern>
diff --git a/src/test/java/org/olat/core/gui/render/TestRenderStaticURLCacheHeaders.java b/src/test/java/org/olat/core/gui/render/TestRenderStaticURLCacheHeaders.java
deleted file mode 100644
index 39e29fdbef57a96030c6dcc1d87fede42c4fe294..0000000000000000000000000000000000000000
--- a/src/test/java/org/olat/core/gui/render/TestRenderStaticURLCacheHeaders.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <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
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <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>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.  
-* <p>
-*/
-package org.olat.core.gui.render;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.junit.Assume.assumeNoException;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import org.junit.Test;
-
-/**
- * Description:<br>
- * downloads the entry page from olat*.uzh.ch and checks if the response
- * headers are sent with proper cache control entries like:
- * Cache-Control: max-age=31536000, public
- * This allows browsers to cache static resources and minimize traffic which returns 304 (not modified). 
- * If the tests fails make sure that http.conf from apache has the following entry
- * 
- * <FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> 
- *	Header set Cache-Control "max-age=31536000, public" 
- * </FilesMatch>
- * 
- * <P>
- * Initial Date: 17.01.2011 <br>
- * 
- * @author guido
- */
-public class TestRenderStaticURLCacheHeaders {
-
-	private String[] uris = {"https://olatng.uzh.ch/", "https://olat.uzh.ch/"};
-	
-	@Test
-	public void cacheHeaders() {
-		for (int i = 0; i < uris.length; i++) {
-			try {
-				loadFromUrl(uris[i]);
-			} catch (Exception e) {
-				fail(uris[i]+" from server failed with the following message: "+e.getMessage());
-			}
-		}
-	}
-	
-
-	public void loadFromUrl(String uri) throws IOException, MalformedURLException, ParseException {
-		URL url;
-		HttpURLConnection uc = null;
-		int responseCode = 0;
-		try {
-			url = new URL(uri + "olat/dmz/");
-			uc = (HttpURLConnection) url.openConnection();
-			responseCode = uc.getResponseCode();
-		} catch (Exception e) {
-			//skip if connection cannot be made but check every few month that url's are correct
-			SimpleDateFormat format = new SimpleDateFormat("dd.MM.yy");
-			Date when = format.parse("27.03.11"); 
-			//set date in future to pass test if urls are not correct anymore
-			//but if time has passed we want the test to fail to adjust the url's
-			if (new Date().before(when)) {
-				assumeNoException(e);
-			}
-		}
-
-		assertEquals(200, responseCode);
-		assertEquals(true, uc.getContentType().startsWith("text/html"));
-		BufferedReader in = new BufferedReader(new InputStreamReader(uc
-				.getInputStream()));
-		String inputLine;
-		// grab the first url that points to an static resource to check headers
-		while ((inputLine = in.readLine()) != null) {
-			if (inputLine.contains("src=\"/olat/raw/")) {
-				//System.out.println("Found line: " + inputLine);
-				break;
-			}
-		}
-		in.close();
-
-		String jsUrl = inputLine.substring(inputLine.indexOf("src=\"") + 6,
-				inputLine.lastIndexOf("\""));
-		assertTrue(jsUrl.startsWith("olat/"));
-		url = new URL(uri + jsUrl);
-		uc = (HttpURLConnection) url.openConnection();
-		assertEquals(200, uc.getResponseCode());
-		// the cached elements in olat e.g. js, css ... should have an cache
-		// lifetime of one year
-		assertEquals("max-age=31536000, public", uc.getHeaderField("Cache-Control"));
-
-	}
-
-}