diff --git a/core/js/compatibility.js b/core/js/compatibility.js
deleted file mode 100644
index ac942d202e82483cb2c7337c29f4764d20bc49fd..0000000000000000000000000000000000000000
--- a/core/js/compatibility.js
+++ /dev/null
@@ -1,155 +0,0 @@
-/**
- * implement Object.create for browsers without native support
- */
-if (typeof Object.create !== 'function') {
-	Object.create = function (o) {
-		function F() {}
-		F.prototype = o;
-		return new F();
-	};
-}
-
-/**
- * implement Object.keys for browsers without native support
- */
-if (typeof Object.keys !== 'function') {
-	Object.keys = function(o) {
-		if (o !== Object(o)) {
-			throw new TypeError('Object.keys called on a non-object');
-		}
-		var k=[],p;
-		for (p in o) {
-			if (Object.prototype.hasOwnProperty.call(o,p)) {
-				k.push(p);
-			}
-		}
-		return k;
-	};
-}
-
-/**
- * implement Array.filter for browsers without native support
- */
-if (!Array.prototype.filter) {
-	Array.prototype.filter = function(fun /*, thisp*/) {
-		var len = this.length >>> 0;
-		if (typeof fun !== "function"){
-			throw new TypeError();
-		}
-
-		var res = [];
-		var thisp = arguments[1];
-		for (var i = 0; i < len; i++) {
-			if (i in this) {
-				var val = this[i]; // in case fun mutates this
-				if (fun.call(thisp, val, i, this)) {
-					res.push(val);
-				}
-			}
-		}
-		return res;
-	};
-}
-
-/**
- * implement Array.indexOf for browsers without native support
- */
-if (!Array.prototype.indexOf){
-	Array.prototype.indexOf = function(elt /*, from*/)
-	{
-		var len = this.length;
-
-		var from = Number(arguments[1]) || 0;
-		from = (from < 0) ? Math.ceil(from) : Math.floor(from);
-		if (from < 0){
-			from += len;
-		}
-
-		for (; from < len; from++)
-		{
-			if (from in this && this[from] === elt){
-				return from;
-			}
-		}
-		return -1;
-	};
-}
-
-/**
- * implement Array.map for browsers without native support
- */
-if (!Array.prototype.map){
-	Array.prototype.map = function(fun /*, thisp */){
-		"use strict";
-
-		if (this === void 0 || this === null){
-			throw new TypeError();
-		}
-
-		var t = Object(this);
-		var len = t.length >>> 0;
-		if (typeof fun !== "function"){
-			throw new TypeError();
-		}
-
-		var res = new Array(len);
-		var thisp = arguments[1];
-		for (var i = 0; i < len; i++){
-			if (i in t){
-				res[i] = fun.call(thisp, t[i], i, t);
-			}
-		}
-
-		return res;
-	};
-}
-
-//https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind
-if (!Function.prototype.bind) {
-	Function.prototype.bind = function (oThis) {
-		if (typeof this !== "function") {
-			// closest thing possible to the ECMAScript 5 internal IsCallable function
-			throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
-		}
-
-		var aArgs = Array.prototype.slice.call(arguments, 1),
-			fToBind = this,
-			fNOP = function () {},
-			fBound = function () {
-				return fToBind.apply(this instanceof fNOP && oThis
-					? this
-					: oThis,
-					aArgs.concat(Array.prototype.slice.call(arguments)));
-			};
-
-		fNOP.prototype = this.prototype;
-		fBound.prototype = new fNOP();
-
-		return fBound;
-	};
-}
-
-//https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/Trim
-if(!String.prototype.trim) {
-	String.prototype.trim = function () {
-		return this.replace(/^\s+|\s+$/g,'');
-	};
-}
-
-// Older Firefoxes doesn't support outerHTML
-// From http://stackoverflow.com/questions/1700870/how-do-i-do-outerhtml-in-firefox#answer-3819589
-function outerHTML(node){
-	// In newer browsers use the internal property otherwise build a wrapper.
-	return node.outerHTML || (
-	function(n){
-		var div = document.createElement('div'), h;
-		div.appendChild( n.cloneNode(true) );
-		h = div.innerHTML;
-		div = null;
-		return h;
-	})(node);
-}
-
-// devicePixelRatio for IE10
-window.devicePixelRatio = window.devicePixelRatio ||
-	window.screen.deviceXDPI / window.screen.logicalXDPI || 1;
diff --git a/core/js/core.json b/core/js/core.json
index e651c9d7597a6ccc55d252e675a5c04bcfbe0a22..c98928d0fedfbd3743a818f79e7fd8cf0fbe8c98 100644
--- a/core/js/core.json
+++ b/core/js/core.json
@@ -20,7 +20,6 @@
 		"placeholder.js"
 	],
 	"modules": [
-		"compatibility.js",
 		"jquery.ocdialog.js",
 		"oc-dialogs.js",
 		"js.js",
diff --git a/core/js/octemplate.js b/core/js/octemplate.js
index 67aa7d69cce0f5732d7bc0d638cf8f5324b34078..b24ad95c2b0027a32628482f2695c76d8e8aa94f 100644
--- a/core/js/octemplate.js
+++ b/core/js/octemplate.js
@@ -76,7 +76,7 @@
 		},
 		// From stackoverflow.com/questions/1408289/best-way-to-do-variable-interpolation-in-javascript
 		_build: function(o){
-			var data = this.elem.attr('type') === 'text/template' ? this.elem.html() : outerHTML(this.elem.get(0));
+			var data = this.elem.attr('type') === 'text/template' ? this.elem.html() : this.elem.get(0).outerHTML;
 			try {
 				return data.replace(/{([^{}]*)}/g,
 					function (a, b) {
diff --git a/lib/private/legacy/template.php b/lib/private/legacy/template.php
index 67a8b3ec6e1dd6e66969019843e12db1063ae8b3..b43b4da839a9a6a440029c86fbfba2cf334eca77 100644
--- a/lib/private/legacy/template.php
+++ b/lib/private/legacy/template.php
@@ -143,7 +143,6 @@ class OC_Template extends \OC\Template\Base {
 			OC_Util::addScript("oc-dialogs", null, true);
 			OC_Util::addScript("jquery.ocdialog", null, true);
 			OC_Util::addStyle("jquery.ocdialog");
-			OC_Util::addScript("compatibility", null, true);
 			OC_Util::addScript('files/fileinfo');
 			OC_Util::addScript('files/client');