diff --git a/README.md b/README.md
index 7e1a9fbc78b5ef5a27ed4fc8d15b0fa2040e1a48..4dfa36237bbcf4467132959c025f3f50baa27a33 100644
--- a/README.md
+++ b/README.md
@@ -9,6 +9,7 @@ Git master: [![Build Status](https://ci.owncloud.org/job/server-master-linux/bad
 Quality: 
  - Scrutinizer: [![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/owncloud/core/badges/quality-score.png?s=ce2f5ded03d4ac628e9ee5c767243fa7412e644f)](https://scrutinizer-ci.com/g/owncloud/core/)
  - CodeClimate: [![Code Climate](https://codeclimate.com/github/owncloud/core/badges/gpa.svg)](https://codeclimate.com/github/owncloud/core)
+ - Coverity: [![Coverity](https://scan.coverity.com/projects/6893/badge.svg)](https://scan.coverity.com/projects/owncloud-core)
 
 Dependencies:
 
diff --git a/apps/dav/lib/connector/sabre/tagsplugin.php b/apps/dav/lib/connector/sabre/tagsplugin.php
index 7446d97790ba2ac22d90cbfed179acfaabab1290..2f5937da25aa50e5ed70ca7b8639ff97931fb84a 100644
--- a/apps/dav/lib/connector/sabre/tagsplugin.php
+++ b/apps/dav/lib/connector/sabre/tagsplugin.php
@@ -108,7 +108,7 @@ class TagsPlugin extends \Sabre\DAV\ServerPlugin
 	public function initialize(\Sabre\DAV\Server $server) {
 
 		$server->xmlNamespaces[self::NS_OWNCLOUD] = 'oc';
-		$server->propertyMap[self::TAGS_PROPERTYNAME] = 'OC\\Connector\\Sabre\\TagList';
+		$server->propertyMap[self::TAGS_PROPERTYNAME] = 'OCA\\DAV\\Connector\\Sabre\\TagList';
 
 		$this->server = $server;
 		$this->server->on('propFind', array($this, 'handleGetProperties'));
diff --git a/apps/encryption/l10n/el.js b/apps/encryption/l10n/el.js
index d27098ddb049498ca1784c8e9b80bf78cc9bd91d..509e217a806f77f3dbf11701e5737a56b69a4ac3 100644
--- a/apps/encryption/l10n/el.js
+++ b/apps/encryption/l10n/el.js
@@ -32,6 +32,8 @@ OC.L10N.register(
     "The share will expire on %s." : "Ο διαμοιρασμός θα λήξει σε %s.",
     "Cheers!" : "Χαιρετισμούς!",
     "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Χαίρετε,<br><br>ο διαχειριστής ενεργοποίησε την κρυπτογράφηση στο διακομιστή. Τα αρχεία σας κρυπτογραφήθηκαν με τον κωδικό <strong>%s</strong>.<br><br>Παρακαλούμε συνδεθείτε στη διεπαφή ιστού, πηγαίνετε στην ενότητα \"μονάδα βασικής κρυπτογράφησης ownCloud\" τωνπ ροσωπικών σας ρυθμίσεων και ενημερώστε τον κωδικό κρυπτογράφησης εισάγοντας αυτό τον κωδικό στο πεδίο \"παλιός κωδικός σύνδεσης\" και τον τωρινό σας κωδικό σύνδεσης.",
+    "Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
+    "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Η ενεργοποίηση αυτή της επιλογής κρυπτογραφεί όλα τα αρχεία που βρίσκονται στον κύριο αποθηκευτικό χώρο, αλλιώς μόνο τα αρχεία σε εξωτερικούς αποθηκευτικούς χώρους θα κρυπτογραφηθούν.",
     "Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
     "Disable recovery key" : "Απενεργοποίηση κλειδιού ανάκτησης",
     "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Το κλειδί ανάκτησης είναι ένα επιπλέον κλειδί κρυπτογράφησης που χρησιμοποιείται για να κρυπτογραφήσει αρχεία. Επιτρέπει την ανάκτηση των αρχείων ενός χρήστη αν αυτός/αυτή ξεχάσει τον κωδικό πρόσβασης.",
diff --git a/apps/encryption/l10n/el.json b/apps/encryption/l10n/el.json
index 3ed5e39b7c0fc48ba58fd5d1091acf5cad7ba705..954d7490ce018a4ef15ac2aa9ac18500563bb061 100644
--- a/apps/encryption/l10n/el.json
+++ b/apps/encryption/l10n/el.json
@@ -30,6 +30,8 @@
     "The share will expire on %s." : "Ο διαμοιρασμός θα λήξει σε %s.",
     "Cheers!" : "Χαιρετισμούς!",
     "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Χαίρετε,<br><br>ο διαχειριστής ενεργοποίησε την κρυπτογράφηση στο διακομιστή. Τα αρχεία σας κρυπτογραφήθηκαν με τον κωδικό <strong>%s</strong>.<br><br>Παρακαλούμε συνδεθείτε στη διεπαφή ιστού, πηγαίνετε στην ενότητα \"μονάδα βασικής κρυπτογράφησης ownCloud\" τωνπ ροσωπικών σας ρυθμίσεων και ενημερώστε τον κωδικό κρυπτογράφησης εισάγοντας αυτό τον κωδικό στο πεδίο \"παλιός κωδικός σύνδεσης\" και τον τωρινό σας κωδικό σύνδεσης.",
+    "Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
+    "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Η ενεργοποίηση αυτή της επιλογής κρυπτογραφεί όλα τα αρχεία που βρίσκονται στον κύριο αποθηκευτικό χώρο, αλλιώς μόνο τα αρχεία σε εξωτερικούς αποθηκευτικούς χώρους θα κρυπτογραφηθούν.",
     "Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
     "Disable recovery key" : "Απενεργοποίηση κλειδιού ανάκτησης",
     "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Το κλειδί ανάκτησης είναι ένα επιπλέον κλειδί κρυπτογράφησης που χρησιμοποιείται για να κρυπτογραφήσει αρχεία. Επιτρέπει την ανάκτηση των αρχείων ενός χρήστη αν αυτός/αυτή ξεχάσει τον κωδικό πρόσβασης.",
diff --git a/apps/encryption/l10n/oc.js b/apps/encryption/l10n/oc.js
index 8715fd378b8a63433ed72ff193fe5cca14d8ec3e..db54a83db5edc253c13b3e146bf87eeab596f785 100644
--- a/apps/encryption/l10n/oc.js
+++ b/apps/encryption/l10n/oc.js
@@ -2,7 +2,7 @@ OC.L10N.register(
     "encryption",
     {
     "Missing recovery key password" : "Senhal de la clau de recuperacion mancant",
-    "Please repeat the recovery key password" : "Répétez lo senhal de la clau de recuperacion",
+    "Please repeat the recovery key password" : "Repetètz lo senhal de la clau de recuperacion",
     "Repeated recovery key password does not match the provided recovery key password" : "Lo senhal de la clau de recuperacion e sa repeticion son pas identics.",
     "Recovery key successfully enabled" : "Clau de recuperacion activada amb succès",
     "Could not enable recovery key. Please check your recovery key password!" : "Impossible d'activar la clau de recuperacion. Verificatz lo senhal de vòstra clau de recuperacion !",
@@ -25,10 +25,15 @@ OC.L10N.register(
     "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Vòstra clau privada pel chiframent es pas valida ! Metètz a jorn lo senhal de vòstra clau privada dins vòstres paramètres personals per recuperar l'accès a vòstres fichièrs chifrats.",
     "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicacion de chiframent es activada mas vòstras claus son pas inicializadas. Desconnectatz-vos e puèi reconnectatz-vos.",
     "Encryption App is enabled and ready" : "L'aplicacion de chiframent es activada e prèsta",
+    "one-time password for server-side-encryption" : "Senhal d'usatge unic pel chiframent costat servidor",
     "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de deschifrar aqueste fichièr : s'agís probablament d'un fichièr partejat. Demandatz al proprietari del fichièr de lo partejar tornamai amb vos.",
     "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de legir aqueste fichièr, s'agís probablament d'un fichièr partejat. Demandatz al proprietari del fichièr de lo repartejar amb vos.  ",
+    "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Bonjorn,\n\nL'administrator a activat lo chiframent sul servidor. Vòstres fichièrs son estats chifrats amb lo senhal seguent :\n\n%s\n\nSeguissètz aquelas instruccions :\n\n1. Connectatz-vos a l'interfàcia web e trobatz la seccion \"Modul de chiframent de basa d'ownCloud\" dins vòstres paramètres personals ;\n\n2. Entratz lo senhal provesit çaisús dins lo camp \"Ancian senhal de connexion\";\n\n3. Entratz lo senhal qu'utilizatz actualament per vos connectar dins lo camp \"Senhal de connexion actual\" ;\n\n4. Validatz en clicant sul boton \"Metre a jorn lo senhal de vòstra clau privada\".\n",
     "The share will expire on %s." : "Lo partiment expirarà lo %s.",
     "Cheers!" : "A lèu !",
+    "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Bonjorn,\n<br><br>\nL'administrator a activat lo chiframent sul servidor. Vòstres fichièrs son estats chifrats amb lo senhal seguent :\n\n<p style=\"font-family: monospace;\"><b>%s</b></p>\n\n<p>\nSeguissètz aquelas instruccions :\n<ol>\n<li>Connectatz-vos a l'interfàcia web e trobatz la seccion <em>\"Modul de chiframent de basa d'ownCloud\"</em> dins vòstres paramètres personals;</li>\n<li>Entratz lo senhal provesit çaisús dins lo camp <em>\"Ancian senhal de connexion\"</em>;</li>\n<li>Entratz lo senhal qu'utilizatz actualament per vos connectar dins lo camp <em>\"Senhal de connexion actual\"</em>;</li>\n<li>Validatz en clicant sul boton <em>\"Metre a jorn lo senhal de vòstra clau privada\"</em>.</li>\n</ol>\n</p>",
+    "Encrypt the home storage" : "Chifrar l'espaci d'emmagazinatge principal",
+    "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "L'activacion d'aquesta opcion chifra totes los fichièrs de l'emmagazinatge principal, siquenon sols los espacis d'emmagazinatge extèrnes seràn chifrats",
     "Enable recovery key" : "Activar la clau de recuperacion",
     "Disable recovery key" : "Desactivar la clau de recuperacion",
     "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clau de recuperacion es una clau suplementària utilizada per chifrar los fichièrs. Permet de recuperar los fichièrs dels utilizaires se doblidan lor senhal.",
diff --git a/apps/encryption/l10n/oc.json b/apps/encryption/l10n/oc.json
index ec4406dd77e644e4c5e24a7fe4eab2874bd24cc3..27e9a20f63da28be48e80b5d15bfe87834ba3648 100644
--- a/apps/encryption/l10n/oc.json
+++ b/apps/encryption/l10n/oc.json
@@ -1,6 +1,6 @@
 { "translations": {
     "Missing recovery key password" : "Senhal de la clau de recuperacion mancant",
-    "Please repeat the recovery key password" : "Répétez lo senhal de la clau de recuperacion",
+    "Please repeat the recovery key password" : "Repetètz lo senhal de la clau de recuperacion",
     "Repeated recovery key password does not match the provided recovery key password" : "Lo senhal de la clau de recuperacion e sa repeticion son pas identics.",
     "Recovery key successfully enabled" : "Clau de recuperacion activada amb succès",
     "Could not enable recovery key. Please check your recovery key password!" : "Impossible d'activar la clau de recuperacion. Verificatz lo senhal de vòstra clau de recuperacion !",
@@ -23,10 +23,15 @@
     "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Vòstra clau privada pel chiframent es pas valida ! Metètz a jorn lo senhal de vòstra clau privada dins vòstres paramètres personals per recuperar l'accès a vòstres fichièrs chifrats.",
     "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicacion de chiframent es activada mas vòstras claus son pas inicializadas. Desconnectatz-vos e puèi reconnectatz-vos.",
     "Encryption App is enabled and ready" : "L'aplicacion de chiframent es activada e prèsta",
+    "one-time password for server-side-encryption" : "Senhal d'usatge unic pel chiframent costat servidor",
     "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de deschifrar aqueste fichièr : s'agís probablament d'un fichièr partejat. Demandatz al proprietari del fichièr de lo partejar tornamai amb vos.",
     "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de legir aqueste fichièr, s'agís probablament d'un fichièr partejat. Demandatz al proprietari del fichièr de lo repartejar amb vos.  ",
+    "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Bonjorn,\n\nL'administrator a activat lo chiframent sul servidor. Vòstres fichièrs son estats chifrats amb lo senhal seguent :\n\n%s\n\nSeguissètz aquelas instruccions :\n\n1. Connectatz-vos a l'interfàcia web e trobatz la seccion \"Modul de chiframent de basa d'ownCloud\" dins vòstres paramètres personals ;\n\n2. Entratz lo senhal provesit çaisús dins lo camp \"Ancian senhal de connexion\";\n\n3. Entratz lo senhal qu'utilizatz actualament per vos connectar dins lo camp \"Senhal de connexion actual\" ;\n\n4. Validatz en clicant sul boton \"Metre a jorn lo senhal de vòstra clau privada\".\n",
     "The share will expire on %s." : "Lo partiment expirarà lo %s.",
     "Cheers!" : "A lèu !",
+    "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Bonjorn,\n<br><br>\nL'administrator a activat lo chiframent sul servidor. Vòstres fichièrs son estats chifrats amb lo senhal seguent :\n\n<p style=\"font-family: monospace;\"><b>%s</b></p>\n\n<p>\nSeguissètz aquelas instruccions :\n<ol>\n<li>Connectatz-vos a l'interfàcia web e trobatz la seccion <em>\"Modul de chiframent de basa d'ownCloud\"</em> dins vòstres paramètres personals;</li>\n<li>Entratz lo senhal provesit çaisús dins lo camp <em>\"Ancian senhal de connexion\"</em>;</li>\n<li>Entratz lo senhal qu'utilizatz actualament per vos connectar dins lo camp <em>\"Senhal de connexion actual\"</em>;</li>\n<li>Validatz en clicant sul boton <em>\"Metre a jorn lo senhal de vòstra clau privada\"</em>.</li>\n</ol>\n</p>",
+    "Encrypt the home storage" : "Chifrar l'espaci d'emmagazinatge principal",
+    "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "L'activacion d'aquesta opcion chifra totes los fichièrs de l'emmagazinatge principal, siquenon sols los espacis d'emmagazinatge extèrnes seràn chifrats",
     "Enable recovery key" : "Activar la clau de recuperacion",
     "Disable recovery key" : "Desactivar la clau de recuperacion",
     "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clau de recuperacion es una clau suplementària utilizada per chifrar los fichièrs. Permet de recuperar los fichièrs dels utilizaires se doblidan lor senhal.",
diff --git a/apps/encryption/lib/util.php b/apps/encryption/lib/util.php
index 62c9dc6dc5f0fcd3d9c5d0012e6bb85e0e1f46c1..62907f8a460e9f2be7132e9532c0da3bfb8c0d64 100644
--- a/apps/encryption/lib/util.php
+++ b/apps/encryption/lib/util.php
@@ -115,7 +115,7 @@ class Util {
 	}
 
 	/**
-	 * check if the home storage should be encrypted
+	 * set the home storage encryption on/off
 	 *
 	 * @param bool $encryptHomeStorage
 	 */
diff --git a/apps/files/l10n/da.js b/apps/files/l10n/da.js
index 84d342e85d98edf49fa79fc041e86eccec4a18b0..4f8cd7ab497839fe475a2a9c01d8b94f24864c83 100644
--- a/apps/files/l10n/da.js
+++ b/apps/files/l10n/da.js
@@ -30,10 +30,10 @@ OC.L10N.register(
     "Favorites" : "Foretrukne",
     "Home" : "Hjemme",
     "Close" : "Luk",
+    "Upload cancelled." : "Upload afbrudt.",
     "Unable to upload {filename} as it is a directory or has 0 bytes" : "Kan ikke upload {filename} da det er enten en mappe eller indholder 0 bytes.",
     "Total file size {size1} exceeds upload limit {size2}" : "Den totale filstørrelse {size1} er større end uploadgrænsen {size2}",
     "Not enough free space, you are uploading {size1} but only {size2} is left" : "Der er ikke tilstrækkeligt friplads. Du uplaoder {size1} men der er kun {size2} tilbage",
-    "Upload cancelled." : "Upload afbrudt.",
     "Could not get result from server." : "Kunne ikke hente resultat fra server.",
     "File upload is in progress. Leaving the page now will cancel the upload." : "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret.",
     "Actions" : "Handlinger",
@@ -75,12 +75,12 @@ OC.L10N.register(
     "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
     "Favorited" : "Gjort til foretrukken",
     "Favorite" : "Foretrukken",
-    "{newname} already exists" : "{newname} eksistere allerede",
-    "Upload" : "Upload",
     "Text file" : "Tekstfil",
     "New text file.txt" : "Ny tekst file.txt",
     "Folder" : "Mappe",
     "New folder" : "Ny Mappe",
+    "{newname} already exists" : "{newname} eksistere allerede",
+    "Upload" : "Upload",
     "An error occurred while trying to update the tags" : "Der opstod en fejl under forsøg på at opdatere mærkerne",
     "A new file or folder has been <strong>created</strong>" : "En ny fil eller mapper er blevet <strong>oprettet</strong>",
     "A file or folder has been <strong>changed</strong>" : "En fil eller mappe er blevet <strong>ændret</strong>",
@@ -96,6 +96,9 @@ OC.L10N.register(
     "%2$s deleted %1$s" : "%2$s slettede %1$s",
     "You restored %1$s" : "Du gendannede %1$s",
     "%2$s restored %1$s" : "%2$s gendannede %1$s",
+    "Changed by %2$s" : "Ændret af %2$s",
+    "Deleted by %2$s" : "Slettet af %2$s",
+    "Restored by %2$s" : "Gendannet af %2$s",
     "%s could not be renamed as it has been deleted" : "%s kunne ikke omdøbes, da den er blevet slettet",
     "%s could not be renamed" : "%s kunne ikke omdøbes",
     "Upload (max. %s)" : "Upload (max. %s)",
diff --git a/apps/files/l10n/da.json b/apps/files/l10n/da.json
index 53de8656af272bb22a9537a9a00fcbc9e054773c..d0fe2575d3e0d8d076b2e3b7d06899ebcfb3c44c 100644
--- a/apps/files/l10n/da.json
+++ b/apps/files/l10n/da.json
@@ -28,10 +28,10 @@
     "Favorites" : "Foretrukne",
     "Home" : "Hjemme",
     "Close" : "Luk",
+    "Upload cancelled." : "Upload afbrudt.",
     "Unable to upload {filename} as it is a directory or has 0 bytes" : "Kan ikke upload {filename} da det er enten en mappe eller indholder 0 bytes.",
     "Total file size {size1} exceeds upload limit {size2}" : "Den totale filstørrelse {size1} er større end uploadgrænsen {size2}",
     "Not enough free space, you are uploading {size1} but only {size2} is left" : "Der er ikke tilstrækkeligt friplads. Du uplaoder {size1} men der er kun {size2} tilbage",
-    "Upload cancelled." : "Upload afbrudt.",
     "Could not get result from server." : "Kunne ikke hente resultat fra server.",
     "File upload is in progress. Leaving the page now will cancel the upload." : "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret.",
     "Actions" : "Handlinger",
@@ -73,12 +73,12 @@
     "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"],
     "Favorited" : "Gjort til foretrukken",
     "Favorite" : "Foretrukken",
-    "{newname} already exists" : "{newname} eksistere allerede",
-    "Upload" : "Upload",
     "Text file" : "Tekstfil",
     "New text file.txt" : "Ny tekst file.txt",
     "Folder" : "Mappe",
     "New folder" : "Ny Mappe",
+    "{newname} already exists" : "{newname} eksistere allerede",
+    "Upload" : "Upload",
     "An error occurred while trying to update the tags" : "Der opstod en fejl under forsøg på at opdatere mærkerne",
     "A new file or folder has been <strong>created</strong>" : "En ny fil eller mapper er blevet <strong>oprettet</strong>",
     "A file or folder has been <strong>changed</strong>" : "En fil eller mappe er blevet <strong>ændret</strong>",
@@ -94,6 +94,9 @@
     "%2$s deleted %1$s" : "%2$s slettede %1$s",
     "You restored %1$s" : "Du gendannede %1$s",
     "%2$s restored %1$s" : "%2$s gendannede %1$s",
+    "Changed by %2$s" : "Ændret af %2$s",
+    "Deleted by %2$s" : "Slettet af %2$s",
+    "Restored by %2$s" : "Gendannet af %2$s",
     "%s could not be renamed as it has been deleted" : "%s kunne ikke omdøbes, da den er blevet slettet",
     "%s could not be renamed" : "%s kunne ikke omdøbes",
     "Upload (max. %s)" : "Upload (max. %s)",
diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js
index 063789aae5b191720a0183629c0ed07980a43f4a..f2ea62593c1abac24bfb1767385c730b6ddcb62d 100644
--- a/apps/files/l10n/lt_LT.js
+++ b/apps/files/l10n/lt_LT.js
@@ -30,10 +30,10 @@ OC.L10N.register(
     "Favorites" : "MÄ—gstamiausi",
     "Home" : "Namų",
     "Close" : "Užverti",
+    "Upload cancelled." : "Įkėlimas atšauktas.",
     "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nepavyksta įkelti {filename}, nes tai katalogas arba yra 0 baitų dydžio",
     "Total file size {size1} exceeds upload limit {size2}" : "Visas failo dydis {size1} viršyja įkėlimo limitą {size2}",
     "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nepakanka laisvos vietos. Keliate {size1}, bet tik {size2} yra likÄ™",
-    "Upload cancelled." : "Įkėlimas atšauktas.",
     "Could not get result from server." : "Nepavyko gauti rezultato iš serverio.",
     "File upload is in progress. Leaving the page now will cancel the upload." : "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.",
     "Actions" : "Veiksmai",
@@ -71,12 +71,16 @@ OC.L10N.register(
     "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} saugykla yra beveik pilna ({usedSpacePercent}%)",
     "Your storage is almost full ({usedSpacePercent}%)" : "Jūsų vieta serveryje beveik visa užimta ({usedSpacePercent}%)",
     "_matches '{filter}'_::_match '{filter}'_" : ["atitikmuo „{filter}“","atitikmenys „{filter}“","atitikmenų „{filter}“"],
+    "Path" : "Kelias",
+    "_%n byte_::_%n bytes_" : ["%n baitas","%n baitai","%n baitų"],
     "Favorited" : "Pažymėta mėgstamu",
     "Favorite" : "MÄ—giamas",
-    "Upload" : "Įkelti",
     "Text file" : "Teksto failas",
+    "New text file.txt" : "Naujas tekstas file.txt",
     "Folder" : "Katalogas",
     "New folder" : "Naujas aplankas",
+    "{newname} already exists" : "{newname} jau egzistuoja",
+    "Upload" : "Įkelti",
     "An error occurred while trying to update the tags" : "Bandant atnaujinti žymes įvyko klaida",
     "A new file or folder has been <strong>created</strong>" : "Naujas failas ar aplankas buvo <strong>sukurtas</strong>",
     "A file or folder has been <strong>changed</strong>" : "Failas ar aplankas buvo <strong>pakeistas</strong>",
@@ -92,12 +96,16 @@ OC.L10N.register(
     "%2$s deleted %1$s" : "%2$s ištrynė %1$s",
     "You restored %1$s" : "Jūs atkūrėte %1$s",
     "%2$s restored %1$s" : "%2$s atkurta %1$s",
+    "Changed by %2$s" : "PakeitÄ— %2$s",
+    "Deleted by %2$s" : "IÅ¡trynÄ— %2$s",
+    "Restored by %2$s" : "Atkūrė %2$s",
     "%s could not be renamed as it has been deleted" : "%s negalėjo būti pervadintas, nes buvo ištrintas",
     "%s could not be renamed" : "%s negali būti pervadintas",
     "Upload (max. %s)" : "Įkelti (maks. %s)",
     "File handling" : "Failų tvarkymas",
     "Maximum upload size" : "Maksimalus įkeliamo failo dydis",
     "max. possible: " : "maks. galima:",
+    "With PHP-FPM this value may take up to 5 minutes to take effect after saving." : "Su PHP-FPM reikšmės atnaujinimas gali užtrukti iki 5 minučių po pakeitimo.",
     "Save" : "IÅ¡saugoti",
     "Can not be edited from here due to insufficient permissions." : "Negali būti redaguojamas iš čia dėl leidimų trūkumo.",
     "Settings" : "Nustatymai",
diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json
index d7aa2cc9c35af2451f62544792577cf7a9aa5eec..564558962825e58052df9dc4536a1116b0839c79 100644
--- a/apps/files/l10n/lt_LT.json
+++ b/apps/files/l10n/lt_LT.json
@@ -28,10 +28,10 @@
     "Favorites" : "MÄ—gstamiausi",
     "Home" : "Namų",
     "Close" : "Užverti",
+    "Upload cancelled." : "Įkėlimas atšauktas.",
     "Unable to upload {filename} as it is a directory or has 0 bytes" : "Nepavyksta įkelti {filename}, nes tai katalogas arba yra 0 baitų dydžio",
     "Total file size {size1} exceeds upload limit {size2}" : "Visas failo dydis {size1} viršyja įkėlimo limitą {size2}",
     "Not enough free space, you are uploading {size1} but only {size2} is left" : "Nepakanka laisvos vietos. Keliate {size1}, bet tik {size2} yra likÄ™",
-    "Upload cancelled." : "Įkėlimas atšauktas.",
     "Could not get result from server." : "Nepavyko gauti rezultato iš serverio.",
     "File upload is in progress. Leaving the page now will cancel the upload." : "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.",
     "Actions" : "Veiksmai",
@@ -69,12 +69,16 @@
     "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} saugykla yra beveik pilna ({usedSpacePercent}%)",
     "Your storage is almost full ({usedSpacePercent}%)" : "Jūsų vieta serveryje beveik visa užimta ({usedSpacePercent}%)",
     "_matches '{filter}'_::_match '{filter}'_" : ["atitikmuo „{filter}“","atitikmenys „{filter}“","atitikmenų „{filter}“"],
+    "Path" : "Kelias",
+    "_%n byte_::_%n bytes_" : ["%n baitas","%n baitai","%n baitų"],
     "Favorited" : "Pažymėta mėgstamu",
     "Favorite" : "MÄ—giamas",
-    "Upload" : "Įkelti",
     "Text file" : "Teksto failas",
+    "New text file.txt" : "Naujas tekstas file.txt",
     "Folder" : "Katalogas",
     "New folder" : "Naujas aplankas",
+    "{newname} already exists" : "{newname} jau egzistuoja",
+    "Upload" : "Įkelti",
     "An error occurred while trying to update the tags" : "Bandant atnaujinti žymes įvyko klaida",
     "A new file or folder has been <strong>created</strong>" : "Naujas failas ar aplankas buvo <strong>sukurtas</strong>",
     "A file or folder has been <strong>changed</strong>" : "Failas ar aplankas buvo <strong>pakeistas</strong>",
@@ -90,12 +94,16 @@
     "%2$s deleted %1$s" : "%2$s ištrynė %1$s",
     "You restored %1$s" : "Jūs atkūrėte %1$s",
     "%2$s restored %1$s" : "%2$s atkurta %1$s",
+    "Changed by %2$s" : "PakeitÄ— %2$s",
+    "Deleted by %2$s" : "IÅ¡trynÄ— %2$s",
+    "Restored by %2$s" : "Atkūrė %2$s",
     "%s could not be renamed as it has been deleted" : "%s negalėjo būti pervadintas, nes buvo ištrintas",
     "%s could not be renamed" : "%s negali būti pervadintas",
     "Upload (max. %s)" : "Įkelti (maks. %s)",
     "File handling" : "Failų tvarkymas",
     "Maximum upload size" : "Maksimalus įkeliamo failo dydis",
     "max. possible: " : "maks. galima:",
+    "With PHP-FPM this value may take up to 5 minutes to take effect after saving." : "Su PHP-FPM reikšmės atnaujinimas gali užtrukti iki 5 minučių po pakeitimo.",
     "Save" : "IÅ¡saugoti",
     "Can not be edited from here due to insufficient permissions." : "Negali būti redaguojamas iš čia dėl leidimų trūkumo.",
     "Settings" : "Nustatymai",
diff --git a/apps/files_external/l10n/cs_CZ.js b/apps/files_external/l10n/cs_CZ.js
index 1c655bfc990109d1fc1be20c106e261aa6f0a760..5ede97f70dba267ad9f095ea97800c900f4df716 100644
--- a/apps/files_external/l10n/cs_CZ.js
+++ b/apps/files_external/l10n/cs_CZ.js
@@ -100,7 +100,7 @@ OC.L10N.register(
     "Advanced settings" : "Pokročilá nastavení",
     "Delete" : "Smazat",
     "Add storage" : "Přidat úložiště",
-    "Allow users to mount external storages" : "Povolit uživatelům připojení externích úložišť",
+    "Allow users to mount external storage" : "Povolit uživatelům připojení externího úložiště",
     "Allow users to mount the following external storage" : "Povolit uživatelů připojit následující externí úložiště"
 },
 "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/files_external/l10n/cs_CZ.json b/apps/files_external/l10n/cs_CZ.json
index 50d12af8052bdcaeee1f0a8fd8791bc52bc43ee6..d15e2424bc708d5f4a1e7ae11ab17e6f2bc2d163 100644
--- a/apps/files_external/l10n/cs_CZ.json
+++ b/apps/files_external/l10n/cs_CZ.json
@@ -98,7 +98,7 @@
     "Advanced settings" : "Pokročilá nastavení",
     "Delete" : "Smazat",
     "Add storage" : "Přidat úložiště",
-    "Allow users to mount external storages" : "Povolit uživatelům připojení externích úložišť",
+    "Allow users to mount external storage" : "Povolit uživatelům připojení externího úložiště",
     "Allow users to mount the following external storage" : "Povolit uživatelů připojit následující externí úložiště"
 },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
 }
\ No newline at end of file
diff --git a/apps/files_external/l10n/el.js b/apps/files_external/l10n/el.js
index 8b4d089a964e5e796e253dd0de21877dd38cd292..df3bdcedcfd7e21bb6ea2d1468d2014f5ef5e91f 100644
--- a/apps/files_external/l10n/el.js
+++ b/apps/files_external/l10n/el.js
@@ -16,6 +16,7 @@ OC.L10N.register(
     "Not permitted to use authentication mechanism \"%s\"" : "Μη επιτρεπόμενος μηχανισμός πιστοποίησης \"%s\"",
     "Unsatisfied backend parameters" : "Ελλιπείς παράμετροι συστήματος",
     "Unsatisfied authentication mechanism parameters" : "Ελλιπείς παράμετροι μηχανισμού πιστοποίησης",
+    "Insufficient data: %s" : "Μη επαρκή δεδομένα: %s",
     "Personal" : "Προσωπικά",
     "System" : "Σύστημα",
     "Grant access" : "Παροχή πρόσβασης",
diff --git a/apps/files_external/l10n/el.json b/apps/files_external/l10n/el.json
index 74a9aa298ef5807e0ae7f59d2d5c5e6012fbab1f..ee5131b9f642e9fe9b07157b0f7dabfd523ffd25 100644
--- a/apps/files_external/l10n/el.json
+++ b/apps/files_external/l10n/el.json
@@ -14,6 +14,7 @@
     "Not permitted to use authentication mechanism \"%s\"" : "Μη επιτρεπόμενος μηχανισμός πιστοποίησης \"%s\"",
     "Unsatisfied backend parameters" : "Ελλιπείς παράμετροι συστήματος",
     "Unsatisfied authentication mechanism parameters" : "Ελλιπείς παράμετροι μηχανισμού πιστοποίησης",
+    "Insufficient data: %s" : "Μη επαρκή δεδομένα: %s",
     "Personal" : "Προσωπικά",
     "System" : "Σύστημα",
     "Grant access" : "Παροχή πρόσβασης",
diff --git a/apps/files_external/l10n/es.js b/apps/files_external/l10n/es.js
index cb31cd7c53f8d0a46a6d0b1fb5f0fd05c81bb7f5..5415e8963cd77ea596a9d7f02de910ce4001b443 100644
--- a/apps/files_external/l10n/es.js
+++ b/apps/files_external/l10n/es.js
@@ -88,7 +88,6 @@ OC.L10N.register(
     "Advanced settings" : "Configuración avanzada",
     "Delete" : "Eliminar",
     "Add storage" : "Añadir almacenamiento",
-    "Allow users to mount external storages" : "Permitir a los usuarios montar almacenamientos externos",
     "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo"
 },
 "nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/es.json b/apps/files_external/l10n/es.json
index d71effbd84a86ff4a5dd06eaf54457488383ff14..10cbf0c974a900de96c1d091f12a9cee9a20976d 100644
--- a/apps/files_external/l10n/es.json
+++ b/apps/files_external/l10n/es.json
@@ -86,7 +86,6 @@
     "Advanced settings" : "Configuración avanzada",
     "Delete" : "Eliminar",
     "Add storage" : "Añadir almacenamiento",
-    "Allow users to mount external storages" : "Permitir a los usuarios montar almacenamientos externos",
     "Allow users to mount the following external storage" : "Permitir a los usuarios montar el siguiente almacenamiento externo"
 },"pluralForm" :"nplurals=2; plural=(n != 1);"
 }
\ No newline at end of file
diff --git a/apps/files_external/l10n/fi_FI.js b/apps/files_external/l10n/fi_FI.js
index 18e4db069de9f679fdf41f6ae59f8ad7a5a26667..f91dec933108d52da63a378b2b5b69d1289b16fc 100644
--- a/apps/files_external/l10n/fi_FI.js
+++ b/apps/files_external/l10n/fi_FI.js
@@ -62,6 +62,7 @@ OC.L10N.register(
     "Username as share" : "Käyttäjänimi jakona",
     "OpenStack Object Storage" : "OpenStack Object Storage",
     "Service name" : "Palvelun nimi",
+    "Request timeout (seconds)" : "Pyynnön aikakatkaisu (sekunneissa)",
     "<b>Note:</b> " : "<b>Huomio:</b> ",
     "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n cURL-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan cURL-tuki käyttöön.",
     "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n FTP-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan FTP-tuki käyttöön.",
@@ -78,7 +79,7 @@ OC.L10N.register(
     "Advanced settings" : "Lisäasetukset",
     "Delete" : "Poista",
     "Add storage" : "Lisää tallennustila",
-    "Allow users to mount external storages" : "Salli käyttäjien liittää erillisiä tallennustiloja",
+    "Allow users to mount external storage" : "Salli käyttäjien liittää erillisiä tallennustiloja",
     "Allow users to mount the following external storage" : "Salli käyttäjien liittää seuraavat erilliset tallennusvälineet"
 },
 "nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/fi_FI.json b/apps/files_external/l10n/fi_FI.json
index d879826f90167447f61c424a950f54972d4cd590..a2033b4c578a5e73b0cf0eab7311744357c455d7 100644
--- a/apps/files_external/l10n/fi_FI.json
+++ b/apps/files_external/l10n/fi_FI.json
@@ -60,6 +60,7 @@
     "Username as share" : "Käyttäjänimi jakona",
     "OpenStack Object Storage" : "OpenStack Object Storage",
     "Service name" : "Palvelun nimi",
+    "Request timeout (seconds)" : "Pyynnön aikakatkaisu (sekunneissa)",
     "<b>Note:</b> " : "<b>Huomio:</b> ",
     "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n cURL-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan cURL-tuki käyttöön.",
     "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Huomio:</b> PHP:n FTP-tuki ei ole käytössä tai sitä ei ole asennettu. Kohteen %s liittäminen ei ole mahdollista. Pyydä järjestelmän ylläpitäjää ottamaan FTP-tuki käyttöön.",
@@ -76,7 +77,7 @@
     "Advanced settings" : "Lisäasetukset",
     "Delete" : "Poista",
     "Add storage" : "Lisää tallennustila",
-    "Allow users to mount external storages" : "Salli käyttäjien liittää erillisiä tallennustiloja",
+    "Allow users to mount external storage" : "Salli käyttäjien liittää erillisiä tallennustiloja",
     "Allow users to mount the following external storage" : "Salli käyttäjien liittää seuraavat erilliset tallennusvälineet"
 },"pluralForm" :"nplurals=2; plural=(n != 1);"
 }
\ No newline at end of file
diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js
index b62896fae571cdbfc84257afba79c528497f2502..3358b36cf8e44cffc38e4935c195b5bc8a9cac9e 100644
--- a/apps/files_external/l10n/fr.js
+++ b/apps/files_external/l10n/fr.js
@@ -102,7 +102,7 @@ OC.L10N.register(
     "Advanced settings" : "Paramètres avancés",
     "Delete" : "Supprimer",
     "Add storage" : "Ajouter un support de stockage",
-    "Allow users to mount external storages" : "Autoriser les utilisateurs à monter des espaces de stockage externes",
+    "Allow users to mount external storage" : "Autoriser les utilisateurs à monter l'espace de stockage externe",
     "Allow users to mount the following external storage" : "Autoriser les utilisateurs à monter les stockages externes suivants"
 },
 "nplurals=2; plural=(n > 1);");
diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json
index ceb38a2ace695e5e1f3dc69764c2fc6a8299b91a..684f2b5197075aa32501137c0f29e450ed1cfd11 100644
--- a/apps/files_external/l10n/fr.json
+++ b/apps/files_external/l10n/fr.json
@@ -100,7 +100,7 @@
     "Advanced settings" : "Paramètres avancés",
     "Delete" : "Supprimer",
     "Add storage" : "Ajouter un support de stockage",
-    "Allow users to mount external storages" : "Autoriser les utilisateurs à monter des espaces de stockage externes",
+    "Allow users to mount external storage" : "Autoriser les utilisateurs à monter l'espace de stockage externe",
     "Allow users to mount the following external storage" : "Autoriser les utilisateurs à monter les stockages externes suivants"
 },"pluralForm" :"nplurals=2; plural=(n > 1);"
 }
\ No newline at end of file
diff --git a/apps/files_external/l10n/id.js b/apps/files_external/l10n/id.js
index 29c08c0cbdf23d6d6bb2db71739c2a4794f18c7f..b01e13e6085707556f32f3fea6fa3acedb143fbd 100644
--- a/apps/files_external/l10n/id.js
+++ b/apps/files_external/l10n/id.js
@@ -101,7 +101,6 @@ OC.L10N.register(
     "Advanced settings" : "Pengaturan Lanjutan",
     "Delete" : "Hapus",
     "Add storage" : "Tambahkan penyimpanan",
-    "Allow users to mount external storages" : "Izinkan pengguna untuk me-mount penyimpanan eksternal",
     "Allow users to mount the following external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal berikut"
 },
 "nplurals=1; plural=0;");
diff --git a/apps/files_external/l10n/id.json b/apps/files_external/l10n/id.json
index 81491e0f84eedcfb1f4d1e1e0792ce1230043a7b..383850199ac2fd4ff5d10f13adacf78203805a86 100644
--- a/apps/files_external/l10n/id.json
+++ b/apps/files_external/l10n/id.json
@@ -99,7 +99,6 @@
     "Advanced settings" : "Pengaturan Lanjutan",
     "Delete" : "Hapus",
     "Add storage" : "Tambahkan penyimpanan",
-    "Allow users to mount external storages" : "Izinkan pengguna untuk me-mount penyimpanan eksternal",
     "Allow users to mount the following external storage" : "Izinkan pengguna untuk mengaitkan penyimpanan eksternal berikut"
 },"pluralForm" :"nplurals=1; plural=0;"
 }
\ No newline at end of file
diff --git a/apps/files_external/l10n/it.js b/apps/files_external/l10n/it.js
index 1727924f18eb1686b662368a9330ac2bafc42239..8e126abe93b8e5222808193b84ecf90f6d52ff46 100644
--- a/apps/files_external/l10n/it.js
+++ b/apps/files_external/l10n/it.js
@@ -102,7 +102,7 @@ OC.L10N.register(
     "Advanced settings" : "Impostazioni avanzate",
     "Delete" : "Elimina",
     "Add storage" : "Aggiungi archiviazione",
-    "Allow users to mount external storages" : "Consenti agli utenti di montare archiviazioni esterne",
+    "Allow users to mount external storage" : "Consenti agli utenti di montare archiviazioni esterne",
     "Allow users to mount the following external storage" : "Consenti agli utenti di montare la seguente archiviazione esterna"
 },
 "nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/it.json b/apps/files_external/l10n/it.json
index 19d86a6196ade6227b8ef63c2c13594c4462ba39..e21cf5973d26f6f22c8b752f4394d905deec6f96 100644
--- a/apps/files_external/l10n/it.json
+++ b/apps/files_external/l10n/it.json
@@ -100,7 +100,7 @@
     "Advanced settings" : "Impostazioni avanzate",
     "Delete" : "Elimina",
     "Add storage" : "Aggiungi archiviazione",
-    "Allow users to mount external storages" : "Consenti agli utenti di montare archiviazioni esterne",
+    "Allow users to mount external storage" : "Consenti agli utenti di montare archiviazioni esterne",
     "Allow users to mount the following external storage" : "Consenti agli utenti di montare la seguente archiviazione esterna"
 },"pluralForm" :"nplurals=2; plural=(n != 1);"
 }
\ No newline at end of file
diff --git a/apps/files_external/l10n/ja.js b/apps/files_external/l10n/ja.js
index b766f3010e64b5f509ac48ce1a62d4a50207f34c..c9f489928cba13973d1006559465a6629e3d2215 100644
--- a/apps/files_external/l10n/ja.js
+++ b/apps/files_external/l10n/ja.js
@@ -102,7 +102,6 @@ OC.L10N.register(
     "Advanced settings" : "詳細設定",
     "Delete" : "削除",
     "Add storage" : "ストレージを追加",
-    "Allow users to mount external storages" : "ユーザーに外部ストレージのマウントを許可する",
     "Allow users to mount the following external storage" : "ユーザーに以下の外部ストレージのマウントを許可する"
 },
 "nplurals=1; plural=0;");
diff --git a/apps/files_external/l10n/ja.json b/apps/files_external/l10n/ja.json
index b9a3eda0566b68ca31d2b6250ef3b27711329147..1e52d429a2cf5f4bff5bb44c3e721d85abf543bc 100644
--- a/apps/files_external/l10n/ja.json
+++ b/apps/files_external/l10n/ja.json
@@ -100,7 +100,6 @@
     "Advanced settings" : "詳細設定",
     "Delete" : "削除",
     "Add storage" : "ストレージを追加",
-    "Allow users to mount external storages" : "ユーザーに外部ストレージのマウントを許可する",
     "Allow users to mount the following external storage" : "ユーザーに以下の外部ストレージのマウントを許可する"
 },"pluralForm" :"nplurals=1; plural=0;"
 }
\ No newline at end of file
diff --git a/apps/files_external/l10n/nb_NO.js b/apps/files_external/l10n/nb_NO.js
index 1859d5a72678366ed5d4e3915cf47cdae98d560e..ecafac048c0fd8661a021bb153a4ff49b8313ff5 100644
--- a/apps/files_external/l10n/nb_NO.js
+++ b/apps/files_external/l10n/nb_NO.js
@@ -101,7 +101,6 @@ OC.L10N.register(
     "Advanced settings" : "Avanserte innstillinger",
     "Delete" : "Slett",
     "Add storage" : "Legg til lagringsplass",
-    "Allow users to mount external storages" : "Tillat at brukere kobler opp eksterne lagre",
     "Allow users to mount the following external storage" : "Tillat brukere å koble opp følgende eksterne lagring"
 },
 "nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/nb_NO.json b/apps/files_external/l10n/nb_NO.json
index 669751aa00f818a96dd8b3b02dcaab9652e5888b..9a7a2ae6287c52ea373fcf3ad8c00b6fb9008974 100644
--- a/apps/files_external/l10n/nb_NO.json
+++ b/apps/files_external/l10n/nb_NO.json
@@ -99,7 +99,6 @@
     "Advanced settings" : "Avanserte innstillinger",
     "Delete" : "Slett",
     "Add storage" : "Legg til lagringsplass",
-    "Allow users to mount external storages" : "Tillat at brukere kobler opp eksterne lagre",
     "Allow users to mount the following external storage" : "Tillat brukere å koble opp følgende eksterne lagring"
 },"pluralForm" :"nplurals=2; plural=(n != 1);"
 }
\ No newline at end of file
diff --git a/apps/files_external/l10n/nl.js b/apps/files_external/l10n/nl.js
index d26f5595f1f15f13e21426ea83e95a5f7616b9e9..92f01018a617b2801f98333e13125ca74aa92050 100644
--- a/apps/files_external/l10n/nl.js
+++ b/apps/files_external/l10n/nl.js
@@ -102,7 +102,6 @@ OC.L10N.register(
     "Advanced settings" : "Geavanceerde instellingen",
     "Delete" : "Verwijder",
     "Add storage" : "Toevoegen opslag",
-    "Allow users to mount external storages" : "Sta gebruikers toe om een externe opslag aan te koppelen.",
     "Allow users to mount the following external storage" : "Sta gebruikers toe de volgende externe opslag aan te koppelen"
 },
 "nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/nl.json b/apps/files_external/l10n/nl.json
index cb1db40e3c9e6def6512b7307bdc7f96db1a2101..9d56dd127c305d3ab82469cdb53c10663ec716c0 100644
--- a/apps/files_external/l10n/nl.json
+++ b/apps/files_external/l10n/nl.json
@@ -100,7 +100,6 @@
     "Advanced settings" : "Geavanceerde instellingen",
     "Delete" : "Verwijder",
     "Add storage" : "Toevoegen opslag",
-    "Allow users to mount external storages" : "Sta gebruikers toe om een externe opslag aan te koppelen.",
     "Allow users to mount the following external storage" : "Sta gebruikers toe de volgende externe opslag aan te koppelen"
 },"pluralForm" :"nplurals=2; plural=(n != 1);"
 }
\ No newline at end of file
diff --git a/apps/files_external/l10n/oc.js b/apps/files_external/l10n/oc.js
index 4771b564edb66f5f6c4239fd3a3c2e5fa5a11506..4809cf923526f2931dee3a0837d47eb3b3b7328b 100644
--- a/apps/files_external/l10n/oc.js
+++ b/apps/files_external/l10n/oc.js
@@ -101,7 +101,6 @@ OC.L10N.register(
     "Advanced settings" : "Paramètres avançats",
     "Delete" : "Suprimir",
     "Add storage" : "Apondre un supòrt d'emmagazinatge",
-    "Allow users to mount external storages" : "Autorizar los utilizaires a montar los emmagazinatges extèrnes",
     "Allow users to mount the following external storage" : "Autorizar los utilizaires a montar los emmagazinatges extèrnes seguents"
 },
 "nplurals=2; plural=(n > 1);");
diff --git a/apps/files_external/l10n/oc.json b/apps/files_external/l10n/oc.json
index f89691dddde9b977f34019c45668deff8b24db10..30163f958fccf2ec19299d761164bc12d6e1e16d 100644
--- a/apps/files_external/l10n/oc.json
+++ b/apps/files_external/l10n/oc.json
@@ -99,7 +99,6 @@
     "Advanced settings" : "Paramètres avançats",
     "Delete" : "Suprimir",
     "Add storage" : "Apondre un supòrt d'emmagazinatge",
-    "Allow users to mount external storages" : "Autorizar los utilizaires a montar los emmagazinatges extèrnes",
     "Allow users to mount the following external storage" : "Autorizar los utilizaires a montar los emmagazinatges extèrnes seguents"
 },"pluralForm" :"nplurals=2; plural=(n > 1);"
 }
\ No newline at end of file
diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js
index 1830ab1f993af313f548703770d078e216031454..92bc16355d31f6f81a536a7bae25d0b82687be1d 100644
--- a/apps/files_external/l10n/pt_BR.js
+++ b/apps/files_external/l10n/pt_BR.js
@@ -102,7 +102,7 @@ OC.L10N.register(
     "Advanced settings" : "Configurações avançadas",
     "Delete" : "Excluir",
     "Add storage" : "Adicionar Armazenamento",
-    "Allow users to mount external storages" : "Permitir que usuários possam realizar armazenamentos externos",
+    "Allow users to mount external storage" : "Permitir que usuários montem armazenamento externo",
     "Allow users to mount the following external storage" : "Permitir que usuários montem o seguinte armazenamento externo"
 },
 "nplurals=2; plural=(n > 1);");
diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json
index d33e4eba927c1f08ef78833d6e6a11a0ec065720..bb6e0a96cff9a68c0577d3f7e74a648de674a9b6 100644
--- a/apps/files_external/l10n/pt_BR.json
+++ b/apps/files_external/l10n/pt_BR.json
@@ -100,7 +100,7 @@
     "Advanced settings" : "Configurações avançadas",
     "Delete" : "Excluir",
     "Add storage" : "Adicionar Armazenamento",
-    "Allow users to mount external storages" : "Permitir que usuários possam realizar armazenamentos externos",
+    "Allow users to mount external storage" : "Permitir que usuários montem armazenamento externo",
     "Allow users to mount the following external storage" : "Permitir que usuários montem o seguinte armazenamento externo"
 },"pluralForm" :"nplurals=2; plural=(n > 1);"
 }
\ No newline at end of file
diff --git a/apps/files_external/l10n/pt_PT.js b/apps/files_external/l10n/pt_PT.js
index ce816fa01d284f0db37aee44dd0dfd68860c1c19..4e8b3245e660760901641b201a450d7d50bd4461 100644
--- a/apps/files_external/l10n/pt_PT.js
+++ b/apps/files_external/l10n/pt_PT.js
@@ -95,7 +95,6 @@ OC.L10N.register(
     "Advanced settings" : "Definições avançadas",
     "Delete" : "Apagar",
     "Add storage" : "Adicionar armazenamento",
-    "Allow users to mount external storages" : "Permitir que os utilizadores montem armazenamentos externos",
     "Allow users to mount the following external storage" : "Permitir que os utilizadores montem o seguinte armazenamento externo"
 },
 "nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/pt_PT.json b/apps/files_external/l10n/pt_PT.json
index 89926c0fe27e3d43b755a5e2be4771590aa7266d..51333429106dc07ba5c64360085caacb2c3f9815 100644
--- a/apps/files_external/l10n/pt_PT.json
+++ b/apps/files_external/l10n/pt_PT.json
@@ -93,7 +93,6 @@
     "Advanced settings" : "Definições avançadas",
     "Delete" : "Apagar",
     "Add storage" : "Adicionar armazenamento",
-    "Allow users to mount external storages" : "Permitir que os utilizadores montem armazenamentos externos",
     "Allow users to mount the following external storage" : "Permitir que os utilizadores montem o seguinte armazenamento externo"
 },"pluralForm" :"nplurals=2; plural=(n != 1);"
 }
\ No newline at end of file
diff --git a/apps/files_external/l10n/ru.js b/apps/files_external/l10n/ru.js
index dd8f5c9bdf5737467a5a858c65b27f600b81f745..5550ea780ab8bcf85c793d72b4afa5b8cbe15aa7 100644
--- a/apps/files_external/l10n/ru.js
+++ b/apps/files_external/l10n/ru.js
@@ -101,7 +101,6 @@ OC.L10N.register(
     "Advanced settings" : "Расширенные настройки",
     "Delete" : "Удалить",
     "Add storage" : "Добавить хранилище",
-    "Allow users to mount external storages" : "Разрешить пользователям подключать внешние хранилища",
     "Allow users to mount the following external storage" : "Разрешить пользователям монтировать следующие сервисы хранения данных"
 },
 "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
diff --git a/apps/files_external/l10n/ru.json b/apps/files_external/l10n/ru.json
index 040442743792156ebc72fdfd95e3f9801a353d4a..52792a3f09a5673df96c36b9890adf8263030064 100644
--- a/apps/files_external/l10n/ru.json
+++ b/apps/files_external/l10n/ru.json
@@ -99,7 +99,6 @@
     "Advanced settings" : "Расширенные настройки",
     "Delete" : "Удалить",
     "Add storage" : "Добавить хранилище",
-    "Allow users to mount external storages" : "Разрешить пользователям подключать внешние хранилища",
     "Allow users to mount the following external storage" : "Разрешить пользователям монтировать следующие сервисы хранения данных"
 },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
 }
\ No newline at end of file
diff --git a/apps/files_external/l10n/sq.js b/apps/files_external/l10n/sq.js
index 85d8c251c890177a09002e0e9cd8825e655c19fc..f8e5c5a27dce65cd5ceb69a83ebbb6f9e1f876bc 100644
--- a/apps/files_external/l10n/sq.js
+++ b/apps/files_external/l10n/sq.js
@@ -100,7 +100,7 @@ OC.L10N.register(
     "Advanced settings" : "Rregullime të mëtejshme",
     "Delete" : "Fshije",
     "Add storage" : "Shtoni depozitë",
-    "Allow users to mount external storages" : "Lejoju përdoruesve të montojnë depozita të jashtme",
+    "Allow users to mount external storage" : "Lejoju përdoruesve të montojnë depozita të jashtme",
     "Allow users to mount the following external storage" : "Lejoju përdoruesve të montojnë depozitën e jashtme vijuese"
 },
 "nplurals=2; plural=(n != 1);");
diff --git a/apps/files_external/l10n/sq.json b/apps/files_external/l10n/sq.json
index c200be40d0315bc58dfc97a81e01c7a1edd4cc24..0da8e9406bb2dbb2c0dbf842a45baf1a9c505b2b 100644
--- a/apps/files_external/l10n/sq.json
+++ b/apps/files_external/l10n/sq.json
@@ -98,7 +98,7 @@
     "Advanced settings" : "Rregullime të mëtejshme",
     "Delete" : "Fshije",
     "Add storage" : "Shtoni depozitë",
-    "Allow users to mount external storages" : "Lejoju përdoruesve të montojnë depozita të jashtme",
+    "Allow users to mount external storage" : "Lejoju përdoruesve të montojnë depozita të jashtme",
     "Allow users to mount the following external storage" : "Lejoju përdoruesve të montojnë depozitën e jashtme vijuese"
 },"pluralForm" :"nplurals=2; plural=(n != 1);"
 }
\ No newline at end of file
diff --git a/apps/files_external/l10n/th_TH.js b/apps/files_external/l10n/th_TH.js
index 374725548abccc322efbdce2d65b63980f0bf8d2..4f5eaa534ebc1dc779c9bf6b768a55c4f7e7da38 100644
--- a/apps/files_external/l10n/th_TH.js
+++ b/apps/files_external/l10n/th_TH.js
@@ -102,7 +102,6 @@ OC.L10N.register(
     "Advanced settings" : "ตั้งค่าขั้นสูง",
     "Delete" : "ลบ",
     "Add storage" : "เพิ่มพื้นที่จัดเก็บข้อมูล",
-    "Allow users to mount external storages" : "อนุญาตให้ผู้ใช้ติดตั้งพื้นที่จัดเก็บภายนอก",
     "Allow users to mount the following external storage" : "อนุญาตให้ผู้ใช้ติดตั้งจัดเก็บข้อมูลภายนอกต่อไปนี้"
 },
 "nplurals=1; plural=0;");
diff --git a/apps/files_external/l10n/th_TH.json b/apps/files_external/l10n/th_TH.json
index bf8dc67f1aacde0a9b80386d20372f6127b84c92..bd070071705f1beeb2be738cfad1a44f558e764c 100644
--- a/apps/files_external/l10n/th_TH.json
+++ b/apps/files_external/l10n/th_TH.json
@@ -100,7 +100,6 @@
     "Advanced settings" : "ตั้งค่าขั้นสูง",
     "Delete" : "ลบ",
     "Add storage" : "เพิ่มพื้นที่จัดเก็บข้อมูล",
-    "Allow users to mount external storages" : "อนุญาตให้ผู้ใช้ติดตั้งพื้นที่จัดเก็บภายนอก",
     "Allow users to mount the following external storage" : "อนุญาตให้ผู้ใช้ติดตั้งจัดเก็บข้อมูลภายนอกต่อไปนี้"
 },"pluralForm" :"nplurals=1; plural=0;"
 }
\ No newline at end of file
diff --git a/apps/files_external/l10n/zh_TW.js b/apps/files_external/l10n/zh_TW.js
index db7bf9750177d21f30435ceaa2e53aff7cc9856c..61f224e4ffe7a135eb99af74e05ac22a4b3a4472 100644
--- a/apps/files_external/l10n/zh_TW.js
+++ b/apps/files_external/l10n/zh_TW.js
@@ -16,6 +16,7 @@ OC.L10N.register(
     "Not permitted to use authentication mechanism \"%s\"" : "不被允許使用驗證機制 \"%s\"",
     "Unsatisfied backend parameters" : "無法滿足後端所需的參數條件",
     "Unsatisfied authentication mechanism parameters" : "無法滿足驗證機制所需的參數條件",
+    "Insufficient data: %s" : "資料不足: %s",
     "Personal" : "個人",
     "System" : "系統",
     "Grant access" : "允許存取",
@@ -95,7 +96,7 @@ OC.L10N.register(
     "Advanced settings" : "進階設定",
     "Delete" : "刪除",
     "Add storage" : "增加儲存區",
-    "Allow users to mount external storages" : "允許使用者能自行掛載外部儲存",
+    "Allow users to mount external storage" : "允許使用者能自行掛載外部儲存",
     "Allow users to mount the following external storage" : "允許使用者自行掛載以下的外部儲存"
 },
 "nplurals=1; plural=0;");
diff --git a/apps/files_external/l10n/zh_TW.json b/apps/files_external/l10n/zh_TW.json
index 760ff7f5841679039ebf7bd21207f95ff04e6786..b9aa234e89e475fef7774d76222c4b208fe5f0ce 100644
--- a/apps/files_external/l10n/zh_TW.json
+++ b/apps/files_external/l10n/zh_TW.json
@@ -14,6 +14,7 @@
     "Not permitted to use authentication mechanism \"%s\"" : "不被允許使用驗證機制 \"%s\"",
     "Unsatisfied backend parameters" : "無法滿足後端所需的參數條件",
     "Unsatisfied authentication mechanism parameters" : "無法滿足驗證機制所需的參數條件",
+    "Insufficient data: %s" : "資料不足: %s",
     "Personal" : "個人",
     "System" : "系統",
     "Grant access" : "允許存取",
@@ -93,7 +94,7 @@
     "Advanced settings" : "進階設定",
     "Delete" : "刪除",
     "Add storage" : "增加儲存區",
-    "Allow users to mount external storages" : "允許使用者能自行掛載外部儲存",
+    "Allow users to mount external storage" : "允許使用者能自行掛載外部儲存",
     "Allow users to mount the following external storage" : "允許使用者自行掛載以下的外部儲存"
 },"pluralForm" :"nplurals=1; plural=0;"
 }
\ No newline at end of file
diff --git a/apps/files_external/service/backendservice.php b/apps/files_external/service/backendservice.php
index 1e90247b3e4d40420dbe0391bff3d07c2a8e4e8d..b325517e58aaecfded1e99dbcbfd5bc4cf5a1675 100644
--- a/apps/files_external/service/backendservice.php
+++ b/apps/files_external/service/backendservice.php
@@ -72,6 +72,11 @@ class BackendService {
 		$this->userMountingBackends = explode(',',
 			$this->config->getAppValue('files_external', 'user_mounting_backends', '')
 		);
+
+		// if no backend is in the list an empty string is in the array and user mounting is disabled
+		if ($this->userMountingBackends === ['']) {
+			$this->userMountingAllowed = false;
+		}
 	}
 
 	/**
diff --git a/apps/files_sharing/l10n/da.js b/apps/files_sharing/l10n/da.js
index d31acc37760ec33c0bd9c48c0990b1bf6ded761e..212e281b0d259d2de7bfcc91fde720ebfeda15d6 100644
--- a/apps/files_sharing/l10n/da.js
+++ b/apps/files_sharing/l10n/da.js
@@ -43,6 +43,14 @@ OC.L10N.register(
     "%2$s shared %1$s via link" : "%2$s delt %1$s via link",
     "%2$s shared %1$s with you" : "%2$s delt %1$s med dig",
     "You shared %1$s via link" : "Du delte %1$s via link",
+    "Downloaded via public link" : "Downloaded via et offentligt link",
+    "Shared with %2$s" : "Delt med %2$s",
+    "Shared with group %2$s" : "Delt med gruppen %2$s",
+    "Shared with %3$s by %2$s" : "Delt med %3$s af %2$s",
+    "Shared with group %3$s by %2$s" : "Delt med gruppen %3$s af %2$s",
+    "Shared via link by %2$s" : "Delt via link af %2$s",
+    "Shared by %2$s" : "Delt af %2$s",
+    "Shared via public link" : "Delt via offentligt link",
     "Shares" : "Delt",
     "You received %2$s as a remote share from %1$s" : "Du modtog %2$s som en ekstern deling fra %1$s",
     "Accept" : "Acceptér",
diff --git a/apps/files_sharing/l10n/da.json b/apps/files_sharing/l10n/da.json
index fe702de52e843e000e81211089f5792d0d294aa3..e13c671a0056f3e2a78774e208cb381e0adf757c 100644
--- a/apps/files_sharing/l10n/da.json
+++ b/apps/files_sharing/l10n/da.json
@@ -41,6 +41,14 @@
     "%2$s shared %1$s via link" : "%2$s delt %1$s via link",
     "%2$s shared %1$s with you" : "%2$s delt %1$s med dig",
     "You shared %1$s via link" : "Du delte %1$s via link",
+    "Downloaded via public link" : "Downloaded via et offentligt link",
+    "Shared with %2$s" : "Delt med %2$s",
+    "Shared with group %2$s" : "Delt med gruppen %2$s",
+    "Shared with %3$s by %2$s" : "Delt med %3$s af %2$s",
+    "Shared with group %3$s by %2$s" : "Delt med gruppen %3$s af %2$s",
+    "Shared via link by %2$s" : "Delt via link af %2$s",
+    "Shared by %2$s" : "Delt af %2$s",
+    "Shared via public link" : "Delt via offentligt link",
     "Shares" : "Delt",
     "You received %2$s as a remote share from %1$s" : "Du modtog %2$s som en ekstern deling fra %1$s",
     "Accept" : "Acceptér",
diff --git a/apps/files_sharing/l10n/el.js b/apps/files_sharing/l10n/el.js
index e4024492b653c44413c87d9d623b167b052c144a..62150bcc9421ce10ffe01fc6b611f6fc6785c353 100644
--- a/apps/files_sharing/l10n/el.js
+++ b/apps/files_sharing/l10n/el.js
@@ -7,9 +7,9 @@ OC.L10N.register(
     "Could not authenticate to remote share, password might be wrong" : "Δεν ήταν δυνατή η πιστοποίηση στο απομακρυσμένο διαμοιρασμένο στοιχείο, μπορεί να είναι λάθος ο κωδικός πρόσβασης",
     "Storage not valid" : "Μη έγκυρος αποθηκευτικός χώρος",
     "Couldn't add remote share" : "Αδυναμία προσθήκης απομακρυσμένου κοινόχρηστου φακέλου",
-    "Shared with you" : "Διαμοιρασμένο με εσάς",
-    "Shared with others" : "Διαμοιρασμένο με άλλους",
-    "Shared by link" : "Διαμοιρασμένο μέσω συνδέσμου",
+    "Shared with you" : "Διαμοιρασμένα με εσάς",
+    "Shared with others" : "Διαμοιρασμένα με άλλους",
+    "Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου",
     "Nothing shared with you yet" : "Κανένα αρχείο δεν έχει διαμοιραστεί ακόμα με εσάς.",
     "Files and folders others share with you will show up here" : "Τα αρχεία και οι φάκελοι που άλλοι διαμοιράζονται με εσάς θα εμφανιστούν εδώ",
     "Nothing shared yet" : "Δεν έχει διαμοιραστεί τίποτα μέχρι στιγμής",
diff --git a/apps/files_sharing/l10n/el.json b/apps/files_sharing/l10n/el.json
index 7bf5c00841ebd29303996b403e93e6d3c8a6ac70..5b23eaeedb54e385c65189c314cbc187c6c54429 100644
--- a/apps/files_sharing/l10n/el.json
+++ b/apps/files_sharing/l10n/el.json
@@ -5,9 +5,9 @@
     "Could not authenticate to remote share, password might be wrong" : "Δεν ήταν δυνατή η πιστοποίηση στο απομακρυσμένο διαμοιρασμένο στοιχείο, μπορεί να είναι λάθος ο κωδικός πρόσβασης",
     "Storage not valid" : "Μη έγκυρος αποθηκευτικός χώρος",
     "Couldn't add remote share" : "Αδυναμία προσθήκης απομακρυσμένου κοινόχρηστου φακέλου",
-    "Shared with you" : "Διαμοιρασμένο με εσάς",
-    "Shared with others" : "Διαμοιρασμένο με άλλους",
-    "Shared by link" : "Διαμοιρασμένο μέσω συνδέσμου",
+    "Shared with you" : "Διαμοιρασμένα με εσάς",
+    "Shared with others" : "Διαμοιρασμένα με άλλους",
+    "Shared by link" : "Διαμοιρασμένα μέσω συνδέσμου",
     "Nothing shared with you yet" : "Κανένα αρχείο δεν έχει διαμοιραστεί ακόμα με εσάς.",
     "Files and folders others share with you will show up here" : "Τα αρχεία και οι φάκελοι που άλλοι διαμοιράζονται με εσάς θα εμφανιστούν εδώ",
     "Nothing shared yet" : "Δεν έχει διαμοιραστεί τίποτα μέχρι στιγμής",
diff --git a/apps/files_sharing/l10n/lt_LT.js b/apps/files_sharing/l10n/lt_LT.js
index 897bfe457d10e1518776cefb2616559f270d204e..938483266051d6283c23823ffb3ae75156bd687a 100644
--- a/apps/files_sharing/l10n/lt_LT.js
+++ b/apps/files_sharing/l10n/lt_LT.js
@@ -1,27 +1,87 @@
 OC.L10N.register(
     "files_sharing",
     {
+    "Server to server sharing is not enabled on this server" : "Serveris - serveris dalinimasis neįjungtas šiame serveryje",
+    "The mountpoint name contains invalid characters." : "Prijungimo taškas su neleistinais simboliais.",
+    "Invalid or untrusted SSL certificate" : "Netinkamas arba nepatikimas SSL sertifikatas",
+    "Could not authenticate to remote share, password might be wrong" : "Nepavyko identifikuotis serveryje, gal netinkamas slaptažodis",
+    "Storage not valid" : "Talpykla negalioja",
+    "Couldn't add remote share" : "Nepavyko pridÄ—ti nutolusio dalijimosi",
+    "Shared with you" : "Pasidalinta su tavimi",
+    "Shared with others" : "Pasidalinta su kitais",
+    "Shared by link" : "Pasidalinta su nuoroda",
+    "Nothing shared with you yet" : "Kol kas niekas su tavimi nesidalijama",
+    "Files and folders others share with you will show up here" : "Failai ir aplankai kurie dalinami ir tau, bus rodomi čia",
+    "Nothing shared yet" : "Niekas nepasidalinta",
+    "Files and folders you share will show up here" : "Failai ir aplankai kuriais daliniesi bus rodomi čia",
+    "No shared links" : "Nėra pasidalinimų nuoroda",
+    "Files and folders you share by link will show up here" : "Failai ir aplankai kuriais daliniesi su nuoroda bus rodomi čia",
+    "Do you want to add the remote share {name} from {owner}@{remote}?" : "Ar nori pridėti nutolusį dalijimąsi {name} nuo {owner}@{remote}?",
+    "Remote share" : "Nutolęs dalinimasis",
+    "Remote share password" : "Nutolusio dalijimosi slaptažodis",
     "Cancel" : "Atšaukti",
+    "Add remote share" : "PridÄ—ti nutolusi dalijimÄ…si",
+    "You can upload into this folder" : "Gali įkelti į šį aplanką",
+    "No ownCloud installation (7 or higher) found at {remote}" : "Nerastas ownCloud (7 ar aukštesnė versiją) {remote} serveryje.",
+    "Invalid ownCloud url" : "Neteisinga ownCloud nuoroda",
     "Shared by" : "Dalinasi",
     "Sharing" : "Dalijimasis",
     "A file or folder has been <strong>shared</strong>" : "Failas ar aplankas buvo <strong>pasidalintas</strong>",
+    "A file or folder was shared from <strong>another server</strong>" : "Failas ar aplankas buvo pasidalintas iš <strong>kito serverio</strong>",
+    "A public shared file or folder was <strong>downloaded</strong>" : "Viešai pasidalintas failas ar aplankas <strong>parsiųstas</strong>",
+    "You received a new remote share %2$s from %1$s" : "Gavote naują nutolusį dalijimąsi %2$s nuo %1$s",
+    "You received a new remote share from %s" : "Gavote naują nutolusį dalijimąsi nuo %s",
+    "%1$s accepted remote share %2$s" : "%1$s priėmė nutolusį dalijimąsi %2$s",
+    "%1$s declined remote share %2$s" : "%1$s atmetė nutolusį dalijimąsi %2$s",
+    "%1$s unshared %2$s from you" : "%1$s nebesidalina %2$s su tavimi",
+    "Public shared folder %1$s was downloaded" : "Viešas dalijimosi aplankas %1$s parsiųstas",
+    "Public shared file %1$s was downloaded" : "Viešai dalinamas failas %1$s parsiųstas",
     "You shared %1$s with %2$s" : "JÅ«s pasidalinote %1$s su %2$s",
     "You shared %1$s with group %2$s" : "JÅ«s pasidalinote %1$s su grupe %2$s",
+    "%2$s shared %1$s with %3$s" : "%2$s pasidalino %1$s su %3$s",
+    "%2$s shared %1$s with group %3$s" : "%2$s pasidalino %1$s su grupe %3$s",
+    "%2$s shared %1$s via link" : "%2$s pasidalino %1$s nuoroda",
     "%2$s shared %1$s with you" : "%2$s pasidalino %1$s su jumis",
     "You shared %1$s via link" : "Pasidalinote %1$s per nuorodÄ…",
+    "Downloaded via public link" : "Atsiųsti per viešą nuorodą",
+    "Shared with %2$s" : "Pasidalinta su %2$s",
+    "Shared with group %2$s" : "Pasidalinta su grupe %2$s",
+    "Shared with %3$s by %2$s" : "%2$s pasidalino %3$s",
+    "Shared with group %3$s by %2$s" : "%2$s pasidalino su grupe %3$s",
+    "Shared via link by %2$s" : "%2$s pasidalino nuoroda",
+    "Shared by %2$s" : "Pasidalino %2$s",
+    "Shared via public link" : "Pasidalinta vieša nuoroda",
     "Shares" : "Dalijimaisi",
+    "You received %2$s as a remote share from %1$s" : "Gavai dalijimÄ…si %2$s nuo %1$s",
+    "Accept" : "Priimti",
+    "Decline" : "Atmesti",
+    "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Pasidalink su manimi per #ownCloud padebesius, plačiau %s",
+    "Share with me through my #ownCloud Federated Cloud ID" : "Pasidalink su manimi per #ownCloud padebesius",
     "This share is password-protected" : "Turinys apsaugotas slaptažodžiu",
     "The password is wrong. Try again." : "Netinka slaptažodis: Bandykite dar kartą.",
     "Password" : "Slaptažodis",
     "No entries found in this folder" : "Nerasta įrašų šiame aplanke",
     "Name" : "Pavadinimas",
+    "Share time" : "Dalijimosi laikas",
     "Sorry, this link doesn’t seem to work anymore." : "Atleiskite, panašu, kad nuoroda yra neveiksni.",
     "Reasons might be:" : "Galimos priežastys:",
     "the item was removed" : "elementas buvo pašalintas",
     "the link expired" : "baigÄ—si nuorodos galiojimo laikas",
     "sharing is disabled" : "dalinimasis yra išjungtas",
     "For more info, please ask the person who sent this link." : "DÄ—l tikslesnÄ—s informacijos susisiekite su asmeniu atsiuntusiu nuorodÄ….",
+    "Add to your ownCloud" : "PridÄ—ti prie tavo ownCloud",
     "Download" : "Atsisiųsti",
-    "Direct link" : "TiesioginÄ— nuoroda"
+    "Download %s" : "Atsiųsti %s",
+    "Direct link" : "TiesioginÄ— nuoroda",
+    "Federated Cloud Sharing" : "Viešas dalijimasis padebesiu",
+    "Open documentation" : "Atidaryti dokumentÄ…",
+    "Allow users on this server to send shares to other servers" : "Leisti vartotojams Å¡iame serveryje dalintis su kitais serveriais",
+    "Allow users on this server to receive shares from other servers" : "Leisti vartotojams šiame serveryje priimti dalijimusis iš kitų serverių",
+    "Federated Cloud" : "Viešas debesis",
+    "Your Federated Cloud ID:" : "Tavo debesies ID:",
+    "Share it:" : "Pasidalink:",
+    "Add to your website" : "Pridėti tavo puslapį",
+    "Share with me via ownCloud" : "Pasidalink su manimi per ownCloud",
+    "HTML Code:" : "HTML kodas:"
 },
 "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/files_sharing/l10n/lt_LT.json b/apps/files_sharing/l10n/lt_LT.json
index c27668b24c7c8ec6ff523f6fbc1b5cc3858fa68e..6d777024052c4f36f2aa3ca274f0999eff30401e 100644
--- a/apps/files_sharing/l10n/lt_LT.json
+++ b/apps/files_sharing/l10n/lt_LT.json
@@ -1,25 +1,85 @@
 { "translations": {
+    "Server to server sharing is not enabled on this server" : "Serveris - serveris dalinimasis neįjungtas šiame serveryje",
+    "The mountpoint name contains invalid characters." : "Prijungimo taškas su neleistinais simboliais.",
+    "Invalid or untrusted SSL certificate" : "Netinkamas arba nepatikimas SSL sertifikatas",
+    "Could not authenticate to remote share, password might be wrong" : "Nepavyko identifikuotis serveryje, gal netinkamas slaptažodis",
+    "Storage not valid" : "Talpykla negalioja",
+    "Couldn't add remote share" : "Nepavyko pridÄ—ti nutolusio dalijimosi",
+    "Shared with you" : "Pasidalinta su tavimi",
+    "Shared with others" : "Pasidalinta su kitais",
+    "Shared by link" : "Pasidalinta su nuoroda",
+    "Nothing shared with you yet" : "Kol kas niekas su tavimi nesidalijama",
+    "Files and folders others share with you will show up here" : "Failai ir aplankai kurie dalinami ir tau, bus rodomi čia",
+    "Nothing shared yet" : "Niekas nepasidalinta",
+    "Files and folders you share will show up here" : "Failai ir aplankai kuriais daliniesi bus rodomi čia",
+    "No shared links" : "Nėra pasidalinimų nuoroda",
+    "Files and folders you share by link will show up here" : "Failai ir aplankai kuriais daliniesi su nuoroda bus rodomi čia",
+    "Do you want to add the remote share {name} from {owner}@{remote}?" : "Ar nori pridėti nutolusį dalijimąsi {name} nuo {owner}@{remote}?",
+    "Remote share" : "Nutolęs dalinimasis",
+    "Remote share password" : "Nutolusio dalijimosi slaptažodis",
     "Cancel" : "Atšaukti",
+    "Add remote share" : "PridÄ—ti nutolusi dalijimÄ…si",
+    "You can upload into this folder" : "Gali įkelti į šį aplanką",
+    "No ownCloud installation (7 or higher) found at {remote}" : "Nerastas ownCloud (7 ar aukštesnė versiją) {remote} serveryje.",
+    "Invalid ownCloud url" : "Neteisinga ownCloud nuoroda",
     "Shared by" : "Dalinasi",
     "Sharing" : "Dalijimasis",
     "A file or folder has been <strong>shared</strong>" : "Failas ar aplankas buvo <strong>pasidalintas</strong>",
+    "A file or folder was shared from <strong>another server</strong>" : "Failas ar aplankas buvo pasidalintas iš <strong>kito serverio</strong>",
+    "A public shared file or folder was <strong>downloaded</strong>" : "Viešai pasidalintas failas ar aplankas <strong>parsiųstas</strong>",
+    "You received a new remote share %2$s from %1$s" : "Gavote naują nutolusį dalijimąsi %2$s nuo %1$s",
+    "You received a new remote share from %s" : "Gavote naują nutolusį dalijimąsi nuo %s",
+    "%1$s accepted remote share %2$s" : "%1$s priėmė nutolusį dalijimąsi %2$s",
+    "%1$s declined remote share %2$s" : "%1$s atmetė nutolusį dalijimąsi %2$s",
+    "%1$s unshared %2$s from you" : "%1$s nebesidalina %2$s su tavimi",
+    "Public shared folder %1$s was downloaded" : "Viešas dalijimosi aplankas %1$s parsiųstas",
+    "Public shared file %1$s was downloaded" : "Viešai dalinamas failas %1$s parsiųstas",
     "You shared %1$s with %2$s" : "JÅ«s pasidalinote %1$s su %2$s",
     "You shared %1$s with group %2$s" : "JÅ«s pasidalinote %1$s su grupe %2$s",
+    "%2$s shared %1$s with %3$s" : "%2$s pasidalino %1$s su %3$s",
+    "%2$s shared %1$s with group %3$s" : "%2$s pasidalino %1$s su grupe %3$s",
+    "%2$s shared %1$s via link" : "%2$s pasidalino %1$s nuoroda",
     "%2$s shared %1$s with you" : "%2$s pasidalino %1$s su jumis",
     "You shared %1$s via link" : "Pasidalinote %1$s per nuorodÄ…",
+    "Downloaded via public link" : "Atsiųsti per viešą nuorodą",
+    "Shared with %2$s" : "Pasidalinta su %2$s",
+    "Shared with group %2$s" : "Pasidalinta su grupe %2$s",
+    "Shared with %3$s by %2$s" : "%2$s pasidalino %3$s",
+    "Shared with group %3$s by %2$s" : "%2$s pasidalino su grupe %3$s",
+    "Shared via link by %2$s" : "%2$s pasidalino nuoroda",
+    "Shared by %2$s" : "Pasidalino %2$s",
+    "Shared via public link" : "Pasidalinta vieša nuoroda",
     "Shares" : "Dalijimaisi",
+    "You received %2$s as a remote share from %1$s" : "Gavai dalijimÄ…si %2$s nuo %1$s",
+    "Accept" : "Priimti",
+    "Decline" : "Atmesti",
+    "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Pasidalink su manimi per #ownCloud padebesius, plačiau %s",
+    "Share with me through my #ownCloud Federated Cloud ID" : "Pasidalink su manimi per #ownCloud padebesius",
     "This share is password-protected" : "Turinys apsaugotas slaptažodžiu",
     "The password is wrong. Try again." : "Netinka slaptažodis: Bandykite dar kartą.",
     "Password" : "Slaptažodis",
     "No entries found in this folder" : "Nerasta įrašų šiame aplanke",
     "Name" : "Pavadinimas",
+    "Share time" : "Dalijimosi laikas",
     "Sorry, this link doesn’t seem to work anymore." : "Atleiskite, panašu, kad nuoroda yra neveiksni.",
     "Reasons might be:" : "Galimos priežastys:",
     "the item was removed" : "elementas buvo pašalintas",
     "the link expired" : "baigÄ—si nuorodos galiojimo laikas",
     "sharing is disabled" : "dalinimasis yra išjungtas",
     "For more info, please ask the person who sent this link." : "DÄ—l tikslesnÄ—s informacijos susisiekite su asmeniu atsiuntusiu nuorodÄ….",
+    "Add to your ownCloud" : "PridÄ—ti prie tavo ownCloud",
     "Download" : "Atsisiųsti",
-    "Direct link" : "TiesioginÄ— nuoroda"
+    "Download %s" : "Atsiųsti %s",
+    "Direct link" : "TiesioginÄ— nuoroda",
+    "Federated Cloud Sharing" : "Viešas dalijimasis padebesiu",
+    "Open documentation" : "Atidaryti dokumentÄ…",
+    "Allow users on this server to send shares to other servers" : "Leisti vartotojams Å¡iame serveryje dalintis su kitais serveriais",
+    "Allow users on this server to receive shares from other servers" : "Leisti vartotojams šiame serveryje priimti dalijimusis iš kitų serverių",
+    "Federated Cloud" : "Viešas debesis",
+    "Your Federated Cloud ID:" : "Tavo debesies ID:",
+    "Share it:" : "Pasidalink:",
+    "Add to your website" : "Pridėti tavo puslapį",
+    "Share with me via ownCloud" : "Pasidalink su manimi per ownCloud",
+    "HTML Code:" : "HTML kodas:"
 },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"
 }
\ No newline at end of file
diff --git a/apps/files_sharing/l10n/oc.js b/apps/files_sharing/l10n/oc.js
index 54924e1112186e06c39fcf02c7d3a872d0c898a9..6a1329bf5bd183724763c3c8b9f7d8a1871eb0a5 100644
--- a/apps/files_sharing/l10n/oc.js
+++ b/apps/files_sharing/l10n/oc.js
@@ -43,6 +43,14 @@ OC.L10N.register(
     "%2$s shared %1$s via link" : "%2$s a partejat %1$s per ligam public",
     "%2$s shared %1$s with you" : "%2$s a partejat %1$s amb vos",
     "You shared %1$s via link" : "Avètz partejat %1$s per ligam public",
+    "Downloaded via public link" : "Telecargat per ligam public",
+    "Shared with %2$s" : "Partejat amb %2$s",
+    "Shared with group %2$s" : "Partejat amb lo grop %2$s",
+    "Shared with %3$s by %2$s" : "Partejat amb %3$s per %2$s",
+    "Shared with group %3$s by %2$s" : "Partejat amb lo grop %3$s per %2$s",
+    "Shared via link by %2$s" : "Partejat via ligam per %2$s",
+    "Shared by %2$s" : "Partejat per %2$s",
+    "Shared via public link" : "Partejat per ligam public",
     "Shares" : "Partiments",
     "You received %2$s as a remote share from %1$s" : "Avètz recebut %2$s en tant que partiment distant per %1$s",
     "Accept" : "Acceptar",
diff --git a/apps/files_sharing/l10n/oc.json b/apps/files_sharing/l10n/oc.json
index 2194f0aa1d2fad1a01db003b471420a6f1949081..591090742c6344bb865e6c485ecbaa74202e2208 100644
--- a/apps/files_sharing/l10n/oc.json
+++ b/apps/files_sharing/l10n/oc.json
@@ -41,6 +41,14 @@
     "%2$s shared %1$s via link" : "%2$s a partejat %1$s per ligam public",
     "%2$s shared %1$s with you" : "%2$s a partejat %1$s amb vos",
     "You shared %1$s via link" : "Avètz partejat %1$s per ligam public",
+    "Downloaded via public link" : "Telecargat per ligam public",
+    "Shared with %2$s" : "Partejat amb %2$s",
+    "Shared with group %2$s" : "Partejat amb lo grop %2$s",
+    "Shared with %3$s by %2$s" : "Partejat amb %3$s per %2$s",
+    "Shared with group %3$s by %2$s" : "Partejat amb lo grop %3$s per %2$s",
+    "Shared via link by %2$s" : "Partejat via ligam per %2$s",
+    "Shared by %2$s" : "Partejat per %2$s",
+    "Shared via public link" : "Partejat per ligam public",
     "Shares" : "Partiments",
     "You received %2$s as a remote share from %1$s" : "Avètz recebut %2$s en tant que partiment distant per %1$s",
     "Accept" : "Acceptar",
diff --git a/apps/files_sharing/l10n/zh_TW.js b/apps/files_sharing/l10n/zh_TW.js
index eecbbf1f92e64ea9d5a510b771c819a3b404a23d..58d0398a1d5d727efc127335aa0b5c5f3724e654 100644
--- a/apps/files_sharing/l10n/zh_TW.js
+++ b/apps/files_sharing/l10n/zh_TW.js
@@ -2,6 +2,7 @@ OC.L10N.register(
     "files_sharing",
     {
     "Server to server sharing is not enabled on this server" : "伺服器對伺服器共享在這台伺服器上面並未啟用",
+    "The mountpoint name contains invalid characters." : "掛載的名稱含有不合法的字元",
     "Invalid or untrusted SSL certificate" : "無效或是不信任的SSL憑證",
     "Could not authenticate to remote share, password might be wrong" : "無法驗證遠端分享,可能是密碼錯誤",
     "Storage not valid" : "儲存空間無法使用",
@@ -32,6 +33,7 @@ OC.L10N.register(
     "You received a new remote share from %s" : "您收到了一個遠端分享來自於 %s",
     "%1$s accepted remote share %2$s" : "%1$s 接受了遠端分享 %2$s",
     "%1$s declined remote share %2$s" : "%1$s 拒絕了遠端分享 %2$s",
+    "%1$s unshared %2$s from you" : "%1$s 取消與你分享 %2$s",
     "Public shared folder %1$s was downloaded" : "共享資料夾 %1$s 已被下載",
     "Public shared file %1$s was downloaded" : "共享檔案 %1$s 已被下載",
     "You shared %1$s with %2$s" : "您與 %2$s 分享了 %1$s",
@@ -50,6 +52,7 @@ OC.L10N.register(
     "Shared by %2$s" : "由 %2$s 分享",
     "Shared via public link" : "透過公用連結分享",
     "Shares" : "分享",
+    "You received %2$s as a remote share from %1$s" : "您收到了來自%1$s的一個遠端分享 %2$s ",
     "Accept" : "接受",
     "Decline" : "拒絕",
     "Share with me through my #ownCloud Federated Cloud ID, see %s" : "可透過我的 #ownCloud 聯合 ID,與我分享,請看 %s",
diff --git a/apps/files_sharing/l10n/zh_TW.json b/apps/files_sharing/l10n/zh_TW.json
index 14be4c11d556887cb5f3ce0eebda8174d6db7002..e73bbfa6574c1253c79430e55ee827da4f0517b1 100644
--- a/apps/files_sharing/l10n/zh_TW.json
+++ b/apps/files_sharing/l10n/zh_TW.json
@@ -1,5 +1,6 @@
 { "translations": {
     "Server to server sharing is not enabled on this server" : "伺服器對伺服器共享在這台伺服器上面並未啟用",
+    "The mountpoint name contains invalid characters." : "掛載的名稱含有不合法的字元",
     "Invalid or untrusted SSL certificate" : "無效或是不信任的SSL憑證",
     "Could not authenticate to remote share, password might be wrong" : "無法驗證遠端分享,可能是密碼錯誤",
     "Storage not valid" : "儲存空間無法使用",
@@ -30,6 +31,7 @@
     "You received a new remote share from %s" : "您收到了一個遠端分享來自於 %s",
     "%1$s accepted remote share %2$s" : "%1$s 接受了遠端分享 %2$s",
     "%1$s declined remote share %2$s" : "%1$s 拒絕了遠端分享 %2$s",
+    "%1$s unshared %2$s from you" : "%1$s 取消與你分享 %2$s",
     "Public shared folder %1$s was downloaded" : "共享資料夾 %1$s 已被下載",
     "Public shared file %1$s was downloaded" : "共享檔案 %1$s 已被下載",
     "You shared %1$s with %2$s" : "您與 %2$s 分享了 %1$s",
@@ -48,6 +50,7 @@
     "Shared by %2$s" : "由 %2$s 分享",
     "Shared via public link" : "透過公用連結分享",
     "Shares" : "分享",
+    "You received %2$s as a remote share from %1$s" : "您收到了來自%1$s的一個遠端分享 %2$s ",
     "Accept" : "接受",
     "Decline" : "拒絕",
     "Share with me through my #ownCloud Federated Cloud ID, see %s" : "可透過我的 #ownCloud 聯合 ID,與我分享,請看 %s",
diff --git a/apps/files_sharing/lib/watcher.php b/apps/files_sharing/lib/watcher.php
index dc95dde480ed162ea557d4c3989d1f0b8f0f9b73..3af6f733b517bf19eb58e65c3e1bb9d40033fc48 100644
--- a/apps/files_sharing/lib/watcher.php
+++ b/apps/files_sharing/lib/watcher.php
@@ -29,41 +29,41 @@ namespace OC\Files\Cache;
  * check the storage backends for updates and change the cache accordingly
  */
 class Shared_Watcher extends Watcher {
+	/**
+	 * @var \OC\Files\Storage\Shared $storage
+	 */
+	protected $storage;
 
 	/**
-	 * check $path for updates
+	 * Update the cache for changes to $path
 	 *
 	 * @param string $path
-	 * @param array $cachedEntry
-	 * @return boolean true if path was updated
+	 * @param array $cachedData
 	 */
-	public function checkUpdate($path, $cachedEntry = null) {
-		if (parent::checkUpdate($path, $cachedEntry) === true) {
-			// since checkUpdate() has already updated the size of the subdirs,
-			// only apply the update to the owner's parent dirs
-
-			// find last parent before reaching the shared storage root,
-			// which is the actual shared dir from the owner
-			$sepPos = strpos($path, '/');
-			if ($sepPos > 0) {
-				$baseDir = substr($path, 0, $sepPos);
-			} else {
-				$baseDir = $path;
-			}
+	public function update($path, $cachedData) {
+		parent::update($path, $cachedData);
+		// since parent::update() has already updated the size of the subdirs,
+		// only apply the update to the owner's parent dirs
 
-			// find the path relative to the data dir
-			$file = $this->storage->getFile($baseDir);
-			$view = new \OC\Files\View('/' . $file['fileOwner']);
+		// find last parent before reaching the shared storage root,
+		// which is the actual shared dir from the owner
+		$sepPos = strpos($path, '/');
+		if ($sepPos > 0) {
+			$baseDir = substr($path, 0, $sepPos);
+		} else {
+			$baseDir = $path;
+		}
 
-			// find the owner's storage and path
-			list($storage, $internalPath) = $view->resolvePath($file['path']);
+		// find the path relative to the data dir
+		$file = $this->storage->getFile($baseDir);
+		$view = new \OC\Files\View('/' . $file['fileOwner']);
 
-			// update the parent dirs' sizes in the owner's cache
-			$storage->getCache()->correctFolderSize(dirname($internalPath));
+		// find the owner's storage and path
+		/** @var \OC\Files\Storage\Storage $storage */
+		list($storage, $internalPath) = $view->resolvePath($file['path']);
 
-			return true;
-		}
-		return false;
+		// update the parent dirs' sizes in the owner's cache
+		$storage->getCache()->correctFolderSize(dirname($internalPath));
 	}
 
 	/**
diff --git a/apps/user_ldap/l10n/de.js b/apps/user_ldap/l10n/de.js
index 375b78b4526eacb9d76bc3333ba0eb40d5abfd38..8a944590c6d2a451f071c2f87584e4d88a6d2df7 100644
--- a/apps/user_ldap/l10n/de.js
+++ b/apps/user_ldap/l10n/de.js
@@ -110,9 +110,9 @@ OC.L10N.register(
     "Connection Settings" : "Verbindungseinstellungen",
     "Configuration Active" : "Konfiguration aktiv",
     "When unchecked, this configuration will be skipped." : "Konfiguration wird übersprungen wenn deaktiviert",
-    "Backup (Replica) Host" : "Backup von Host (Kopie) anlegen",
-    "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Gib einen optionalen Backup Host an. Es muss sich um eine Kopie des Haupt LDAP/AD Servers handeln.",
-    "Backup (Replica) Port" : "Backup Port",
+    "Backup (Replica) Host" : "Backup-Host (Kopie)",
+    "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Gib einen optionalen Backup-Host an. Es muss sich um eine Kopie des Haupt-LDAP/AD-Servers handeln.",
+    "Backup (Replica) Port" : "Port des Backup-Hosts (Kopie)",
     "Disable Main Server" : "Hauptserver deaktivieren",
     "Only connect to the replica server." : "Nur zum Replikat-Server verbinden.",
     "Turn off SSL certificate validation." : "Schalte die SSL-Zertifikatsprüfung aus.",
diff --git a/apps/user_ldap/l10n/de.json b/apps/user_ldap/l10n/de.json
index 17c0bf02c2de1518b3aeeadf2f800fa05034d74b..99fa4b39151be90bd1bc574c25db504ecce11418 100644
--- a/apps/user_ldap/l10n/de.json
+++ b/apps/user_ldap/l10n/de.json
@@ -108,9 +108,9 @@
     "Connection Settings" : "Verbindungseinstellungen",
     "Configuration Active" : "Konfiguration aktiv",
     "When unchecked, this configuration will be skipped." : "Konfiguration wird übersprungen wenn deaktiviert",
-    "Backup (Replica) Host" : "Backup von Host (Kopie) anlegen",
-    "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Gib einen optionalen Backup Host an. Es muss sich um eine Kopie des Haupt LDAP/AD Servers handeln.",
-    "Backup (Replica) Port" : "Backup Port",
+    "Backup (Replica) Host" : "Backup-Host (Kopie)",
+    "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Gib einen optionalen Backup-Host an. Es muss sich um eine Kopie des Haupt-LDAP/AD-Servers handeln.",
+    "Backup (Replica) Port" : "Port des Backup-Hosts (Kopie)",
     "Disable Main Server" : "Hauptserver deaktivieren",
     "Only connect to the replica server." : "Nur zum Replikat-Server verbinden.",
     "Turn off SSL certificate validation." : "Schalte die SSL-Zertifikatsprüfung aus.",
diff --git a/apps/user_ldap/l10n/de_DE.js b/apps/user_ldap/l10n/de_DE.js
index 49fcd8c8c69435b6e571536b5b7bc827f6a47a3e..5a8903d574a4bde8ef2ea9d20dd867e1835e22ae 100644
--- a/apps/user_ldap/l10n/de_DE.js
+++ b/apps/user_ldap/l10n/de_DE.js
@@ -110,9 +110,9 @@ OC.L10N.register(
     "Connection Settings" : "Verbindungseinstellungen",
     "Configuration Active" : "Konfiguration aktiv",
     "When unchecked, this configuration will be skipped." : "Wenn nicht angehakt, wird diese Konfiguration übersprungen.",
-    "Backup (Replica) Host" : "Backup von Host (Kopie) anlegen",
-    "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Geben Sie einen optionalen Backup Host an. Es muss sich um eine Kopie des Haupt LDAP/AD Servers handeln.",
-    "Backup (Replica) Port" : "Backup Port",
+    "Backup (Replica) Host" : "Backup-Host (Kopie)",
+    "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Geben Sie einen optionalen Backup-Host an. Es muss sich um eine Kopie des Haupt-LDAP/AD-Servers handeln.",
+    "Backup (Replica) Port" : "Port des Backup-Hosts (Kopie)",
     "Disable Main Server" : "Hauptserver deaktivieren",
     "Only connect to the replica server." : "Nur zum Replikat-Server verbinden.",
     "Turn off SSL certificate validation." : "Schalten Sie die SSL-Zertifikatsprüfung aus.",
diff --git a/apps/user_ldap/l10n/de_DE.json b/apps/user_ldap/l10n/de_DE.json
index 61792d3704e48ebbb863ab858c11967b6ae8ad5b..0485094c345fdf36667802d250f9f34728efac18 100644
--- a/apps/user_ldap/l10n/de_DE.json
+++ b/apps/user_ldap/l10n/de_DE.json
@@ -108,9 +108,9 @@
     "Connection Settings" : "Verbindungseinstellungen",
     "Configuration Active" : "Konfiguration aktiv",
     "When unchecked, this configuration will be skipped." : "Wenn nicht angehakt, wird diese Konfiguration übersprungen.",
-    "Backup (Replica) Host" : "Backup von Host (Kopie) anlegen",
-    "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Geben Sie einen optionalen Backup Host an. Es muss sich um eine Kopie des Haupt LDAP/AD Servers handeln.",
-    "Backup (Replica) Port" : "Backup Port",
+    "Backup (Replica) Host" : "Backup-Host (Kopie)",
+    "Give an optional backup host. It must be a replica of the main LDAP/AD server." : "Geben Sie einen optionalen Backup-Host an. Es muss sich um eine Kopie des Haupt-LDAP/AD-Servers handeln.",
+    "Backup (Replica) Port" : "Port des Backup-Hosts (Kopie)",
     "Disable Main Server" : "Hauptserver deaktivieren",
     "Only connect to the replica server." : "Nur zum Replikat-Server verbinden.",
     "Turn off SSL certificate validation." : "Schalten Sie die SSL-Zertifikatsprüfung aus.",
diff --git a/apps/user_ldap/l10n/zh_TW.js b/apps/user_ldap/l10n/zh_TW.js
index 0ad20f3eae32d918ae8447046556c528543f3cb7..569cbf24128df100aba0e5338e2bf4f3c0399c4a 100644
--- a/apps/user_ldap/l10n/zh_TW.js
+++ b/apps/user_ldap/l10n/zh_TW.js
@@ -12,6 +12,7 @@ OC.L10N.register(
     "No data specified" : "沒有指定資料",
     " Could not set configuration %s" : "無法設定 %s 為設定值",
     "Action does not exist" : "操作不存在",
+    "The Base DN appears to be wrong" : "Base DN 出現問題",
     "Configuration incorrect" : "設定不正確",
     "Configuration incomplete" : "設定未完成",
     "Configuration OK" : "設定完成",
@@ -19,17 +20,28 @@ OC.L10N.register(
     "Select object classes" : "選擇物件",
     "Please check the credentials, they seem to be wrong." : "請檢查您的憑證,似乎出了點問題",
     "Please specify the port, it could not be auto-detected." : "請您指定您的連接阜,無法自動偵測",
+    "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN 無法被自動偵測,請重新設定主機,連接阜以及認證",
+    "Could not detect Base DN, please enter it manually." : "無法偵測到Base DN,請手動輸入",
     "{nthServer}. Server" : "{nthServer}. 伺服器",
+    "No object found in the given Base DN. Please revise." : "在Base DN中找不到物件,請重新修改",
     "More than 1.000 directory entries available." : "目前有超過 1.000 個資料夾項目是可以使用的",
+    "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "產生錯誤,請檢查Base DN,以及連線設定和驗證",
     "Do you really want to delete the current Server Configuration?" : "您真的要刪除現在的伺服器設定嗎?",
     "Confirm Deletion" : "確認刪除",
+    "Mappings cleared successfully!" : "Mappings清除成功",
+    "Error while clearing the mappings." : "清除Mappings發生錯誤",
+    "Anonymous bind is not allowed. Please provide a User DN and Password." : "匿名是不允許的,請提供使用者DN和密碼",
+    "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP 錯誤,不允許匿名榜定",
     "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "存檔失敗,請確認資料庫運作中,請重新讀取一次然後再試一次",
     "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "切換模式會使LDAP自動抓取資訊,抓取資訊的時間依您的LDAP大小而定,可能會花一點時間,您確定要切換模式?",
+    "Mode switch" : "模式切換",
     "Select attributes" : "選擇屬性",
     "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "找不到使用者,請檢查您的登入資料以及使用者名稱。驗證(複製貼上到命令提示位元做認證):<br/>",
     "User found and settings verified." : "使用者存在,設定值正確",
     "An unspecified error occurred. Please check the settings and the log." : "發生預期之外的錯誤,請檢查設定和記錄檔",
+    "A connection error to LDAP / AD occurred, please check host, port and credentials." : "連線到 LDAP/AD出現錯誤,請檢查主機,連接阜和驗證資訊",
     "Please provide a login name to test against" : "請提供登入姓名以便再次測試",
+    "The group box was disabled, because the LDAP / AD server does not support memberOf." : "群組盒已經停用,LDAP/AD 伺服器並不支援",
     "_%s group found_::_%s groups found_" : ["找到 %s 群組"],
     "_%s user found_::_%s users found_" : ["找到 %s 使用者"],
     "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "無法偵測使用者的顯示名稱,請您自行在ldap設定中指定",
@@ -45,19 +57,43 @@ OC.L10N.register(
     "Search groups" : "搜尋群組",
     "Available groups" : "可用的群組",
     "Selected groups" : "已選擇的群組",
+    "Edit LDAP Query" : "編輯LDAP Query",
     "LDAP Filter:" : "LDAP 過慮器:",
+    "Verify settings and count groups" : "驗證設定並計算群組數",
+    "When logging in, %s will find the user based on the following attributes:" : "當登入%s時,將會根據以下屬性找到使用者 :",
+    "LDAP / AD Username:" : "LDAP / AD 使用者名稱:",
+    "LDAP / AD Email Address:" : "LDAP / AD 電子郵件:",
+    "Other Attributes:" : "其他屬性:",
+    "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "試圖登入時會定義要套用的篩選器。登入過程中%%uid會取代使用者名稱。例如:\"uid=%%uid\"",
+    "Test Loginname" : "測試登入姓名",
+    "Verify settings" : "驗證設定",
+    "1. Server" : "1. 伺服器",
+    "%s. Server:" : "%s. 伺服器:",
+    "Add a new and blank configuration" : "新增一個空白的設定檔",
+    "Copy current configuration into new directory binding" : "複製目前的設定檔到新目錄",
+    "Delete the current configuration" : "刪除目前的設定檔",
     "Host" : "主機",
     "You can omit the protocol, except you require SSL. Then start with ldaps://" : "若您不需要 SSL 加密連線則不需輸入通訊協定,反之請輸入 ldaps://",
     "Port" : "連接埠",
+    "Detect Port" : "偵測連接阜",
     "User DN" : "User DN",
     "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "客戶端使用者的DN與特定字詞的連結需要完善,例如:uid=agent,dc=example,dc=com。若是匿名連接,則將DN與密碼欄位留白。",
     "Password" : "密碼",
     "For anonymous access, leave DN and Password empty." : "匿名連接時請將 DN 與密碼欄位留白",
     "One Base DN per line" : "一行一個 Base DN",
     "You can specify Base DN for users and groups in the Advanced tab" : "您可以在進階標籤頁裡面指定使用者及群組的 Base DN",
+    "Detect Base DN" : "偵測 Base DN",
+    "Test Base DN" : "測試 Base DN",
+    "Manually enter LDAP filters (recommended for large directories)" : "手動輸入 LDAP篩選器 (建議在大型的資料環境)",
+    "Limit %s access to users meeting these criteria:" : "當遇到以下標準時,限制%s存取使用者:",
+    "The filter specifies which LDAP users shall have access to the %s instance." : "篩選起指定哪些LDAP的使用者應該擁有存取%s的權限",
+    "Verify settings and count users" : "驗證設定並計算使用者數",
+    "Saving" : "儲存",
     "Back" : "返回",
     "Continue" : "繼續",
+    "LDAP" : "LDAP",
     "Advanced" : "進階",
+    "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>警告:</b> 應用程式user_ldap和user_webdavauth互不相容。可能會造成無法預期的結果。請要求您的系統管理員將兩者其中之一停用。",
     "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>警告:</b>沒有安裝 PHP LDAP 模組,後端系統將無法運作,請要求您的系統管理員安裝模組。",
     "Connection Settings" : "連線設定",
     "Configuration Active" : "設定使用中",
@@ -67,6 +103,7 @@ OC.L10N.register(
     "Backup (Replica) Port" : "備用(複本)連接埠",
     "Disable Main Server" : "停用主伺服器",
     "Turn off SSL certificate validation." : "關閉 SSL 憑證檢查",
+    "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "不建議,請僅在測試時使用!如果連線只能在此設定下工作,請匯入LDAP伺服器的SSL認證到您的伺服器%s上",
     "Cache Time-To-Live" : "快取的存活時間",
     "in seconds. A change empties the cache." : "以秒為單位。變更後會清空快取。",
     "Directory Settings" : "目錄設定",
@@ -87,6 +124,9 @@ OC.L10N.register(
     "Email Field" : "電郵欄位",
     "User Home Folder Naming Rule" : "使用者家目錄的命名規則",
     "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "使用者名稱請留白(預設)。若不留白請指定一個LDAP/AD屬性。",
-    "Internal Username" : "內部使用者名稱"
+    "Internal Username" : "內部使用者名稱",
+    "Internal Username Attribute:" : "內部使用者名稱屬性:",
+    "UUID Attribute for Users:" : "使用者的UUID值:",
+    "UUID Attribute for Groups:" : "群組的UUID值:"
 },
 "nplurals=1; plural=0;");
diff --git a/apps/user_ldap/l10n/zh_TW.json b/apps/user_ldap/l10n/zh_TW.json
index a9b62f37b5267348534678fd060cb04b19358287..e012c3003ac84673b75fe03aa86ba21fe935e3ee 100644
--- a/apps/user_ldap/l10n/zh_TW.json
+++ b/apps/user_ldap/l10n/zh_TW.json
@@ -10,6 +10,7 @@
     "No data specified" : "沒有指定資料",
     " Could not set configuration %s" : "無法設定 %s 為設定值",
     "Action does not exist" : "操作不存在",
+    "The Base DN appears to be wrong" : "Base DN 出現問題",
     "Configuration incorrect" : "設定不正確",
     "Configuration incomplete" : "設定未完成",
     "Configuration OK" : "設定完成",
@@ -17,17 +18,28 @@
     "Select object classes" : "選擇物件",
     "Please check the credentials, they seem to be wrong." : "請檢查您的憑證,似乎出了點問題",
     "Please specify the port, it could not be auto-detected." : "請您指定您的連接阜,無法自動偵測",
+    "Base DN could not be auto-detected, please revise credentials, host and port." : "Base DN 無法被自動偵測,請重新設定主機,連接阜以及認證",
+    "Could not detect Base DN, please enter it manually." : "無法偵測到Base DN,請手動輸入",
     "{nthServer}. Server" : "{nthServer}. 伺服器",
+    "No object found in the given Base DN. Please revise." : "在Base DN中找不到物件,請重新修改",
     "More than 1.000 directory entries available." : "目前有超過 1.000 個資料夾項目是可以使用的",
+    "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "產生錯誤,請檢查Base DN,以及連線設定和驗證",
     "Do you really want to delete the current Server Configuration?" : "您真的要刪除現在的伺服器設定嗎?",
     "Confirm Deletion" : "確認刪除",
+    "Mappings cleared successfully!" : "Mappings清除成功",
+    "Error while clearing the mappings." : "清除Mappings發生錯誤",
+    "Anonymous bind is not allowed. Please provide a User DN and Password." : "匿名是不允許的,請提供使用者DN和密碼",
+    "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP 錯誤,不允許匿名榜定",
     "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "存檔失敗,請確認資料庫運作中,請重新讀取一次然後再試一次",
     "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "切換模式會使LDAP自動抓取資訊,抓取資訊的時間依您的LDAP大小而定,可能會花一點時間,您確定要切換模式?",
+    "Mode switch" : "模式切換",
     "Select attributes" : "選擇屬性",
     "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "找不到使用者,請檢查您的登入資料以及使用者名稱。驗證(複製貼上到命令提示位元做認證):<br/>",
     "User found and settings verified." : "使用者存在,設定值正確",
     "An unspecified error occurred. Please check the settings and the log." : "發生預期之外的錯誤,請檢查設定和記錄檔",
+    "A connection error to LDAP / AD occurred, please check host, port and credentials." : "連線到 LDAP/AD出現錯誤,請檢查主機,連接阜和驗證資訊",
     "Please provide a login name to test against" : "請提供登入姓名以便再次測試",
+    "The group box was disabled, because the LDAP / AD server does not support memberOf." : "群組盒已經停用,LDAP/AD 伺服器並不支援",
     "_%s group found_::_%s groups found_" : ["找到 %s 群組"],
     "_%s user found_::_%s users found_" : ["找到 %s 使用者"],
     "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "無法偵測使用者的顯示名稱,請您自行在ldap設定中指定",
@@ -43,19 +55,43 @@
     "Search groups" : "搜尋群組",
     "Available groups" : "可用的群組",
     "Selected groups" : "已選擇的群組",
+    "Edit LDAP Query" : "編輯LDAP Query",
     "LDAP Filter:" : "LDAP 過慮器:",
+    "Verify settings and count groups" : "驗證設定並計算群組數",
+    "When logging in, %s will find the user based on the following attributes:" : "當登入%s時,將會根據以下屬性找到使用者 :",
+    "LDAP / AD Username:" : "LDAP / AD 使用者名稱:",
+    "LDAP / AD Email Address:" : "LDAP / AD 電子郵件:",
+    "Other Attributes:" : "其他屬性:",
+    "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "試圖登入時會定義要套用的篩選器。登入過程中%%uid會取代使用者名稱。例如:\"uid=%%uid\"",
+    "Test Loginname" : "測試登入姓名",
+    "Verify settings" : "驗證設定",
+    "1. Server" : "1. 伺服器",
+    "%s. Server:" : "%s. 伺服器:",
+    "Add a new and blank configuration" : "新增一個空白的設定檔",
+    "Copy current configuration into new directory binding" : "複製目前的設定檔到新目錄",
+    "Delete the current configuration" : "刪除目前的設定檔",
     "Host" : "主機",
     "You can omit the protocol, except you require SSL. Then start with ldaps://" : "若您不需要 SSL 加密連線則不需輸入通訊協定,反之請輸入 ldaps://",
     "Port" : "連接埠",
+    "Detect Port" : "偵測連接阜",
     "User DN" : "User DN",
     "The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." : "客戶端使用者的DN與特定字詞的連結需要完善,例如:uid=agent,dc=example,dc=com。若是匿名連接,則將DN與密碼欄位留白。",
     "Password" : "密碼",
     "For anonymous access, leave DN and Password empty." : "匿名連接時請將 DN 與密碼欄位留白",
     "One Base DN per line" : "一行一個 Base DN",
     "You can specify Base DN for users and groups in the Advanced tab" : "您可以在進階標籤頁裡面指定使用者及群組的 Base DN",
+    "Detect Base DN" : "偵測 Base DN",
+    "Test Base DN" : "測試 Base DN",
+    "Manually enter LDAP filters (recommended for large directories)" : "手動輸入 LDAP篩選器 (建議在大型的資料環境)",
+    "Limit %s access to users meeting these criteria:" : "當遇到以下標準時,限制%s存取使用者:",
+    "The filter specifies which LDAP users shall have access to the %s instance." : "篩選起指定哪些LDAP的使用者應該擁有存取%s的權限",
+    "Verify settings and count users" : "驗證設定並計算使用者數",
+    "Saving" : "儲存",
     "Back" : "返回",
     "Continue" : "繼續",
+    "LDAP" : "LDAP",
     "Advanced" : "進階",
+    "<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." : "<b>警告:</b> 應用程式user_ldap和user_webdavauth互不相容。可能會造成無法預期的結果。請要求您的系統管理員將兩者其中之一停用。",
     "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." : "<b>警告:</b>沒有安裝 PHP LDAP 模組,後端系統將無法運作,請要求您的系統管理員安裝模組。",
     "Connection Settings" : "連線設定",
     "Configuration Active" : "設定使用中",
@@ -65,6 +101,7 @@
     "Backup (Replica) Port" : "備用(複本)連接埠",
     "Disable Main Server" : "停用主伺服器",
     "Turn off SSL certificate validation." : "關閉 SSL 憑證檢查",
+    "Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." : "不建議,請僅在測試時使用!如果連線只能在此設定下工作,請匯入LDAP伺服器的SSL認證到您的伺服器%s上",
     "Cache Time-To-Live" : "快取的存活時間",
     "in seconds. A change empties the cache." : "以秒為單位。變更後會清空快取。",
     "Directory Settings" : "目錄設定",
@@ -85,6 +122,9 @@
     "Email Field" : "電郵欄位",
     "User Home Folder Naming Rule" : "使用者家目錄的命名規則",
     "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." : "使用者名稱請留白(預設)。若不留白請指定一個LDAP/AD屬性。",
-    "Internal Username" : "內部使用者名稱"
+    "Internal Username" : "內部使用者名稱",
+    "Internal Username Attribute:" : "內部使用者名稱屬性:",
+    "UUID Attribute for Users:" : "使用者的UUID值:",
+    "UUID Attribute for Groups:" : "群組的UUID值:"
 },"pluralForm" :"nplurals=1; plural=0;"
 }
\ No newline at end of file
diff --git a/apps/user_ldap/lib/wizard.php b/apps/user_ldap/lib/wizard.php
index 0c7fecfdb6419612d60098b84ad01089fb8a418e..e53ff35cfd6bcd6c466dac8c400b047589ef6841 100644
--- a/apps/user_ldap/lib/wizard.php
+++ b/apps/user_ldap/lib/wizard.php
@@ -1290,9 +1290,13 @@ class Wizard extends LDAPUtility {
 		if(!is_null($this->cr)) {
 			return $this->cr;
 		}
-		$cr = $this->ldap->connect(
-			$this->configuration->ldapHost.':'.$this->configuration->ldapPort,
-			$this->configuration->ldapPort);
+
+		$host = $this->configuration->ldapHost;
+		if(strpos($host, '://') !== false) {
+			//ldap_connect ignores port parameter when URLs are passed
+			$host .= ':' . $this->configuration->ldapPort;
+		}
+		$cr = $this->ldap->connect($host, $this->configuration->ldapPort);
 
 		$this->ldap->setOption($cr, LDAP_OPT_PROTOCOL_VERSION, 3);
 		$this->ldap->setOption($cr, LDAP_OPT_REFERRALS, 0);
diff --git a/core/css/global.css b/core/css/global.css
new file mode 100644
index 0000000000000000000000000000000000000000..9511d4324fa4d5c65d92524066acec932aded8cc
--- /dev/null
+++ b/core/css/global.css
@@ -0,0 +1,50 @@
+/* Copyright (c) 2015, Raghu Nayyar, http://raghunayyar.com
+ This file is licensed under the Affero General Public License version 3 or later.
+ See the COPYING-README file. */
+
+/* Global Components */
+
+.pull-left {
+	float: left;
+}
+
+.pull-right {
+	float: right;
+}
+
+.clear-left {
+	clear: left;
+}
+
+.clear-right {
+	clear: right;
+}
+
+.clear-both {
+	clear: both;
+}
+
+.hidden {
+	display: none;
+}
+
+.hidden-visually {
+	position: absolute;
+	left:-10000px;
+	top: auto;
+	width: 1px;
+	height: 1px;
+	overflow: hidden;
+}
+
+.bold {
+	font-weight:600;
+}
+
+.center {
+	text-align:center;
+}
+
+.inlineblock {
+	display: inline-block;
+}
\ No newline at end of file
diff --git a/core/css/styles.css b/core/css/styles.css
index ddf72a34db5be6ba51a7cf153fc9030920498f0a..15325eada3396d66d09458bb2805f3b3eb02f6c0 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -860,26 +860,6 @@ html.ie8 #body-login form input[type="checkbox"] {
 	height: 70px;
 }
 
-
-
-
-/* VARIOUS REUSABLE SELECTORS */
-.hidden {
-	display: none;
-}
-.hidden-visually {
-	position: absolute;
-	left:-10000px;
-	top: auto;
-	width: 1px;
-	height: 1px;
-	overflow: hidden;
-}
-
-.bold { font-weight:600; }
-.center { text-align:center; }
-.inlineblock { display: inline-block; }
-
 /* round profile photos */
 .avatar,
 .avatar img,
diff --git a/core/l10n/da.js b/core/l10n/da.js
index cce52f15b0512d97c7039310b3afb2f204bb02f1..795dc5cb7b98501a0c502df3167257f97fc14e6c 100644
--- a/core/l10n/da.js
+++ b/core/l10n/da.js
@@ -6,14 +6,20 @@ OC.L10N.register(
     "Turned on maintenance mode" : "Startede vedligeholdelsestilstand",
     "Turned off maintenance mode" : "standsede vedligeholdelsestilstand",
     "Maintenance mode is kept active" : "Vedligeholdelsestilstanden holdes kørende",
+    "Updating database schema" : "Opdaterer database schema",
     "Updated database" : "Opdaterede database",
+    "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Tjekker om database schema'et kan opdateres (dette kan tage lang tid afhængig af databasens størrelse)",
     "Checked database schema update" : "Tjekket database schema opdatering",
+    "Checking updates of apps" : "Tjekker opdatering af apps",
+    "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Tjekker om database schema'et for %s kan opdateres (dette kan tage lang tid afhængig af databasens størrelse)",
     "Checked database schema update for apps" : "Tjekkede databaseskemaets opdatering for apps",
     "Updated \"%s\" to %s" : "Opdaterede \"%s\" til %s",
     "Repair warning: " : "Reparationsadvarsel:",
     "Repair error: " : "Reparationsfejl:",
     "Set log level to debug - current level: \"%s\"" : "Sæt log niveau til fejlfinding - nuværende niveau: \"%s\"",
     "Reset log level to  \"%s\"" : "Nulstil log niveau til \"%s\"",
+    "%s (3rdparty)" : "%s (3rdparty)",
+    "%s (incompatible)" : "%s (inkombatible)",
     "Following apps have been disabled: %s" : "Følgende apps er blevet deaktiveret: %s",
     "Already up to date" : "Allerede opdateret",
     "File is too big" : "Filen er for stor",
@@ -21,6 +27,7 @@ OC.L10N.register(
     "No image or file provided" : "Ingen fil eller billede givet",
     "Unknown filetype" : "Ukendt filtype",
     "Invalid image" : "Ugyldigt billede",
+    "An error occurred. Please contact your admin." : "Der opstod et problem. Kontakt venligst administratoren.",
     "No temporary profile picture available, try again" : "Intet midlertidigt profilbillede tilgængeligt, prøv igen",
     "No crop data provided" : "Ingen beskæringsdata give",
     "No valid crop data provided" : "Der er ikke angivet gyldige data om beskæring",
@@ -169,7 +176,9 @@ OC.L10N.register(
     "Hello {name}" : "Hej {name}",
     "_download %n file_::_download %n files_" : ["hent %n fil","hent %n filer"],
     "{version} is available. Get more information on how to update." : "{version} er tilgængelig. Få mere information om hvordan du opdaterer.",
+    "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Opgraderingen er i gang, forlader du denne side kan det afbryde processen.",
     "Updating {productName} to version {version}, this may take a while." : "Opdaterer {productName} til version {version}, det kan tage et stykke tid.",
+    "An error occurred." : "Der opstod en fejl.",
     "Please reload the page." : "Genindlæs venligst siden",
     "The update was unsuccessful. " : "Opdateringen blev ikke gennemført.",
     "The update was successful. There were warnings." : "Opdateringen blev gennemført. Der fremkom advarsler.",
@@ -242,6 +251,7 @@ OC.L10N.register(
     "Finishing …" : "Færdigbehandler ...",
     "Need help?" : "Brug for hjælp?",
     "See the documentation" : "Se dokumentationen",
+    "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej med dig,<br><br>Dette er blot for at informere dig om, at %s har delt <strong>%s</strong> med dig.<br><a href=\"%s\">Se det her!</a><br><br>",
     "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikation kræver JavaScript for at fungere korrekt. {linkstart}Slå venligst JavaScript til{linkend} og genindlæs siden. ",
     "Log out" : "Log ud",
     "Search" : "Søg",
@@ -251,8 +261,8 @@ OC.L10N.register(
     "Please try again or contact your administrator." : "Kontakt venligst din administrator.",
     "Log in" : "Log ind",
     "Wrong password. Reset it?" : "Forkert kodeord. Skal det nulstilles?",
+    "Stay logged in" : "Forbliv logget ind",
     "Alternative Logins" : "Alternative logins",
-    "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej med dig,<br><br>Dette er blot for at informere dig om, at %s har delt <strong>%s</strong> med dig.<br><a href=\"%s\">Se det her!</a><br><br>",
     "This ownCloud instance is currently in single user mode." : "Denne ownCloud instans er lige nu i enkeltbruger tilstand.",
     "This means only administrators can use the instance." : "Det betyder at det kun er administrator, som kan benytte ownCloud.",
     "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontakt systemadministratoren, hvis denne meddelelse fortsætter eller optrådte uventet.",
diff --git a/core/l10n/da.json b/core/l10n/da.json
index 962743e0abfee64a6f99fd78f624fb05256e92bf..f4f156a69be1270e219eefe766af358bad364d45 100644
--- a/core/l10n/da.json
+++ b/core/l10n/da.json
@@ -4,14 +4,20 @@
     "Turned on maintenance mode" : "Startede vedligeholdelsestilstand",
     "Turned off maintenance mode" : "standsede vedligeholdelsestilstand",
     "Maintenance mode is kept active" : "Vedligeholdelsestilstanden holdes kørende",
+    "Updating database schema" : "Opdaterer database schema",
     "Updated database" : "Opdaterede database",
+    "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Tjekker om database schema'et kan opdateres (dette kan tage lang tid afhængig af databasens størrelse)",
     "Checked database schema update" : "Tjekket database schema opdatering",
+    "Checking updates of apps" : "Tjekker opdatering af apps",
+    "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Tjekker om database schema'et for %s kan opdateres (dette kan tage lang tid afhængig af databasens størrelse)",
     "Checked database schema update for apps" : "Tjekkede databaseskemaets opdatering for apps",
     "Updated \"%s\" to %s" : "Opdaterede \"%s\" til %s",
     "Repair warning: " : "Reparationsadvarsel:",
     "Repair error: " : "Reparationsfejl:",
     "Set log level to debug - current level: \"%s\"" : "Sæt log niveau til fejlfinding - nuværende niveau: \"%s\"",
     "Reset log level to  \"%s\"" : "Nulstil log niveau til \"%s\"",
+    "%s (3rdparty)" : "%s (3rdparty)",
+    "%s (incompatible)" : "%s (inkombatible)",
     "Following apps have been disabled: %s" : "Følgende apps er blevet deaktiveret: %s",
     "Already up to date" : "Allerede opdateret",
     "File is too big" : "Filen er for stor",
@@ -19,6 +25,7 @@
     "No image or file provided" : "Ingen fil eller billede givet",
     "Unknown filetype" : "Ukendt filtype",
     "Invalid image" : "Ugyldigt billede",
+    "An error occurred. Please contact your admin." : "Der opstod et problem. Kontakt venligst administratoren.",
     "No temporary profile picture available, try again" : "Intet midlertidigt profilbillede tilgængeligt, prøv igen",
     "No crop data provided" : "Ingen beskæringsdata give",
     "No valid crop data provided" : "Der er ikke angivet gyldige data om beskæring",
@@ -167,7 +174,9 @@
     "Hello {name}" : "Hej {name}",
     "_download %n file_::_download %n files_" : ["hent %n fil","hent %n filer"],
     "{version} is available. Get more information on how to update." : "{version} er tilgængelig. Få mere information om hvordan du opdaterer.",
+    "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Opgraderingen er i gang, forlader du denne side kan det afbryde processen.",
     "Updating {productName} to version {version}, this may take a while." : "Opdaterer {productName} til version {version}, det kan tage et stykke tid.",
+    "An error occurred." : "Der opstod en fejl.",
     "Please reload the page." : "Genindlæs venligst siden",
     "The update was unsuccessful. " : "Opdateringen blev ikke gennemført.",
     "The update was successful. There were warnings." : "Opdateringen blev gennemført. Der fremkom advarsler.",
@@ -240,6 +249,7 @@
     "Finishing …" : "Færdigbehandler ...",
     "Need help?" : "Brug for hjælp?",
     "See the documentation" : "Se dokumentationen",
+    "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej med dig,<br><br>Dette er blot for at informere dig om, at %s har delt <strong>%s</strong> med dig.<br><a href=\"%s\">Se det her!</a><br><br>",
     "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikation kræver JavaScript for at fungere korrekt. {linkstart}Slå venligst JavaScript til{linkend} og genindlæs siden. ",
     "Log out" : "Log ud",
     "Search" : "Søg",
@@ -249,8 +259,8 @@
     "Please try again or contact your administrator." : "Kontakt venligst din administrator.",
     "Log in" : "Log ind",
     "Wrong password. Reset it?" : "Forkert kodeord. Skal det nulstilles?",
+    "Stay logged in" : "Forbliv logget ind",
     "Alternative Logins" : "Alternative logins",
-    "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej med dig,<br><br>Dette er blot for at informere dig om, at %s har delt <strong>%s</strong> med dig.<br><a href=\"%s\">Se det her!</a><br><br>",
     "This ownCloud instance is currently in single user mode." : "Denne ownCloud instans er lige nu i enkeltbruger tilstand.",
     "This means only administrators can use the instance." : "Det betyder at det kun er administrator, som kan benytte ownCloud.",
     "Contact your system administrator if this message persists or appeared unexpectedly." : "Kontakt systemadministratoren, hvis denne meddelelse fortsætter eller optrådte uventet.",
diff --git a/core/l10n/el.js b/core/l10n/el.js
index 10cbaf032ce84e75d9f2be4789c9458768943df3..b0a8230e65087ae230b25e517ebcb44a96f72756 100644
--- a/core/l10n/el.js
+++ b/core/l10n/el.js
@@ -6,14 +6,20 @@ OC.L10N.register(
     "Turned on maintenance mode" : "Η κατάσταση συντήρησης ενεργοποιήθηκε",
     "Turned off maintenance mode" : "Η κατάσταση συντήρησης απενεργοποιήθηκε",
     "Maintenance mode is kept active" : "Η λειτουργία συντήρησης διατηρήθηκε ενεργή",
+    "Updating database schema" : "Ένημέρωση σχήματος βάσης δεδομένων",
     "Updated database" : "Ενημερωμένη βάση δεδομένων",
+    "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Έλεγχος αν το σχήμα της βάσης δεδομένων μπορεί να ενημερωθεί (αυτό μπορεί να πάρει πολλή ώρα ανάλογα με το μέγεθος της βάσης δεδομένων)",
     "Checked database schema update" : "Έλεγχος ενημέρωσης σχήματος βάσης δεδομένων",
+    "Checking updates of apps" : "Έλεγχος ενημερώσεων εφαρμογών",
+    "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Έλεγχος αν το σχήμα της βάσης δεδομένων για %s μπορεί να ενημερωθεί (αυτό μπορεί να πάρει πολλή ώρα ανάλογα με το μέγεθος της βάσης δεδομένων)",
     "Checked database schema update for apps" : "Έλεγχος ενημέρωσης σχήματος βάσης δεδομένων για εφαρμογές",
     "Updated \"%s\" to %s" : "Αναβαθμίστηκε \"%s\" σε %s",
     "Repair warning: " : "Προειδοποίηση διόρθωσης:",
     "Repair error: " : "Σφάλμα διόρθωσης:",
     "Set log level to debug - current level: \"%s\"" : "Καθορισμός του επιπέδου καταγραφής σε αποσφαλμάτωση - τρέχον επίπεδο: \"%s\"",
     "Reset log level to  \"%s\"" : "Επαναφορά επιπέδου καταγραφής σε \"%s\"",
+    "%s (3rdparty)" : "%s (3ου μέρους)",
+    "%s (incompatible)" : "%s (ασύμβατη)",
     "Following apps have been disabled: %s" : "Οι ακόλουθες εφαρμογές έχουν απενεργοποιηθεί: %s",
     "Already up to date" : "Ήδη ενημερωμένο",
     "File is too big" : "Το αρχείο είναι πολύ μεγάλο",
@@ -171,6 +177,7 @@ OC.L10N.register(
     "Hello {name}" : "Γεια σου {name}",
     "_download %n file_::_download %n files_" : ["λήψη %n αρχείου","λήψη %n αρχείων"],
     "{version} is available. Get more information on how to update." : "Η έκδοση {version} είναι διαθέσιμη. Δείτε περισσότερες πληροφορίες για το πως να κάνετε την ενημέρωση.",
+    "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Η αναβάθμιση είναι σε εξέλιξη, αν φύγετε από αυτή τη σελίδα μπορεί να διακοπεί η διαδικασία σε ορισμένα περιβάλλοντα χρήσης.",
     "Updating {productName} to version {version}, this may take a while." : "Ενημέρωση του {productName} στην έκδοση {version}, αυτό μπορεί να διαρκέσει λίγη ώρα.",
     "An error occurred." : "Παρουσιάστηκε σφάλμα",
     "Please reload the page." : "Παρακαλώ επαναφορτώστε τη σελίδα.",
@@ -255,6 +262,7 @@ OC.L10N.register(
     "Please try again or contact your administrator." : "Παρακαλώ δοκιμάστε ξανά ή επικοινωνήστε με τον διαχειριστή σας.",
     "Log in" : "Είσοδος",
     "Wrong password. Reset it?" : "Λάθος Κωδικός. Επαναφορά;",
+    "Stay logged in" : "Μείνετε συνδεδεμένος",
     "Alternative Logins" : "Εναλλακτικές Συνδέσεις",
     "This ownCloud instance is currently in single user mode." : "Αυτή η εγκατάσταση ownCloud είναι τώρα σε κατάσταση ενός χρήστη.",
     "This means only administrators can use the instance." : "Αυτό σημαίνει ότι μόνο διαχειριστές μπορούν να χρησιμοποιήσουν την εγκατάσταση.",
diff --git a/core/l10n/el.json b/core/l10n/el.json
index d2d7e7c4676cbe899ed08da4453b5779b1888352..f2e4430f2db85e46148cc8340f3618149ff83116 100644
--- a/core/l10n/el.json
+++ b/core/l10n/el.json
@@ -4,14 +4,20 @@
     "Turned on maintenance mode" : "Η κατάσταση συντήρησης ενεργοποιήθηκε",
     "Turned off maintenance mode" : "Η κατάσταση συντήρησης απενεργοποιήθηκε",
     "Maintenance mode is kept active" : "Η λειτουργία συντήρησης διατηρήθηκε ενεργή",
+    "Updating database schema" : "Ένημέρωση σχήματος βάσης δεδομένων",
     "Updated database" : "Ενημερωμένη βάση δεδομένων",
+    "Checking whether the database schema can be updated (this can take a long time depending on the database size)" : "Έλεγχος αν το σχήμα της βάσης δεδομένων μπορεί να ενημερωθεί (αυτό μπορεί να πάρει πολλή ώρα ανάλογα με το μέγεθος της βάσης δεδομένων)",
     "Checked database schema update" : "Έλεγχος ενημέρωσης σχήματος βάσης δεδομένων",
+    "Checking updates of apps" : "Έλεγχος ενημερώσεων εφαρμογών",
+    "Checking whether the database schema for %s can be updated (this can take a long time depending on the database size)" : "Έλεγχος αν το σχήμα της βάσης δεδομένων για %s μπορεί να ενημερωθεί (αυτό μπορεί να πάρει πολλή ώρα ανάλογα με το μέγεθος της βάσης δεδομένων)",
     "Checked database schema update for apps" : "Έλεγχος ενημέρωσης σχήματος βάσης δεδομένων για εφαρμογές",
     "Updated \"%s\" to %s" : "Αναβαθμίστηκε \"%s\" σε %s",
     "Repair warning: " : "Προειδοποίηση διόρθωσης:",
     "Repair error: " : "Σφάλμα διόρθωσης:",
     "Set log level to debug - current level: \"%s\"" : "Καθορισμός του επιπέδου καταγραφής σε αποσφαλμάτωση - τρέχον επίπεδο: \"%s\"",
     "Reset log level to  \"%s\"" : "Επαναφορά επιπέδου καταγραφής σε \"%s\"",
+    "%s (3rdparty)" : "%s (3ου μέρους)",
+    "%s (incompatible)" : "%s (ασύμβατη)",
     "Following apps have been disabled: %s" : "Οι ακόλουθες εφαρμογές έχουν απενεργοποιηθεί: %s",
     "Already up to date" : "Ήδη ενημερωμένο",
     "File is too big" : "Το αρχείο είναι πολύ μεγάλο",
@@ -169,6 +175,7 @@
     "Hello {name}" : "Γεια σου {name}",
     "_download %n file_::_download %n files_" : ["λήψη %n αρχείου","λήψη %n αρχείων"],
     "{version} is available. Get more information on how to update." : "Η έκδοση {version} είναι διαθέσιμη. Δείτε περισσότερες πληροφορίες για το πως να κάνετε την ενημέρωση.",
+    "The upgrade is in progress, leaving this page might interrupt the process in some environments." : "Η αναβάθμιση είναι σε εξέλιξη, αν φύγετε από αυτή τη σελίδα μπορεί να διακοπεί η διαδικασία σε ορισμένα περιβάλλοντα χρήσης.",
     "Updating {productName} to version {version}, this may take a while." : "Ενημέρωση του {productName} στην έκδοση {version}, αυτό μπορεί να διαρκέσει λίγη ώρα.",
     "An error occurred." : "Παρουσιάστηκε σφάλμα",
     "Please reload the page." : "Παρακαλώ επαναφορτώστε τη σελίδα.",
@@ -253,6 +260,7 @@
     "Please try again or contact your administrator." : "Παρακαλώ δοκιμάστε ξανά ή επικοινωνήστε με τον διαχειριστή σας.",
     "Log in" : "Είσοδος",
     "Wrong password. Reset it?" : "Λάθος Κωδικός. Επαναφορά;",
+    "Stay logged in" : "Μείνετε συνδεδεμένος",
     "Alternative Logins" : "Εναλλακτικές Συνδέσεις",
     "This ownCloud instance is currently in single user mode." : "Αυτή η εγκατάσταση ownCloud είναι τώρα σε κατάσταση ενός χρήστη.",
     "This means only administrators can use the instance." : "Αυτό σημαίνει ότι μόνο διαχειριστές μπορούν να χρησιμοποιήσουν την εγκατάσταση.",
diff --git a/db_structure.xml b/db_structure.xml
index 6efcf497cf75a41685899908dd664cce1b4370da..8135746233ec0d3f5a115c92d977523282f9e976 100644
--- a/db_structure.xml
+++ b/db_structure.xml
@@ -127,67 +127,6 @@
 
 	</table>
 
-	<table>
-
-		<name>*dbprefix*file_map</name>
-
-		<declaration>
-
-			<field>
-				<name>logic_path</name>
-				<type>text</type>
-				<default></default>
-				<notnull>true</notnull>
-				<length>512</length>
-			</field>
-
-			<field>
-				<name>logic_path_hash</name>
-				<type>text</type>
-				<default></default>
-				<notnull>true</notnull>
-				<length>32</length>
-			</field>
-
-			<field>
-				<name>physic_path</name>
-				<type>text</type>
-				<default></default>
-				<notnull>true</notnull>
-				<length>512</length>
-			</field>
-
-			<field>
-				<name>physic_path_hash</name>
-				<type>text</type>
-				<default></default>
-				<notnull>true</notnull>
-				<length>32</length>
-			</field>
-
-			<index>
-				<name>file_map_lp_index</name>
-				<primary>true</primary>
-				<unique>true</unique>
-				<field>
-					<name>logic_path_hash</name>
-					<sorting>ascending</sorting>
-				</field>
-			</index>
-
-			<index>
-				<name>file_map_pp_index</name>
-				<unique>true</unique>
-				<field>
-					<name>physic_path_hash</name>
-					<sorting>ascending</sorting>
-				</field>
-			</index>
-
-		</declaration>
-
-	</table>
-
 	<table>
 
 		<!--
diff --git a/lib/l10n/da.js b/lib/l10n/da.js
index db939815143f388bdbeb559c7e05db0c982d5311..928d2f11adbda05e966dd54cd0af48adfd6470c5 100644
--- a/lib/l10n/da.js
+++ b/lib/l10n/da.js
@@ -87,6 +87,7 @@ OC.L10N.register(
     "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling af %s mislykkedes, fordi backenden ikke tillader delinger fra typen %i",
     "Sharing %s failed, because the file does not exist" : "Deling af %s mislykkedes, fordi filen ikke eksisterer",
     "You are not allowed to share %s" : "Du har ikke tilladelse til at dele %s",
+    "Sharing %s failed, because you can not share with yourself" : "Deling af %s mislykkedes, fordi du ikke kan dele med dig selv",
     "Sharing %s failed, because the user %s does not exist" : "Der skete en fejl ved deling af %s, brugeren %s eksistere ikke",
     "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Der skete en fejl ved deling af %s, brugeren %s er ikke medlem af nogle grupper som %s er medlem af",
     "Sharing %s failed, because this item is already shared with %s" : "Der skete en fejl ved deling af %s, objektet er allerede delt med %s",
@@ -105,6 +106,7 @@ OC.L10N.register(
     "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delingsbackend'en %s skal implementere grænsefladen OCP\\Share_Backend",
     "Sharing backend %s not found" : "Delingsbackend'en %s blev ikke fundet",
     "Sharing backend for %s not found" : "Delingsbackend'en for %s blev ikke fundet",
+    "Sharing failed, because the user %s is the original sharer" : "Deling mislykkedes, fordi brugeren %s er den som delte oprindeligt",
     "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Deling af %s mislykkedes, fordi tilladelserne overskred de tillaldelser som %s var tildelt",
     "Sharing %s failed, because resharing is not allowed" : "Deling af %s mislykkedes, fordi videredeling ikke er tilladt",
     "Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling af %s mislykkedes, fordi back-enden ikke kunne finde kilden til %s",
diff --git a/lib/l10n/da.json b/lib/l10n/da.json
index e06ef9fcfc672e2bdf578d8d0216a25eab826588..a157f4a21e13ee1e2f52bcc2b5b7a87b093acde3 100644
--- a/lib/l10n/da.json
+++ b/lib/l10n/da.json
@@ -85,6 +85,7 @@
     "Sharing %s failed, because the backend does not allow shares from type %i" : "Deling af %s mislykkedes, fordi backenden ikke tillader delinger fra typen %i",
     "Sharing %s failed, because the file does not exist" : "Deling af %s mislykkedes, fordi filen ikke eksisterer",
     "You are not allowed to share %s" : "Du har ikke tilladelse til at dele %s",
+    "Sharing %s failed, because you can not share with yourself" : "Deling af %s mislykkedes, fordi du ikke kan dele med dig selv",
     "Sharing %s failed, because the user %s does not exist" : "Der skete en fejl ved deling af %s, brugeren %s eksistere ikke",
     "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Der skete en fejl ved deling af %s, brugeren %s er ikke medlem af nogle grupper som %s er medlem af",
     "Sharing %s failed, because this item is already shared with %s" : "Der skete en fejl ved deling af %s, objektet er allerede delt med %s",
@@ -103,6 +104,7 @@
     "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Delingsbackend'en %s skal implementere grænsefladen OCP\\Share_Backend",
     "Sharing backend %s not found" : "Delingsbackend'en %s blev ikke fundet",
     "Sharing backend for %s not found" : "Delingsbackend'en for %s blev ikke fundet",
+    "Sharing failed, because the user %s is the original sharer" : "Deling mislykkedes, fordi brugeren %s er den som delte oprindeligt",
     "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Deling af %s mislykkedes, fordi tilladelserne overskred de tillaldelser som %s var tildelt",
     "Sharing %s failed, because resharing is not allowed" : "Deling af %s mislykkedes, fordi videredeling ikke er tilladt",
     "Sharing %s failed, because the sharing backend for %s could not find its source" : "Deling af %s mislykkedes, fordi back-enden ikke kunne finde kilden til %s",
diff --git a/lib/l10n/el.js b/lib/l10n/el.js
index 7b0dffa8bfb5bc19a0a86f3a15b38ee720702c48..841661842a48ab4dee77253813f46a5024543888 100644
--- a/lib/l10n/el.js
+++ b/lib/l10n/el.js
@@ -84,6 +84,7 @@ OC.L10N.register(
     "Sharing %s failed, because the backend does not allow shares from type %i" : "Αποτυχία διαμοιρασμού %s, γιατί το σύστημα υποστήριξης δεν επιτρέπει κοινόχρηστα τύπου %i",
     "Sharing %s failed, because the file does not exist" : "Ο διαμοιρασμός του %s απέτυχε, γιατί το αρχείο δεν υπάρχει",
     "You are not allowed to share %s" : "Δεν επιτρέπεται να διαμοιράσετε τον πόρο %s",
+    "Sharing %s failed, because you can not share with yourself" : "Ο διαμοιρασμός του %s απέτυχε, γιατί δεν μπορείτε να διαμοιραστείτε με τον εαυτό σας.",
     "Sharing %s failed, because the user %s does not exist" : "Ο διαμοιρασμός του %s απέτυχε, γιατί ο χρήστης %s δεν υπάρχει",
     "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Ο διαμοιρασμός του %s απέτυχε, γιατί ο χρήστης %s δεν είναι μέλος καμίας ομάδας στην οποία ο χρήστης %s είναι μέλος",
     "Sharing %s failed, because this item is already shared with %s" : "Ο διαμοιρασμός του %s απέτυχε, γιατί το αντικείμενο είναι διαμοιρασμένο ήδη με τον χρήστη %s",
@@ -102,6 +103,7 @@ OC.L10N.register(
     "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Το σύστημα διαμοιρασμού %s πρέπει να υλοποιεί την διεπαφή OCP\\Share_Backend",
     "Sharing backend %s not found" : "Το σύστημα διαμοιρασμού %s δεν βρέθηκε",
     "Sharing backend for %s not found" : "Το σύστημα διαμοιρασμού για το %s δεν βρέθηκε",
+    "Sharing failed, because the user %s is the original sharer" : "Ο διαμοιρασμός του %s απέτυχε, γιατί το αντικείμενο είναι διαμοιρασμένο αρχικά από τον ίδιο χρήστη.",
     "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Ο διαμοιρασμός του %s απέτυχε, γιατί τα δικαιώματα υπερτερούν αυτά που είναι ορισμένα για το %s",
     "Sharing %s failed, because resharing is not allowed" : "Ο διαμοιρασμός του %s απέτυχε, γιατί δεν επιτρέπεται ο επαναδιαμοιρασμός",
     "Sharing %s failed, because the sharing backend for %s could not find its source" : "Ο διαμοιρασμός του %s απέτυχε, γιατί δεν ήταν δυνατό να εντοπίσει την πηγή το σύστημα διαμοιρασμού για το %s ",
diff --git a/lib/l10n/el.json b/lib/l10n/el.json
index 65524a490f32ec7566ff09614018320ea6b2bbf2..9cc179382b74c877b346d82e6e3db710bb6f5ce0 100644
--- a/lib/l10n/el.json
+++ b/lib/l10n/el.json
@@ -82,6 +82,7 @@
     "Sharing %s failed, because the backend does not allow shares from type %i" : "Αποτυχία διαμοιρασμού %s, γιατί το σύστημα υποστήριξης δεν επιτρέπει κοινόχρηστα τύπου %i",
     "Sharing %s failed, because the file does not exist" : "Ο διαμοιρασμός του %s απέτυχε, γιατί το αρχείο δεν υπάρχει",
     "You are not allowed to share %s" : "Δεν επιτρέπεται να διαμοιράσετε τον πόρο %s",
+    "Sharing %s failed, because you can not share with yourself" : "Ο διαμοιρασμός του %s απέτυχε, γιατί δεν μπορείτε να διαμοιραστείτε με τον εαυτό σας.",
     "Sharing %s failed, because the user %s does not exist" : "Ο διαμοιρασμός του %s απέτυχε, γιατί ο χρήστης %s δεν υπάρχει",
     "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Ο διαμοιρασμός του %s απέτυχε, γιατί ο χρήστης %s δεν είναι μέλος καμίας ομάδας στην οποία ο χρήστης %s είναι μέλος",
     "Sharing %s failed, because this item is already shared with %s" : "Ο διαμοιρασμός του %s απέτυχε, γιατί το αντικείμενο είναι διαμοιρασμένο ήδη με τον χρήστη %s",
@@ -100,6 +101,7 @@
     "Sharing backend %s must implement the interface OCP\\Share_Backend" : "Το σύστημα διαμοιρασμού %s πρέπει να υλοποιεί την διεπαφή OCP\\Share_Backend",
     "Sharing backend %s not found" : "Το σύστημα διαμοιρασμού %s δεν βρέθηκε",
     "Sharing backend for %s not found" : "Το σύστημα διαμοιρασμού για το %s δεν βρέθηκε",
+    "Sharing failed, because the user %s is the original sharer" : "Ο διαμοιρασμός του %s απέτυχε, γιατί το αντικείμενο είναι διαμοιρασμένο αρχικά από τον ίδιο χρήστη.",
     "Sharing %s failed, because the permissions exceed permissions granted to %s" : "Ο διαμοιρασμός του %s απέτυχε, γιατί τα δικαιώματα υπερτερούν αυτά που είναι ορισμένα για το %s",
     "Sharing %s failed, because resharing is not allowed" : "Ο διαμοιρασμός του %s απέτυχε, γιατί δεν επιτρέπεται ο επαναδιαμοιρασμός",
     "Sharing %s failed, because the sharing backend for %s could not find its source" : "Ο διαμοιρασμός του %s απέτυχε, γιατί δεν ήταν δυνατό να εντοπίσει την πηγή το σύστημα διαμοιρασμού για το %s ",
diff --git a/lib/private/encryption/file.php b/lib/private/encryption/file.php
index 5a7357b9e28b4081afd09de05a2e97b9da3f39ef..6d261f46d0f271f3dfec25cb33924c6d4d54061e 100644
--- a/lib/private/encryption/file.php
+++ b/lib/private/encryption/file.php
@@ -27,6 +27,13 @@ class File implements \OCP\Encryption\IFile {
 	/** @var Util */
 	protected $util;
 
+	/**
+	 * cache results of already checked folders
+	 *
+	 * @var array
+	 */
+	protected $cache;
+
 	public function __construct(Util $util) {
 		$this->util = $util;
 	}
@@ -53,10 +60,24 @@ class File implements \OCP\Encryption\IFile {
 		$ownerPath = substr($ownerPath, strlen('/files'));
 		$ownerPath = $this->util->stripPartialFileExtension($ownerPath);
 
+
+		// first get the shares for the parent and cache the result so that we don't
+		// need to check all parents for every file
+		$parent = dirname($ownerPath);
+		if (isset($this->cache[$parent])) {
+			$resultForParents = $this->cache[$parent];
+		} else {
+			$resultForParents = \OCP\Share::getUsersSharingFile($parent, $owner);
+			$this->cache[$parent] = $resultForParents;
+		}
+		$userIds = \array_merge($userIds, $resultForParents['users']);
+		$public = $resultForParents['public'] || $resultForParents['remote'];
+
+
 		// Find out who, if anyone, is sharing the file
-		$result = \OCP\Share::getUsersSharingFile($ownerPath, $owner);
-		$userIds = \array_merge($userIds, $result['users']);
-		$public = $result['public'] || $result['remote'];
+		$resultForFile = \OCP\Share::getUsersSharingFile($ownerPath, $owner, false, false, false);
+		$userIds = \array_merge($userIds, $resultForFile['users']);
+		$public = $resultForFile['public'] || $resultForFile['remote'] || $public;
 
 		// check if it is a group mount
 		if (\OCP\App::isEnabled("files_external")) {
diff --git a/lib/private/files/cache/watcher.php b/lib/private/files/cache/watcher.php
index ff97a1f9c015c83d244d107019099f1553e6ab02..e660e56bfeebd6f5e00f596ce8e97ee6d9d77429 100644
--- a/lib/private/files/cache/watcher.php
+++ b/lib/private/files/cache/watcher.php
@@ -74,36 +74,57 @@ class Watcher {
 	}
 
 	/**
-	 * check $path for updates
+	 * check $path for updates and update if needed
 	 *
 	 * @param string $path
 	 * @param array $cachedEntry
 	 * @return boolean true if path was updated
 	 */
 	public function checkUpdate($path, $cachedEntry = null) {
-		if ($this->watchPolicy === self::CHECK_ALWAYS or ($this->watchPolicy === self::CHECK_ONCE and array_search($path, $this->checkedPaths) === false)) {
-			if (is_null($cachedEntry)) {
-				$cachedEntry = $this->cache->get($path);
-			}
-			$this->checkedPaths[] = $path;
-			if ($this->storage->hasUpdated($path, $cachedEntry['storage_mtime'])) {
-				if ($this->storage->is_dir($path)) {
-					$this->scanner->scan($path, Scanner::SCAN_SHALLOW);
-				} else {
-					$this->scanner->scanFile($path);
-				}
-				if ($cachedEntry['mimetype'] === 'httpd/unix-directory') {
-					$this->cleanFolder($path);
-				}
-				$this->cache->correctFolderSize($path);
-				return true;
-			}
-			return false;
+		if (is_null($cachedEntry)) {
+			$cachedEntry = $this->cache->get($path);
+		}
+		if ($this->needsUpdate($path, $cachedEntry)) {
+			$this->update($path, $cachedEntry);
+			return true;
 		} else {
 			return false;
 		}
 	}
 
+	/**
+	 * Update the cache for changes to $path
+	 *
+	 * @param string $path
+	 * @param array $cachedData
+	 */
+	public function update($path, $cachedData) {
+		if ($this->storage->is_dir($path)) {
+			$this->scanner->scan($path, Scanner::SCAN_SHALLOW);
+		} else {
+			$this->scanner->scanFile($path);
+		}
+		if ($cachedData['mimetype'] === 'httpd/unix-directory') {
+			$this->cleanFolder($path);
+		}
+		$this->cache->correctFolderSize($path);
+	}
+
+	/**
+	 * Check if the cache for $path needs to be updated
+	 *
+	 * @param string $path
+	 * @param array $cachedData
+	 * @return bool
+	 */
+	public function needsUpdate($path, $cachedData) {
+		if ($this->watchPolicy === self::CHECK_ALWAYS or ($this->watchPolicy === self::CHECK_ONCE and array_search($path, $this->checkedPaths) === false)) {
+			$this->checkedPaths[] = $path;
+			return $this->storage->hasUpdated($path, $cachedData['storage_mtime']);
+		}
+		return false;
+	}
+
 	/**
 	 * remove deleted files in $path from the cache
 	 *
diff --git a/lib/private/files/view.php b/lib/private/files/view.php
index a11df53705c1631511058d95d8d67362be21545d..887b18530d7304d12256b5d6d2844ec38c1cde29 100644
--- a/lib/private/files/view.php
+++ b/lib/private/files/view.php
@@ -1191,13 +1191,13 @@ class View {
 		if ($storage) {
 			$cache = $storage->getCache($internalPath);
 
-			try {
-				$this->lockFile($relativePath, ILockingProvider::LOCK_SHARED);
-				$data = $cache->get($internalPath);
-				$watcher = $storage->getWatcher($internalPath);
+			$data = $cache->get($internalPath);
+			$watcher = $storage->getWatcher($internalPath);
 
+			try {
 				// if the file is not in the cache or needs to be updated, trigger the scanner and reload the data
 				if (!$data) {
+					$this->lockFile($relativePath, ILockingProvider::LOCK_SHARED);
 					if (!$storage->file_exists($internalPath)) {
 						$this->unlockFile($relativePath, ILockingProvider::LOCK_SHARED);
 						return false;
@@ -1205,14 +1205,16 @@ class View {
 					$scanner = $storage->getScanner($internalPath);
 					$scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW);
 					$data = $cache->get($internalPath);
-				} else if (!Cache\Scanner::isPartialFile($internalPath) && $watcher->checkUpdate($internalPath, $data)) {
+					$this->unlockFile($relativePath, ILockingProvider::LOCK_SHARED);
+				} else if (!Cache\Scanner::isPartialFile($internalPath) && $watcher->needsUpdate($internalPath, $data)) {
+					$this->lockFile($relativePath, ILockingProvider::LOCK_SHARED);
+					$watcher->update($internalPath, $data);
 					$this->updater->propagate($path);
 					$data = $cache->get($internalPath);
+					$this->unlockFile($relativePath, ILockingProvider::LOCK_SHARED);
 				}
-				$this->unlockFile($relativePath, ILockingProvider::LOCK_SHARED);
 			} catch (LockedException $e) {
-				// dont try to update the cache when the file is locked
-				$data = $cache->get($internalPath);
+				// if the file is locked we just use the old cache info
 			}
 
 			if ($data and isset($data['fileid'])) {
@@ -1278,12 +1280,11 @@ class View {
 			 */
 			$files = array();
 
+			$data = $cache->get($internalPath);
+			$watcher = $storage->getWatcher($internalPath);
 			try {
-				$this->lockFile($directory, ILockingProvider::LOCK_SHARED);
-
-				$data = $cache->get($internalPath);
-				$watcher = $storage->getWatcher($internalPath);
 				if (!$data or $data['size'] === -1) {
+					$this->lockFile($directory, ILockingProvider::LOCK_SHARED);
 					if (!$storage->file_exists($internalPath)) {
 						$this->unlockFile($directory, ILockingProvider::LOCK_SHARED);
 						return array();
@@ -1291,20 +1292,21 @@ class View {
 					$scanner = $storage->getScanner($internalPath);
 					$scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW);
 					$data = $cache->get($internalPath);
-				} else if ($watcher->checkUpdate($internalPath, $data)) {
+					$this->unlockFile($directory, ILockingProvider::LOCK_SHARED);
+				} else if ($watcher->needsUpdate($internalPath, $data)) {
+					$this->lockFile($directory, ILockingProvider::LOCK_SHARED);
+					$watcher->update($internalPath, $data);
 					$this->updater->propagate($path);
 					$data = $cache->get($internalPath);
+					$this->unlockFile($directory, ILockingProvider::LOCK_SHARED);
 				}
-
-				$folderId = $data['fileid'];
-				$contents = $cache->getFolderContentsById($folderId); //TODO: mimetype_filter
-
-				$this->unlockFile($directory, ILockingProvider::LOCK_SHARED);
 			} catch (LockedException $e) {
-				// dont try to update the cache when the file is locked
-				$contents = $cache->getFolderContents($internalPath);
+				// if the file is locked we just use the old cache info
 			}
 
+			$folderId = $data['fileid'];
+			$contents = $cache->getFolderContentsById($folderId); //TODO: mimetype_filter
+
 			foreach ($contents as $content) {
 				if ($content['permissions'] === 0) {
 					$content['permissions'] = $storage->getPermissions($content['path']);
diff --git a/lib/private/ocs/corecapabilities.php b/lib/private/ocs/corecapabilities.php
index 0fba7bfd7d7ec2bfff52fb8857a433e1b41049a4..f2d530a841981f35ec9ca7b828c633af49203152 100644
--- a/lib/private/ocs/corecapabilities.php
+++ b/lib/private/ocs/corecapabilities.php
@@ -49,7 +49,8 @@ class CoreCapabilities implements ICapability {
 	public function getCapabilities() {
 		return [
 			'core' => [
-				'pollinterval' => $this->config->getSystemValue('pollinterval', 60)
+				'pollinterval' => $this->config->getSystemValue('pollinterval', 60),
+				'webdav-root' => $this->config->getSystemValue('webdav-root', 'remote.php/webdav'),
 			]
 		];
 	}
diff --git a/lib/private/share/share.php b/lib/private/share/share.php
index e79b2204a6f57539f700e7e22a66c104d006a072..0693a9c08fb2dab79cc56a0e5d0de4997cf7da3b 100644
--- a/lib/private/share/share.php
+++ b/lib/private/share/share.php
@@ -122,11 +122,12 @@ class Share extends Constants {
 	 * @param string $ownerUser owner of the file
 	 * @param boolean $includeOwner include owner to the list of users with access to the file
 	 * @param boolean $returnUserPaths Return an array with the user => path map
+	 * @param boolean $recursive take all parent folders into account (default true)
 	 * @return array
 	 * @note $path needs to be relative to user data dir, e.g. 'file.txt'
 	 *       not '/admin/data/file.txt'
 	 */
-	public static function getUsersSharingFile($path, $ownerUser, $includeOwner = false, $returnUserPaths = false) {
+	public static function getUsersSharingFile($path, $ownerUser, $includeOwner = false, $returnUserPaths = false, $recursive = true) {
 
 		Filesystem::initMountPoints($ownerUser);
 		$shares = $sharePaths = $fileTargets = array();
@@ -252,7 +253,7 @@ class Share extends Constants {
 
 			// let's get the parent for the next round
 			$meta = $cache->get((int)$source);
-			if($meta !== false) {
+			if ($recursive === true && $meta !== false) {
 				$source = (int)$meta['parent'];
 			} else {
 				$source = -1;
diff --git a/lib/private/template.php b/lib/private/template.php
index 5a08e15d95b041807412e85421ed8bb63bcfac0a..38527cdc461bf4c723da3a96f83e3792d011c428 100644
--- a/lib/private/template.php
+++ b/lib/private/template.php
@@ -108,6 +108,7 @@ class OC_Template extends \OC\Template\Base {
 			OC_Util::addVendorStyle('jquery-ui/themes/base/jquery-ui',null,true);
 			OC_Util::addStyle("multiselect",null,true);
 			OC_Util::addStyle("fixes",null,true);
+			OC_Util::addStyle("global",null,true);
 			OC_Util::addStyle("apps",null,true);
 			OC_Util::addStyle("fonts",null,true);
 			OC_Util::addStyle("icons",null,true);
diff --git a/lib/public/share.php b/lib/public/share.php
index 68f278005ed72c4bb021ec3de5b94fae9025586e..86d1ffc9be217767ef72d0e47385a9ac6a1ea382 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -80,13 +80,14 @@ class Share extends \OC\Share\Constants {
 	 * @param string $ownerUser owner of the file
 	 * @param bool $includeOwner include owner to the list of users with access to the file
 	 * @param bool $returnUserPaths Return an array with the user => path map
+	 * @param bool $recursive take parent folders into account
 	 * @return array
 	 * @note $path needs to be relative to user data dir, e.g. 'file.txt'
-	 *       not '/admin/data/file.txt'
-	 * @since 5.0.0
+	 *       not '/admin/files/file.txt'
+	 * @since 5.0.0 - $recursive was added in 9.0.0
 	 */
-	public static function getUsersSharingFile($path, $ownerUser, $includeOwner = false, $returnUserPaths = false) {
-		return \OC\Share\Share::getUsersSharingFile($path, $ownerUser, $includeOwner, $returnUserPaths);
+	public static function getUsersSharingFile($path, $ownerUser, $includeOwner = false, $returnUserPaths = false, $recursive = true) {
+		return \OC\Share\Share::getUsersSharingFile($path, $ownerUser, $includeOwner, $returnUserPaths, $recursive);
 	}
 
 	/**
diff --git a/lib/repair/dropoldtables.php b/lib/repair/dropoldtables.php
index cfe0df6cb5bd5dc908b278317289984f01b68976..e8b0eba61d4cf72717772d3c9640fc601682b5c8 100644
--- a/lib/repair/dropoldtables.php
+++ b/lib/repair/dropoldtables.php
@@ -74,6 +74,7 @@ class DropOldTables extends BasicEmitter implements RepairStep {
 			'calendar_objects',
 			'calendar_share_calendar',
 			'calendar_share_event',
+			'file_map',
 			'foldersize',
 			'fscache',
 			'locks',
@@ -85,6 +86,8 @@ class DropOldTables extends BasicEmitter implements RepairStep {
 			'media_users',
 			'permissions',
 			'pictures_images_cache',
+			'principalgroups',
+			'principals',
 			'queuedtasks',
 			'sharing',
 		];
diff --git a/settings/ajax/geteveryonecount.php b/settings/ajax/geteveryonecount.php
deleted file mode 100644
index 002c849fd393c64f121783614031aa75d1302de3..0000000000000000000000000000000000000000
--- a/settings/ajax/geteveryonecount.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * @author Clark Tomlinson <fallen013@gmail.com>
- * @author Lukas Reschke <lukas@owncloud.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- *
- * @copyright Copyright (c) 2015, ownCloud, Inc.
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program.  If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-OC_JSON::callCheck();
-OC_JSON::checkSubAdminUser();
-
-$userCount = 0;
-
-$currentUser = \OC::$server->getUserSession()->getUser()->getUID();
-
-if (!OC_User::isAdminUser($currentUser)) {
-	$groups = \OC::$server->getGroupManager()->getSubAdmin()->getSubAdminsGroups(\OC::$server->getUserSession()->getUser());
-	// New class returns IGroup[] so convert back
-	foreach ($groups as $key => $group) {
-		$groups[$key] = $group->getGID();
-	}
-
-
-	foreach ($groups as $group) {
-		$userCount += count(OC_Group::usersInGroup($group));
-
-	}
-} else {
-
-	$userCountArray = \OC::$server->getUserManager()->countUsers();
-
-	if (!empty($userCountArray)) {
-		foreach ($userCountArray as $classname => $usercount) {
-			$userCount += $usercount;
-		}
-	}
-}
-
-
-OC_JSON::success(array('count' => $userCount));
diff --git a/settings/controller/userscontroller.php b/settings/controller/userscontroller.php
index 8183bc4739bc0bbbe48e7916202b05987112a6df..82483a76245a1f840a4aa841ab5dedf6d3330e5a 100644
--- a/settings/controller/userscontroller.php
+++ b/settings/controller/userscontroller.php
@@ -548,4 +548,41 @@ class UsersController extends Controller {
 		);
 	}
 
+	/**
+	 * Count all unique users visible for the current admin/subadmin.
+	 *
+	 * @NoAdminRequired
+	 *
+	 * @return DataResponse
+	 */
+	public function stats() {
+		$userCount = 0;
+		if ($this->isAdmin) {
+			$countByBackend = $this->userManager->countUsers();
+
+			if (!empty($countByBackend)) {
+				foreach ($countByBackend as $count) {
+					$userCount += $count;
+				}
+			}
+		} else {
+			$groups = $this->groupManager->getSubAdmin()->getSubAdminsGroups($this->userSession->getUser());
+
+			$uniqueUsers = [];
+			foreach ($groups as $group) {
+				foreach($group->getUsers() as $uid => $displayName) {
+					$uniqueUsers[$uid] = true;
+				}
+			}
+
+			$userCount = count($uniqueUsers);
+		}
+
+		return new DataResponse(
+			[
+				'totalUsers' => $userCount
+			]
+		);
+	}
+
 }
diff --git a/settings/js/users/groups.js b/settings/js/users/groups.js
index c8d2ef7c5b1436584166c2cda9237d9aae721abf..2639191d9186fb02367783c92db780600f337562 100644
--- a/settings/js/users/groups.js
+++ b/settings/js/users/groups.js
@@ -304,10 +304,10 @@ GroupList = {
 		$.ajax({
 			type: "GET",
 			dataType: "json",
-			url: OC.generateUrl('/settings/ajax/geteveryonecount')
+			url: OC.generateUrl('/settings/users/stats')
 		}).success(function (data) {
-			$('#everyonegroup').data('usercount', data.count);
-			$('#everyonecount').text(data.count);
+			$('#everyonegroup').data('usercount', data.totalUsers);
+			$('#everyonecount').text(data.totalUsers);
 		});
 	}
 };
diff --git a/settings/l10n/el.js b/settings/l10n/el.js
index e5b03bde3471dcb18d352f4b8be5e8815851a4fe..ab9b47b366c63f91e1c0ac2f6d2a02557b862cca 100644
--- a/settings/l10n/el.js
+++ b/settings/l10n/el.js
@@ -80,6 +80,7 @@ OC.L10N.register(
     "Uninstall" : "Απεγκατάσταση",
     "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Η εφαρμογή έχει ενεργοποιηθεί αλλά χρειάζεται ενημέρωση. Θα μεταφερθείτε στη σελίδα ενημέρωσης σε 5 δευτερόλεπτα.",
     "App update" : "Ενημέρωση εφαρμογής",
+    "No apps found for \"{query}\"" : "Δεν βρέθηκαν εφαρμογές για \"{query\"}",
     "An error occurred: {message}" : "Παρουσιάστηκε σφάλμα: {message}",
     "Select a profile picture" : "Επιλογή εικόνας προφίλ",
     "Very weak password" : "Πολύ αδύναμο συνθηματικό",
diff --git a/settings/l10n/el.json b/settings/l10n/el.json
index 70d23d3da19605867a481aef0704e0e5f0f6e5cb..c355f70dd82bf573f018ab8e4068ba1510a987ba 100644
--- a/settings/l10n/el.json
+++ b/settings/l10n/el.json
@@ -78,6 +78,7 @@
     "Uninstall" : "Απεγκατάσταση",
     "The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds." : "Η εφαρμογή έχει ενεργοποιηθεί αλλά χρειάζεται ενημέρωση. Θα μεταφερθείτε στη σελίδα ενημέρωσης σε 5 δευτερόλεπτα.",
     "App update" : "Ενημέρωση εφαρμογής",
+    "No apps found for \"{query}\"" : "Δεν βρέθηκαν εφαρμογές για \"{query\"}",
     "An error occurred: {message}" : "Παρουσιάστηκε σφάλμα: {message}",
     "Select a profile picture" : "Επιλογή εικόνας προφίλ",
     "Very weak password" : "Πολύ αδύναμο συνθηματικό",
diff --git a/settings/l10n/lt_LT.js b/settings/l10n/lt_LT.js
index 75a9eab3986bbe5fc0454ef9a646d3503a1a7b89..2b739db71c96d6769ca096cef3b78412c6f26475 100644
--- a/settings/l10n/lt_LT.js
+++ b/settings/l10n/lt_LT.js
@@ -19,6 +19,7 @@ OC.L10N.register(
     "Wrong admin recovery password. Please check the password and try again." : "Netinkamas administratoriau atkūrimo slaptažodis. Prašome pasitikrinti ir bandyti vėl.",
     "Unable to change password" : "Nepavyksta pakeisti slaptažodžio",
     "Enabled" : "Įjungta",
+    "Federated Cloud Sharing" : "Viešas dalijimasis padebesiu",
     "Saved" : "IÅ¡saugoti",
     "Email sent" : "Laiškas išsiųstas",
     "Email saved" : "El. paštas išsaugotas",
@@ -51,6 +52,7 @@ OC.L10N.register(
     "None" : "Nieko",
     "Login" : "Prisijungti",
     "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūksta PHP modulio „fileinfo“. Labai rekomenduojame įjungti šį modulį, kad gauti geriausius rezultatus nustatant mime-tipą.",
+    "Open documentation" : "Atidaryti dokumentÄ…",
     "Allow apps to use the Share API" : "Leidžia programoms naudoti Share API",
     "Allow public uploads" : "Leisti viešus įkėlimus",
     "days" : "dienos",
diff --git a/settings/l10n/lt_LT.json b/settings/l10n/lt_LT.json
index ee3c7ff074722f2068b9141325de304b8648cef3..a8cd70f7dd63748e29b907f08e1ac1c3ce5c9339 100644
--- a/settings/l10n/lt_LT.json
+++ b/settings/l10n/lt_LT.json
@@ -17,6 +17,7 @@
     "Wrong admin recovery password. Please check the password and try again." : "Netinkamas administratoriau atkūrimo slaptažodis. Prašome pasitikrinti ir bandyti vėl.",
     "Unable to change password" : "Nepavyksta pakeisti slaptažodžio",
     "Enabled" : "Įjungta",
+    "Federated Cloud Sharing" : "Viešas dalijimasis padebesiu",
     "Saved" : "IÅ¡saugoti",
     "Email sent" : "Laiškas išsiųstas",
     "Email saved" : "El. paštas išsaugotas",
@@ -49,6 +50,7 @@
     "None" : "Nieko",
     "Login" : "Prisijungti",
     "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "Trūksta PHP modulio „fileinfo“. Labai rekomenduojame įjungti šį modulį, kad gauti geriausius rezultatus nustatant mime-tipą.",
+    "Open documentation" : "Atidaryti dokumentÄ…",
     "Allow apps to use the Share API" : "Leidžia programoms naudoti Share API",
     "Allow public uploads" : "Leisti viešus įkėlimus",
     "days" : "dienos",
diff --git a/settings/routes.php b/settings/routes.php
index 10c3117c183a79ae27e73517f2993d01fcee2c70..6ba38388d3af0e6d7d2e66fc15627e9fa69d9310 100644
--- a/settings/routes.php
+++ b/settings/routes.php
@@ -47,6 +47,7 @@ $application->registerRoutes($this, [
 		['name' => 'AppSettings#changeExperimentalConfigState', 'url' => '/settings/apps/experimental', 'verb' => 'POST'],
 		['name' => 'SecuritySettings#trustedDomains', 'url' => '/settings/admin/security/trustedDomains', 'verb' => 'POST'],
 		['name' => 'Users#setMailAddress', 'url' => '/settings/users/{id}/mailAddress', 'verb' => 'PUT'],
+		['name' => 'Users#stats', 'url' => '/settings/users/stats', 'verb' => 'GET'],
 		['name' => 'LogSettings#setLogLevel', 'url' => '/settings/admin/log/level', 'verb' => 'POST'],
 		['name' => 'LogSettings#getEntries', 'url' => '/settings/admin/log/entries', 'verb' => 'GET'],
 		['name' => 'LogSettings#download', 'url' => '/settings/admin/log/download', 'verb' => 'GET'],
@@ -69,8 +70,6 @@ $this->create('settings_admin', '/settings/admin')
 	->actionInclude('settings/admin.php');
 // Settings ajax actions
 // users
-$this->create('settings_ajax_everyonecount', '/settings/ajax/geteveryonecount')
-	->actionInclude('settings/ajax/geteveryonecount.php');
 $this->create('settings_ajax_setquota', '/settings/ajax/setquota.php')
 	->actionInclude('settings/ajax/setquota.php');
 $this->create('settings_ajax_togglegroups', '/settings/ajax/togglegroups.php')
diff --git a/settings/users.php b/settings/users.php
index dac649aa828e2b50c5b575a5a6b3c5f58f15a7b9..2795032a1615939b09e2f52b3bb685ad941b6ae7 100644
--- a/settings/users.php
+++ b/settings/users.php
@@ -70,7 +70,7 @@ $recoveryAdminEnabled = OC_App::isEnabled('encryption') &&
 					    $config->getAppValue( 'encryption', 'recoveryAdminEnabled', null );
 
 if($isAdmin) {
-	$subadmins = \OC::$server->getGroupManager()->getSubAdmin()->getAllSubAdmins();
+	$subAdmins = \OC::$server->getGroupManager()->getSubAdmin()->getAllSubAdmins();
 	// New class returns IUser[] so convert back
 	$result = [];
 	foreach ($subAdmins as $subAdmin) {
@@ -79,7 +79,7 @@ if($isAdmin) {
 			'uid' => $subAdmin['user']->getUID(),
 		];
 	}
-	$subadmins = $result;
+	$subAdmins = $result;
 }else{
 	/* Retrieve group IDs from $groups array, so we can pass that information into OC_Group::displayNamesInGroups() */
 	$gids = array();
@@ -88,7 +88,7 @@ if($isAdmin) {
 			$gids[] = $group['id'];
 		}
 	}
-	$subadmins = false;
+	$subAdmins = false;
 }
 
 // load preset quotas
@@ -108,7 +108,7 @@ $tmpl->assign('groups', $groups);
 $tmpl->assign('sortGroups', $sortGroupsBy);
 $tmpl->assign('adminGroup', $adminGroup);
 $tmpl->assign('isAdmin', (int)$isAdmin);
-$tmpl->assign('subadmins', $subadmins);
+$tmpl->assign('subadmins', $subAdmins);
 $tmpl->assign('numofgroups', count($groups) + count($adminGroup));
 $tmpl->assign('quota_preset', $quotaPreset);
 $tmpl->assign('default_quota', $defaultQuota);
diff --git a/tests/settings/controller/userscontrollertest.php b/tests/settings/controller/userscontrollertest.php
index e30a98447aebe054976243a20a6bfef034413d59..f4b05671ce846ecd1ba34b040d49c721d8723e38 100644
--- a/tests/settings/controller/userscontrollertest.php
+++ b/tests/settings/controller/userscontrollertest.php
@@ -1677,4 +1677,73 @@ class UsersControllerTest extends \Test\TestCase {
 		$this->assertSame($responseCode, $response->getStatus());
 	}
 
+	public function testStatsAdmin() {
+		$this->container['IsAdmin'] = true;
+
+		$this->container['UserManager']
+			->expects($this->at(0))
+			->method('countUsers')
+			->will($this->returnValue([128, 44]));
+
+		$expectedResponse = new DataResponse(
+			[
+				'totalUsers' => 172
+			]
+		);
+		$response = $this->container['UsersController']->stats();
+		$this->assertEquals($expectedResponse, $response);
+	}
+
+	/**
+	 * Tests that the subadmin stats return unique users, even
+	 * when a user appears in several groups.
+	 */
+	public function testStatsSubAdmin() {
+		$this->container['IsAdmin'] = false;
+
+		$user = $this->getMockBuilder('\OC\User\User')
+			->disableOriginalConstructor()->getMock();
+
+		$this->container['UserSession']
+			->expects($this->once())
+			->method('getUser')
+			->will($this->returnValue($user));
+
+		$group1 = $this->getMockBuilder('\OC\Group\Group')
+			->disableOriginalConstructor()->getMock();
+		$group1
+			->expects($this->once())
+			->method('getUsers')
+			->will($this->returnValue(['foo' => 'M. Foo', 'admin' => 'S. Admin']));
+
+		$group2 = $this->getMockBuilder('\OC\Group\Group')
+			->disableOriginalConstructor()->getMock();
+		$group2
+			->expects($this->once())
+			->method('getUsers')
+			->will($this->returnValue(['bar' => 'B. Ar']));
+
+		$subadmin = $this->getMockBuilder('\OC\SubAdmin')
+			->disableOriginalConstructor()
+			->getMock();
+		$subadmin
+			->expects($this->at(0))
+			->method('getSubAdminsGroups')
+			->will($this->returnValue([$group1, $group2]));
+
+		$this->container['GroupManager']
+			->expects($this->any())
+			->method('getSubAdmin')
+			->will($this->returnValue($subadmin));
+
+		$expectedResponse = new DataResponse(
+			[
+				'totalUsers' => 3
+			]
+		);
+
+		$response = $this->container['UsersController']->stats();
+		$this->assertEquals($expectedResponse, $response);
+	}
+
 }
diff --git a/version.php b/version.php
index dd499a8d1d8320ce32f7af6d1959ff679a706c5f..7f45f5899e1266b7c7b1a7771e69bf9358ba4afe 100644
--- a/version.php
+++ b/version.php
@@ -25,7 +25,7 @@
 // We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades
 // between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel
 // when updating major/minor version number.
-$OC_Version = array(9, 0, 0, 1);
+$OC_Version = array(9, 0, 0, 2);
 
 // The human readable string
 $OC_VersionString = '9.0 pre alpha';