diff --git a/apps/files/controller/viewcontroller.php b/apps/files/controller/viewcontroller.php
index 9fe34521332b1d30db7fd63e78e33a7fce20453a..ded6fd555df9bda312a26abdba25d00be5d6ade1 100644
--- a/apps/files/controller/viewcontroller.php
+++ b/apps/files/controller/viewcontroller.php
@@ -137,7 +137,6 @@ class ViewController extends Controller {
 		\OCP\Util::addscript('files', 'app');
 		\OCP\Util::addscript('files', 'file-upload');
 		\OCP\Util::addscript('files', 'newfilemenu');
-		\OCP\Util::addscript('files', 'jquery.iframe-transport');
 		\OCP\Util::addscript('files', 'jquery.fileupload');
 		\OCP\Util::addscript('files', 'jquery-visibility');
 		\OCP\Util::addscript('files', 'fileinfomodel');
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index fca69064cde2a4b0fdd8b58bdd5203f40d13af4b..b88a7031dba9cda5d3a43712fc4339346b965f0e 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -504,7 +504,7 @@ OC.Upload = {
 						//fetch response from iframe
 						response = data.result[0].body.innerText;
 					}
-					var result = $.parseJSON(response);
+					var result = JSON.parse(response);
 
 					delete data.jqXHR;
 
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 79dc42da8f1586ffffefba91e99540ba907e9461..ea0f0666b4a9158b1cce521b40e7b30a90fa2c32 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -2593,7 +2593,7 @@
 					// fetch response from iframe
 					response = data.result[0].body.innerText;
 				}
-				var result=$.parseJSON(response);
+				var result = JSON.parse(response);
 
 				if (typeof result[0] !== 'undefined' && result[0].status === 'success') {
 					var file = result[0];
@@ -2906,7 +2906,7 @@ $(document).ready(function() {
 			OCA.Files.FileList.lastAction();
 		}
 	});
-	$(window).unload(function () {
+	$(window).on('unload', function () {
 		$(window).trigger('beforeunload');
 	});
 
diff --git a/apps/files/js/jquery.iframe-transport.js b/apps/files/js/jquery.iframe-transport.js
deleted file mode 100644
index 5c9df77976bd9044702546dfec120a784c3bbd54..0000000000000000000000000000000000000000
--- a/apps/files/js/jquery.iframe-transport.js
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * jQuery Iframe Transport Plugin 1.7
- * https://github.com/blueimp/jQuery-File-Upload
- *
- * Copyright 2011, Sebastian Tschan
- * https://blueimp.net
- *
- * Licensed under the MIT license:
- * http://www.opensource.org/licenses/MIT
- */
-
-/*jslint unparam: true, nomen: true */
-/*global define, window, document */
-
-(function (factory) {
-    'use strict';
-    if (typeof define === 'function' && define.amd) {
-        // Register as an anonymous AMD module:
-        define(['jquery'], factory);
-    } else {
-        // Browser globals:
-        factory(window.jQuery);
-    }
-}(function ($) {
-    'use strict';
-
-    // Helper variable to create unique names for the transport iframes:
-    var counter = 0;
-
-    // The iframe transport accepts three additional options:
-    // options.fileInput: a jQuery collection of file input fields
-    // options.paramName: the parameter name for the file form data,
-    //  overrides the name property of the file input field(s),
-    //  can be a string or an array of strings.
-    // options.formData: an array of objects with name and value properties,
-    //  equivalent to the return data of .serializeArray(), e.g.:
-    //  [{name: 'a', value: 1}, {name: 'b', value: 2}]
-    $.ajaxTransport('iframe', function (options) {
-        if (options.async) {
-            var form,
-                iframe,
-                addParamChar;
-            return {
-                send: function (_, completeCallback) {
-                    form = $('<form style="display:none;"></form>');
-                    form.attr('accept-charset', options.formAcceptCharset);
-                    addParamChar = /\?/.test(options.url) ? '&' : '?';
-                    // XDomainRequest only supports GET and POST:
-                    if (options.type === 'DELETE') {
-                        options.url = options.url + addParamChar + '_method=DELETE';
-                        options.type = 'POST';
-                    } else if (options.type === 'PUT') {
-                        options.url = options.url + addParamChar + '_method=PUT';
-                        options.type = 'POST';
-                    } else if (options.type === 'PATCH') {
-                        options.url = options.url + addParamChar + '_method=PATCH';
-                        options.type = 'POST';
-                    }
-                    // javascript:false as initial iframe src
-                    // prevents warning popups on HTTPS in IE6.
-                    // IE versions below IE8 cannot set the name property of
-                    // elements that have already been added to the DOM,
-                    // so we set the name along with the iframe HTML markup:
-                    counter += 1;
-                    iframe = $(
-                        '<iframe src="javascript:false;" name="iframe-transport-' +
-                            counter + '"></iframe>'
-                    ).bind('load', function () {
-                        var fileInputClones,
-                            paramNames = $.isArray(options.paramName) ?
-                                    options.paramName : [options.paramName];
-                        iframe
-                            .unbind('load')
-                            .bind('load', function () {
-                                var response;
-                                // Wrap in a try/catch block to catch exceptions thrown
-                                // when trying to access cross-domain iframe contents:
-                                try {
-                                    response = iframe.contents();
-                                    // Google Chrome and Firefox do not throw an
-                                    // exception when calling iframe.contents() on
-                                    // cross-domain requests, so we unify the response:
-                                    if (!response.length || !response[0].firstChild) {
-                                        throw new Error();
-                                    }
-                                } catch (e) {
-                                    response = undefined;
-                                }
-                                // The complete callback returns the
-                                // iframe content document as response object:
-                                completeCallback(
-                                    200,
-                                    'success',
-                                    {'iframe': response}
-                                );
-                                // Fix for IE endless progress bar activity bug
-                                // (happens on form submits to iframe targets):
-                                $('<iframe src="javascript:false;"></iframe>')
-                                    .appendTo(form);
-                                window.setTimeout(function () {
-                                    // Removing the form in a setTimeout call
-                                    // allows Chrome's developer tools to display
-                                    // the response result
-                                    form.remove();
-                                }, 0);
-                            });
-                        form
-                            .prop('target', iframe.prop('name'))
-                            .prop('action', options.url)
-                            .prop('method', options.type);
-                        if (options.formData) {
-                            $.each(options.formData, function (index, field) {
-                                $('<input type="hidden"/>')
-                                    .prop('name', field.name)
-                                    .val(field.value)
-                                    .appendTo(form);
-                            });
-                        }
-                        if (options.fileInput && options.fileInput.length &&
-                                options.type === 'POST') {
-                            fileInputClones = options.fileInput.clone();
-                            // Insert a clone for each file input field:
-                            options.fileInput.after(function (index) {
-                                return fileInputClones[index];
-                            });
-                            if (options.paramName) {
-                                options.fileInput.each(function (index) {
-                                    $(this).prop(
-                                        'name',
-                                        paramNames[index] || options.paramName
-                                    );
-                                });
-                            }
-                            // Appending the file input fields to the hidden form
-                            // removes them from their original location:
-                            form
-                                .append(options.fileInput)
-                                .prop('enctype', 'multipart/form-data')
-                                // enctype must be set as encoding for IE:
-                                .prop('encoding', 'multipart/form-data');
-                        }
-                        form.submit();
-                        // Insert the file input fields at their original location
-                        // by replacing the clones with the originals:
-                        if (fileInputClones && fileInputClones.length) {
-                            options.fileInput.each(function (index, input) {
-                                var clone = $(fileInputClones[index]);
-                                $(input).prop('name', clone.prop('name'));
-                                clone.replaceWith(input);
-                            });
-                        }
-                    });
-                    form.append(iframe).appendTo(document.body);
-                },
-                abort: function () {
-                    if (iframe) {
-                        // javascript:false as iframe src aborts the request
-                        // and prevents warning popups on HTTPS in IE6.
-                        // concat is used to avoid the "Script URL" JSLint error:
-                        iframe
-                            .unbind('load')
-                            .prop('src', 'javascript'.concat(':false;'));
-                    }
-                    if (form) {
-                        form.remove();
-                    }
-                }
-            };
-        }
-    });
-
-    // The iframe transport returns the iframe content document as response.
-    // The following adds converters from iframe to text, json, html, xml
-    // and script.
-    // Please note that the Content-Type for JSON responses has to be text/plain
-    // or text/html, if the browser doesn't include application/json in the
-    // Accept header, else IE will show a download dialog.
-    // The Content-Type for XML responses on the other hand has to be always
-    // application/xml or text/xml, so IE properly parses the XML response.
-    // See also
-    // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation
-    $.ajaxSetup({
-        converters: {
-            'iframe text': function (iframe) {
-                return iframe && $(iframe[0].body).text();
-            },
-            'iframe json': function (iframe) {
-                return iframe && $.parseJSON($(iframe[0].body).text());
-            },
-            'iframe html': function (iframe) {
-                return iframe && $(iframe[0].body).html();
-            },
-            'iframe xml': function (iframe) {
-                var xmlDoc = iframe && iframe[0];
-                return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc :
-                        $.parseXML((xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml) ||
-                            $(xmlDoc.body).html());
-            },
-            'iframe script': function (iframe) {
-                return iframe && $.globalEval($(iframe[0].body).text());
-            }
-        }
-    });
-
-}));
\ No newline at end of file
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index ae00b01dca28b8b06485e5222c4d9677236a3c67..cb7fe1103b56c7c382898904d5a6b7f0d891ef18 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -8,7 +8,6 @@ OCP\Util::addStyle('files_sharing', 'mobile');
 OCP\Util::addScript('files_sharing', 'public');
 OCP\Util::addScript('files', 'fileactions');
 OCP\Util::addScript('files', 'fileactionsmenu');
-OCP\Util::addScript('files', 'jquery.iframe-transport');
 OCP\Util::addScript('files', 'jquery.fileupload');
 
 // JS required for folders
diff --git a/apps/user_ldap/js/wizard/wizardTabGeneric.js b/apps/user_ldap/js/wizard/wizardTabGeneric.js
index 21085e3a584a9d44e038bd7c5f34c5363589cfc4..4415172a18ca305be5bd277a29f6f5953093656c 100644
--- a/apps/user_ldap/js/wizard/wizardTabGeneric.js
+++ b/apps/user_ldap/js/wizard/wizardTabGeneric.js
@@ -391,7 +391,7 @@ OCA = OCA || {};
 		 */
 		_setCheckBox: function($element, value) {
 			if(parseInt(value, 10) === 1) {
-				$element.attr('checked', 'checked');
+				$element.prop('checked', 'checked');
 			} else {
 				$element.removeAttr('checked');
 			}
diff --git a/core/js/js.js b/core/js/js.js
index 188c15c5db52f2a39e81e4b0598fc8884c76c701..ac1d582a9f894e164a47b8b69db7fdf76a1ec8ce 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -1337,9 +1337,6 @@ if(typeof localStorage !=='undefined' && localStorage !== null){
 			var item = localStorage.getItem(OC.localStorage.namespace+name);
 			if(item === null) {
 				return null;
-			} else if (typeof JSON === 'undefined') {
-				//fallback to jquery for IE6/7/8
-				return $.parseJSON(item);
 			} else {
 				return JSON.parse(item);
 			}
@@ -1439,11 +1436,15 @@ function initCore() {
 	 */
 	moment.locale(OC.getLocale());
 
-	if ($.browser.msie || !!navigator.userAgent.match(/Trident\/7\./)) {
-		// for IE10+ that don't have conditional comments
-		// and IE11 doesn't identify as MSIE any more...
+	var userAgent = window.navigator.userAgent;
+	var msie = userAgent.indexOf('MSIE ');
+	var trident = userAgent.indexOf('Trident/');
+	var edge = userAgent.indexOf('Edge/');
+
+	if (msie > 0 || trident > 0) {
+		// (IE 10 or older) || IE 11
 		$('html').addClass('ie');
-	} else if (!!navigator.userAgent.match(/Edge\/12/)) {
+	} else if (edge > 0) {
 		// for edge
 		$('html').addClass('edge');
 	}
diff --git a/core/js/lostpassword.js b/core/js/lostpassword.js
index df28c2308cb39e7b6fe90aedaaf6a5ca485c3c66..30d7b98f4e8b5628869d7fc9ec76640cd0a29dc3 100644
--- a/core/js/lostpassword.js
+++ b/core/js/lostpassword.js
@@ -81,12 +81,12 @@ OC.Lostpassword = {
 					$('#password').parents('form').attr('action'),
 					{
 						password : $('#password').val(),
-						proceed: $('#encrypted-continue').attr('checked') ? 'true' : 'false'
+						proceed: $('#encrypted-continue').is(':checked') ? 'true' : 'false'
 					},
 					OC.Lostpassword.resetDone
 			);
 		}
-		if($('#encrypted-continue').attr('checked')) {
+		if($('#encrypted-continue').is(':checked')) {
 			$('#reset-password #submit').hide();
 			$('#reset-password #float-spinner').removeClass('hidden');
 		}
diff --git a/core/js/multiselect.js b/core/js/multiselect.js
index 6d5c54ac0f53429e30a632fe9bb3e872de306ef2..71cf3e10a698c16d27fc35f7813a9cc7f982a074 100644
--- a/core/js/multiselect.js
+++ b/core/js/multiselect.js
@@ -120,7 +120,7 @@
 				label.text(element.text() || item);
 				label.attr('title', element.text() || item);
 				if(settings.checked.indexOf(item) !== -1 || checked) {
-					input.attr('checked', true);
+					input.prop('checked', true);
 				}
 				if(checked){
 					if(settings.singleSelect) {
@@ -145,7 +145,7 @@
 						element.attr('selected','selected');
 						if(typeof settings.oncheck === 'function') {
 							if(settings.oncheck(value)===false) {
-								$(this).attr('checked', false);
+								$(this).prop('checked', false);
 								return;
 							}
 						}
@@ -157,7 +157,7 @@
 						element.attr('selected',null);
 						if(typeof settings.onuncheck === 'function') {
 							if(settings.onuncheck(value)===false) {
-								$(this).attr('checked',true);
+								$(this).prop('checked',true);
 								return;
 							}
 						}
diff --git a/core/js/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js
index e4edbf24c08687c3bf85e6366a7334c2efcc7a19..fd0b6d9d1bd0cea7855a78c41a03a111827b38d0 100644
--- a/core/js/sharedialogshareelistview.js
+++ b/core/js/sharedialogshareelistview.js
@@ -268,11 +268,11 @@
 			if ($element.attr('name') === 'edit') {
 				checked = $element.is(':checked');
 				// Check/uncheck Create, Update, and Delete checkboxes if Edit is checked/unck
-				$($checkboxes).attr('checked', checked);
+				$($checkboxes).prop('checked', checked);
 			} else {
 				var numberChecked = $checkboxes.filter(':checked').length;
 				checked = numberChecked > 0;
-				$('input[name="edit"]', $li).attr('checked', checked);
+				$('input[name="edit"]', $li).prop('checked', checked);
 			}
 
 			var permissions = OC.PERMISSION_READ;
diff --git a/settings/admin.php b/settings/admin.php
index cfb7eb5c541481d46e5e1542dc16f180c3bb2875..b67331b22eb431be16e587dd4d085c29b257d179 100644
--- a/settings/admin.php
+++ b/settings/admin.php
@@ -38,7 +38,6 @@ $template = new OC_Template('settings', 'admin', 'user');
 $l = \OC::$server->getL10N('settings');
 
 OC_Util::addScript('settings', 'certificates');
-OC_Util::addScript('files', 'jquery.iframe-transport');
 OC_Util::addScript('files', 'jquery.fileupload');
 
 \OC::$server->getEventDispatcher()->dispatch('OC\Settings\Admin::loadAdditionalScripts');
diff --git a/settings/js/admin.js b/settings/js/admin.js
index 1bbb20efa00de9fc40a79a7e63ec107946642607..34e258065ce8bc7a114e35a119c33f25cab10bdc 100644
--- a/settings/js/admin.js
+++ b/settings/js/admin.js
@@ -38,7 +38,7 @@ $(document).ready(function(){
 	$('#backgroundjobs span.crondate').tipsy({gravity: 's', live: true});
 
 	$('#backgroundjobs input').change(function(){
-		if($(this).attr('checked')){
+		if($(this).is(':checked')){
 			var mode = $(this).val();
 			if (mode === 'ajax' || mode === 'webcron' || mode === 'cron') {
 				OC.AppConfig.setValue('core', 'backgroundjobs_mode', mode);
@@ -131,7 +131,7 @@ $(document).ready(function(){
 			$('#setting_smtphost').removeClass('hidden');
 			$('#mail_smtpsecure_label').removeClass('hidden');
 			$('#mail_smtpsecure').removeClass('hidden');
-			if ($('#mail_smtpauth').attr('checked')) {
+			if ($('#mail_smtpauth').is(':checked')) {
 				$('#mail_credentials').removeClass('hidden');
 			}
 		}
diff --git a/settings/js/apps.js b/settings/js/apps.js
index 1b687012815c15800a29ae7f0cba13906ec1b940..015236f957dc38ef6183311e7898772c4fe93857 100644
--- a/settings/js/apps.js
+++ b/settings/js/apps.js
@@ -193,15 +193,15 @@ OC.Settings.Apps = OC.Settings.Apps || {
 			OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging') ||
 			OC.Settings.Apps.isType(app, 'prevent_group_restriction')) {
 			page.find(".groups-enable").hide();
-			page.find(".groups-enable__checkbox").attr('checked', null);
+			page.find(".groups-enable__checkbox").prop('checked', false);
 		} else {
 			page.find('#group_select').val((app.groups || []).join('|'));
 			if (app.active) {
 				if (app.groups.length) {
 					OC.Settings.Apps.setupGroupsSelect(page.find('#group_select'));
-					page.find(".groups-enable__checkbox").attr('checked','checked');
+					page.find(".groups-enable__checkbox").prop('checked', true);
 				} else {
-					page.find(".groups-enable__checkbox").attr('checked', null);
+					page.find(".groups-enable__checkbox").prop('checked', false);
 				}
 				page.find(".groups-enable").show();
 			} else {
@@ -289,7 +289,7 @@ OC.Settings.Apps = OC.Settings.Apps || {
 
 						if (OC.Settings.Apps.isType(app, 'filesystem') || OC.Settings.Apps.isType(app, 'prelogin') ||
 							OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging')) {
-							element.parent().find(".groups-enable").attr('checked', null);
+							element.parent().find(".groups-enable").prop('checked', true);
 							element.parent().find(".groups-enable").hide();
 							element.parent().find('#group_select').hide().val(null);
 						} else {
diff --git a/settings/js/certificates.js b/settings/js/certificates.js
index f2a8e6b0afb3d7abfa263e7655a5099f17649669..7e62a4f5157fa455c3515bf36434ff7a28fc8fcd 100644
--- a/settings/js/certificates.js
+++ b/settings/js/certificates.js
@@ -24,10 +24,10 @@ $(document).ready(function () {
 		},
 		success: function (data) {
 			if (typeof data === 'string') {
-				data = $.parseJSON(data);
+				data = JSON.parse(data);
 			} else if (data && data.length) {
 				// fetch response from iframe
-				data = $.parseJSON(data[0].body.innerText);
+				data = JSON.parse(data[0].body.innerText);
 			}
 			if (!data || typeof(data) === 'string') {
 				// IE8 iframe workaround comes here instead of fail()
diff --git a/settings/js/personal.js b/settings/js/personal.js
index bd13b7fd251a9d9db442adc2f27102fafd2036ce..b6e8e2ff508c1d1d29b5128834d9184051d25687 100644
--- a/settings/js/personal.js
+++ b/settings/js/personal.js
@@ -166,7 +166,7 @@ function cleanCropper () {
 
 function avatarResponseHandler (data) {
 	if (typeof data === 'string') {
-		data = $.parseJSON(data);
+		data = JSON.parse(data);
 	}
 	var $warning = $('#avatar .warning');
 	$warning.hide();
@@ -248,10 +248,10 @@ $(document).ready(function () {
 		done: function (e, data) {
 			var response = data;
 			if (typeof data.result === 'string') {
-				response = $.parseJSON(data.result);
+				response = JSON.parse(data.result);
 			} else if (data.result && data.result.length) {
 				// fetch response from iframe
-				response = $.parseJSON(data.result[0].body.innerText);
+				response = JSON.parse(data.result[0].body.innerText);
 			} else {
 				response = data.result;
 			}
diff --git a/settings/personal.php b/settings/personal.php
index 90b8bb2fbbb59603e62fa913a2d02895051e6405..6c2fccbec9b2989b81e8dd1a097259cbebbb61f6 100644
--- a/settings/personal.php
+++ b/settings/personal.php
@@ -47,7 +47,6 @@ OC_Util::addScript('settings', 'certificates');
 OC_Util::addStyle( 'settings', 'settings' );
 \OC_Util::addVendorScript('strengthify/jquery.strengthify');
 \OC_Util::addVendorStyle('strengthify/strengthify');
-\OC_Util::addScript('files', 'jquery.iframe-transport');
 \OC_Util::addScript('files', 'jquery.fileupload');
 if ($config->getSystemValue('enable_avatars', true) === true) {
 	\OC_Util::addVendorScript('jcrop/js/jquery.Jcrop');