diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index 67bd569ceef3e7577bfaec11155656658b341482..620fe8606be1f00544460321036938c780d3d8e2 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -55,7 +55,7 @@
 	font-size:1.5em; font-weight:bold;
 	color:#888; text-shadow:#fff 0 1px 0;
 }
-table { position:relative; width:100%; }
+table { position:relative; top:37px; width:100%; }
 tbody tr { background-color:#fff; height:2.5em; }
 tbody tr:hover, tbody tr:active, tbody tr.selected { background-color:#f8f8f8; }
 tbody tr.selected { background-color:#eee; }
@@ -76,7 +76,6 @@ table th#headerDate, table td.date { min-width:11em; padding:0 .1em 0 1em; text-
 table.multiselect { top:63px; }
 table.multiselect thead { position:fixed; top:82px; z-index:1; }
 table.multiselect thead th { background:rgba(230,230,230,.8); color:#000; font-weight:bold; border-bottom:0; }
-
 table td.selection, table th.selection, table td.fileaction { width:2em; text-align:center; }
 table td.filename a.name { display:block; height:1.5em; vertical-align:middle; margin-left:3em; }
 table tr[data-type="dir"] td.filename a.name span.nametext {font-weight:bold; }
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 5c5b430a8d4c96f890bb71658a70af949fb52f3b..918182162d4694598b35cf4f283a85d75aac2d39 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -685,9 +685,10 @@ $(document).ready(function() {
 		breadcrumbsWidth += $(breadcrumb).get(0).offsetWidth;
 	});
 
-	if ($('#controls .actions').length > 0) {
-		breadcrumbsWidth += $('#controls .actions').get(0).offsetWidth;
-	}
+
+	$.each($('#controls .actions>div'), function(index, action) {
+		breadcrumbsWidth += $(action).get(0).offsetWidth;
+	});
 
 	function resizeBreadcrumbs(firstRun) {
 		var width = $(this).width();
diff --git a/apps/files/l10n/ar.php b/apps/files/l10n/ar.php
index b741815be458d781049689f6504260952e9b4af4..ce8a34acedb3ef8462d1659bde80f0145b526d14 100644
--- a/apps/files/l10n/ar.php
+++ b/apps/files/l10n/ar.php
@@ -5,7 +5,6 @@
 "No file was uploaded" => "لم يتم ترفيع أي من الملفات",
 "Missing a temporary folder" => "المجلد المؤقت غير موجود",
 "Files" => "الملفات",
-"Unshare" => "إلغاء مشاركة",
 "Delete" => "محذوف",
 "Close" => "إغلق",
 "Name" => "الاسم",
@@ -19,6 +18,7 @@
 "Folder" => "مجلد",
 "Nothing in here. Upload something!" => "لا يوجد شيء هنا. إرفع بعض الملفات!",
 "Download" => "تحميل",
+"Unshare" => "إلغاء مشاركة",
 "Upload too large" => "حجم الترفيع أعلى من المسموح",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "حجم الملفات التي تريد ترفيعها أعلى من المسموح على الخادم."
 );
diff --git a/apps/files/l10n/bg_BG.php b/apps/files/l10n/bg_BG.php
index ae49f5169992c6cd93d22c41dd9da060f90afc49..632b57454539eb5c61f49213e75c6de63fdcd79f 100644
--- a/apps/files/l10n/bg_BG.php
+++ b/apps/files/l10n/bg_BG.php
@@ -6,6 +6,7 @@
 "replace" => "препокриване",
 "cancel" => "отказ",
 "undo" => "възтановяване",
+"Close" => "Затвори",
 "Upload cancelled." => "Качването е спряно.",
 "Name" => "Име",
 "Size" => "Размер",
diff --git a/apps/files/l10n/bn_BD.php b/apps/files/l10n/bn_BD.php
index dbff81cef6c5b424872c058622bf6fc67c214c45..05cfb9f1381e9d95889789932b21318e19805f64 100644
--- a/apps/files/l10n/bn_BD.php
+++ b/apps/files/l10n/bn_BD.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "%s কে স্থানান্তর করা সম্ভব হলো না -  এই নামের ফাইল বিদ্যমান",
+"Could not move %s" => "%s  কে স্থানান্তর করা সম্ভব হলো না",
+"Unable to rename file" => "ফাইলের নাম পরিবর্তন করা সম্ভব হলো না",
 "No file was uploaded. Unknown error" => "কোন ফাইল আপলোড করা হয় নি। সমস্যা অজ্ঞাত।",
 "There is no error, the file uploaded with success" => "কোন সমস্যা নেই, ফাইল আপলোড সুসম্পন্ন হয়েছে",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "আপলোড করা  ফাইলটি php.ini তে বর্ণিত  upload_max_filesize নির্দেশিত আয়তন অতিক্রম করছেঃ",
@@ -9,9 +12,9 @@
 "Failed to write to disk" => "ডিস্কে লিখতে ব্যর্থ",
 "Invalid directory." => "ভুল ডিরেক্টরি",
 "Files" => "ফাইল",
-"Unshare" => "ভাগাভাগি বাতিল ",
 "Delete" => "মুছে ফেল",
 "Rename" => "পূনঃনামকরণ",
+"Pending" => "মুলতুবি",
 "{new_name} already exists" => "{new_name} টি বিদ্যমান",
 "replace" => "প্রতিস্থাপন",
 "suggest name" => "নাম সুপারিশ করুন",
@@ -25,7 +28,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "আপনার ফাইলটি আপলোড করা সম্ভব হলো না, কেননা এটি হয় একটি ফোল্ডার কিংবা এর আকার ০ বাইট",
 "Upload Error" => "আপলোড করতে সমস্যা ",
 "Close" => "বন্ধ",
-"Pending" => "মুলতুবি",
 "1 file uploading" => "১টি ফাইল আপলোড করা হচ্ছে",
 "{count} files uploading" => "{count} টি ফাইল আপলোড করা হচ্ছে",
 "Upload cancelled." => "আপলোড বাতিল করা হয়েছে।",
@@ -55,6 +57,7 @@
 "Cancel upload" => "আপলোড বাতিল কর",
 "Nothing in here. Upload something!" => "এখানে কিছুই নেই। কিছু আপলোড করুন !",
 "Download" => "ডাউনলোড",
+"Unshare" => "ভাগাভাগি বাতিল ",
 "Upload too large" => "আপলোডের আকারটি অনেক বড়",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "আপনি এই সার্ভারে আপলোড করার জন্য অনুমোদিত ফাইলের সর্বোচ্চ আকারের চেয়ে বৃহদাকার ফাইল আপলোড করার চেষ্টা করছেন ",
 "Files are being scanned, please wait." => "ফাইলগুলো স্ক্যান করা হচ্ছে, দয়া করে অপেক্ষা করুন।",
diff --git a/apps/files/l10n/ca.php b/apps/files/l10n/ca.php
index 49ea7f73abb451c083fecb0f8d8f74dfa4b074c0..6655633bbdbe2fd06e3ca888b66110b49235fb2d 100644
--- a/apps/files/l10n/ca.php
+++ b/apps/files/l10n/ca.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom",
+"Could not move %s" => " No s'ha pogut moure %s",
+"Unable to rename file" => "No es pot canviar el nom del fitxer",
 "No file was uploaded. Unknown error" => "No s'ha carregat cap fitxer. Error desconegut",
 "There is no error, the file uploaded with success" => "El fitxer s'ha pujat correctament",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "L’arxiu que voleu carregar supera el màxim definit en la directiva upload_max_filesize del php.ini:",
@@ -7,12 +10,13 @@
 "No file was uploaded" => "El fitxer no s'ha pujat",
 "Missing a temporary folder" => "S'ha perdut un fitxer temporal",
 "Failed to write to disk" => "Ha fallat en escriure al disc",
+"Not enough storage available" => "No hi ha prou espai disponible",
 "Invalid directory." => "Directori no vàlid.",
 "Files" => "Fitxers",
-"Unshare" => "Deixa de compartir",
 "Delete permanently" => "Esborra permanentment",
 "Delete" => "Suprimeix",
 "Rename" => "Reanomena",
+"Pending" => "Pendents",
 "{new_name} already exists" => "{new_name} ja existeix",
 "replace" => "substitueix",
 "suggest name" => "sugereix un nom",
@@ -30,7 +34,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes",
 "Upload Error" => "Error en la pujada",
 "Close" => "Tanca",
-"Pending" => "Pendents",
 "1 file uploading" => "1 fitxer pujant",
 "{count} files uploading" => "{count} fitxers en pujada",
 "Upload cancelled." => "La pujada s'ha cancel·lat.",
@@ -57,10 +60,11 @@
 "Text file" => "Fitxer de text",
 "Folder" => "Carpeta",
 "From link" => "Des d'enllaç",
-"Trash" => "Esborra",
+"Trash bin" => "Paperera",
 "Cancel upload" => "Cancel·la la pujada",
 "Nothing in here. Upload something!" => "Res per aquí. Pugeu alguna cosa!",
 "Download" => "Baixa",
+"Unshare" => "Deixa de compartir",
 "Upload too large" => "La pujada és massa gran",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Els fitxers que esteu intentant pujar excedeixen la mida màxima de pujada del servidor",
 "Files are being scanned, please wait." => "S'estan escanejant els fitxers, espereu",
diff --git a/apps/files/l10n/cs_CZ.php b/apps/files/l10n/cs_CZ.php
index c2085a3aa9aad3a50b2499f050c41a50ed39a258..d2306838bd420751ba86605e7f71e93ce1e73032 100644
--- a/apps/files/l10n/cs_CZ.php
+++ b/apps/files/l10n/cs_CZ.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Nelze přesunout %s - existuje soubor se stejným názvem",
+"Could not move %s" => "Nelze přesunout %s",
+"Unable to rename file" => "Nelze přejmenovat soubor",
 "No file was uploaded. Unknown error" => "Soubor nebyl odeslán. Neznámá chyba",
 "There is no error, the file uploaded with success" => "Soubor byl odeslán úspěšně",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Odesílaný soubor přesahuje velikost upload_max_filesize povolenou v php.ini:",
@@ -7,12 +10,13 @@
 "No file was uploaded" => "Žádný soubor nebyl odeslán",
 "Missing a temporary folder" => "Chybí adresář pro dočasné soubory",
 "Failed to write to disk" => "Zápis na disk selhal",
+"Not enough storage available" => "Nedostatek dostupného úložného prostoru",
 "Invalid directory." => "Neplatný adresář",
 "Files" => "Soubory",
-"Unshare" => "Zrušit sdílení",
 "Delete permanently" => "Trvale odstranit",
 "Delete" => "Smazat",
 "Rename" => "Přejmenovat",
+"Pending" => "Čekající",
 "{new_name} already exists" => "{new_name} již existuje",
 "replace" => "nahradit",
 "suggest name" => "navrhnout název",
@@ -30,7 +34,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Nelze odeslat Váš soubor, protože je to adresář nebo má velikost 0 bajtů",
 "Upload Error" => "Chyba odesílání",
 "Close" => "Zavřít",
-"Pending" => "Čekající",
 "1 file uploading" => "odesílá se 1 soubor",
 "{count} files uploading" => "odesílám {count} souborů",
 "Upload cancelled." => "Odesílání zrušeno.",
@@ -57,10 +60,11 @@
 "Text file" => "Textový soubor",
 "Folder" => "Složka",
 "From link" => "Z odkazu",
-"Trash" => "Koš",
+"Trash bin" => "Koš",
 "Cancel upload" => "Zrušit odesílání",
 "Nothing in here. Upload something!" => "Žádný obsah. Nahrajte něco.",
 "Download" => "Stáhnout",
+"Unshare" => "Zrušit sdílení",
 "Upload too large" => "Odeslaný soubor je příliš velký",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Soubory, které se snažíte odeslat, překračují limit velikosti odesílání na tomto serveru.",
 "Files are being scanned, please wait." => "Soubory se prohledávají, prosím čekejte.",
diff --git a/apps/files/l10n/da.php b/apps/files/l10n/da.php
index 71a5a56de57acb02c2ce801223c8c34b82c76fdf..13ceacc6241c22639ad7123dd25c99c09f000e25 100644
--- a/apps/files/l10n/da.php
+++ b/apps/files/l10n/da.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Kunne ikke flytte %s - der findes allerede en fil med dette navn",
+"Could not move %s" => "Kunne ikke flytte %s",
+"Unable to rename file" => "Kunne ikke omdøbe fil",
 "No file was uploaded. Unknown error" => "Ingen fil blev uploadet. Ukendt fejl.",
 "There is no error, the file uploaded with success" => "Der er ingen fejl, filen blev uploadet med success",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Den uploadede fil overstiger upload_max_filesize direktivet i php.ini",
@@ -7,11 +10,12 @@
 "No file was uploaded" => "Ingen fil blev uploadet",
 "Missing a temporary folder" => "Mangler en midlertidig mappe",
 "Failed to write to disk" => "Fejl ved skrivning til disk.",
+"Not enough storage available" => "Der er ikke nok plads til rådlighed",
 "Invalid directory." => "Ugyldig mappe.",
 "Files" => "Filer",
-"Unshare" => "Fjern deling",
 "Delete" => "Slet",
 "Rename" => "Omdøb",
+"Pending" => "Afventer",
 "{new_name} already exists" => "{new_name} eksisterer allerede",
 "replace" => "erstat",
 "suggest name" => "foreslå navn",
@@ -28,7 +32,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Kunne ikke uploade din fil, da det enten er en mappe eller er tom",
 "Upload Error" => "Fejl ved upload",
 "Close" => "Luk",
-"Pending" => "Afventer",
 "1 file uploading" => "1 fil uploades",
 "{count} files uploading" => "{count} filer uploades",
 "Upload cancelled." => "Upload afbrudt.",
@@ -58,6 +61,7 @@
 "Cancel upload" => "Fortryd upload",
 "Nothing in here. Upload something!" => "Her er tomt. Upload noget!",
 "Download" => "Download",
+"Unshare" => "Fjern deling",
 "Upload too large" => "Upload for stor",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerne, du prøver at uploade, er større end den maksimale størrelse for fil-upload på denne server.",
 "Files are being scanned, please wait." => "Filerne bliver indlæst, vent venligst.",
diff --git a/apps/files/l10n/de.php b/apps/files/l10n/de.php
index 4b38619eaa572a99961447380be459acb64fbaae..fa202c8c2b55fdc72daa833a0446ac43da215f40 100644
--- a/apps/files/l10n/de.php
+++ b/apps/files/l10n/de.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits.",
+"Could not move %s" => "Konnte %s nicht verschieben",
+"Unable to rename file" => "Konnte Datei nicht umbenennen",
 "No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler",
 "There is no error, the file uploaded with success" => "Datei fehlerfrei hochgeladen.",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini",
@@ -7,11 +10,12 @@
 "No file was uploaded" => "Es wurde keine Datei hochgeladen.",
 "Missing a temporary folder" => "Temporärer Ordner fehlt.",
 "Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
+"Not enough storage available" => "Nicht genug Speicherplatz verfügbar",
 "Invalid directory." => "Ungültiges Verzeichnis.",
 "Files" => "Dateien",
-"Unshare" => "Nicht mehr freigeben",
 "Delete" => "Löschen",
 "Rename" => "Umbenennen",
+"Pending" => "Ausstehend",
 "{new_name} already exists" => "{new_name} existiert bereits",
 "replace" => "ersetzen",
 "suggest name" => "Name vorschlagen",
@@ -29,7 +33,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Deine Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist.",
 "Upload Error" => "Fehler beim Upload",
 "Close" => "Schließen",
-"Pending" => "Ausstehend",
 "1 file uploading" => "Eine Datei wird hoch geladen",
 "{count} files uploading" => "{count} Dateien werden hochgeladen",
 "Upload cancelled." => "Upload abgebrochen.",
@@ -56,10 +59,10 @@
 "Text file" => "Textdatei",
 "Folder" => "Ordner",
 "From link" => "Von einem Link",
-"Trash" => "Papierkorb",
 "Cancel upload" => "Upload abbrechen",
 "Nothing in here. Upload something!" => "Alles leer. Lade etwas hoch!",
 "Download" => "Herunterladen",
+"Unshare" => "Nicht mehr freigeben",
 "Upload too large" => "Upload zu groß",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.",
 "Files are being scanned, please wait." => "Dateien werden gescannt, bitte warten.",
diff --git a/apps/files/l10n/de_DE.php b/apps/files/l10n/de_DE.php
index 71f24eba4c8fa2d11ae0074fdaeb777f2bcabfa9..0dfc19ff01bd9570b1c464760a4ffd3d11de8f6a 100644
--- a/apps/files/l10n/de_DE.php
+++ b/apps/files/l10n/de_DE.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits",
+"Could not move %s" => "Konnte %s nicht verschieben",
+"Unable to rename file" => "Konnte Datei nicht umbenennen",
 "No file was uploaded. Unknown error" => "Keine Datei hochgeladen. Unbekannter Fehler",
 "There is no error, the file uploaded with success" => "Es sind keine Fehler aufgetreten. Die Datei wurde erfolgreich hochgeladen.",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Die hochgeladene Datei überschreitet die upload_max_filesize Vorgabe in php.ini",
@@ -7,12 +10,13 @@
 "No file was uploaded" => "Es wurde keine Datei hochgeladen.",
 "Missing a temporary folder" => "Der temporäre Ordner fehlt.",
 "Failed to write to disk" => "Fehler beim Schreiben auf die Festplatte",
+"Not enough storage available" => "Nicht genug Speicher vorhanden.",
 "Invalid directory." => "Ungültiges Verzeichnis.",
 "Files" => "Dateien",
-"Unshare" => "Nicht mehr freigeben",
 "Delete permanently" => "Entgültig löschen",
 "Delete" => "Löschen",
 "Rename" => "Umbenennen",
+"Pending" => "Ausstehend",
 "{new_name} already exists" => "{new_name} existiert bereits",
 "replace" => "ersetzen",
 "suggest name" => "Name vorschlagen",
@@ -30,7 +34,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Ihre Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichnis oder 0 Bytes groß ist.",
 "Upload Error" => "Fehler beim Upload",
 "Close" => "Schließen",
-"Pending" => "Ausstehend",
 "1 file uploading" => "1 Datei wird hochgeladen",
 "{count} files uploading" => "{count} Dateien wurden hochgeladen",
 "Upload cancelled." => "Upload abgebrochen.",
@@ -57,10 +60,10 @@
 "Text file" => "Textdatei",
 "Folder" => "Ordner",
 "From link" => "Von einem Link",
-"Trash" => "Abfall",
 "Cancel upload" => "Upload abbrechen",
 "Nothing in here. Upload something!" => "Alles leer. Bitte laden Sie etwas hoch!",
 "Download" => "Herunterladen",
+"Unshare" => "Nicht mehr freigeben",
 "Upload too large" => "Der Upload ist zu groß",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Die Datei überschreitet die Maximalgröße für Uploads auf diesem Server.",
 "Files are being scanned, please wait." => "Dateien werden gescannt, bitte warten.",
diff --git a/apps/files/l10n/el.php b/apps/files/l10n/el.php
index a9c5fda0981a08c24d8d1da6399dc309981c10b0..2a110afa9602e08d10ca4c1850ddb2479cf5a818 100644
--- a/apps/files/l10n/el.php
+++ b/apps/files/l10n/el.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Αδυναμία μετακίνησης του %s - υπάρχει ήδη αρχείο με αυτό το όνομα",
+"Could not move %s" => "Αδυναμία μετακίνησης του %s",
+"Unable to rename file" => "Αδυναμία μετονομασίας αρχείου",
 "No file was uploaded. Unknown error" => "Δεν ανέβηκε κάποιο αρχείο. Άγνωστο σφάλμα",
 "There is no error, the file uploaded with success" => "Δεν υπάρχει σφάλμα, το αρχείο εστάλει επιτυχώς",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Το απεσταλμένο αρχείο ξεπερνά την οδηγία upload_max_filesize στο php.ini:",
@@ -7,11 +10,13 @@
 "No file was uploaded" => "Κανένα αρχείο δεν στάλθηκε",
 "Missing a temporary folder" => "Λείπει ο προσωρινός φάκελος",
 "Failed to write to disk" => "Αποτυχία εγγραφής στο δίσκο",
+"Not enough storage available" => "Μη επαρκής διαθέσιμος αποθηκευτικός χώρος",
 "Invalid directory." => "Μη έγκυρος φάκελος.",
 "Files" => "Αρχεία",
-"Unshare" => "Διακοπή κοινής χρήσης",
+"Delete permanently" => "Μόνιμη διαγραφή",
 "Delete" => "Διαγραφή",
 "Rename" => "Μετονομασία",
+"Pending" => "Εκκρεμεί",
 "{new_name} already exists" => "{new_name} υπάρχει ήδη",
 "replace" => "αντικατέστησε",
 "suggest name" => "συνιστώμενο όνομα",
@@ -19,6 +24,7 @@
 "replaced {new_name}" => "{new_name} αντικαταστάθηκε",
 "undo" => "αναίρεση",
 "replaced {new_name} with {old_name}" => "αντικαταστάθηκε το {new_name} με {old_name}",
+"perform delete operation" => "εκτέλεση διαδικασία διαγραφής",
 "'.' is an invalid file name." => "'.' είναι μη έγκυρο όνομα αρχείου.",
 "File name cannot be empty." => "Το όνομα αρχείου δεν πρέπει να είναι κενό.",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Μη έγκυρο όνομα, '\\', '/', '<', '>', ':', '\"', '|', '?' και '*' δεν επιτρέπονται.",
@@ -28,7 +34,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Αδυναμία στην αποστολή του αρχείου σας αφού είναι φάκελος ή έχει 0 bytes",
 "Upload Error" => "Σφάλμα Αποστολής",
 "Close" => "Κλείσιμο",
-"Pending" => "Εκκρεμεί",
 "1 file uploading" => "1 αρχείο ανεβαίνει",
 "{count} files uploading" => "{count} αρχεία ανεβαίνουν",
 "Upload cancelled." => "Η αποστολή ακυρώθηκε.",
@@ -58,8 +63,10 @@
 "Cancel upload" => "Ακύρωση αποστολής",
 "Nothing in here. Upload something!" => "Δεν υπάρχει τίποτα εδώ. Ανέβασε κάτι!",
 "Download" => "Λήψη",
+"Unshare" => "Διακοπή κοινής χρήσης",
 "Upload too large" => "Πολύ μεγάλο αρχείο προς αποστολή",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Τα αρχεία που προσπαθείτε να ανεβάσετε υπερβαίνουν το μέγιστο μέγεθος αποστολής αρχείων σε αυτόν τον διακομιστή.",
 "Files are being scanned, please wait." => "Τα αρχεία σαρώνονται, παρακαλώ περιμένετε",
-"Current scanning" => "Τρέχουσα αναζήτηση "
+"Current scanning" => "Τρέχουσα αναζήτηση ",
+"Upgrading filesystem cache..." => "Αναβάθμιση μνήμης cache του συστήματος αρχείων..."
 );
diff --git a/apps/files/l10n/eo.php b/apps/files/l10n/eo.php
index ba78e8b56d7d65624178fd339750d89db068f5ce..b943244f1ae74a77bb2559e4e66f544a756f66dd 100644
--- a/apps/files/l10n/eo.php
+++ b/apps/files/l10n/eo.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Ne eblis movi %s: dosiero kun ĉi tiu nomo jam ekzistas",
+"Could not move %s" => "Ne eblis movi %s",
+"Unable to rename file" => "Ne eblis alinomigi dosieron",
 "No file was uploaded. Unknown error" => "Neniu dosiero alŝutiĝis. Nekonata eraro.",
 "There is no error, the file uploaded with success" => "Ne estas eraro, la dosiero alŝutiĝis sukcese",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "La dosiero alŝutita superas la regulon upload_max_filesize el php.ini: ",
@@ -9,9 +12,9 @@
 "Failed to write to disk" => "Malsukcesis skribo al disko",
 "Invalid directory." => "Nevalida dosierujo.",
 "Files" => "Dosieroj",
-"Unshare" => "Malkunhavigi",
 "Delete" => "Forigi",
 "Rename" => "Alinomigi",
+"Pending" => "Traktotaj",
 "{new_name} already exists" => "{new_name} jam ekzistas",
 "replace" => "anstataŭigi",
 "suggest name" => "sugesti nomon",
@@ -26,7 +29,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Ne eblis alŝuti vian dosieron ĉar ĝi estas dosierujo aŭ havas 0 duumokojn",
 "Upload Error" => "Alŝuta eraro",
 "Close" => "Fermi",
-"Pending" => "Traktotaj",
 "1 file uploading" => "1 dosiero estas alŝutata",
 "{count} files uploading" => "{count} dosieroj alŝutatas",
 "Upload cancelled." => "La alŝuto nuliĝis.",
@@ -56,6 +58,7 @@
 "Cancel upload" => "Nuligi alŝuton",
 "Nothing in here. Upload something!" => "Nenio estas ĉi tie. Alŝutu ion!",
 "Download" => "Elŝuti",
+"Unshare" => "Malkunhavigi",
 "Upload too large" => "Elŝuto tro larĝa",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "La dosieroj, kiujn vi provas alŝuti, transpasas la maksimuman grandon por dosieralŝutoj en ĉi tiu servilo.",
 "Files are being scanned, please wait." => "Dosieroj estas skanataj, bonvolu atendi.",
diff --git a/apps/files/l10n/es.php b/apps/files/l10n/es.php
index 9d45e6035c701f2af58c3344198224e24bd4f0f6..4ebbdb21e3447c63808b46b6934dd184f5f346ee 100644
--- a/apps/files/l10n/es.php
+++ b/apps/files/l10n/es.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "No se puede mover %s - Ya existe un archivo con ese nombre",
+"Could not move %s" => "No se puede mover %s",
+"Unable to rename file" => "No se puede renombrar el archivo",
 "No file was uploaded. Unknown error" => "Fallo no se subió el fichero",
 "There is no error, the file uploaded with success" => "No se ha producido ningún error, el archivo se ha subido con éxito",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "El archivo que intentas subir sobrepasa el tamaño definido por la variable upload_max_filesize en php.ini",
@@ -7,12 +10,13 @@
 "No file was uploaded" => "No se ha subido ningún archivo",
 "Missing a temporary folder" => "Falta un directorio temporal",
 "Failed to write to disk" => "La escritura en disco ha fallado",
+"Not enough storage available" => "No hay suficiente espacio disponible",
 "Invalid directory." => "Directorio invalido.",
 "Files" => "Archivos",
-"Unshare" => "Dejar de compartir",
 "Delete permanently" => "Eliminar permanentemente",
 "Delete" => "Eliminar",
 "Rename" => "Renombrar",
+"Pending" => "Pendiente",
 "{new_name} already exists" => "{new_name} ya existe",
 "replace" => "reemplazar",
 "suggest name" => "sugerir nombre",
@@ -30,7 +34,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "No ha sido posible subir tu archivo porque es un directorio o tiene 0 bytes",
 "Upload Error" => "Error al subir el archivo",
 "Close" => "cerrrar",
-"Pending" => "Pendiente",
 "1 file uploading" => "subiendo 1 archivo",
 "{count} files uploading" => "Subiendo {count} archivos",
 "Upload cancelled." => "Subida cancelada.",
@@ -57,10 +60,11 @@
 "Text file" => "Archivo de texto",
 "Folder" => "Carpeta",
 "From link" => "Desde el enlace",
-"Trash" => "Basura",
+"Trash bin" => "Papelera de reciclaje",
 "Cancel upload" => "Cancelar subida",
 "Nothing in here. Upload something!" => "Aquí no hay nada. ¡Sube algo!",
 "Download" => "Descargar",
+"Unshare" => "Dejar de compartir",
 "Upload too large" => "El archivo es demasiado grande",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido por este servidor.",
 "Files are being scanned, please wait." => "Se están escaneando los archivos, por favor espere.",
diff --git a/apps/files/l10n/es_AR.php b/apps/files/l10n/es_AR.php
index e805f24ce4c0ce22223a9ac7562f93854d77b567..edc732b46757416436cf5b39dada4ac519e953c6 100644
--- a/apps/files/l10n/es_AR.php
+++ b/apps/files/l10n/es_AR.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "No se pudo mover %s - Un archivo con este nombre ya existe",
+"Could not move %s" => "No se pudo mover %s ",
+"Unable to rename file" => "No fue posible cambiar el nombre al archivo",
 "No file was uploaded. Unknown error" => "El archivo no fue subido. Error desconocido",
 "There is no error, the file uploaded with success" => "No se han producido errores, el archivo se ha subido con éxito",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "El archivo que intentás subir excede el tamaño definido por upload_max_filesize en el php.ini:",
@@ -7,11 +10,12 @@
 "No file was uploaded" => "El archivo no fue subido",
 "Missing a temporary folder" => "Falta un directorio temporal",
 "Failed to write to disk" => "Error al escribir en el disco",
+"Not enough storage available" => "No hay suficiente capacidad de almacenamiento",
 "Invalid directory." => "Directorio invalido.",
 "Files" => "Archivos",
-"Unshare" => "Dejar de compartir",
 "Delete" => "Borrar",
 "Rename" => "Cambiar nombre",
+"Pending" => "Pendiente",
 "{new_name} already exists" => "{new_name} ya existe",
 "replace" => "reemplazar",
 "suggest name" => "sugerir nombre",
@@ -29,7 +33,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "No fue posible subir el archivo porque es un directorio o porque su tamaño es 0 bytes",
 "Upload Error" => "Error al subir el archivo",
 "Close" => "Cerrar",
-"Pending" => "Pendiente",
 "1 file uploading" => "Subiendo 1 archivo",
 "{count} files uploading" => "Subiendo {count} archivos",
 "Upload cancelled." => "La subida fue cancelada",
@@ -56,10 +59,10 @@
 "Text file" => "Archivo de texto",
 "Folder" => "Carpeta",
 "From link" => "Desde enlace",
-"Trash" => "Papelera",
 "Cancel upload" => "Cancelar subida",
 "Nothing in here. Upload something!" => "No hay nada. ¡Subí contenido!",
 "Download" => "Descargar",
+"Unshare" => "Dejar de compartir",
 "Upload too large" => "El archivo es demasiado grande",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los archivos que intentás subir sobrepasan el tamaño máximo ",
 "Files are being scanned, please wait." => "Se están escaneando los archivos, por favor esperá.",
diff --git a/apps/files/l10n/et_EE.php b/apps/files/l10n/et_EE.php
index 54dd7cfdc560ad5f72c481d078657989f3cd4b2f..98af371e07134d5169b02c8ec5fbad25fd794f9d 100644
--- a/apps/files/l10n/et_EE.php
+++ b/apps/files/l10n/et_EE.php
@@ -7,9 +7,9 @@
 "Missing a temporary folder" => "Ajutiste failide kaust puudub",
 "Failed to write to disk" => "Kettale kirjutamine ebaõnnestus",
 "Files" => "Failid",
-"Unshare" => "Lõpeta jagamine",
 "Delete" => "Kustuta",
 "Rename" => "ümber",
+"Pending" => "Ootel",
 "{new_name} already exists" => "{new_name} on juba olemas",
 "replace" => "asenda",
 "suggest name" => "soovita nime",
@@ -21,7 +21,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Sinu faili üleslaadimine ebaõnnestus, kuna see on kaust või selle suurus on 0 baiti",
 "Upload Error" => "Üleslaadimise viga",
 "Close" => "Sulge",
-"Pending" => "Ootel",
 "1 file uploading" => "1 faili üleslaadimisel",
 "{count} files uploading" => "{count} faili üleslaadimist",
 "Upload cancelled." => "Üleslaadimine tühistati.",
@@ -50,6 +49,7 @@
 "Cancel upload" => "Tühista üleslaadimine",
 "Nothing in here. Upload something!" => "Siin pole midagi. Lae midagi üles!",
 "Download" => "Lae alla",
+"Unshare" => "Lõpeta jagamine",
 "Upload too large" => "Üleslaadimine on liiga suur",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Failid, mida sa proovid üles laadida, ületab serveri poolt üleslaetavatele failidele määratud maksimaalse suuruse.",
 "Files are being scanned, please wait." => "Faile skannitakse, palun oota",
diff --git a/apps/files/l10n/eu.php b/apps/files/l10n/eu.php
index 45c515814e71bc84b112d387542534c4ce2921b9..b62b1c7bf79a045114c6a03ff2f79177e77f57fa 100644
--- a/apps/files/l10n/eu.php
+++ b/apps/files/l10n/eu.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Ezin da %s mugitu - Izen hau duen fitxategia dagoeneko existitzen da",
+"Could not move %s" => "Ezin dira fitxategiak mugitu %s",
+"Unable to rename file" => "Ezin izan da fitxategia berrizendatu",
 "No file was uploaded. Unknown error" => "Ez da fitxategirik igo. Errore ezezaguna",
 "There is no error, the file uploaded with success" => "Ez da arazorik izan, fitxategia ongi igo da",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Igotako fitxategiak php.ini fitxategian ezarritako upload_max_filesize muga gainditu du:",
@@ -7,11 +10,12 @@
 "No file was uploaded" => "Ez da fitxategirik igo",
 "Missing a temporary folder" => "Aldi baterako karpeta falta da",
 "Failed to write to disk" => "Errore bat izan da diskoan idazterakoan",
+"Not enough storage available" => "Ez dago behar aina leku erabilgarri,",
 "Invalid directory." => "Baliogabeko karpeta.",
 "Files" => "Fitxategiak",
-"Unshare" => "Ez elkarbanatu",
 "Delete" => "Ezabatu",
 "Rename" => "Berrizendatu",
+"Pending" => "Zain",
 "{new_name} already exists" => "{new_name} dagoeneko existitzen da",
 "replace" => "ordeztu",
 "suggest name" => "aholkatu izena",
@@ -28,7 +32,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Ezin da zure fitxategia igo, karpeta bat da edo 0 byt ditu",
 "Upload Error" => "Igotzean errore bat suertatu da",
 "Close" => "Itxi",
-"Pending" => "Zain",
 "1 file uploading" => "fitxategi 1 igotzen",
 "{count} files uploading" => "{count} fitxategi igotzen",
 "Upload cancelled." => "Igoera ezeztatuta",
@@ -58,6 +61,7 @@
 "Cancel upload" => "Ezeztatu igoera",
 "Nothing in here. Upload something!" => "Ez dago ezer. Igo zerbait!",
 "Download" => "Deskargatu",
+"Unshare" => "Ez elkarbanatu",
 "Upload too large" => "Igotakoa handiegia da",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Igotzen saiatzen ari zaren fitxategiak zerbitzari honek igotzeko onartzen duena baino handiagoak dira.",
 "Files are being scanned, please wait." => "Fitxategiak eskaneatzen ari da, itxoin mezedez.",
diff --git a/apps/files/l10n/fa.php b/apps/files/l10n/fa.php
index 2559d597a791e17235798972fa9e1fb464f6bf7d..d4cbb99e10aa2edb6bae15b2cd5700f846b14643 100644
--- a/apps/files/l10n/fa.php
+++ b/apps/files/l10n/fa.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "%s نمی تواند حرکت کند - در حال حاضر پرونده با این نام وجود دارد. ",
+"Could not move %s" => "%s نمی تواند حرکت کند ",
+"Unable to rename file" => "قادر به تغییر نام پرونده نیست.",
 "No file was uploaded. Unknown error" => "هیچ فایلی آپلود نشد.خطای ناشناس",
 "There is no error, the file uploaded with success" => "هیچ خطایی وجود ندارد فایل با موفقیت بار گذاری شد",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "پرونده آپلود شده بیش ازدستور  ماکزیمم_حجم فایل_برای آپلود در   php.ini استفاده کرده است.",
@@ -9,9 +12,9 @@
 "Failed to write to disk" => "نوشتن بر روی دیسک سخت ناموفق بود",
 "Invalid directory." => "فهرست راهنما نامعتبر می باشد.",
 "Files" => "فایل ها",
-"Unshare" => "لغو اشتراک",
 "Delete" => "پاک کردن",
 "Rename" => "تغییرنام",
+"Pending" => "در انتظار",
 "{new_name} already exists" => "{نام _جدید} در حال حاضر وجود دارد.",
 "replace" => "جایگزین",
 "suggest name" => "پیشنهاد نام",
@@ -26,7 +29,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "ناتوان در بارگذاری یا فایل یک پوشه است یا 0بایت دارد",
 "Upload Error" => "خطا در بار گذاری",
 "Close" => "بستن",
-"Pending" => "در انتظار",
 "1 file uploading" => "1 پرونده آپلود شد.",
 "{count} files uploading" => "{ شمار } فایل های در حال آپلود",
 "Upload cancelled." => "بار گذاری لغو شد",
@@ -56,6 +58,7 @@
 "Cancel upload" => "متوقف کردن بار گذاری",
 "Nothing in here. Upload something!" => "اینجا هیچ چیز نیست.",
 "Download" => "بارگیری",
+"Unshare" => "لغو اشتراک",
 "Upload too large" => "حجم بارگذاری بسیار زیاد است",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "فایلها بیش از حد تعیین شده در این سرور هستند\nمترجم:با تغییر فایل php,ini میتوان این محدودیت را برطرف کرد",
 "Files are being scanned, please wait." => "پرونده ها در حال بازرسی هستند لطفا صبر کنید",
diff --git a/apps/files/l10n/fi_FI.php b/apps/files/l10n/fi_FI.php
index 6a425e760909afb42b3e9557d6272755a5403bfa..cd7ce66dc446e3d1b930f79822be3e1a4e89b538 100644
--- a/apps/files/l10n/fi_FI.php
+++ b/apps/files/l10n/fi_FI.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Kohteen %s siirto ei onnistunut - Tiedosto samalla nimellä on jo olemassa",
+"Could not move %s" => "Kohteen %s siirto ei onnistunut",
+"Unable to rename file" => "Tiedoston nimeäminen uudelleen ei onnistunut",
 "No file was uploaded. Unknown error" => "Tiedostoa ei lähetetty. Tuntematon virhe",
 "There is no error, the file uploaded with success" => "Ei virheitä, tiedosto lähetettiin onnistuneesti",
 "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Lähetetty tiedosto ylittää HTML-lomakkeessa määritetyn MAX_FILE_SIZE-arvon ylärajan",
@@ -6,11 +9,13 @@
 "No file was uploaded" => "Yhtäkään tiedostoa ei lähetetty",
 "Missing a temporary folder" => "Väliaikaiskansiota ei ole olemassa",
 "Failed to write to disk" => "Levylle kirjoitus epäonnistui",
+"Not enough storage available" => "Tallennustilaa ei ole riittävästi käytettävissä",
 "Invalid directory." => "Virheellinen kansio.",
 "Files" => "Tiedostot",
-"Unshare" => "Peru jakaminen",
+"Delete permanently" => "Poista pysyvästi",
 "Delete" => "Poista",
 "Rename" => "Nimeä uudelleen",
+"Pending" => "Odottaa",
 "{new_name} already exists" => "{new_name} on jo olemassa",
 "replace" => "korvaa",
 "suggest name" => "ehdota nimeä",
@@ -26,7 +31,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä on kansio",
 "Upload Error" => "Lähetysvirhe.",
 "Close" => "Sulje",
-"Pending" => "Odottaa",
 "Upload cancelled." => "Lähetys peruttu.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen.",
 "URL cannot be empty." => "Verkko-osoite ei voi olla tyhjä",
@@ -50,10 +54,11 @@
 "Text file" => "Tekstitiedosto",
 "Folder" => "Kansio",
 "From link" => "Linkistä",
-"Trash" => "Roskakori",
+"Trash bin" => "Roskakori",
 "Cancel upload" => "Peru lähetys",
 "Nothing in here. Upload something!" => "Täällä ei ole mitään. Lähetä tänne jotakin!",
 "Download" => "Lataa",
+"Unshare" => "Peru jakaminen",
 "Upload too large" => "Lähetettävä tiedosto on liian suuri",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Lähetettäväksi valitsemasi tiedostot ylittävät palvelimen salliman tiedostokoon rajan.",
 "Files are being scanned, please wait." => "Tiedostoja tarkistetaan, odota hetki.",
diff --git a/apps/files/l10n/fr.php b/apps/files/l10n/fr.php
index 45281d277ffc67e64d56eb55b1671a8ac1f409e5..3e8945f34546cb1317adff2f22ac98ab1830e5b7 100644
--- a/apps/files/l10n/fr.php
+++ b/apps/files/l10n/fr.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Impossible de déplacer %s - Un fichier possédant ce nom existe déjà",
+"Could not move %s" => "Impossible de déplacer %s",
+"Unable to rename file" => "Impossible de renommer le fichier",
 "No file was uploaded. Unknown error" => "Aucun fichier n'a été chargé. Erreur inconnue",
 "There is no error, the file uploaded with success" => "Aucune erreur, le fichier a été téléversé avec succès",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Le fichier envoyé dépasse la valeur upload_max_filesize située dans le fichier php.ini:",
@@ -7,12 +10,13 @@
 "No file was uploaded" => "Aucun fichier n'a été téléversé",
 "Missing a temporary folder" => "Il manque un répertoire temporaire",
 "Failed to write to disk" => "Erreur d'écriture sur le disque",
+"Not enough storage available" => "Plus assez d'espace de stockage disponible",
 "Invalid directory." => "Dossier invalide.",
 "Files" => "Fichiers",
-"Unshare" => "Ne plus partager",
 "Delete permanently" => "Supprimer de façon définitive",
 "Delete" => "Supprimer",
 "Rename" => "Renommer",
+"Pending" => "En cours",
 "{new_name} already exists" => "{new_name} existe déjà",
 "replace" => "remplacer",
 "suggest name" => "Suggérer un nom",
@@ -30,7 +34,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Impossible de charger vos fichiers car il s'agit d'un dossier ou le fichier fait 0 octet.",
 "Upload Error" => "Erreur de chargement",
 "Close" => "Fermer",
-"Pending" => "En cours",
 "1 file uploading" => "1 fichier en cours de téléchargement",
 "{count} files uploading" => "{count} fichiers téléversés",
 "Upload cancelled." => "Chargement annulé.",
@@ -57,10 +60,11 @@
 "Text file" => "Fichier texte",
 "Folder" => "Dossier",
 "From link" => "Depuis le lien",
-"Trash" => "Corbeille",
+"Trash bin" => "Corbeille",
 "Cancel upload" => "Annuler l'envoi",
 "Nothing in here. Upload something!" => "Il n'y a rien ici ! Envoyez donc quelque chose :)",
 "Download" => "Télécharger",
+"Unshare" => "Ne plus partager",
 "Upload too large" => "Fichier trop volumineux",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Les fichiers que vous essayez d'envoyer dépassent la taille maximale permise par ce serveur.",
 "Files are being scanned, please wait." => "Les fichiers sont en cours d'analyse, veuillez patienter.",
diff --git a/apps/files/l10n/gl.php b/apps/files/l10n/gl.php
index 362e92daceae512ad297f86cf93f6902b6de938d..4713da934a4884e970f65005ebc9607b6641b610 100644
--- a/apps/files/l10n/gl.php
+++ b/apps/files/l10n/gl.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Non se moveu %s - Xa existe un ficheiro con ese nome.",
+"Could not move %s" => "Non se puido mover %s",
+"Unable to rename file" => "Non se pode renomear o ficheiro",
 "No file was uploaded. Unknown error" => "Non se subiu ningún ficheiro. Erro descoñecido.",
 "There is no error, the file uploaded with success" => "Non hai erros. O ficheiro enviouse correctamente",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro subido excede a directiva indicada polo tamaño_máximo_de_subida de php.ini",
@@ -9,9 +12,9 @@
 "Failed to write to disk" => "Erro ao escribir no disco",
 "Invalid directory." => "O directorio é incorrecto.",
 "Files" => "Ficheiros",
-"Unshare" => "Deixar de compartir",
 "Delete" => "Eliminar",
 "Rename" => "Mudar o nome",
+"Pending" => "Pendentes",
 "{new_name} already exists" => "xa existe un {new_name}",
 "replace" => "substituír",
 "suggest name" => "suxerir nome",
@@ -25,7 +28,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Non se puido subir o ficheiro pois ou é un directorio ou ten 0 bytes",
 "Upload Error" => "Erro na subida",
 "Close" => "Pechar",
-"Pending" => "Pendentes",
 "1 file uploading" => "1 ficheiro subíndose",
 "{count} files uploading" => "{count} ficheiros subíndose",
 "Upload cancelled." => "Subida cancelada.",
@@ -55,6 +57,7 @@
 "Cancel upload" => "Cancelar a subida",
 "Nothing in here. Upload something!" => "Nada por aquí. Envía algo.",
 "Download" => "Descargar",
+"Unshare" => "Deixar de compartir",
 "Upload too large" => "Envío demasiado grande",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que trata de subir superan o tamaño máximo permitido neste servidor",
 "Files are being scanned, please wait." => "Estanse analizando os ficheiros. Agarda.",
diff --git a/apps/files/l10n/he.php b/apps/files/l10n/he.php
index 94cddca000080bc4a05263b85c594e219108874c..442eafe1c04362590237f3a6ea121cdfe240b57b 100644
--- a/apps/files/l10n/he.php
+++ b/apps/files/l10n/he.php
@@ -8,9 +8,9 @@
 "Missing a temporary folder" => "תיקייה זמנית חסרה",
 "Failed to write to disk" => "הכתיבה לכונן נכשלה",
 "Files" => "קבצים",
-"Unshare" => "הסר שיתוף",
 "Delete" => "מחיקה",
 "Rename" => "שינוי שם",
+"Pending" => "ממתין",
 "{new_name} already exists" => "{new_name} כבר קיים",
 "replace" => "החלפה",
 "suggest name" => "הצעת שם",
@@ -22,7 +22,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "לא יכול להעלות את הקובץ מכיוון שזו תקיה או שמשקל הקובץ 0 בתים",
 "Upload Error" => "שגיאת העלאה",
 "Close" => "סגירה",
-"Pending" => "ממתין",
 "1 file uploading" => "קובץ אחד נשלח",
 "{count} files uploading" => "{count} קבצים נשלחים",
 "Upload cancelled." => "ההעלאה בוטלה.",
@@ -51,6 +50,7 @@
 "Cancel upload" => "ביטול ההעלאה",
 "Nothing in here. Upload something!" => "אין כאן שום דבר. אולי ברצונך להעלות משהו?",
 "Download" => "הורדה",
+"Unshare" => "הסר שיתוף",
 "Upload too large" => "העלאה גדולה מידי",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "הקבצים שניסית להעלות חרגו מהגודל המקסימלי להעלאת קבצים על שרת זה.",
 "Files are being scanned, please wait." => "הקבצים נסרקים, נא להמתין.",
diff --git a/apps/files/l10n/hr.php b/apps/files/l10n/hr.php
index 4f4546aaf07b4e3dae11d26eb3d8371bc34dd247..3516ab8c1e6a76377ca949e19c217fe8013a5ef4 100644
--- a/apps/files/l10n/hr.php
+++ b/apps/files/l10n/hr.php
@@ -6,9 +6,9 @@
 "Missing a temporary folder" => "Nedostaje privremena mapa",
 "Failed to write to disk" => "Neuspjelo pisanje na disk",
 "Files" => "Datoteke",
-"Unshare" => "Prekini djeljenje",
 "Delete" => "Briši",
 "Rename" => "Promjeni ime",
+"Pending" => "U tijeku",
 "replace" => "zamjeni",
 "suggest name" => "predloži ime",
 "cancel" => "odustani",
@@ -16,7 +16,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Nemoguće poslati datoteku jer je prazna ili je direktorij",
 "Upload Error" => "Pogreška pri slanju",
 "Close" => "Zatvori",
-"Pending" => "U tijeku",
 "1 file uploading" => "1 datoteka se učitava",
 "Upload cancelled." => "Slanje poništeno.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Učitavanje datoteke. Napuštanjem stranice će prekinuti učitavanje.",
@@ -38,6 +37,7 @@
 "Cancel upload" => "Prekini upload",
 "Nothing in here. Upload something!" => "Nema ničega u ovoj mapi. Pošalji nešto!",
 "Download" => "Preuzmi",
+"Unshare" => "Prekini djeljenje",
 "Upload too large" => "Prijenos je preobiman",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke koje pokušavate prenijeti prelaze maksimalnu veličinu za prijenos datoteka na ovom poslužitelju.",
 "Files are being scanned, please wait." => "Datoteke se skeniraju, molimo pričekajte.",
diff --git a/apps/files/l10n/hu_HU.php b/apps/files/l10n/hu_HU.php
index 26d564807903ef23614f44b9f116ebaac1606d59..eaec8d24b7af8739287a9ccea26dc971a9050bfe 100644
--- a/apps/files/l10n/hu_HU.php
+++ b/apps/files/l10n/hu_HU.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "%s áthelyezése nem sikerült - már létezik másik fájl ezzel a névvel",
+"Could not move %s" => "Nem sikerült %s áthelyezése",
+"Unable to rename file" => "Nem lehet átnevezni a fájlt",
 "No file was uploaded. Unknown error" => "Nem történt feltöltés. Ismeretlen hiba",
 "There is no error, the file uploaded with success" => "A fájlt sikerült feltölteni",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "A feltöltött fájl mérete meghaladja a php.ini állományban megadott upload_max_filesize paraméter értékét.",
@@ -7,11 +10,12 @@
 "No file was uploaded" => "Nem töltődött fel semmi",
 "Missing a temporary folder" => "Hiányzik egy ideiglenes mappa",
 "Failed to write to disk" => "Nem sikerült a lemezre történő írás",
+"Not enough storage available" => "Nincs elég szabad hely.",
 "Invalid directory." => "Érvénytelen mappa.",
 "Files" => "Fájlok",
-"Unshare" => "Megosztás visszavonása",
 "Delete" => "Törlés",
 "Rename" => "Átnevezés",
+"Pending" => "Folyamatban",
 "{new_name} already exists" => "{new_name} már létezik",
 "replace" => "írjuk fölül",
 "suggest name" => "legyen más neve",
@@ -28,7 +32,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Nem tölthető fel, mert mappa volt, vagy 0 byte méretű",
 "Upload Error" => "Feltöltési hiba",
 "Close" => "Bezárás",
-"Pending" => "Folyamatban",
 "1 file uploading" => "1 fájl töltődik föl",
 "{count} files uploading" => "{count} fájl töltődik föl",
 "Upload cancelled." => "A feltöltést megszakítottuk.",
@@ -58,6 +61,7 @@
 "Cancel upload" => "A feltöltés megszakítása",
 "Nothing in here. Upload something!" => "Itt nincs semmi. Töltsön fel valamit!",
 "Download" => "Letöltés",
+"Unshare" => "Megosztás visszavonása",
 "Upload too large" => "A feltöltés túl nagy",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "A feltöltendő állományok mérete meghaladja a kiszolgálón megengedett maximális méretet.",
 "Files are being scanned, please wait." => "A fájllista ellenőrzése zajlik, kis türelmet!",
diff --git a/apps/files/l10n/id.php b/apps/files/l10n/id.php
index 3ebb9983291dd1dd51920f59a3f851324421a0b9..4c4e2e0f7144b1a40cfa34e3cb013b240a1e18e3 100644
--- a/apps/files/l10n/id.php
+++ b/apps/files/l10n/id.php
@@ -6,15 +6,14 @@
 "Missing a temporary folder" => "Kehilangan folder temporer",
 "Failed to write to disk" => "Gagal menulis ke disk",
 "Files" => "Berkas",
-"Unshare" => "batalkan berbagi",
 "Delete" => "Hapus",
+"Pending" => "Menunggu",
 "replace" => "mengganti",
 "cancel" => "batalkan",
 "undo" => "batal dikerjakan",
 "Unable to upload your file as it is a directory or has 0 bytes" => "Gagal mengunggah berkas anda karena berupa direktori atau mempunyai ukuran 0 byte",
 "Upload Error" => "Terjadi Galat Pengunggahan",
 "Close" => "tutup",
-"Pending" => "Menunggu",
 "Upload cancelled." => "Pengunggahan dibatalkan.",
 "URL cannot be empty." => "tautan tidak boleh kosong",
 "Name" => "Nama",
@@ -35,6 +34,7 @@
 "Cancel upload" => "Batal mengunggah",
 "Nothing in here. Upload something!" => "Tidak ada apa-apa di sini. Unggah sesuatu!",
 "Download" => "Unduh",
+"Unshare" => "batalkan berbagi",
 "Upload too large" => "Unggahan terlalu besar",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Berkas yang anda coba unggah melebihi ukuran maksimum untuk pengunggahan berkas di server ini.",
 "Files are being scanned, please wait." => "Berkas sedang dipindai, silahkan tunggu.",
diff --git a/apps/files/l10n/is.php b/apps/files/l10n/is.php
index f8d9789cf0fa1c392058b85aa5c5907a19c3236b..c0898c555b9f63b158dc087471063d85e292960c 100644
--- a/apps/files/l10n/is.php
+++ b/apps/files/l10n/is.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Gat ekki fært %s - Skrá með þessu nafni er þegar til",
+"Could not move %s" => "Gat ekki fært %s",
+"Unable to rename file" => "Gat ekki endurskýrt skrá",
 "No file was uploaded. Unknown error" => "Engin skrá var send inn. Óþekkt villa.",
 "There is no error, the file uploaded with success" => "Engin villa, innsending heppnaðist",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Innsend skrá er stærri en upload_max stillingin í php.ini:",
@@ -9,9 +12,9 @@
 "Failed to write to disk" => "Tókst ekki að skrifa á disk",
 "Invalid directory." => "Ógild mappa.",
 "Files" => "Skrár",
-"Unshare" => "Hætta deilingu",
 "Delete" => "Eyða",
 "Rename" => "Endurskýra",
+"Pending" => "Bíður",
 "{new_name} already exists" => "{new_name} er þegar til",
 "replace" => "yfirskrifa",
 "suggest name" => "stinga upp á nafni",
@@ -25,7 +28,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Innsending á skrá mistókst, hugsanlega sendir þú möppu eða skráin er 0 bæti.",
 "Upload Error" => "Villa við innsendingu",
 "Close" => "Loka",
-"Pending" => "Bíður",
 "1 file uploading" => "1 skrá innsend",
 "{count} files uploading" => "{count} skrár innsendar",
 "Upload cancelled." => "Hætt við innsendingu.",
@@ -55,6 +57,7 @@
 "Cancel upload" => "Hætta við innsendingu",
 "Nothing in here. Upload something!" => "Ekkert hér. Settu eitthvað inn!",
 "Download" => "Niðurhal",
+"Unshare" => "Hætta deilingu",
 "Upload too large" => "Innsend skrá er of stór",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Skrárnar sem þú ert að senda inn eru stærri en hámarks innsendingarstærð á þessum netþjóni.",
 "Files are being scanned, please wait." => "Verið er að skima skrár, vinsamlegast hinkraðu.",
diff --git a/apps/files/l10n/it.php b/apps/files/l10n/it.php
index 3d6eb254e59daee92a25dbc8cc803ab060f3be31..23372439a2d3759bedf9b85a993352d9facd0a76 100644
--- a/apps/files/l10n/it.php
+++ b/apps/files/l10n/it.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Impossibile spostare %s - un file con questo nome esiste già",
+"Could not move %s" => "Impossibile spostare %s",
+"Unable to rename file" => "Impossibile rinominare il file",
 "No file was uploaded. Unknown error" => "Nessun file è stato inviato. Errore sconosciuto",
 "There is no error, the file uploaded with success" => "Non ci sono errori, file caricato con successo",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Il file caricato supera la direttiva upload_max_filesize in php.ini:",
@@ -7,12 +10,13 @@
 "No file was uploaded" => "Nessun file è stato caricato",
 "Missing a temporary folder" => "Cartella temporanea mancante",
 "Failed to write to disk" => "Scrittura su disco non riuscita",
+"Not enough storage available" => "Spazio di archiviazione insufficiente",
 "Invalid directory." => "Cartella non valida.",
 "Files" => "File",
-"Unshare" => "Rimuovi condivisione",
 "Delete permanently" => "Elimina definitivamente",
 "Delete" => "Elimina",
 "Rename" => "Rinomina",
+"Pending" => "In corso",
 "{new_name} already exists" => "{new_name} esiste già",
 "replace" => "sostituisci",
 "suggest name" => "suggerisci nome",
@@ -30,7 +34,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Impossibile inviare il file poiché è una cartella o ha dimensione 0 byte",
 "Upload Error" => "Errore di invio",
 "Close" => "Chiudi",
-"Pending" => "In corso",
 "1 file uploading" => "1 file in fase di caricamento",
 "{count} files uploading" => "{count} file in fase di caricamentoe",
 "Upload cancelled." => "Invio annullato",
@@ -57,10 +60,11 @@
 "Text file" => "File di testo",
 "Folder" => "Cartella",
 "From link" => "Da collegamento",
-"Trash" => "Cestino",
+"Trash bin" => "Cestino",
 "Cancel upload" => "Annulla invio",
 "Nothing in here. Upload something!" => "Non c'è niente qui. Carica qualcosa!",
 "Download" => "Scarica",
+"Unshare" => "Rimuovi condivisione",
 "Upload too large" => "Il file caricato è troppo grande",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "I file che stai provando a caricare superano la dimensione massima consentita su questo server.",
 "Files are being scanned, please wait." => "Scansione dei file in corso, attendi",
diff --git a/apps/files/l10n/ja_JP.php b/apps/files/l10n/ja_JP.php
index 1caa308c1b89b191f1f79eea352548e0f2b1666e..85ec6b6e953fd979e8fe737ebc9780aa548eabb1 100644
--- a/apps/files/l10n/ja_JP.php
+++ b/apps/files/l10n/ja_JP.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "%s を移動できませんでした ― この名前のファイルはすでに存在します",
+"Could not move %s" => "%s を移動できませんでした",
+"Unable to rename file" => "ファイル名の変更ができません",
 "No file was uploaded. Unknown error" => "ファイルは何もアップロードされていません。不明なエラー",
 "There is no error, the file uploaded with success" => "エラーはありません。ファイルのアップロードは成功しました",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "アップロードされたファイルはphp.ini の upload_max_filesize に設定されたサイズを超えています:",
@@ -7,12 +10,13 @@
 "No file was uploaded" => "ファイルはアップロードされませんでした",
 "Missing a temporary folder" => "テンポラリフォルダが見つかりません",
 "Failed to write to disk" => "ディスクへの書き込みに失敗しました",
+"Not enough storage available" => "ストレージに十分な空き容量がありません",
 "Invalid directory." => "無効なディレクトリです。",
 "Files" => "ファイル",
-"Unshare" => "共有しない",
 "Delete permanently" => "完全に削除する",
 "Delete" => "削除",
 "Rename" => "名前の変更",
+"Pending" => "保留",
 "{new_name} already exists" => "{new_name} はすでに存在しています",
 "replace" => "置き換え",
 "suggest name" => "推奨名称",
@@ -30,7 +34,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "ディレクトリもしくは0バイトのファイルはアップロードできません",
 "Upload Error" => "アップロードエラー",
 "Close" => "閉じる",
-"Pending" => "保留",
 "1 file uploading" => "ファイルを1つアップロード中",
 "{count} files uploading" => "{count} ファイルをアップロード中",
 "Upload cancelled." => "アップロードはキャンセルされました。",
@@ -57,10 +60,10 @@
 "Text file" => "テキストファイル",
 "Folder" => "フォルダ",
 "From link" => "リンク",
-"Trash" => "ゴミ箱",
 "Cancel upload" => "アップロードをキャンセル",
 "Nothing in here. Upload something!" => "ここには何もありません。何かアップロードしてください。",
 "Download" => "ダウンロード",
+"Unshare" => "共有しない",
 "Upload too large" => "ファイルサイズが大きすぎます",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "アップロードしようとしているファイルは、サーバで規定された最大サイズを超えています。",
 "Files are being scanned, please wait." => "ファイルをスキャンしています、しばらくお待ちください。",
diff --git a/apps/files/l10n/ka_GE.php b/apps/files/l10n/ka_GE.php
index 7ab6122c659a82d0c4cd7c0e11ae6415146f0932..a7b58f02d21e37d51ddda793f3cc3e6038dbc7ed 100644
--- a/apps/files/l10n/ka_GE.php
+++ b/apps/files/l10n/ka_GE.php
@@ -6,9 +6,9 @@
 "Missing a temporary folder" => "დროებითი საქაღალდე არ არსებობს",
 "Failed to write to disk" => "შეცდომა დისკზე ჩაწერისას",
 "Files" => "ფაილები",
-"Unshare" => "გაზიარების მოხსნა",
 "Delete" => "წაშლა",
 "Rename" => "გადარქმევა",
+"Pending" => "მოცდის რეჟიმში",
 "{new_name} already exists" => "{new_name} უკვე არსებობს",
 "replace" => "შეცვლა",
 "suggest name" => "სახელის შემოთავაზება",
@@ -19,7 +19,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "თქვენი ფაილის ატვირთვა ვერ მოხერხდა. ის არის საქაღალდე და შეიცავს 0 ბაიტს",
 "Upload Error" => "შეცდომა ატვირთვისას",
 "Close" => "დახურვა",
-"Pending" => "მოცდის რეჟიმში",
 "1 file uploading" => "1 ფაილის ატვირთვა",
 "{count} files uploading" => "{count} ფაილი იტვირთება",
 "Upload cancelled." => "ატვირთვა შეჩერებულ იქნა.",
@@ -46,6 +45,7 @@
 "Cancel upload" => "ატვირთვის გაუქმება",
 "Nothing in here. Upload something!" => "აქ არაფერი არ არის. ატვირთე რამე!",
 "Download" => "ჩამოტვირთვა",
+"Unshare" => "გაზიარების მოხსნა",
 "Upload too large" => "ასატვირთი ფაილი ძალიან დიდია",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "ფაილის ზომა რომლის ატვირთვასაც თქვენ აპირებთ, აჭარბებს სერვერზე დაშვებულ მაქსიმუმს.",
 "Files are being scanned, please wait." => "მიმდინარეობს ფაილების სკანირება, გთხოვთ დაელოდოთ.",
diff --git a/apps/files/l10n/ko.php b/apps/files/l10n/ko.php
index 98d0d60280127fd0cbb6c0111bfbbf36a1c6fecf..d483f8061a1995810bd8b584b595c8524d80c6fb 100644
--- a/apps/files/l10n/ko.php
+++ b/apps/files/l10n/ko.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "%s 항목을 이동시키지 못하였음 - 파일 이름이 이미 존재함",
+"Could not move %s" => "%s 항목을 이딩시키지 못하였음",
+"Unable to rename file" => "파일 이름바꾸기 할 수 없음",
 "No file was uploaded. Unknown error" => "파일이 업로드되지 않았습니다. 알 수 없는 오류입니다",
 "There is no error, the file uploaded with success" => "업로드에 성공하였습니다.",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "업로드한 파일이 php.ini의 upload_max_filesize보다 큽니다:",
@@ -9,9 +12,9 @@
 "Failed to write to disk" => "디스크에 쓰지 못했습니다",
 "Invalid directory." => "올바르지 않은 디렉터리입니다.",
 "Files" => "파일",
-"Unshare" => "공유 해제",
 "Delete" => "삭제",
 "Rename" => "이름 바꾸기",
+"Pending" => "보류 중",
 "{new_name} already exists" => "{new_name}이(가) 이미 존재함",
 "replace" => "바꾸기",
 "suggest name" => "이름 제안",
@@ -28,7 +31,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "이 파일은 디렉터리이거나 비어 있기 때문에 업로드할 수 없습니다",
 "Upload Error" => "업로드 오류",
 "Close" => "닫기",
-"Pending" => "보류 중",
 "1 file uploading" => "파일 1개 업로드 중",
 "{count} files uploading" => "파일 {count}개 업로드 중",
 "Upload cancelled." => "업로드가 취소되었습니다.",
@@ -58,6 +60,7 @@
 "Cancel upload" => "업로드 취소",
 "Nothing in here. Upload something!" => "내용이 없습니다. 업로드할 수 있습니다!",
 "Download" => "다운로드",
+"Unshare" => "공유 해제",
 "Upload too large" => "업로드 용량 초과",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "이 파일이 서버에서 허용하는 최대 업로드 가능 용량보다 큽니다.",
 "Files are being scanned, please wait." => "파일을 검색하고 있습니다. 기다려 주십시오.",
diff --git a/apps/files/l10n/lb.php b/apps/files/l10n/lb.php
index 79ef4bc9417fd0729a574c476f6fd85c9be6b924..b052da3a027c540e4535f6ba41352bfcccaae3f5 100644
--- a/apps/files/l10n/lb.php
+++ b/apps/files/l10n/lb.php
@@ -6,7 +6,6 @@
 "Missing a temporary folder" => "Et feelt en temporären Dossier",
 "Failed to write to disk" => "Konnt net op den Disk schreiwen",
 "Files" => "Dateien",
-"Unshare" => "Net méi deelen",
 "Delete" => "Läschen",
 "replace" => "ersetzen",
 "cancel" => "ofbriechen",
@@ -34,6 +33,7 @@
 "Cancel upload" => "Upload ofbriechen",
 "Nothing in here. Upload something!" => "Hei ass näischt. Lued eppes rop!",
 "Download" => "Eroflueden",
+"Unshare" => "Net méi deelen",
 "Upload too large" => "Upload ze grouss",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Déi Dateien déi Dir probéiert erop ze lueden sinn méi grouss wei déi Maximal Gréisst déi op dësem Server erlaabt ass.",
 "Files are being scanned, please wait." => "Fichieren gi gescannt, war weg.",
diff --git a/apps/files/l10n/lt_LT.php b/apps/files/l10n/lt_LT.php
index f4ad655f421f0baae6b136d176fa111bc108e00d..70296b5db9f99c9f9d19f5d75d25cf145743af7a 100644
--- a/apps/files/l10n/lt_LT.php
+++ b/apps/files/l10n/lt_LT.php
@@ -6,9 +6,9 @@
 "Missing a temporary folder" => "Nėra laikinojo katalogo",
 "Failed to write to disk" => "Nepavyko įrašyti į diską",
 "Files" => "Failai",
-"Unshare" => "Nebesidalinti",
 "Delete" => "Ištrinti",
 "Rename" => "Pervadinti",
+"Pending" => "Laukiantis",
 "{new_name} already exists" => "{new_name} jau egzistuoja",
 "replace" => "pakeisti",
 "suggest name" => "pasiūlyti pavadinimą",
@@ -19,7 +19,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Neįmanoma įkelti failo - jo dydis gali būti 0 bitų arba tai katalogas",
 "Upload Error" => "Įkėlimo klaida",
 "Close" => "Užverti",
-"Pending" => "Laukiantis",
 "1 file uploading" => "įkeliamas 1 failas",
 "{count} files uploading" => "{count}  įkeliami failai",
 "Upload cancelled." => "Įkėlimas atšauktas.",
@@ -46,6 +45,7 @@
 "Cancel upload" => "Atšaukti siuntimą",
 "Nothing in here. Upload something!" => "Čia tuščia. Įkelkite ką nors!",
 "Download" => "Atsisiųsti",
+"Unshare" => "Nebesidalinti",
 "Upload too large" => "Įkėlimui failas per didelis",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Bandomų įkelti failų dydis viršija maksimalų leidžiamą šiame serveryje",
 "Files are being scanned, please wait." => "Skenuojami failai, prašome palaukti.",
diff --git a/apps/files/l10n/lv.php b/apps/files/l10n/lv.php
index 57b391e444c451e96e6d4aa1ebea4618baa4b3ac..b7d007356285c414abb84f3ae4a29856d9b729d8 100644
--- a/apps/files/l10n/lv.php
+++ b/apps/files/l10n/lv.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Nevarēja pārvietot %s — jau eksistē datne ar tādu nosaukumu",
+"Could not move %s" => "Nevarēja pārvietot %s",
+"Unable to rename file" => "Nevarēja pārsaukt datni",
 "No file was uploaded. Unknown error" => "Netika augšupielādēta neviena datne. Nezināma kļūda",
 "There is no error, the file uploaded with success" => "Augšupielāde pabeigta bez kļūdām",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Augšupielādētā datne pārsniedz upload_max_filesize norādījumu php.ini datnē:",
@@ -7,12 +10,13 @@
 "No file was uploaded" => "Neviena datne netika augšupielādēta",
 "Missing a temporary folder" => "Trūkst pagaidu mapes",
 "Failed to write to disk" => "Neizdevās saglabāt diskā",
+"Not enough storage available" => "Nav pietiekami daudz vietas",
 "Invalid directory." => "Nederīga direktorija.",
 "Files" => "Datnes",
-"Unshare" => "Pārtraukt dalīšanos",
 "Delete permanently" => "Dzēst pavisam",
 "Delete" => "Dzēst",
 "Rename" => "Pārsaukt",
+"Pending" => "Gaida savu kārtu",
 "{new_name} already exists" => "{new_name} jau eksistē",
 "replace" => "aizvietot",
 "suggest name" => "ieteiktais nosaukums",
@@ -30,7 +34,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Nevar augšupielādēt jūsu datni, jo tā ir direktorija vai arī tās izmērs ir 0 baiti",
 "Upload Error" => "Kļūda augšupielādējot",
 "Close" => "Aizvērt",
-"Pending" => "Gaida savu kārtu",
 "1 file uploading" => "Augšupielādē 1 datni",
 "{count} files uploading" => "augšupielādē {count} datnes",
 "Upload cancelled." => "Augšupielāde ir atcelta.",
@@ -57,10 +60,11 @@
 "Text file" => "Teksta datne",
 "Folder" => "Mape",
 "From link" => "No saites",
-"Trash" => "Miskaste",
+"Trash bin" => "Miskaste",
 "Cancel upload" => "Atcelt augšupielādi",
 "Nothing in here. Upload something!" => "Te vēl nekas nav. Rīkojies, sāc augšupielādēt!",
 "Download" => "Lejupielādēt",
+"Unshare" => "Pārtraukt dalīšanos",
 "Upload too large" => "Datne ir par lielu, lai to augšupielādētu",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Augšupielādējamās datnes pārsniedz servera pieļaujamo datņu augšupielādes apjomu",
 "Files are being scanned, please wait." => "Datnes šobrīd tiek caurskatītas, lūdzu, uzgaidiet.",
diff --git a/apps/files/l10n/mk.php b/apps/files/l10n/mk.php
index 2580d1e6a97bc4440f4aaf61b5ce5af71ae817c2..5cb7e7205845fe65188807dbdaf8b0a16e9a8b31 100644
--- a/apps/files/l10n/mk.php
+++ b/apps/files/l10n/mk.php
@@ -8,9 +8,9 @@
 "Missing a temporary folder" => "Не постои привремена папка",
 "Failed to write to disk" => "Неуспеав да запишам на диск",
 "Files" => "Датотеки",
-"Unshare" => "Не споделувај",
 "Delete" => "Избриши",
 "Rename" => "Преименувај",
+"Pending" => "Чека",
 "{new_name} already exists" => "{new_name} веќе постои",
 "replace" => "замени",
 "suggest name" => "предложи име",
@@ -22,7 +22,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Не може да се преземе вашата датотека бидејќи фолдерот во кој се наоѓа фајлот има големина од 0 бајти",
 "Upload Error" => "Грешка при преземање",
 "Close" => "Затвои",
-"Pending" => "Чека",
 "1 file uploading" => "1 датотека се подига",
 "{count} files uploading" => "{count} датотеки се подигаат",
 "Upload cancelled." => "Преземањето е прекинато.",
@@ -51,6 +50,7 @@
 "Cancel upload" => "Откажи прикачување",
 "Nothing in here. Upload something!" => "Тука нема ништо. Снимете нешто!",
 "Download" => "Преземи",
+"Unshare" => "Не споделувај",
 "Upload too large" => "Датотеката е премногу голема",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Датотеките кои се обидувате да ги подигнете ја надминуваат максималната големина за подигнување датотеки на овој сервер.",
 "Files are being scanned, please wait." => "Се скенираат датотеки, ве молам почекајте.",
diff --git a/apps/files/l10n/ms_MY.php b/apps/files/l10n/ms_MY.php
index 4ac26d80918281f242aafe25f097d28ea350215d..b15a9111e70475f697e409c700c650d4e55f456a 100644
--- a/apps/files/l10n/ms_MY.php
+++ b/apps/files/l10n/ms_MY.php
@@ -8,12 +8,12 @@
 "Failed to write to disk" => "Gagal untuk disimpan",
 "Files" => "fail",
 "Delete" => "Padam",
+"Pending" => "Dalam proses",
 "replace" => "ganti",
 "cancel" => "Batal",
 "Unable to upload your file as it is a directory or has 0 bytes" => "Tidak boleh memuatnaik fail anda kerana mungkin ianya direktori atau saiz fail 0 bytes",
 "Upload Error" => "Muat naik ralat",
 "Close" => "Tutup",
-"Pending" => "Dalam proses",
 "Upload cancelled." => "Muatnaik dibatalkan.",
 "Name" => "Nama ",
 "Size" => "Saiz",
diff --git a/apps/files/l10n/nb_NO.php b/apps/files/l10n/nb_NO.php
index a6ba6e9c03ff60e219d6c45c5d5f55a87f196ba8..2609923cbf49a93250b51940b22bdba814e57cf3 100644
--- a/apps/files/l10n/nb_NO.php
+++ b/apps/files/l10n/nb_NO.php
@@ -7,9 +7,9 @@
 "Missing a temporary folder" => "Mangler en midlertidig mappe",
 "Failed to write to disk" => "Klarte ikke å skrive til disk",
 "Files" => "Filer",
-"Unshare" => "Avslutt deling",
 "Delete" => "Slett",
 "Rename" => "Omdøp",
+"Pending" => "Ventende",
 "{new_name} already exists" => "{new_name} finnes allerede",
 "replace" => "erstatt",
 "suggest name" => "foreslå navn",
@@ -21,7 +21,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Kan ikke laste opp filen din siden det er en mappe eller den har 0 bytes",
 "Upload Error" => "Opplasting feilet",
 "Close" => "Lukk",
-"Pending" => "Ventende",
 "1 file uploading" => "1 fil lastes opp",
 "{count} files uploading" => "{count} filer laster opp",
 "Upload cancelled." => "Opplasting avbrutt.",
@@ -50,6 +49,7 @@
 "Cancel upload" => "Avbryt opplasting",
 "Nothing in here. Upload something!" => "Ingenting her. Last opp noe!",
 "Download" => "Last ned",
+"Unshare" => "Avslutt deling",
 "Upload too large" => "Opplasting for stor",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filene du prøver å laste opp er for store for å laste opp til denne serveren.",
 "Files are being scanned, please wait." => "Skanner etter filer, vennligst vent.",
diff --git a/apps/files/l10n/nl.php b/apps/files/l10n/nl.php
index 9095149cd9db7ead23a84218eef5de2faf9b5662..6e886ad700b9cd7feaf096aca3c135fb7db6f53e 100644
--- a/apps/files/l10n/nl.php
+++ b/apps/files/l10n/nl.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Kon %s niet verplaatsen - Er bestaat al een bestand met deze naam",
+"Could not move %s" => "Kon %s niet verplaatsen",
+"Unable to rename file" => "Kan bestand niet hernoemen",
 "No file was uploaded. Unknown error" => "Er was geen bestand geladen.  Onbekende fout",
 "There is no error, the file uploaded with success" => "Geen fout opgetreden, bestand successvol geupload.",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Het geüploade bestand overscheidt de upload_max_filesize optie in php.ini:",
@@ -9,10 +12,10 @@
 "Failed to write to disk" => "Schrijven naar schijf mislukt",
 "Invalid directory." => "Ongeldige directory.",
 "Files" => "Bestanden",
-"Unshare" => "Stop delen",
 "Delete permanently" => "Verwijder definitief",
 "Delete" => "Verwijder",
 "Rename" => "Hernoem",
+"Pending" => "Wachten",
 "{new_name} already exists" => "{new_name} bestaat al",
 "replace" => "vervang",
 "suggest name" => "Stel een naam voor",
@@ -30,7 +33,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "uploaden van de file mislukt, het is of een directory of de bestandsgrootte is 0 bytes",
 "Upload Error" => "Upload Fout",
 "Close" => "Sluit",
-"Pending" => "Wachten",
 "1 file uploading" => "1 bestand wordt ge-upload",
 "{count} files uploading" => "{count} bestanden aan het uploaden",
 "Upload cancelled." => "Uploaden geannuleerd.",
@@ -57,10 +59,10 @@
 "Text file" => "Tekstbestand",
 "Folder" => "Map",
 "From link" => "Vanaf link",
-"Trash" => "Verwijderen",
 "Cancel upload" => "Upload afbreken",
 "Nothing in here. Upload something!" => "Er bevindt zich hier niets. Upload een bestand!",
 "Download" => "Download",
+"Unshare" => "Stop delen",
 "Upload too large" => "Bestanden te groot",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "De bestanden die u probeert te uploaden zijn groter dan de maximaal toegestane  bestandsgrootte voor deze server.",
 "Files are being scanned, please wait." => "Bestanden worden gescand, even wachten.",
diff --git a/apps/files/l10n/oc.php b/apps/files/l10n/oc.php
index 78045b299edd7ce5b727df71a15a4743240386e1..7a39e9399f5c3d7e49ff2af9d07c645996d74a7c 100644
--- a/apps/files/l10n/oc.php
+++ b/apps/files/l10n/oc.php
@@ -6,16 +6,15 @@
 "Missing a temporary folder" => "Un dorsièr temporari manca",
 "Failed to write to disk" => "L'escriptura sul disc a fracassat",
 "Files" => "Fichièrs",
-"Unshare" => "Non parteja",
 "Delete" => "Escafa",
 "Rename" => "Torna nomenar",
+"Pending" => "Al esperar",
 "replace" => "remplaça",
 "suggest name" => "nom prepausat",
 "cancel" => "anulla",
 "undo" => "defar",
 "Unable to upload your file as it is a directory or has 0 bytes" => "Impossible d'amontcargar lo teu fichièr qu'es un repertòri o que ten pas que 0 octet.",
 "Upload Error" => "Error d'amontcargar",
-"Pending" => "Al esperar",
 "1 file uploading" => "1 fichièr al amontcargar",
 "Upload cancelled." => "Amontcargar anullat.",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. ",
@@ -37,6 +36,7 @@
 "Cancel upload" => " Anulla l'amontcargar",
 "Nothing in here. Upload something!" => "Pas res dedins. Amontcarga qualquaren",
 "Download" => "Avalcarga",
+"Unshare" => "Non parteja",
 "Upload too large" => "Amontcargament tròp gròs",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Los fichièrs que sias a amontcargar son tròp pesucs per la talha maxi pel servidor.",
 "Files are being scanned, please wait." => "Los fiichièrs son a èsser explorats, ",
diff --git a/apps/files/l10n/pl.php b/apps/files/l10n/pl.php
index 45d0f4366144fb0a73e8e32cca1750c9f862379d..83091bad18cf94b9e3e07617d2d6d6f28cd59250 100644
--- a/apps/files/l10n/pl.php
+++ b/apps/files/l10n/pl.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Nie można było przenieść %s - Plik o takiej nazwie już istnieje",
+"Could not move %s" => "Nie można było przenieść %s",
+"Unable to rename file" => "Nie można zmienić nazwy pliku",
 "No file was uploaded. Unknown error" => "Plik nie został załadowany. Nieznany błąd",
 "There is no error, the file uploaded with success" => "Przesłano plik",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Wgrany plik przekracza wartość upload_max_filesize zdefiniowaną w php.ini: ",
@@ -9,9 +12,9 @@
 "Failed to write to disk" => "Błąd zapisu na dysk",
 "Invalid directory." => "Zła ścieżka.",
 "Files" => "Pliki",
-"Unshare" => "Nie udostępniaj",
 "Delete" => "Usuwa element",
 "Rename" => "Zmień nazwę",
+"Pending" => "Oczekujące",
 "{new_name} already exists" => "{new_name} już istnieje",
 "replace" => "zastap",
 "suggest name" => "zasugeruj nazwę",
@@ -25,7 +28,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Nie można wczytać pliku jeśli jest katalogiem lub ma 0 bajtów",
 "Upload Error" => "Błąd wczytywania",
 "Close" => "Zamknij",
-"Pending" => "Oczekujące",
 "1 file uploading" => "1 plik wczytany",
 "{count} files uploading" => "{count} przesyłanie plików",
 "Upload cancelled." => "Wczytywanie anulowane.",
@@ -55,6 +57,7 @@
 "Cancel upload" => "Przestań wysyłać",
 "Nothing in here. Upload something!" => "Brak zawartości. Proszę wysłać pliki!",
 "Download" => "Pobiera element",
+"Unshare" => "Nie udostępniaj",
 "Upload too large" => "Wysyłany plik ma za duży rozmiar",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Pliki które próbujesz przesłać, przekraczają maksymalną, dopuszczalną wielkość.",
 "Files are being scanned, please wait." => "Skanowanie plików, proszę czekać.",
diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php
index 361e81052b94fa700c9a2d8a6e24341ee7025af4..7d834b8f30d5d54d297bdd3ac8e67c60da68e014 100644
--- a/apps/files/l10n/pt_BR.php
+++ b/apps/files/l10n/pt_BR.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Não possível mover %s - Um arquivo com este nome já existe",
+"Could not move %s" => "Não possível mover %s",
+"Unable to rename file" => "Impossível renomear arquivo",
 "No file was uploaded. Unknown error" => "Nenhum arquivo foi transferido. Erro desconhecido",
 "There is no error, the file uploaded with success" => "Não houve nenhum erro, o arquivo foi transferido com sucesso",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O arquivo enviado excede a diretiva upload_max_filesize no php.ini: ",
@@ -7,11 +10,12 @@
 "No file was uploaded" => "Nenhum arquivo foi transferido",
 "Missing a temporary folder" => "Pasta temporária não encontrada",
 "Failed to write to disk" => "Falha ao escrever no disco",
+"Not enough storage available" => "Espaço de armazenamento insuficiente",
 "Invalid directory." => "Diretório inválido.",
 "Files" => "Arquivos",
-"Unshare" => "Descompartilhar",
 "Delete" => "Excluir",
 "Rename" => "Renomear",
+"Pending" => "Pendente",
 "{new_name} already exists" => "{new_name} já existe",
 "replace" => "substituir",
 "suggest name" => "sugerir nome",
@@ -26,7 +30,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Impossível enviar seus arquivo como diretório ou ele tem 0 bytes.",
 "Upload Error" => "Erro de envio",
 "Close" => "Fechar",
-"Pending" => "Pendente",
 "1 file uploading" => "enviando 1 arquivo",
 "{count} files uploading" => "Enviando {count} arquivos",
 "Upload cancelled." => "Envio cancelado.",
@@ -56,6 +59,7 @@
 "Cancel upload" => "Cancelar upload",
 "Nothing in here. Upload something!" => "Nada aqui.Carrege alguma coisa!",
 "Download" => "Baixar",
+"Unshare" => "Descompartilhar",
 "Upload too large" => "Arquivo muito grande",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os arquivos que você está tentando carregar excedeu o tamanho máximo para arquivos no servidor.",
 "Files are being scanned, please wait." => "Arquivos sendo escaneados, por favor aguarde.",
diff --git a/apps/files/l10n/pt_PT.php b/apps/files/l10n/pt_PT.php
index 52c87ed728a918fb50db2f157f1b719e52705559..80dc774d65c0ab658971d36b6d3caf695353416d 100644
--- a/apps/files/l10n/pt_PT.php
+++ b/apps/files/l10n/pt_PT.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Não foi possível mover o ficheiro %s - Já existe um ficheiro com esse nome",
+"Could not move %s" => "Não foi possível move o ficheiro %s",
+"Unable to rename file" => "Não foi possível renomear o ficheiro",
 "No file was uploaded. Unknown error" => "Nenhum ficheiro foi carregado. Erro desconhecido",
 "There is no error, the file uploaded with success" => "Sem erro, ficheiro enviado com sucesso",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "O ficheiro enviado excede o limite permitido na directiva do php.ini upload_max_filesize",
@@ -7,12 +10,13 @@
 "No file was uploaded" => "Não foi enviado nenhum ficheiro",
 "Missing a temporary folder" => "Falta uma pasta temporária",
 "Failed to write to disk" => "Falhou a escrita no disco",
+"Not enough storage available" => "Não há espaço suficiente em disco",
 "Invalid directory." => "Directório Inválido",
 "Files" => "Ficheiros",
-"Unshare" => "Deixar de partilhar",
 "Delete permanently" => "Eliminar permanentemente",
 "Delete" => "Apagar",
 "Rename" => "Renomear",
+"Pending" => "Pendente",
 "{new_name} already exists" => "O nome {new_name} já existe",
 "replace" => "substituir",
 "suggest name" => "sugira um nome",
@@ -30,7 +34,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Não é possível fazer o envio do ficheiro devido a ser uma pasta ou ter 0 bytes",
 "Upload Error" => "Erro no envio",
 "Close" => "Fechar",
-"Pending" => "Pendente",
 "1 file uploading" => "A enviar 1 ficheiro",
 "{count} files uploading" => "A carregar {count} ficheiros",
 "Upload cancelled." => "Envio cancelado.",
@@ -57,10 +60,11 @@
 "Text file" => "Ficheiro de texto",
 "Folder" => "Pasta",
 "From link" => "Da ligação",
-"Trash" => "Lixo",
+"Trash bin" => "Reciclagem",
 "Cancel upload" => "Cancelar envio",
 "Nothing in here. Upload something!" => "Vazio. Envie alguma coisa!",
 "Download" => "Transferir",
+"Unshare" => "Deixar de partilhar",
 "Upload too large" => "Envio muito grande",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Os ficheiros que está a tentar enviar excedem o tamanho máximo de envio permitido neste servidor.",
 "Files are being scanned, please wait." => "Os ficheiros estão a ser analisados, por favor aguarde.",
diff --git a/apps/files/l10n/ro.php b/apps/files/l10n/ro.php
index 79ca1cf4f5121c99ae3e2c476589786de017cbd5..79604f56ad2fb95536022e1065eff76e6571ab00 100644
--- a/apps/files/l10n/ro.php
+++ b/apps/files/l10n/ro.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Nu se poate de mutat %s - Fișier cu acest nume deja există",
+"Could not move %s" => "Nu s-a putut muta %s",
+"Unable to rename file" => "Nu s-a putut redenumi fișierul",
 "No file was uploaded. Unknown error" => "Nici un fișier nu a fost încărcat. Eroare necunoscută",
 "There is no error, the file uploaded with success" => "Nicio eroare, fișierul a fost încărcat cu succes",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Fisierul incarcat depaseste upload_max_filesize permisi in php.ini: ",
@@ -9,9 +12,9 @@
 "Failed to write to disk" => "Eroare la scriere pe disc",
 "Invalid directory." => "Director invalid.",
 "Files" => "Fișiere",
-"Unshare" => "Anulează partajarea",
 "Delete" => "Șterge",
 "Rename" => "Redenumire",
+"Pending" => "În așteptare",
 "{new_name} already exists" => "{new_name} deja exista",
 "replace" => "înlocuire",
 "suggest name" => "sugerează nume",
@@ -26,7 +29,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Nu s-a putut încărca fișierul tău deoarece pare să fie un director sau are 0 bytes.",
 "Upload Error" => "Eroare la încărcare",
 "Close" => "Închide",
-"Pending" => "În așteptare",
 "1 file uploading" => "un fișier se încarcă",
 "{count} files uploading" => "{count} fisiere incarcate",
 "Upload cancelled." => "Încărcare anulată.",
@@ -56,6 +58,7 @@
 "Cancel upload" => "Anulează încărcarea",
 "Nothing in here. Upload something!" => "Nimic aici. Încarcă ceva!",
 "Download" => "Descarcă",
+"Unshare" => "Anulează partajarea",
 "Upload too large" => "Fișierul încărcat este prea mare",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Fișierul care l-ai încărcat a depășită limita maximă admisă la încărcare pe acest server.",
 "Files are being scanned, please wait." => "Fișierele sunt scanate, te rog așteptă.",
diff --git a/apps/files/l10n/ru.php b/apps/files/l10n/ru.php
index 05542452e7fcfee0bfdae1017ed69ad83a511ffc..803b34e99c8efbb3c0a76f33f313a1005ff51257 100644
--- a/apps/files/l10n/ru.php
+++ b/apps/files/l10n/ru.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Невозможно переместить %s - файл с таким именем уже существует",
+"Could not move %s" => "Невозможно переместить %s",
+"Unable to rename file" => "Невозможно переименовать файл",
 "No file was uploaded. Unknown error" => "Файл не был загружен. Неизвестная ошибка",
 "There is no error, the file uploaded with success" => "Файл успешно загружен",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Файл превышает размер установленный upload_max_filesize в php.ini:",
@@ -7,12 +10,13 @@
 "No file was uploaded" => "Файл не был загружен",
 "Missing a temporary folder" => "Невозможно найти временную папку",
 "Failed to write to disk" => "Ошибка записи на диск",
+"Not enough storage available" => "Недостаточно доступного места в хранилище",
 "Invalid directory." => "Неправильный каталог.",
 "Files" => "Файлы",
-"Unshare" => "Отменить публикацию",
 "Delete permanently" => "Удалено навсегда",
 "Delete" => "Удалить",
 "Rename" => "Переименовать",
+"Pending" => "Ожидание",
 "{new_name} already exists" => "{new_name} уже существует",
 "replace" => "заменить",
 "suggest name" => "предложить название",
@@ -30,7 +34,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Не удается загрузить файл размером 0 байт в каталог",
 "Upload Error" => "Ошибка загрузки",
 "Close" => "Закрыть",
-"Pending" => "Ожидание",
 "1 file uploading" => "загружается 1 файл",
 "{count} files uploading" => "{count} файлов загружается",
 "Upload cancelled." => "Загрузка отменена.",
@@ -57,10 +60,10 @@
 "Text file" => "Текстовый файл",
 "Folder" => "Папка",
 "From link" => "Из ссылки",
-"Trash" => "Корзина",
 "Cancel upload" => "Отмена загрузки",
 "Nothing in here. Upload something!" => "Здесь ничего нет. Загрузите что-нибудь!",
 "Download" => "Скачать",
+"Unshare" => "Отменить публикацию",
 "Upload too large" => "Файл слишком большой",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Файлы, которые Вы пытаетесь загрузить, превышают лимит для файлов на этом сервере.",
 "Files are being scanned, please wait." => "Подождите, файлы сканируются.",
diff --git a/apps/files/l10n/ru_RU.php b/apps/files/l10n/ru_RU.php
index 9b2913970f2efbe6ff7d4b8e1f5978ce1be1347e..c019328bb6d24bbb5753e1a2ba9e4b91a1047c7d 100644
--- a/apps/files/l10n/ru_RU.php
+++ b/apps/files/l10n/ru_RU.php
@@ -9,10 +9,10 @@
 "Failed to write to disk" => "Не удалось записать на диск",
 "Invalid directory." => "Неверный каталог.",
 "Files" => "Файлы",
-"Unshare" => "Скрыть",
 "Delete permanently" => "Удалить навсегда",
 "Delete" => "Удалить",
 "Rename" => "Переименовать",
+"Pending" => "Ожидающий решения",
 "{new_name} already exists" => "{новое_имя} уже существует",
 "replace" => "отмена",
 "suggest name" => "подобрать название",
@@ -30,7 +30,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Невозможно загрузить файл,\n так как он имеет нулевой размер или является директорией",
 "Upload Error" => "Ошибка загрузки",
 "Close" => "Закрыть",
-"Pending" => "Ожидающий решения",
 "1 file uploading" => "загрузка 1 файла",
 "{count} files uploading" => "{количество} загружено файлов",
 "Upload cancelled." => "Загрузка отменена",
@@ -57,10 +56,10 @@
 "Text file" => "Текстовый файл",
 "Folder" => "Папка",
 "From link" => "По ссылке",
-"Trash" => "Корзина",
 "Cancel upload" => "Отмена загрузки",
 "Nothing in here. Upload something!" => "Здесь ничего нет. Загрузите что-нибудь!",
 "Download" => "Загрузить",
+"Unshare" => "Скрыть",
 "Upload too large" => "Загрузка слишком велика",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Размер файлов, которые Вы пытаетесь загрузить, превышает максимально допустимый размер для загрузки на данный сервер.",
 "Files are being scanned, please wait." => "Файлы сканируются, пожалуйста, подождите.",
diff --git a/apps/files/l10n/si_LK.php b/apps/files/l10n/si_LK.php
index 316470d83965773a1e2f8cffc68db4bf63ec7694..de2b89068451e83d9833f7ec8494fea9b853bb54 100644
--- a/apps/files/l10n/si_LK.php
+++ b/apps/files/l10n/si_LK.php
@@ -7,7 +7,6 @@
 "Missing a temporary folder" => "තාවකාලික ෆොල්ඩරයක් සොයාගත නොහැක",
 "Failed to write to disk" => "තැටිගත කිරීම අසාර්ථකයි",
 "Files" => "ගොනු",
-"Unshare" => "නොබෙදු",
 "Delete" => "මකන්න",
 "Rename" => "නැවත නම් කරන්න",
 "replace" => "ප්‍රතිස්ථාපනය කරන්න",
@@ -41,6 +40,7 @@
 "Cancel upload" => "උඩුගත කිරීම අත් හරින්න",
 "Nothing in here. Upload something!" => "මෙහි කිසිවක් නොමැත. යමක් උඩුගත කරන්න",
 "Download" => "බාගත කිරීම",
+"Unshare" => "නොබෙදු",
 "Upload too large" => "උඩුගත කිරීම විශාල වැඩිය",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "ඔබ උඩුගත කිරීමට තැත් කරන ගොනු මෙම සේවාදායකයා උඩුගත කිරීමට ඉඩදී ඇති උපරිම ගොනු විශාලත්වයට වඩා වැඩිය",
 "Files are being scanned, please wait." => "ගොනු පරික්ෂා කෙරේ. මඳක් රැඳී සිටින්න",
diff --git a/apps/files/l10n/sk_SK.php b/apps/files/l10n/sk_SK.php
index be7f77adab076e38ff7b3525cd0ef46f20fe5b6e..0d2db9813b1733bd009114d79f59a45e5f41215d 100644
--- a/apps/files/l10n/sk_SK.php
+++ b/apps/files/l10n/sk_SK.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Nie je možné presunúť %s - súbor s týmto menom už existuje",
+"Could not move %s" => "Nie je možné presunúť %s",
+"Unable to rename file" => "Nemožno premenovať súbor",
 "No file was uploaded. Unknown error" => "Žiaden súbor nebol odoslaný. Neznáma chyba",
 "There is no error, the file uploaded with success" => "Nenastala žiadna chyba, súbor bol úspešne nahraný",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Nahraný súbor predčil  konfiguračnú direktívu upload_max_filesize v súbore php.ini:",
@@ -7,12 +10,13 @@
 "No file was uploaded" => "Žiaden súbor nebol nahraný",
 "Missing a temporary folder" => "Chýbajúci dočasný priečinok",
 "Failed to write to disk" => "Zápis na disk sa nepodaril",
+"Not enough storage available" => "Nedostatok dostupného úložného priestoru",
 "Invalid directory." => "Neplatný adresár",
 "Files" => "Súbory",
-"Unshare" => "Nezdielať",
 "Delete permanently" => "Zmazať  trvalo",
 "Delete" => "Odstrániť",
 "Rename" => "Premenovať",
+"Pending" => "Čaká sa",
 "{new_name} already exists" => "{new_name} už existuje",
 "replace" => "nahradiť",
 "suggest name" => "pomôcť s menom",
@@ -30,7 +34,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Nemôžem nahrať súbor lebo je to priečinok alebo má 0 bajtov.",
 "Upload Error" => "Chyba odosielania",
 "Close" => "Zavrieť",
-"Pending" => "Čaká sa",
 "1 file uploading" => "1 súbor sa posiela ",
 "{count} files uploading" => "{count} súborov odosielaných",
 "Upload cancelled." => "Odosielanie zrušené",
@@ -57,10 +60,10 @@
 "Text file" => "Textový súbor",
 "Folder" => "Priečinok",
 "From link" => "Z odkazu",
-"Trash" => "Kôš",
 "Cancel upload" => "Zrušiť odosielanie",
 "Nothing in here. Upload something!" => "Žiadny súbor. Nahrajte niečo!",
 "Download" => "Stiahnuť",
+"Unshare" => "Nezdielať",
 "Upload too large" => "Odosielaný súbor je príliš veľký",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Súbory, ktoré sa snažíte nahrať, presahujú maximálnu veľkosť pre nahratie súborov na tento server.",
 "Files are being scanned, please wait." => "Čakajte, súbory sú prehľadávané.",
diff --git a/apps/files/l10n/sl.php b/apps/files/l10n/sl.php
index d55b4207d2b3d3f583541e2b4e0f3b4d8eed677b..6a379459f0e4d105b7ef1219e15a679cb2d4bf17 100644
--- a/apps/files/l10n/sl.php
+++ b/apps/files/l10n/sl.php
@@ -8,9 +8,9 @@
 "Missing a temporary folder" => "Manjka začasna mapa",
 "Failed to write to disk" => "Pisanje na disk je spodletelo",
 "Files" => "Datoteke",
-"Unshare" => "Odstrani iz souporabe",
 "Delete" => "Izbriši",
 "Rename" => "Preimenuj",
+"Pending" => "V čakanju ...",
 "{new_name} already exists" => "{new_name} že obstaja",
 "replace" => "zamenjaj",
 "suggest name" => "predlagaj ime",
@@ -22,7 +22,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Pošiljanje ni mogoče, saj gre za mapo, ali pa je datoteka velikosti 0 bajtov.",
 "Upload Error" => "Napaka med nalaganjem",
 "Close" => "Zapri",
-"Pending" => "V čakanju ...",
 "1 file uploading" => "Pošiljanje 1 datoteke",
 "{count} files uploading" => "nalagam {count} datotek",
 "Upload cancelled." => "Pošiljanje je preklicano.",
@@ -51,6 +50,7 @@
 "Cancel upload" => "Prekliči pošiljanje",
 "Nothing in here. Upload something!" => "Tukaj ni ničesar. Naložite kaj!",
 "Download" => "Prejmi",
+"Unshare" => "Odstrani iz souporabe",
 "Upload too large" => "Nalaganje ni mogoče, ker je preveliko",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Datoteke, ki jih želite naložiti, presegajo največjo dovoljeno velikost na tem strežniku.",
 "Files are being scanned, please wait." => "Poteka preučevanje datotek, počakajte ...",
diff --git a/apps/files/l10n/sr.php b/apps/files/l10n/sr.php
index 188c8fc0da641203e0ab5c28ac0dbf6c41e26794..e50d6612c4c43bff2c8eabfb61c36ac0e78e3339 100644
--- a/apps/files/l10n/sr.php
+++ b/apps/files/l10n/sr.php
@@ -7,9 +7,9 @@
 "Missing a temporary folder" => "Недостаје привремена фасцикла",
 "Failed to write to disk" => "Не могу да пишем на диск",
 "Files" => "Датотеке",
-"Unshare" => "Укини дељење",
 "Delete" => "Обриши",
 "Rename" => "Преименуј",
+"Pending" => "На чекању",
 "{new_name} already exists" => "{new_name} већ постоји",
 "replace" => "замени",
 "suggest name" => "предложи назив",
@@ -21,7 +21,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Не могу да отпремим датотеку као фасциклу или она има 0 бајтова",
 "Upload Error" => "Грешка при отпремању",
 "Close" => "Затвори",
-"Pending" => "На чекању",
 "1 file uploading" => "Отпремам 1 датотеку",
 "{count} files uploading" => "Отпремам {count} датотеке/а",
 "Upload cancelled." => "Отпремање је прекинуто.",
@@ -49,6 +48,7 @@
 "Cancel upload" => "Прекини отпремање",
 "Nothing in here. Upload something!" => "Овде нема ничег. Отпремите нешто!",
 "Download" => "Преузми",
+"Unshare" => "Укини дељење",
 "Upload too large" => "Датотека је превелика",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Датотеке које желите да отпремите прелазе ограничење у величини.",
 "Files are being scanned, please wait." => "Скенирам датотеке…",
diff --git a/apps/files/l10n/sv.php b/apps/files/l10n/sv.php
index ebdaae9193f96cfdd23e2d7d63982a0f0790320b..d95701e9084de023158210316877f186c91db894 100644
--- a/apps/files/l10n/sv.php
+++ b/apps/files/l10n/sv.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Kunde inte flytta %s - Det finns redan en fil med detta namn",
+"Could not move %s" => "Kan inte flytta %s",
+"Unable to rename file" => "Kan inte byta namn på filen",
 "No file was uploaded. Unknown error" => "Ingen fil uppladdad. Okänt fel",
 "There is no error, the file uploaded with success" => "Inga fel uppstod. Filen laddades upp utan problem",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "Den uppladdade filen överskrider upload_max_filesize direktivet php.ini:",
@@ -7,11 +10,12 @@
 "No file was uploaded" => "Ingen fil blev uppladdad",
 "Missing a temporary folder" => "Saknar en tillfällig mapp",
 "Failed to write to disk" => "Misslyckades spara till disk",
+"Not enough storage available" => "Inte tillräckligt med lagringsutrymme tillgängligt",
 "Invalid directory." => "Felaktig mapp.",
 "Files" => "Filer",
-"Unshare" => "Sluta dela",
 "Delete" => "Radera",
 "Rename" => "Byt namn",
+"Pending" => "Väntar",
 "{new_name} already exists" => "{new_name} finns redan",
 "replace" => "ersätt",
 "suggest name" => "föreslå namn",
@@ -29,7 +33,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Kunde inte ladda upp dina filer eftersom det antingen är en mapp eller har 0 bytes.",
 "Upload Error" => "Uppladdningsfel",
 "Close" => "Stäng",
-"Pending" => "Väntar",
 "1 file uploading" => "1 filuppladdning",
 "{count} files uploading" => "{count} filer laddas upp",
 "Upload cancelled." => "Uppladdning avbruten.",
@@ -56,10 +59,10 @@
 "Text file" => "Textfil",
 "Folder" => "Mapp",
 "From link" => "Från länk",
-"Trash" => "Papperskorgen",
 "Cancel upload" => "Avbryt uppladdning",
 "Nothing in here. Upload something!" => "Ingenting här. Ladda upp något!",
 "Download" => "Ladda ner",
+"Unshare" => "Sluta dela",
 "Upload too large" => "För stor uppladdning",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Filerna du försöker ladda upp överstiger den maximala storleken för filöverföringar på servern.",
 "Files are being scanned, please wait." => "Filer skannas, var god vänta",
diff --git a/apps/files/l10n/ta_LK.php b/apps/files/l10n/ta_LK.php
index 383b4ef6f85c9031f9790a78870fc1d05ee16590..069a2ac58230462ba46cc32381d3ecb769c4a75a 100644
--- a/apps/files/l10n/ta_LK.php
+++ b/apps/files/l10n/ta_LK.php
@@ -7,9 +7,9 @@
 "Missing a temporary folder" => "ஒரு தற்காலிகமான கோப்புறையை காணவில்லை",
 "Failed to write to disk" => "வட்டில் எழுத முடியவில்லை",
 "Files" => "கோப்புகள்",
-"Unshare" => "பகிரப்படாதது",
 "Delete" => "அழிக்க",
 "Rename" => "பெயர்மாற்றம்",
+"Pending" => "நிலுவையிலுள்ள",
 "{new_name} already exists" => "{new_name} ஏற்கனவே உள்ளது",
 "replace" => "மாற்றிடுக",
 "suggest name" => "பெயரை பரிந்துரைக்க",
@@ -21,7 +21,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "அடைவு அல்லது 0 bytes ஐ கொண்டுள்ளதால் உங்களுடைய கோப்பை பதிவேற்ற முடியவில்லை",
 "Upload Error" => "பதிவேற்றல் வழு",
 "Close" => "மூடுக",
-"Pending" => "நிலுவையிலுள்ள",
 "1 file uploading" => "1 கோப்பு பதிவேற்றப்படுகிறது",
 "{count} files uploading" => "{எண்ணிக்கை} கோப்புகள் பதிவேற்றப்படுகின்றது",
 "Upload cancelled." => "பதிவேற்றல் இரத்து செய்யப்பட்டுள்ளது",
@@ -50,6 +49,7 @@
 "Cancel upload" => "பதிவேற்றலை இரத்து செய்க",
 "Nothing in here. Upload something!" => "இங்கு ஒன்றும் இல்லை. ஏதாவது பதிவேற்றுக!",
 "Download" => "பதிவிறக்குக",
+"Unshare" => "பகிரப்படாதது",
 "Upload too large" => "பதிவேற்றல் மிகப்பெரியது",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "நீங்கள் பதிவேற்ற முயற்சிக்கும் கோப்புகளானது இந்த சேவையகத்தில் கோப்பு பதிவேற்றக்கூடிய ஆகக்கூடிய அளவிலும் கூடியது.",
 "Files are being scanned, please wait." => "கோப்புகள் வருடப்படுகின்றன, தயவுசெய்து காத்திருங்கள்.",
diff --git a/apps/files/l10n/th_TH.php b/apps/files/l10n/th_TH.php
index 5f880702b822e6d7b035728ba125359305d8e91a..fce74874f137bbddedcb5b5614b6c560f9cd912a 100644
--- a/apps/files/l10n/th_TH.php
+++ b/apps/files/l10n/th_TH.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่แล้ว",
+"Could not move %s" => "ไม่สามารถย้าย %s ได้",
+"Unable to rename file" => "ไม่สามารถเปลี่ยนชื่อไฟล์ได้",
 "No file was uploaded. Unknown error" => "ยังไม่มีไฟล์ใดที่ถูกอัพโหลด เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ",
 "There is no error, the file uploaded with success" => "ไม่มีข้อผิดพลาดใดๆ ไฟล์ถูกอัพโหลดเรียบร้อยแล้ว",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "ขนาดไฟล์ที่อัพโหลดมีขนาดเกิน upload_max_filesize ที่ระบุไว้ใน php.ini",
@@ -7,11 +10,12 @@
 "No file was uploaded" => "ยังไม่มีไฟล์ที่ถูกอัพโหลด",
 "Missing a temporary folder" => "แฟ้มเอกสารชั่วคราวเกิดการสูญหาย",
 "Failed to write to disk" => "เขียนข้อมูลลงแผ่นดิสก์ล้มเหลว",
+"Not enough storage available" => "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน",
 "Invalid directory." => "ไดเร็กทอรี่ไม่ถูกต้อง",
 "Files" => "ไฟล์",
-"Unshare" => "ยกเลิกการแชร์ข้อมูล",
 "Delete" => "ลบ",
 "Rename" => "เปลี่ยนชื่อ",
+"Pending" => "อยู่ระหว่างดำเนินการ",
 "{new_name} already exists" => "{new_name} มีอยู่แล้วในระบบ",
 "replace" => "แทนที่",
 "suggest name" => "แนะนำชื่อ",
@@ -29,7 +33,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "ไม่สามารถอัพโหลดไฟล์ของคุณได้ เนื่องจากไฟล์ดังกล่าวเป็นไดเร็กทอรี่หรือมีขนาด 0 ไบต์",
 "Upload Error" => "เกิดข้อผิดพลาดในการอัพโหลด",
 "Close" => "ปิด",
-"Pending" => "อยู่ระหว่างดำเนินการ",
 "1 file uploading" => "กำลังอัพโหลดไฟล์ 1 ไฟล์",
 "{count} files uploading" => "กำลังอัพโหลด {count} ไฟล์",
 "Upload cancelled." => "การอัพโหลดถูกยกเลิก",
@@ -56,10 +59,10 @@
 "Text file" => "ไฟล์ข้อความ",
 "Folder" => "แฟ้มเอกสาร",
 "From link" => "จากลิงก์",
-"Trash" => "ถังขยะ",
 "Cancel upload" => "ยกเลิกการอัพโหลด",
 "Nothing in here. Upload something!" => "ยังไม่มีไฟล์ใดๆอยู่ที่นี่ กรุณาอัพโหลดไฟล์!",
 "Download" => "ดาวน์โหลด",
+"Unshare" => "ยกเลิกการแชร์ข้อมูล",
 "Upload too large" => "ไฟล์ที่อัพโหลดมีขนาดใหญ่เกินไป",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "ไฟล์ที่คุณพยายามที่จะอัพโหลดมีขนาดเกินกว่าขนาดสูงสุดที่กำหนดไว้ให้อัพโหลดได้สำหรับเซิร์ฟเวอร์นี้",
 "Files are being scanned, please wait." => "ไฟล์กำลังอยู่ระหว่างการสแกน, กรุณารอสักครู่.",
diff --git a/apps/files/l10n/tr.php b/apps/files/l10n/tr.php
index 3325cbe1ee47b2b3a23559ffea0e90455f79ab7b..f6943f1f4d145e18ae1fd35e8e797140c28136c1 100644
--- a/apps/files/l10n/tr.php
+++ b/apps/files/l10n/tr.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "%s taşınamadı. Bu isimde dosya zaten var.",
+"Could not move %s" => "%s taşınamadı",
+"Unable to rename file" => "Dosya adı değiştirilemedi",
 "No file was uploaded. Unknown error" => "Dosya yüklenmedi. Bilinmeyen hata",
 "There is no error, the file uploaded with success" => "Bir hata yok, dosya başarıyla yüklendi",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "php.ini dosyasında upload_max_filesize ile belirtilen dosya yükleme sınırı aşıldı.",
@@ -9,9 +12,9 @@
 "Failed to write to disk" => "Diske yazılamadı",
 "Invalid directory." => "Geçersiz dizin.",
 "Files" => "Dosyalar",
-"Unshare" => "Paylaşılmayan",
 "Delete" => "Sil",
 "Rename" => "İsim değiştir.",
+"Pending" => "Bekliyor",
 "{new_name} already exists" => "{new_name} zaten mevcut",
 "replace" => "değiştir",
 "suggest name" => "Öneri ad",
@@ -26,7 +29,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Dosyanızın boyutu 0 byte olduğundan veya bir dizin olduğundan yüklenemedi",
 "Upload Error" => "Yükleme hatası",
 "Close" => "Kapat",
-"Pending" => "Bekliyor",
 "1 file uploading" => "1 dosya yüklendi",
 "{count} files uploading" => "{count} dosya yükleniyor",
 "Upload cancelled." => "Yükleme iptal edildi.",
@@ -56,6 +58,7 @@
 "Cancel upload" => "Yüklemeyi iptal et",
 "Nothing in here. Upload something!" => "Burada hiçbir şey yok. Birşeyler yükleyin!",
 "Download" => "İndir",
+"Unshare" => "Paylaşılmayan",
 "Upload too large" => "Yüklemeniz çok büyük",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Yüklemeye çalıştığınız dosyalar bu sunucudaki maksimum yükleme boyutunu aşıyor.",
 "Files are being scanned, please wait." => "Dosyalar taranıyor, lütfen bekleyin.",
diff --git a/apps/files/l10n/uk.php b/apps/files/l10n/uk.php
index 4a76158c462785c90440290045222028e37204ab..7e499e6c2c83b8afd3b3d0a5a0d2ef300f17eee7 100644
--- a/apps/files/l10n/uk.php
+++ b/apps/files/l10n/uk.php
@@ -9,10 +9,10 @@
 "Failed to write to disk" => "Невдалося записати на диск",
 "Invalid directory." => "Невірний каталог.",
 "Files" => "Файли",
-"Unshare" => "Заборонити доступ",
 "Delete permanently" => "Видалити назавжди",
 "Delete" => "Видалити",
 "Rename" => "Перейменувати",
+"Pending" => "Очікування",
 "{new_name} already exists" => "{new_name} вже існує",
 "replace" => "заміна",
 "suggest name" => "запропонуйте назву",
@@ -30,7 +30,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "Неможливо завантажити ваш файл тому, що він тека або файл розміром 0 байт",
 "Upload Error" => "Помилка завантаження",
 "Close" => "Закрити",
-"Pending" => "Очікування",
 "1 file uploading" => "1 файл завантажується",
 "{count} files uploading" => "{count} файлів завантажується",
 "Upload cancelled." => "Завантаження перервано.",
@@ -57,10 +56,10 @@
 "Text file" => "Текстовий файл",
 "Folder" => "Папка",
 "From link" => "З посилання",
-"Trash" => "Смітник",
 "Cancel upload" => "Перервати завантаження",
 "Nothing in here. Upload something!" => "Тут нічого немає. Відвантажте що-небудь!",
 "Download" => "Завантажити",
+"Unshare" => "Заборонити доступ",
 "Upload too large" => "Файл занадто великий",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Файли,що ви намагаєтесь відвантажити перевищують максимальний дозволений розмір файлів на цьому сервері.",
 "Files are being scanned, please wait." => "Файли скануються, зачекайте, будь-ласка.",
diff --git a/apps/files/l10n/vi.php b/apps/files/l10n/vi.php
index 0daf580a2f5a9c8fc1963d7cff6490b8b3e1f8a2..b069246f01767292cddc72304271e04b25d285ec 100644
--- a/apps/files/l10n/vi.php
+++ b/apps/files/l10n/vi.php
@@ -1,15 +1,22 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "Không thể di chuyển %s - Đã có tên file này trên hệ thống",
+"Could not move %s" => "Không thể di chuyển %s",
+"Unable to rename file" => "Không thể đổi tên file",
 "No file was uploaded. Unknown error" => "Không có tập tin nào được tải lên. Lỗi không xác định",
 "There is no error, the file uploaded with success" => "Không có lỗi, các tập tin đã được tải lên thành công",
+"The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "The uploaded file exceeds the upload_max_filesize directive in php.ini: ",
 "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" => "Kích thước những tập tin tải lên vượt quá MAX_FILE_SIZE đã được quy định",
 "The uploaded file was only partially uploaded" => "Tập tin tải lên mới chỉ tải lên được một phần",
 "No file was uploaded" => "Không có tập tin nào được tải lên",
 "Missing a temporary folder" => "Không tìm thấy thư mục tạm",
 "Failed to write to disk" => "Không thể ghi ",
+"Not enough storage available" => "Không đủ không gian lưu trữ",
+"Invalid directory." => "Thư mục không hợp lệ",
 "Files" => "Tập tin",
-"Unshare" => "Không chia sẽ",
+"Delete permanently" => "Xóa vĩnh vễn",
 "Delete" => "Xóa",
 "Rename" => "Sửa tên",
+"Pending" => "Chờ",
 "{new_name} already exists" => "{new_name} đã tồn tại",
 "replace" => "thay thế",
 "suggest name" => "tên gợi ý",
@@ -17,16 +24,22 @@
 "replaced {new_name}" => "đã thay thế {new_name}",
 "undo" => "lùi lại",
 "replaced {new_name} with {old_name}" => "đã thay thế {new_name} bằng {old_name}",
+"perform delete operation" => "thực hiện việc xóa",
+"'.' is an invalid file name." => "'.' là một tên file không hợp lệ",
+"File name cannot be empty." => "Tên file không được rỗng",
 "Invalid name, '\\', '/', '<', '>', ':', '\"', '|', '?' and '*' are not allowed." => "Tên không hợp lệ, '\\', '/', '<', '>', ':', '\"', '|', '?' và '*' thì không được phép dùng.",
+"Your storage is full, files can not be updated or synced anymore!" => "Your storage is full, files can not be updated or synced anymore!",
+"Your storage is almost full ({usedSpacePercent}%)" => "Your storage is almost full ({usedSpacePercent}%)",
+"Your download is being prepared. This might take some time if the files are big." => "Your download is being prepared. This might take some time if the files are big.",
 "Unable to upload your file as it is a directory or has 0 bytes" => "Không thể tải lên tập tin này do nó là một thư mục hoặc kích thước tập tin bằng 0 byte",
 "Upload Error" => "Tải lên lỗi",
 "Close" => "Đóng",
-"Pending" => "Chờ",
 "1 file uploading" => "1 tệp tin đang được tải lên",
 "{count} files uploading" => "{count} tập tin đang tải lên",
 "Upload cancelled." => "Hủy tải lên",
 "File upload is in progress. Leaving the page now will cancel the upload." => "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này.",
 "URL cannot be empty." => "URL không được để trống.",
+"Invalid folder name. Usage of 'Shared' is reserved by Owncloud" => "Invalid folder name. Usage of 'Shared' is reserved by Owncloud",
 "Name" => "Tên",
 "Size" => "Kích cỡ",
 "Modified" => "Thay đổi",
@@ -50,8 +63,10 @@
 "Cancel upload" => "Hủy upload",
 "Nothing in here. Upload something!" => "Không có gì ở đây .Hãy tải lên một cái gì đó !",
 "Download" => "Tải xuống",
+"Unshare" => "Không chia sẽ",
 "Upload too large" => "Tập tin tải lên quá lớn",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "Các tập tin bạn đang tải lên vượt quá kích thước tối đa cho phép trên máy chủ .",
 "Files are being scanned, please wait." => "Tập tin đang được quét ,vui lòng chờ.",
-"Current scanning" => "Hiện tại đang quét"
+"Current scanning" => "Hiện tại đang quét",
+"Upgrading filesystem cache..." => "Upgrading filesystem cache..."
 );
diff --git a/apps/files/l10n/zh_CN.GB2312.php b/apps/files/l10n/zh_CN.GB2312.php
index a38e2d3bc60c15df9d67b066a238599bc0f4559a..727b8038000d556e902c919de3387debb8e2fa04 100644
--- a/apps/files/l10n/zh_CN.GB2312.php
+++ b/apps/files/l10n/zh_CN.GB2312.php
@@ -7,9 +7,9 @@
 "Missing a temporary folder" => "丢失了一个临时文件夹",
 "Failed to write to disk" => "写磁盘失败",
 "Files" => "文件",
-"Unshare" => "取消共享",
 "Delete" => "删除",
 "Rename" => "重命名",
+"Pending" => "Pending",
 "{new_name} already exists" => "{new_name} 已存在",
 "replace" => "替换",
 "suggest name" => "推荐名称",
@@ -20,7 +20,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "不能上传你指定的文件,可能因为它是个文件夹或者大小为0",
 "Upload Error" => "上传错误",
 "Close" => "关闭",
-"Pending" => "Pending",
 "1 file uploading" => "1 个文件正在上传",
 "{count} files uploading" => "{count} 个文件正在上传",
 "Upload cancelled." => "上传取消了",
@@ -49,6 +48,7 @@
 "Cancel upload" => "取消上传",
 "Nothing in here. Upload something!" => "这里没有东西.上传点什么!",
 "Download" => "下载",
+"Unshare" => "取消共享",
 "Upload too large" => "上传的文件太大了",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "你正在试图上传的文件超过了此服务器支持的最大的文件大小.",
 "Files are being scanned, please wait." => "正在扫描文件,请稍候.",
diff --git a/apps/files/l10n/zh_CN.php b/apps/files/l10n/zh_CN.php
index 3c87ee2b73fe92a6725e9a2c986bfe8ae0d8eef0..569aaf1b0aef7c14213241338860791500cb72e2 100644
--- a/apps/files/l10n/zh_CN.php
+++ b/apps/files/l10n/zh_CN.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "无法移动 %s - 同名文件已存在",
+"Could not move %s" => "无法移动 %s",
+"Unable to rename file" => "无法重命名文件",
 "No file was uploaded. Unknown error" => "没有文件被上传。未知错误",
 "There is no error, the file uploaded with success" => "没有发生错误,文件上传成功。",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "上传文件大小已超过php.ini中upload_max_filesize所规定的值",
@@ -9,9 +12,9 @@
 "Failed to write to disk" => "写入磁盘失败",
 "Invalid directory." => "无效文件夹。",
 "Files" => "文件",
-"Unshare" => "取消分享",
 "Delete" => "删除",
 "Rename" => "重命名",
+"Pending" => "操作等待中",
 "{new_name} already exists" => "{new_name} 已存在",
 "replace" => "替换",
 "suggest name" => "建议名称",
@@ -26,7 +29,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "无法上传文件,因为它是一个目录或者大小为 0 字节",
 "Upload Error" => "上传错误",
 "Close" => "关闭",
-"Pending" => "操作等待中",
 "1 file uploading" => "1个文件上传中",
 "{count} files uploading" => "{count} 个文件上传中",
 "Upload cancelled." => "上传已取消",
@@ -56,6 +58,7 @@
 "Cancel upload" => "取消上传",
 "Nothing in here. Upload something!" => "这里还什么都没有。上传些东西吧!",
 "Download" => "下载",
+"Unshare" => "取消分享",
 "Upload too large" => "上传文件过大",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "您正尝试上传的文件超过了此服务器可以上传的最大容量限制",
 "Files are being scanned, please wait." => "文件正在被扫描,请稍候。",
diff --git a/apps/files/l10n/zh_TW.php b/apps/files/l10n/zh_TW.php
index 439907821d48e49cb7acf075226911d8f43d2de4..5249dfdbc5fafc5fdc88cacd36cd051e77f09c21 100644
--- a/apps/files/l10n/zh_TW.php
+++ b/apps/files/l10n/zh_TW.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
+"Could not move %s - File with this name already exists" => "無法移動 %s - 同名的檔案已經存在",
+"Could not move %s" => "無法移動 %s",
+"Unable to rename file" => "無法重新命名檔案",
 "No file was uploaded. Unknown error" => "沒有檔案被上傳。未知的錯誤。",
 "There is no error, the file uploaded with success" => "無錯誤,檔案上傳成功",
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: " => "上傳的檔案大小超過 php.ini 當中 upload_max_filesize 參數的設定:",
@@ -7,11 +10,13 @@
 "No file was uploaded" => "無已上傳檔案",
 "Missing a temporary folder" => "遺失暫存資料夾",
 "Failed to write to disk" => "寫入硬碟失敗",
+"Not enough storage available" => "儲存空間不足",
 "Invalid directory." => "無效的資料夾。",
 "Files" => "檔案",
-"Unshare" => "取消共享",
+"Delete permanently" => "永久刪除",
 "Delete" => "刪除",
 "Rename" => "重新命名",
+"Pending" => "等候中",
 "{new_name} already exists" => "{new_name} 已經存在",
 "replace" => "取代",
 "suggest name" => "建議檔名",
@@ -29,7 +34,6 @@
 "Unable to upload your file as it is a directory or has 0 bytes" => "無法上傳您的檔案因為它可能是一個目錄或檔案大小為0",
 "Upload Error" => "上傳發生錯誤",
 "Close" => "關閉",
-"Pending" => "等候中",
 "1 file uploading" => "1 個檔案正在上傳",
 "{count} files uploading" => "{count} 個檔案正在上傳",
 "Upload cancelled." => "上傳取消",
@@ -56,10 +60,11 @@
 "Text file" => "文字檔",
 "Folder" => "資料夾",
 "From link" => "從連結",
-"Trash" => "回收筒",
+"Trash bin" => "回收筒",
 "Cancel upload" => "取消上傳",
 "Nothing in here. Upload something!" => "沒有任何東西。請上傳內容!",
 "Download" => "下載",
+"Unshare" => "取消共享",
 "Upload too large" => "上傳過大",
 "The files you are trying to upload exceed the maximum size for file uploads on this server." => "您試圖上傳的檔案已超過伺服器的最大檔案大小限制。 ",
 "Files are being scanned, please wait." => "正在掃描檔案,請稍等。",
diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php
index 7cf65915af038b6bb323d8892c7b76a41656efaf..60756db40149e1175b7b5a3e47c385ab6649a2ef 100644
--- a/apps/files/templates/index.php
+++ b/apps/files/templates/index.php
@@ -59,7 +59,7 @@
 	<div id="emptyfolder"><?php echo $l->t('Nothing in here. Upload something!')?></div>
 <?php endif; ?>
 
-<table class="hascontrols">
+<table>
 	<thead>
 		<tr>
 			<th id='headerName'>
diff --git a/apps/files_encryption/l10n/ca.php b/apps/files_encryption/l10n/ca.php
index 1b888f7714bc91834a9aa4a16e4f6e9b53080de9..0c661353a776ce7644bc8ad3e5c954e2becc28ad 100644
--- a/apps/files_encryption/l10n/ca.php
+++ b/apps/files_encryption/l10n/ca.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Connecteu-vos al client ownCloud i canvieu la contrasenya d'encriptació per completar la conversió.",
-"switched to client side encryption" => "s'ha commutat a l'encriptació per part del client",
-"Change encryption password to login password" => "Canvia la contrasenya d'encriptació per la d'accés",
-"Please check your passwords and try again." => "Comproveu les contrasenyes i proveu-ho de nou.",
-"Could not change your file encryption password to your login password" => "No s'ha pogut canviar la contrasenya d'encriptació de fitxers per la d'accés",
 "Encryption" => "Encriptatge",
 "File encryption is enabled." => "L'encriptació de fitxers està activada.",
 "The following file types will not be encrypted:" => "Els tipus de fitxers següents no s'encriptaran:",
diff --git a/apps/files_encryption/l10n/cs_CZ.php b/apps/files_encryption/l10n/cs_CZ.php
index 3278f13920ac636f1e0534a8010819138e5cfbe9..d225688a079d78356a3ec1ae5eb3ef9cf4041306 100644
--- a/apps/files_encryption/l10n/cs_CZ.php
+++ b/apps/files_encryption/l10n/cs_CZ.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Prosím přejděte na svého klienta ownCloud a nastavte šifrovací heslo pro dokončení konverze.",
-"switched to client side encryption" => "přepnuto na šifrování na straně klienta",
-"Change encryption password to login password" => "Změnit šifrovací heslo na přihlašovací",
-"Please check your passwords and try again." => "Zkontrolujte, prosím, své heslo a zkuste to znovu.",
-"Could not change your file encryption password to your login password" => "Nelze změnit šifrovací heslo na přihlašovací.",
 "Encryption" => "Šifrování",
 "File encryption is enabled." => "Šifrování je povoleno.",
 "The following file types will not be encrypted:" => "Následující typy souborů nebudou šifrovány:",
diff --git a/apps/files_encryption/l10n/da.php b/apps/files_encryption/l10n/da.php
index c9255759cb8bd6664a22708f7b73bb04904239d7..e52ecb868af102a058ea58e23d00456dc891a788 100644
--- a/apps/files_encryption/l10n/da.php
+++ b/apps/files_encryption/l10n/da.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Skift venligst til din ownCloud-klient og skift krypteringskoden for at fuldføre konverteringen.",
-"switched to client side encryption" => "skiftet til kryptering på klientsiden",
-"Change encryption password to login password" => "Udskift krypteringskode til login-adgangskode",
-"Please check your passwords and try again." => "Check adgangskoder og forsøg igen.",
-"Could not change your file encryption password to your login password" => "Kunne ikke udskifte krypteringskode med login-adgangskode",
 "Encryption" => "Kryptering",
 "None" => "Ingen"
 );
diff --git a/apps/files_encryption/l10n/de.php b/apps/files_encryption/l10n/de.php
index c3c69e09007d2884cfa153f5bdc928e13fbf7522..3dc586fe06c813dfb8c376016942cd186fd04009 100644
--- a/apps/files_encryption/l10n/de.php
+++ b/apps/files_encryption/l10n/de.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Bitte wechseln Sie nun zum ownCloud Client und ändern Sie ihr Verschlüsselungspasswort um die Konvertierung abzuschließen.",
-"switched to client side encryption" => "Zur Clientseitigen Verschlüsselung gewechselt",
-"Change encryption password to login password" => "Ändern des Verschlüsselungspasswortes zum Anmeldepasswort",
-"Please check your passwords and try again." => "Bitte überprüfen sie Ihr Passwort und versuchen Sie es erneut.",
-"Could not change your file encryption password to your login password" => "Ihr Verschlüsselungspasswort konnte nicht als Anmeldepasswort gesetzt werden.",
 "Encryption" => "Verschlüsselung",
 "None" => "Keine"
 );
diff --git a/apps/files_encryption/l10n/de_DE.php b/apps/files_encryption/l10n/de_DE.php
index 465af23efddf13c3f920cd82f0ce495ce540e8e7..b942c659f9e2f01e81e4c91e1af7f5332494d720 100644
--- a/apps/files_encryption/l10n/de_DE.php
+++ b/apps/files_encryption/l10n/de_DE.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Bitte wechseln Sie nun zum ownCloud Client und ändern Sie ihr Verschlüsselungspasswort um die Konvertierung abzuschließen.",
-"switched to client side encryption" => "Zur Clientseitigen Verschlüsselung gewechselt",
-"Change encryption password to login password" => "Ändern des Verschlüsselungspasswortes zum Anmeldepasswort",
-"Please check your passwords and try again." => "Bitte überprüfen sie Ihr Passwort und versuchen Sie es erneut.",
-"Could not change your file encryption password to your login password" => "Ihr Verschlüsselungspasswort konnte nicht als Anmeldepasswort gesetzt werden.",
 "Encryption" => "Verschlüsselung",
 "File encryption is enabled." => "Datei-Verschlüsselung ist aktiviert",
 "The following file types will not be encrypted:" => "Die folgenden Datei-Typen werden nicht verschlüsselt:",
diff --git a/apps/files_encryption/l10n/el.php b/apps/files_encryption/l10n/el.php
index 94bb68bcbca35b4810798d11f4f0633276e99e3c..0031a7319445a45b376950d0e4f1f38d379a3dc4 100644
--- a/apps/files_encryption/l10n/el.php
+++ b/apps/files_encryption/l10n/el.php
@@ -1,7 +1,7 @@
 <?php $TRANSLATIONS = array(
-"Change encryption password to login password" => "Αλλαγή συνθηματικού κρυπτογράφησης στο συνθηματικό εισόδου ",
-"Please check your passwords and try again." => "Παρακαλώ ελέγξτε το συνθηματικό σας και προσπαθήστε ξανά.",
-"Could not change your file encryption password to your login password" => "Αδυναμία αλλαγής συνθηματικού κρυπτογράφησης αρχείων στο συνθηματικό εισόδου σας",
 "Encryption" => "Κρυπτογράφηση",
+"File encryption is enabled." => "Η κρυπτογράφηση αρχείων είναι ενεργή.",
+"The following file types will not be encrypted:" => "Οι παρακάτω τύποι αρχείων δεν θα κρυπτογραφηθούν:",
+"Exclude the following file types from encryption:" => "Εξαίρεση των παρακάτω τύπων αρχείων από την κρυπτογράφηση:",
 "None" => "Καμία"
 );
diff --git a/apps/files_encryption/l10n/es.php b/apps/files_encryption/l10n/es.php
index 73b5f273d1f9c1edd0faa677e81315c4a86a033c..4ea87b92e7c490b58b390070529ca0818bb4a367 100644
--- a/apps/files_encryption/l10n/es.php
+++ b/apps/files_encryption/l10n/es.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Por favor, cambie su cliente de ownCloud y cambie su clave de cifrado para completar la conversión.",
-"switched to client side encryption" => "Cambiar a cifrado del lado del cliente",
-"Change encryption password to login password" => "Cambie la clave de cifrado para su contraseña de inicio de sesión",
-"Please check your passwords and try again." => "Por favor revise su contraseña e intentelo de nuevo.",
-"Could not change your file encryption password to your login password" => "No se pudo cambiar la contraseña de cifrado de archivos de su contraseña de inicio de sesión",
 "Encryption" => "Cifrado",
 "File encryption is enabled." => "La encriptacion de archivo esta activada.",
 "The following file types will not be encrypted:" => "Los siguientes tipos de archivo no seran encriptados:",
diff --git a/apps/files_encryption/l10n/es_AR.php b/apps/files_encryption/l10n/es_AR.php
index 8160db10df6ffe9b690971a1bb0e8f070d3a7161..52c778278488449ba4fbaa92b58ba9ee9a8477a6 100644
--- a/apps/files_encryption/l10n/es_AR.php
+++ b/apps/files_encryption/l10n/es_AR.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Por favor, cambiá uu cliente de ownCloud y cambiá tu clave de encriptado para completar la conversión.",
-"switched to client side encryption" => "Cambiado a encriptación por parte del cliente",
-"Change encryption password to login password" => "Cambiá la clave de encriptado para tu contraseña de inicio de sesión",
-"Please check your passwords and try again." => "Por favor, revisá tu contraseña e intentalo de nuevo.",
-"Could not change your file encryption password to your login password" => "No se pudo cambiar la contraseña de encriptación de archivos de tu contraseña de inicio de sesión",
 "Encryption" => "Encriptación",
 "None" => "Ninguno"
 );
diff --git a/apps/files_encryption/l10n/eu.php b/apps/files_encryption/l10n/eu.php
index a2368816f52b79164a665e5e328c916eca6dd9c2..b4f7be2c840dc6539cf926f95eb9f7a7f93d358f 100644
--- a/apps/files_encryption/l10n/eu.php
+++ b/apps/files_encryption/l10n/eu.php
@@ -1,5 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please check your passwords and try again." => "Mesedez egiaztatu zure pasahitza eta saia zaitez berriro:",
 "Encryption" => "Enkriptazioa",
 "None" => "Bat ere ez"
 );
diff --git a/apps/files_encryption/l10n/fa.php b/apps/files_encryption/l10n/fa.php
index 2186c9025b4b16aa5e9f6598a6bf37f1c67e2773..21ad7e565667e07fb2b69f735dcac5b2f176a9eb 100644
--- a/apps/files_encryption/l10n/fa.php
+++ b/apps/files_encryption/l10n/fa.php
@@ -1,5 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please check your passwords and try again." => "لطفا گذرواژه خود را بررسی کنید و دوباره امتحان کنید.",
 "Encryption" => "رمزگذاری",
 "None" => "هیچ‌کدام"
 );
diff --git a/apps/files_encryption/l10n/fi_FI.php b/apps/files_encryption/l10n/fi_FI.php
index 8a9dd30e6708b6cf4db6879dcbaa8cdeaa3a614d..1e1dc4a1218def86d4fc6231dd9a24ebc8317c17 100644
--- a/apps/files_encryption/l10n/fi_FI.php
+++ b/apps/files_encryption/l10n/fi_FI.php
@@ -1,5 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please check your passwords and try again." => "Tarkista salasanasi ja yritä uudelleen.",
 "Encryption" => "Salaus",
 "None" => "Ei mitään"
 );
diff --git a/apps/files_encryption/l10n/fr.php b/apps/files_encryption/l10n/fr.php
index 7d431e6e462b923778f1b358b3c12279f00ce27e..88f1e4a393f24ad432ca05cd3e8a17dbd497ef61 100644
--- a/apps/files_encryption/l10n/fr.php
+++ b/apps/files_encryption/l10n/fr.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Veuillez vous connecter depuis votre client de synchronisation ownCloud et changer votre mot de passe de chiffrement pour finaliser la conversion.",
-"switched to client side encryption" => "Mode de chiffrement changé en chiffrement côté client",
-"Change encryption password to login password" => "Convertir le mot de passe de chiffrement en mot de passe de connexion",
-"Please check your passwords and try again." => "Veuillez vérifier vos mots de passe et réessayer.",
-"Could not change your file encryption password to your login password" => "Impossible de convertir votre mot de passe de chiffrement en mot de passe de connexion",
 "Encryption" => "Chiffrement",
 "File encryption is enabled." => "Le chiffrement des fichiers est activé",
 "The following file types will not be encrypted:" => "Les fichiers de types suivants ne seront pas chiffrés :",
diff --git a/apps/files_encryption/l10n/hu_HU.php b/apps/files_encryption/l10n/hu_HU.php
index fa62ae75fb6a2220f4c70852a0fee5c0357fae57..46f990bf38ce0c801c28504c3822e6fd07e8a397 100644
--- a/apps/files_encryption/l10n/hu_HU.php
+++ b/apps/files_encryption/l10n/hu_HU.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Kérjük, hogy váltson át az ownCloud kliensére, és változtassa meg a titkosítási jelszót az átalakítás befejezéséhez.",
-"switched to client side encryption" => "átváltva a kliens oldalai titkosításra",
-"Change encryption password to login password" => "Titkosítási jelszó módosítása a bejelentkezési jelszóra",
-"Please check your passwords and try again." => "Kérjük, ellenőrizze a jelszavait, és próbálja meg újra.",
-"Could not change your file encryption password to your login password" => "Nem módosíthatja a fájltitkosítási jelszavát a bejelentkezési jelszavára",
 "Encryption" => "Titkosítás",
 "None" => "Egyik sem"
 );
diff --git a/apps/files_encryption/l10n/it.php b/apps/files_encryption/l10n/it.php
index ffa20b718d98b26537cd55da9df04315288f37e8..9ab9bc492a0fb599349802711ac6ada4df5a7237 100644
--- a/apps/files_encryption/l10n/it.php
+++ b/apps/files_encryption/l10n/it.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Passa al tuo client ownCloud e cambia la password di cifratura per completare la conversione.",
-"switched to client side encryption" => "passato alla cifratura lato client",
-"Change encryption password to login password" => "Converti la password di cifratura nella password di accesso",
-"Please check your passwords and try again." => "Controlla la password e prova ancora.",
-"Could not change your file encryption password to your login password" => "Impossibile convertire la password di cifratura nella password di accesso",
 "Encryption" => "Cifratura",
 "File encryption is enabled." => "La cifratura dei file è abilitata.",
 "The following file types will not be encrypted:" => "I seguenti tipi di file non saranno cifrati:",
diff --git a/apps/files_encryption/l10n/ja_JP.php b/apps/files_encryption/l10n/ja_JP.php
index b7aeb8d8348c3a4a59b0d6050fef3b3c393554e5..35fba615aec29d6c6974cfd4b369655142e7be79 100644
--- a/apps/files_encryption/l10n/ja_JP.php
+++ b/apps/files_encryption/l10n/ja_JP.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "変換を完了するために、ownCloud クライアントに切り替えて、暗号化パスワードを変更してください。",
-"switched to client side encryption" => "クライアントサイドの暗号化に切り替えました",
-"Change encryption password to login password" => "暗号化パスワードをログインパスワードに変更",
-"Please check your passwords and try again." => "パスワードを確認してもう一度行なってください。",
-"Could not change your file encryption password to your login password" => "ファイル暗号化パスワードをログインパスワードに変更できませんでした。",
 "Encryption" => "暗号化",
 "File encryption is enabled." => "ファイルの暗号化は有効です。",
 "The following file types will not be encrypted:" => "次のファイルタイプは暗号化されません:",
diff --git a/apps/files_encryption/l10n/ko.php b/apps/files_encryption/l10n/ko.php
index 625906d89d6b00833dc4e8f1781c0d3f6ae3a6ad..bd1580578c42146002ac808db852674b847b0c6b 100644
--- a/apps/files_encryption/l10n/ko.php
+++ b/apps/files_encryption/l10n/ko.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "ownCloud로 전환한 다음 암호화에 사용할 암호를 변경하면 변환이 완료됩니다.",
-"switched to client side encryption" => "클라이언트 암호화로 변경됨",
-"Change encryption password to login password" => "암호화 암호를 로그인 암호로 변경",
-"Please check your passwords and try again." => "암호를 확인한 다음 다시 시도하십시오.",
-"Could not change your file encryption password to your login password" => "암호화 암호를 로그인 암호로 변경할 수 없습니다",
 "Encryption" => "암호화",
 "None" => "없음"
 );
diff --git a/apps/files_encryption/l10n/lv.php b/apps/files_encryption/l10n/lv.php
index 1aae1377516dea0252bd05e6070e985f22630626..fc31ccdb92d25209689358bc5e00522f3f2b1e36 100644
--- a/apps/files_encryption/l10n/lv.php
+++ b/apps/files_encryption/l10n/lv.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Lūdzu, pārslēdzieties uz savu ownCloud klientu un maniet savu šifrēšanas paroli, lai pabeigtu pārveidošanu.",
-"switched to client side encryption" => "Pārslēdzās uz klienta puses šifrēšanu",
-"Change encryption password to login password" => "Mainīt šifrēšanas paroli uz ierakstīšanās paroli",
-"Please check your passwords and try again." => "Lūdzu, pārbaudiet savas paroles un mēģiniet vēlreiz.",
-"Could not change your file encryption password to your login password" => "Nevarēja mainīt datņu šifrēšanas paroli uz ierakstīšanās paroli",
 "Encryption" => "Šifrēšana",
 "File encryption is enabled." => "Datņu šifrēšana ir aktivēta.",
 "The following file types will not be encrypted:" => "Sekojošās datnes netiks šifrētas:",
diff --git a/apps/files_encryption/l10n/nl.php b/apps/files_encryption/l10n/nl.php
index c434330049bf124f806993b19ce71e867862a4c6..b1cba96aad775d5d5256796ab530cf674759651f 100644
--- a/apps/files_encryption/l10n/nl.php
+++ b/apps/files_encryption/l10n/nl.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Schakel om naar uw eigen ownCloud client en wijzig uw versleutelwachtwoord om de conversie af te ronden.",
-"switched to client side encryption" => "overgeschakeld naar client side encryptie",
-"Change encryption password to login password" => "Verander encryptie wachtwoord naar login wachtwoord",
-"Please check your passwords and try again." => "Controleer uw wachtwoorden en probeer het opnieuw.",
-"Could not change your file encryption password to your login password" => "Kon het bestandsencryptie wachtwoord niet veranderen naar het login wachtwoord",
 "Encryption" => "Versleuteling",
 "File encryption is enabled." => "Bestandsversleuteling geactiveerd.",
 "The following file types will not be encrypted:" => "De volgende bestandstypen zullen niet worden versleuteld:",
diff --git a/apps/files_encryption/l10n/pt_BR.php b/apps/files_encryption/l10n/pt_BR.php
index 356419e0e7fb2ac8cf73593e9a7402e05188e823..2b4af2a87729b6b8b5072ff7affd05255599ecfb 100644
--- a/apps/files_encryption/l10n/pt_BR.php
+++ b/apps/files_encryption/l10n/pt_BR.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Por favor, vá ao seu cliente ownCloud e mude sua criptografia de senha para completar a conversão.",
-"switched to client side encryption" => "alterado para criptografia por parte do cliente",
-"Change encryption password to login password" => "Mudar senha de criptografia para senha de login",
-"Please check your passwords and try again." => "Por favor, verifique suas senhas e tente novamente.",
-"Could not change your file encryption password to your login password" => "Não foi possível mudar sua senha de criptografia de arquivos para sua senha de login",
 "Encryption" => "Criptografia",
 "None" => "Nenhuma"
 );
diff --git a/apps/files_encryption/l10n/pt_PT.php b/apps/files_encryption/l10n/pt_PT.php
index 4dac4d2273b230f8d5ed32d1dca65a9e75087eaa..1c46011fc10b48b628dd03826aa913e6f5e9d9a2 100644
--- a/apps/files_encryption/l10n/pt_PT.php
+++ b/apps/files_encryption/l10n/pt_PT.php
@@ -1,9 +1,7 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Por favor, use o seu cliente de sincronização do ownCloud e altere a sua password de encriptação para concluír a conversão.",
-"switched to client side encryption" => "Alterado para encriptação do lado do cliente",
-"Change encryption password to login password" => "Alterar a password de encriptação para a password de login",
-"Please check your passwords and try again." => "Por favor verifique as suas paswords e tente de novo.",
-"Could not change your file encryption password to your login password" => "Não foi possível alterar a password de encriptação de ficheiros para a sua password de login",
 "Encryption" => "Encriptação",
+"File encryption is enabled." => "A encriptação de ficheiros está ligada",
+"The following file types will not be encrypted:" => "Os seguintes ficheiros não serão encriptados:",
+"Exclude the following file types from encryption:" => "Excluir da encriptação os seguintes tipos de ficheiro:",
 "None" => "Nenhum"
 );
diff --git a/apps/files_encryption/l10n/ro.php b/apps/files_encryption/l10n/ro.php
index 9a3acc18dd35bc4eca97bfbd0f9f18a6863e521f..a5a6fb3cb787e2440a8993be13150190e60d8888 100644
--- a/apps/files_encryption/l10n/ro.php
+++ b/apps/files_encryption/l10n/ro.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Te rugăm să mergi în clientul ownCloud și să schimbi parola pentru a finisa conversia",
-"switched to client side encryption" => "setat la encriptare locală",
-"Change encryption password to login password" => "Schimbă parola de ecriptare în parolă de acces",
-"Please check your passwords and try again." => "Verifică te rog parolele și înceracă din nou.",
-"Could not change your file encryption password to your login password" => "Nu s-a putut schimba parola de encripție a fișierelor ca parolă de acces",
 "Encryption" => "Încriptare",
 "None" => "Niciuna"
 );
diff --git a/apps/files_encryption/l10n/ru.php b/apps/files_encryption/l10n/ru.php
index 651885fe022fbe44ea237e002b57d31d9c814b30..22c1e3da3747c957863a007ce8bc54708eebe2cf 100644
--- a/apps/files_encryption/l10n/ru.php
+++ b/apps/files_encryption/l10n/ru.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Пожалуйста переключитесь на Ваш клиент ownCloud и поменяйте пароль шиврования для завершения преобразования.",
-"switched to client side encryption" => "переключён на шифрование со стороны клиента",
-"Change encryption password to login password" => "Изменить пароль шифрования для пароля входа",
-"Please check your passwords and try again." => "Пожалуйста проверьте пароли и попробуйте снова.",
-"Could not change your file encryption password to your login password" => "Невозможно изменить Ваш пароль файла шифрования для пароля входа",
 "Encryption" => "Шифрование",
 "File encryption is enabled." => "Шифрование файла включено.",
 "The following file types will not be encrypted:" => "Следующие типы файлов не будут зашифрованы:",
diff --git a/apps/files_encryption/l10n/ru_RU.php b/apps/files_encryption/l10n/ru_RU.php
index dbbb22ed9cf2fd23811e35c6e0eca130aadeadc9..7222235485c6f50a15b797ec924ef7ab27aa2645 100644
--- a/apps/files_encryption/l10n/ru_RU.php
+++ b/apps/files_encryption/l10n/ru_RU.php
@@ -1,7 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Пожалуйста, переключитесь на ownCloud-клиент и измените Ваш пароль шифрования для завершения конвертации.",
-"switched to client side encryption" => "переключено на шифрование на клиентской стороне",
-"Please check your passwords and try again." => "Пожалуйста, проверьте Ваш пароль и попробуйте снова",
 "Encryption" => "Шифрование",
 "None" => "Ни один"
 );
diff --git a/apps/files_encryption/l10n/sk_SK.php b/apps/files_encryption/l10n/sk_SK.php
index dc2907e704f8a9eb136daf14638b0ace55c18dda..004c3b129a551083cfdcefe56c2d41a5844345aa 100644
--- a/apps/files_encryption/l10n/sk_SK.php
+++ b/apps/files_encryption/l10n/sk_SK.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Prosím, prejdite do svojho klienta ownCloud a zmente šifrovacie heslo na dokončenie konverzie.",
-"switched to client side encryption" => "prepnuté na šifrovanie prostredníctvom klienta",
-"Change encryption password to login password" => "Zmeniť šifrovacie heslo na prihlasovacie",
-"Please check your passwords and try again." => "Skontrolujte si heslo a skúste to znovu.",
-"Could not change your file encryption password to your login password" => "Nie je možné zmeniť šifrovacie heslo na prihlasovacie",
 "Encryption" => "Šifrovanie",
 "File encryption is enabled." => "Kryptovanie súborov nastavené.",
 "The following file types will not be encrypted:" => "Uvedené typy súborov nebudú kryptované:",
diff --git a/apps/files_encryption/l10n/sv.php b/apps/files_encryption/l10n/sv.php
index e5294974e4efc9f35fda7d7e72f74bc1c6b24d6b..e214a937a1d4195883b87866080a523ca50acaf1 100644
--- a/apps/files_encryption/l10n/sv.php
+++ b/apps/files_encryption/l10n/sv.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "Vänligen växla till ownCloud klienten och ändra ditt krypteringslösenord för att slutföra omvandlingen.",
-"switched to client side encryption" => "Bytte till kryptering på klientsidan",
-"Change encryption password to login password" => "Ändra krypteringslösenord till loginlösenord",
-"Please check your passwords and try again." => "Kontrollera dina lösenord och försök igen.",
-"Could not change your file encryption password to your login password" => "Kunde inte ändra ditt filkrypteringslösenord till ditt loginlösenord",
 "Encryption" => "Kryptering",
 "File encryption is enabled." => "Filkryptering är aktiverat.",
 "The following file types will not be encrypted:" => "Följande filtyper kommer inte att krypteras:",
diff --git a/apps/files_encryption/l10n/th_TH.php b/apps/files_encryption/l10n/th_TH.php
index 28d9e30864fa5e41471430b20701c2b71b44dd35..e46d249118606f7f97352d974cd6054385262726 100644
--- a/apps/files_encryption/l10n/th_TH.php
+++ b/apps/files_encryption/l10n/th_TH.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "กรุณาสลับไปที่โปรแกรมไคลเอนต์ ownCloud ของคุณ แล้วเปลี่ยนรหัสผ่านสำหรับการเข้ารหัสเพื่อแปลงข้อมูลให้เสร็จสมบูรณ์",
-"switched to client side encryption" => "สลับไปใช้การเข้ารหัสจากโปรแกรมไคลเอนต์",
-"Change encryption password to login password" => "เปลี่ยนรหัสผ่านสำหรับเข้ารหัสไปเป็นรหัสผ่านสำหรับการเข้าสู่ระบบ",
-"Please check your passwords and try again." => "กรุณาตรวจสอบรหัสผ่านของคุณแล้วลองใหม่อีกครั้ง",
-"Could not change your file encryption password to your login password" => "ไม่สามารถเปลี่ยนรหัสผ่านสำหรับการเข้ารหัสไฟล์ของคุณไปเป็นรหัสผ่านสำหรับการเข้าสู่ระบบของคุณได้",
 "Encryption" => "การเข้ารหัส",
 "None" => "ไม่ต้อง"
 );
diff --git a/apps/files_encryption/l10n/vi.php b/apps/files_encryption/l10n/vi.php
index b86cd8397831a7c30ef324a51743e68a28de9045..0a88d1b2db60b09f23e67d9ed317e9e4aa771cc7 100644
--- a/apps/files_encryption/l10n/vi.php
+++ b/apps/files_encryption/l10n/vi.php
@@ -1,4 +1,7 @@
 <?php $TRANSLATIONS = array(
 "Encryption" => "Mã hóa",
+"File encryption is enabled." => "Mã hóa file đã mở",
+"The following file types will not be encrypted:" => "Loại file sau sẽ không được mã hóa",
+"Exclude the following file types from encryption:" => "Việc mã hóa không bao gồm loại file sau",
 "None" => "Không có gì hết"
 );
diff --git a/apps/files_encryption/l10n/zh_TW.php b/apps/files_encryption/l10n/zh_TW.php
index bd8257ed602ab2edd46cdb624d20efca41a4b0ac..1655e171433828affb536dc94ee161cf710ae901 100644
--- a/apps/files_encryption/l10n/zh_TW.php
+++ b/apps/files_encryption/l10n/zh_TW.php
@@ -1,9 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Please switch to your ownCloud client and change your encryption password to complete the conversion." => "請至您的 ownCloud 客戶端程式修改您的加密密碼以完成轉換。",
-"switched to client side encryption" => "已切換為客戶端加密",
-"Change encryption password to login password" => "將加密密碼修改為登入密碼",
-"Please check your passwords and try again." => "請檢查您的密碼並再試一次。",
-"Could not change your file encryption password to your login password" => "無法變更您的檔案加密密碼為登入密碼",
 "Encryption" => "加密",
 "None" => "無"
 );
diff --git a/apps/files_external/3rdparty/phpseclib/AUTHORS b/apps/files_external/3rdparty/phpseclib/AUTHORS
new file mode 100644
index 0000000000000000000000000000000000000000..7bae8ab94e1a2b05c0fe3f81f7897dfc114af773
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/AUTHORS
@@ -0,0 +1,3 @@
+phpseclib Lead Developer:  TerraFrost (Jim Wigginton)
+
+phpseclib Developers:      monnerat (Patrick Monnerat)
\ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/LICENSE b/apps/files_external/3rdparty/phpseclib/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..6ecd9b9bec11f7587fd76974810a90bb7faad537
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/LICENSE
@@ -0,0 +1,21 @@
+Copyright 2007-2012 TerraFrost and other contributors
+http://phpseclib.sourceforge.net/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/README.md b/apps/files_external/3rdparty/phpseclib/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..fbd58bd82b1f2c1b3cc25c13994359c12325e56c
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/README.md
@@ -0,0 +1,16 @@
+# phpseclib - PHP Secure Communications Library
+
+[![Build Status](https://secure.travis-ci.org/phpseclib/phpseclib.png?branch=master)](http://travis-ci.org/phpseclib/phpseclib)
+
+MIT-licensed pure-PHP implementations of an arbitrary-precision integer
+arithmetic library, fully PKCS#1 (v2.1) compliant RSA, DES, 3DES, RC4, Rijndael,
+AES, SSH-1, SSH-2, SFTP, and X.509
+
+* [Download (0.3.1)](http://sourceforge.net/projects/phpseclib/files/phpseclib0.3.1.zip/download)
+* [Browse Git](https://github.com/phpseclib/phpseclib)
+* [Documentation](http://phpseclib.sourceforge.net/)
+* [Support](http://www.frostjedi.com/phpbb/viewforum.php?f=46)
+* [Code Coverage Report](http://phpseclib.bantux.org/code_coverage/latest/)
+
+<img src="http://phpseclib.sourceforge.net/pear-icon.png" alt="PEAR Channel" width="16" height="16">
+PEAR Channel: [phpseclib.sourceforge.net](http://phpseclib.sourceforge.net/pear.htm)
diff --git a/apps/files_external/3rdparty/phpseclib/composer.json b/apps/files_external/3rdparty/phpseclib/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..11008cd81d1279b744b109df6bb094bb3d6d75e0
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/composer.json
@@ -0,0 +1,48 @@
+{
+    "name": "phpseclib/phpseclib",
+    "type": "library",
+    "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
+    "keywords": [
+        "security",
+        "crypto",
+        "cryptography",
+        "encryption",
+        "signature",
+        "signing",
+        "rsa",
+        "aes",
+        "ssh",
+        "sftp",
+        "x509",
+        "x.509",
+        "asn1",
+        "asn.1",
+        "BigInteger"
+        ],
+    "homepage": "http://phpseclib.sourceforge.net",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Jim Wigginton",
+            "email": "terrafrost@php.net",
+            "role": "Developer"
+        }
+    ],
+    "require": {
+        "php": ">=5.0.0"
+    },
+    "suggest": {
+        "ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.",
+        "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
+        "pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP >= 4.3.3." 
+    },
+    "include-path": ["phpseclib/"],
+    "autoload": {
+        "psr-0": {
+            "Crypt": "phpseclib/",
+            "File": "phpseclib/",
+            "Math": "phpseclib/",
+            "Net": "phpseclib/"
+        }
+    }
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/AES.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/AES.php
new file mode 100644
index 0000000000000000000000000000000000000000..bc05adf67a710925749176d6c1c2a595a9c4f274
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/AES.php
@@ -0,0 +1,946 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of AES.
+ *
+ * Uses mcrypt, if available, and an internal implementation, otherwise.
+ *
+ * PHP versions 4 and 5
+ *
+ * If {@link Crypt_AES::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
+ * {@link Crypt_AES::setKey() setKey()}.  ie. if the key is 128-bits, the key length will be 128-bits.  If it's 136-bits
+ * it'll be null-padded to 160-bits and 160 bits will be the key length until {@link Crypt_Rijndael::setKey() setKey()}
+ * is called, again, at which point, it'll be recalculated.
+ *
+ * Since Crypt_AES extends Crypt_Rijndael, some functions are available to be called that, in the context of AES, don't
+ * make a whole lot of sense.  {@link Crypt_AES::setBlockLength() setBlockLength()}, for instance.  Calling that function,
+ * however possible, won't do anything (AES has a fixed block length whereas Rijndael has a variable one).
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ *    include('Crypt/AES.php');
+ *
+ *    $aes = new Crypt_AES();
+ *
+ *    $aes->setKey('abcdefghijklmnop');
+ *
+ *    $size = 10 * 1024;
+ *    $plaintext = '';
+ *    for ($i = 0; $i < $size; $i++) {
+ *        $plaintext.= 'a';
+ *    }
+ *
+ *    echo $aes->decrypt($aes->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category   Crypt
+ * @package    Crypt_AES
+ * @author     Jim Wigginton <terrafrost@php.net>
+ * @copyright  MMVIII Jim Wigginton
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @version    $Id: AES.php,v 1.7 2010/02/09 06:10:25 terrafrost Exp $
+ * @link       http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Crypt_Rijndael
+ */
+if (!class_exists('Crypt_Rijndael')) {
+    require_once 'Rijndael.php';
+}
+
+/**#@+
+ * @access public
+ * @see Crypt_AES::encrypt()
+ * @see Crypt_AES::decrypt()
+ */
+/**
+ * Encrypt / decrypt using the Counter mode.
+ *
+ * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
+ */
+define('CRYPT_AES_MODE_CTR', -1);
+/**
+ * Encrypt / decrypt using the Electronic Code Book mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
+ */
+define('CRYPT_AES_MODE_ECB', 1);
+/**
+ * Encrypt / decrypt using the Code Book Chaining mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
+ */
+define('CRYPT_AES_MODE_CBC', 2);
+/**
+ * Encrypt / decrypt using the Cipher Feedback mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
+ */
+define('CRYPT_AES_MODE_CFB', 3);
+/**
+ * Encrypt / decrypt using the Cipher Feedback mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
+ */
+define('CRYPT_AES_MODE_OFB', 4);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_AES::Crypt_AES()
+ */
+/**
+ * Toggles the internal implementation
+ */
+define('CRYPT_AES_MODE_INTERNAL', 1);
+/**
+ * Toggles the mcrypt implementation
+ */
+define('CRYPT_AES_MODE_MCRYPT', 2);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of AES.
+ *
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access  public
+ * @package Crypt_AES
+ */
+class Crypt_AES extends Crypt_Rijndael {
+    /**
+     * mcrypt resource for encryption
+     *
+     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+     *
+     * @see Crypt_AES::encrypt()
+     * @var String
+     * @access private
+     */
+    var $enmcrypt;
+
+    /**
+     * mcrypt resource for decryption
+     *
+     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+     *
+     * @see Crypt_AES::decrypt()
+     * @var String
+     * @access private
+     */
+    var $demcrypt;
+
+    /**
+     * mcrypt resource for CFB mode
+     *
+     * @see Crypt_AES::encrypt()
+     * @see Crypt_AES::decrypt()
+     * @var String
+     * @access private
+     */
+    var $ecb;
+
+    /**
+     * The SubByte S-Box
+     *
+     * @see Crypt_AES::_encryptBlock()
+     * @var Array
+     * @access intern
+     */
+    var $sbox = array(
+        0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
+        0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
+        0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
+        0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
+        0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
+        0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
+        0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
+        0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
+        0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
+        0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
+        0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
+        0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
+        0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
+        0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
+        0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
+        0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
+    );
+
+    /**
+     * The inverse SubByte S-Box
+     *
+     * @see Crypt_AES::_decryptBlock()
+     * @var Array
+     * @access intern
+     */
+    var $isbox = array(
+        0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
+        0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
+        0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
+        0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
+        0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
+        0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
+        0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
+        0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
+        0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
+        0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
+        0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
+        0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
+        0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
+        0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
+        0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
+        0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
+    );
+
+    /**
+     * Default Constructor.
+     *
+     * Determines whether or not the mcrypt extension should be used.  $mode should only, at present, be
+     * CRYPT_AES_MODE_ECB or CRYPT_AES_MODE_CBC.  If not explictly set, CRYPT_AES_MODE_CBC will be used.
+     *
+     * @param optional Integer $mode
+     * @return Crypt_AES
+     * @access public
+     */
+    function Crypt_AES($mode = CRYPT_AES_MODE_CBC)
+    {
+        if ( !defined('CRYPT_AES_MODE') ) {
+            switch (true) {
+                case extension_loaded('mcrypt') && in_array('rijndael-128', mcrypt_list_algorithms()):
+                    define('CRYPT_AES_MODE', CRYPT_AES_MODE_MCRYPT);
+                    break;
+                default:
+                    define('CRYPT_AES_MODE', CRYPT_AES_MODE_INTERNAL);
+            }
+        }
+
+        switch ( CRYPT_AES_MODE ) {
+            case CRYPT_AES_MODE_MCRYPT:
+                switch ($mode) {
+                    case CRYPT_AES_MODE_ECB:
+                        $this->paddable = true;
+                        $this->mode = MCRYPT_MODE_ECB;
+                        break;
+                    case CRYPT_AES_MODE_CTR:
+                        // ctr doesn't have a constant associated with it even though it appears to be fairly widely
+                        // supported.  in lieu of knowing just how widely supported it is, i've, for now, opted not to
+                        // include a compatibility layer.  the layer has been implemented but, for now, is commented out.
+                        $this->mode = 'ctr';
+                        //$this->mode = in_array('ctr', mcrypt_list_modes()) ? 'ctr' : CRYPT_AES_MODE_CTR;
+                        break;
+                    case CRYPT_AES_MODE_CFB:
+                        $this->mode = 'ncfb';
+                        break;
+                    case CRYPT_AES_MODE_OFB:
+                        $this->mode = MCRYPT_MODE_NOFB;
+                        break;
+                    case CRYPT_AES_MODE_CBC:
+                    default:
+                        $this->paddable = true;
+                        $this->mode = MCRYPT_MODE_CBC;
+                }
+
+                break;
+            default:
+                switch ($mode) {
+                    case CRYPT_AES_MODE_ECB:
+                        $this->paddable = true;
+                        $this->mode = CRYPT_RIJNDAEL_MODE_ECB;
+                        break;
+                    case CRYPT_AES_MODE_CTR:
+                        $this->mode = CRYPT_RIJNDAEL_MODE_CTR;
+                        break;
+                    case CRYPT_AES_MODE_CFB:
+                        $this->mode = CRYPT_RIJNDAEL_MODE_CFB;
+                        break;
+                    case CRYPT_AES_MODE_OFB:
+                        $this->mode = CRYPT_RIJNDAEL_MODE_OFB;
+                        break;
+                    case CRYPT_AES_MODE_CBC:
+                    default:
+                        $this->paddable = true;
+                        $this->mode = CRYPT_RIJNDAEL_MODE_CBC;
+                }
+        }
+
+        if (CRYPT_AES_MODE == CRYPT_AES_MODE_INTERNAL) {
+            parent::Crypt_Rijndael($this->mode);
+        }
+    }
+
+    /**
+     * Extended Crypt_Rijndael::_setup() 
+     *
+     * Optimizing the key schedule arrays ($w, $dw) for _encryptBlock() and _decryptBlock() after Crypt_Rijndael::_setup()
+     *
+     * @see Crypt_Rijndael::_setup()
+     * @access private
+     */
+    function _setup() 
+    {
+        if (!$this->changed) {
+            return;
+        }
+
+        $this->w = $this->dw = array();
+        parent::_setup();
+
+        $this->dw = array_reverse($this->dw);
+        $w  = array_pop($this->w);
+        $dw = array_pop($this->dw);
+        foreach ($this->w as $r => $wr) {
+            foreach ($wr as $c => $wc) {
+                $w[]  = $wc;
+                $dw[] = $this->dw[$r][$c];
+            }
+        }
+        $this->w  = $w;
+        $this->dw = $dw;
+    }
+
+    /**
+     * Dummy function
+     *
+     * Since Crypt_AES extends Crypt_Rijndael, this function is, technically, available, but it doesn't do anything.
+     *
+     * @access public
+     * @param Integer $length
+     */
+    function setBlockLength($length)
+    {
+        return;
+    }
+
+    /**
+     * Sets the initialization vector. (optional)
+     *
+     * SetIV is not required when CRYPT_RIJNDAEL_MODE_ECB is being used.  If not explictly set, it'll be assumed
+     * to be all zero's.
+     *
+     * @access public
+     * @param String $iv
+     */
+    function setIV($iv)
+    {
+        parent::setIV($iv);
+        if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) {
+            $this->changed = true;
+        }
+    }
+
+    /**
+     * Encrypts a message.
+     *
+     * $plaintext will be padded with up to 16 additional bytes.  Other AES implementations may or may not pad in the
+     * same manner.  Other common approaches to padding and the reasons why it's necessary are discussed in the following
+     * URL:
+     *
+     * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
+     *
+     * An alternative to padding is to, separately, send the length of the file.  This is what SSH, in fact, does.
+     * strlen($plaintext) will still need to be a multiple of 16, however, arbitrary values can be added to make it that
+     * length.
+     *
+     * @see Crypt_AES::decrypt()
+     * @access public
+     * @param String $plaintext
+     */
+    function encrypt($plaintext)
+    {
+        if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) {
+            $this->_mcryptSetup();
+
+            // re: http://phpseclib.sourceforge.net/cfb-demo.phps
+            // using mcrypt's default handing of CFB the above would output two different things.  using phpseclib's
+            // rewritten CFB implementation the above outputs the same thing twice.
+            if ($this->mode == 'ncfb' && $this->continuousBuffer) {
+                $iv = &$this->encryptIV;
+                $pos = &$this->enbuffer['pos'];
+                $len = strlen($plaintext);
+                $ciphertext = '';
+                $i = 0;
+                if ($pos) {
+                    $orig_pos = $pos;
+                    $max = 16 - $pos;
+                    if ($len >= $max) {
+                        $i = $max;
+                        $len-= $max;
+                        $pos = 0;
+                    } else {
+                        $i = $len;
+                        $pos+= $len;
+                        $len = 0;
+                    }
+                    $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
+                    $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
+                    $this->enbuffer['enmcrypt_init'] = true;
+                }
+                if ($len >= 16) {
+                    if ($this->enbuffer['enmcrypt_init'] === false || $len > 280) {
+                        if ($this->enbuffer['enmcrypt_init'] === true) {
+                            mcrypt_generic_init($this->enmcrypt, $this->key, $iv);
+                            $this->enbuffer['enmcrypt_init'] = false;
+                        }
+                        $ciphertext.= mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % 16));
+                        $iv = substr($ciphertext, -16);
+                        $len%= 16;
+                    } else {
+                        while ($len >= 16) {
+                            $iv = mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, 16);
+                            $ciphertext.= $iv;
+                            $len-= 16;
+                            $i+= 16;
+                        }
+                    }
+                }
+
+                if ($len) {
+                    $iv = mcrypt_generic($this->ecb, $iv);
+                    $block = $iv ^ substr($plaintext, -$len);
+                    $iv = substr_replace($iv, $block, 0, $len);
+                    $ciphertext.= $block;
+                    $pos = $len;
+                }
+
+                return $ciphertext;
+            }
+
+            if ($this->paddable) {
+                $plaintext = $this->_pad($plaintext);
+            }
+
+            $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);
+
+            if (!$this->continuousBuffer) {
+                mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv);
+            }
+
+            return $ciphertext;
+        }
+
+        return parent::encrypt($plaintext);
+    }
+
+    /**
+     * Decrypts a message.
+     *
+     * If strlen($ciphertext) is not a multiple of 16, null bytes will be added to the end of the string until it is.
+     *
+     * @see Crypt_AES::encrypt()
+     * @access public
+     * @param String $ciphertext
+     */
+    function decrypt($ciphertext)
+    {
+        if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) {
+            $this->_mcryptSetup();
+
+            if ($this->mode == 'ncfb' && $this->continuousBuffer) {
+                $iv = &$this->decryptIV;
+                $pos = &$this->debuffer['pos'];
+                $len = strlen($ciphertext);
+                $plaintext = '';
+                $i = 0;
+                if ($pos) {
+                    $orig_pos = $pos;
+                    $max = 16 - $pos;
+                    if ($len >= $max) {
+                        $i = $max;
+                        $len-= $max;
+                        $pos = 0;
+                    } else {
+                        $i = $len;
+                        $pos+= $len;
+                        $len = 0;
+                    }
+                    // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
+                    $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
+                    $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
+                }
+                if ($len >= 16) {
+                    $cb = substr($ciphertext, $i, $len - $len % 16);
+                    $plaintext.= mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;
+                    $iv = substr($cb, -16);
+                    $len%= 16;
+                }
+                if ($len) {
+                    $iv = mcrypt_generic($this->ecb, $iv);
+                    $plaintext.= $iv ^ substr($ciphertext, -$len);
+                    $iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len);
+                    $pos = $len;
+                }
+
+                return $plaintext;
+            }
+
+            if ($this->paddable) {
+                // we pad with chr(0) since that's what mcrypt_generic does.  to quote from http://php.net/function.mcrypt-generic :
+                // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
+                $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 15) & 0xFFFFFFF0, chr(0));
+            }
+
+            $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);
+
+            if (!$this->continuousBuffer) {
+                mcrypt_generic_init($this->demcrypt, $this->key, $this->iv);
+            }
+
+            return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+        }
+
+        return parent::decrypt($ciphertext);
+    }
+
+    /**
+     * Setup mcrypt
+     *
+     * Validates all the variables.
+     *
+     * @access private
+     */
+    function _mcryptSetup()
+    {
+        if (!$this->changed) {
+            return;
+        }
+
+        if (!$this->explicit_key_length) {
+            // this just copied from Crypt_Rijndael::_setup()
+            $length = strlen($this->key) >> 2;
+            if ($length > 8) {
+                $length = 8;
+            } else if ($length < 4) {
+                $length = 4;
+            }
+            $this->Nk = $length;
+            $this->key_size = $length << 2;
+        }
+
+        switch ($this->Nk) {
+            case 4: // 128
+                $this->key_size = 16;
+                break;
+            case 5: // 160
+            case 6: // 192
+                $this->key_size = 24;
+                break;
+            case 7: // 224
+            case 8: // 256
+                $this->key_size = 32;
+        }
+
+        $this->key = str_pad(substr($this->key, 0, $this->key_size), $this->key_size, chr(0));
+        $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($this->iv, 0, 16), 16, chr(0));
+
+        if (!isset($this->enmcrypt)) {
+            $mode = $this->mode;
+            //$mode = $this->mode == CRYPT_AES_MODE_CTR ? MCRYPT_MODE_ECB : $this->mode;
+
+            $this->demcrypt = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', $mode, '');
+            $this->enmcrypt = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', $mode, '');
+
+            if ($mode == 'ncfb') {
+                $this->ecb = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
+            }
+
+        } // else should mcrypt_generic_deinit be called?
+
+        mcrypt_generic_init($this->demcrypt, $this->key, $this->iv);
+        mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv);
+
+        if ($this->mode == 'ncfb') {
+            mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
+        }
+
+        $this->changed = false;
+    }
+
+    /**
+     * Encrypts a block
+     *
+     * Optimized over Crypt_Rijndael's implementation by means of loop unrolling.
+     *
+     * @see Crypt_Rijndael::_encryptBlock()
+     * @access private
+     * @param String $in
+     * @return String
+     */
+    function _encryptBlock($in)
+    {
+        $state = unpack('N*', $in);
+
+        $sbox = $this->sbox;
+        $w  = $this->w;
+        $t0 = $this->t0;
+        $t1 = $this->t1;
+        $t2 = $this->t2;
+        $t3 = $this->t3;
+
+        // addRoundKey
+        $s0 = $state[1] ^ $w[4];
+        $s1 = $state[2] ^ $w[5];
+        $s2 = $state[3] ^ $w[6];
+        $s3 = $state[4] ^ $w[7];
+
+        // shiftRows + subWord + mixColumns + addRoundKey
+        $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[8];
+        $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[9];
+        $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[10];
+        $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[11];
+
+        $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[12];
+        $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[13];
+        $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[14];
+        $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[15];
+
+        $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[16];
+        $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[17];
+        $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[18];
+        $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[19];
+
+        $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[20];
+        $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[21];
+        $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[22];
+        $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[23];
+
+        $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[24];
+        $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[25];
+        $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[26];
+        $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[27];
+
+        $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[28];
+        $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[29];
+        $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[30];
+        $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[31];
+
+        $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[32];
+        $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[33];
+        $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[34];
+        $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[35];
+
+        $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[36];
+        $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[37];
+        $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[38];
+        $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[39];
+
+        $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[40];
+        $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[41];
+        $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[42];
+        $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[43];
+
+        switch ($this->Nr) {
+            case 10:
+                break;
+
+            case 14:
+                $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[44];
+                $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[45];
+                $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[46];
+                $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[47];
+
+                $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[48];
+                $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[49];
+                $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[50];
+                $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[51];
+
+                $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[52];
+                $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[53];
+                $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[54];
+                $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[55];
+
+                $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[56];
+                $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[57];
+                $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[58];
+                $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[59];
+                break;
+
+            case 12:
+                $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[44];
+                $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[45];
+                $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[46];
+                $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[47];
+
+                $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[48];
+                $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[49];
+                $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[50];
+                $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[51];
+                break;
+
+            case 13:
+                $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[44];
+                $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[45];
+                $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[46];
+                $s3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[47];
+
+                $e0 = $t0[($s0 >> 24) & 0xff] ^ $t1[($s1 >> 16) & 0xff] ^ $t2[($s2 >> 8) & 0xff] ^ $t3[$s3 & 0xff] ^ $w[48];
+                $e1 = $t0[($s1 >> 24) & 0xff] ^ $t1[($s2 >> 16) & 0xff] ^ $t2[($s3 >> 8) & 0xff] ^ $t3[$s0 & 0xff] ^ $w[49];
+                $e2 = $t0[($s2 >> 24) & 0xff] ^ $t1[($s3 >> 16) & 0xff] ^ $t2[($s0 >> 8) & 0xff] ^ $t3[$s1 & 0xff] ^ $w[50];
+                $e3 = $t0[($s3 >> 24) & 0xff] ^ $t1[($s0 >> 16) & 0xff] ^ $t2[($s1 >> 8) & 0xff] ^ $t3[$s2 & 0xff] ^ $w[51];
+
+                $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[52];
+                $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[53];
+                $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[54];
+                $e3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[55];
+                // Note: Here we skip $s3 but using $e3
+
+                $e0 = $s0;
+                $e1 = $s1;
+                $e2 = $s2;
+                // $e3 = $s3;
+                break;
+
+            default: // 11
+                $s0 = $t0[($e0 >> 24) & 0xff] ^ $t1[($e1 >> 16) & 0xff] ^ $t2[($e2 >> 8) & 0xff] ^ $t3[$e3 & 0xff] ^ $w[44];
+                $s1 = $t0[($e1 >> 24) & 0xff] ^ $t1[($e2 >> 16) & 0xff] ^ $t2[($e3 >> 8) & 0xff] ^ $t3[$e0 & 0xff] ^ $w[45];
+                $s2 = $t0[($e2 >> 24) & 0xff] ^ $t1[($e3 >> 16) & 0xff] ^ $t2[($e0 >> 8) & 0xff] ^ $t3[$e1 & 0xff] ^ $w[46];
+                $e3 = $t0[($e3 >> 24) & 0xff] ^ $t1[($e0 >> 16) & 0xff] ^ $t2[($e1 >> 8) & 0xff] ^ $t3[$e2 & 0xff] ^ $w[47];
+                // Note: Here we skip $s3 but using $e3
+
+                $e0 = $s0;
+                $e1 = $s1;
+                $e2 = $s2;
+                // $e3 = $s3;
+        }
+
+        // subWord
+        $e0 = $sbox[$e0 & 0xff] | ($sbox[($e0 >> 8) & 0xff] << 8) | ($sbox[($e0 >> 16) & 0xff] << 16) | ($sbox[($e0 >> 24) & 0xff] << 24);
+        $e1 = $sbox[$e1 & 0xff] | ($sbox[($e1 >> 8) & 0xff] << 8) | ($sbox[($e1 >> 16) & 0xff] << 16) | ($sbox[($e1 >> 24) & 0xff] << 24);
+        $e2 = $sbox[$e2 & 0xff] | ($sbox[($e2 >> 8) & 0xff] << 8) | ($sbox[($e2 >> 16) & 0xff] << 16) | ($sbox[($e2 >> 24) & 0xff] << 24);
+        $e3 = $sbox[$e3 & 0xff] | ($sbox[($e3 >> 8) & 0xff] << 8) | ($sbox[($e3 >> 16) & 0xff] << 16) | ($sbox[($e3 >> 24) & 0xff] << 24);
+
+        // shiftRows + addRoundKey
+        return pack('N*',
+            ($e0 & 0xFF000000) ^ ($e1 & 0x00FF0000) ^ ($e2 & 0x0000FF00) ^ ($e3 & 0x000000FF) ^ $w[0],
+            ($e1 & 0xFF000000) ^ ($e2 & 0x00FF0000) ^ ($e3 & 0x0000FF00) ^ ($e0 & 0x000000FF) ^ $w[1],
+            ($e2 & 0xFF000000) ^ ($e3 & 0x00FF0000) ^ ($e0 & 0x0000FF00) ^ ($e1 & 0x000000FF) ^ $w[2],
+            ($e3 & 0xFF000000) ^ ($e0 & 0x00FF0000) ^ ($e1 & 0x0000FF00) ^ ($e2 & 0x000000FF) ^ $w[3]
+        );
+    }
+
+    /**
+     * Decrypts a block
+     *
+     * Optimized over Crypt_Rijndael's implementation by means of loop unrolling.
+     *
+     * @see Crypt_Rijndael::_decryptBlock()
+     * @access private
+     * @param String $in
+     * @return String
+     */
+    function _decryptBlock($in)
+    {
+        $state = unpack('N*', $in);
+
+        $sbox = $this->isbox;
+        $dw  = $this->dw;
+        $dt0 = $this->dt0;
+        $dt1 = $this->dt1;
+        $dt2 = $this->dt2;
+        $dt3 = $this->dt3;
+
+        // addRoundKey
+        $s0 = $state[1] ^ $dw[4];
+        $s1 = $state[2] ^ $dw[5];
+        $s2 = $state[3] ^ $dw[6];
+        $s3 = $state[4] ^ $dw[7];
+
+        // invShiftRows + invSubBytes + invMixColumns + addRoundKey
+        $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[8];
+        $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[9];
+        $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[10];
+        $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[11];
+
+        $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[12];
+        $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[13];
+        $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[14];
+        $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[15];
+
+        $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[16];
+        $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[17];
+        $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[18];
+        $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[19];
+
+        $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[20];
+        $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[21];
+        $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[22];
+        $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[23];
+
+        $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[24];
+        $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[25];
+        $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[26];
+        $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[27];
+
+        $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[28];
+        $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[29];
+        $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[30];
+        $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[31];
+
+        $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[32];
+        $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[33];
+        $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[34];
+        $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[35];
+
+        $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[36];
+        $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[37];
+        $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[38];
+        $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[39];
+
+        $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[40];
+        $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[41];
+        $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[42];
+        $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[43];
+
+        switch ($this->Nr) {
+            case 10:
+                break;
+
+            case 14:
+                $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[44];
+                $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[45];
+                $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[46];
+                $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[47];
+
+                $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[48];
+                $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[49];
+                $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[50];
+                $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[51];
+
+                $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[52];
+                $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[53];
+                $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[54];
+                $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[55];
+
+                $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[56];
+                $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[57];
+                $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[58];
+                $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[59];
+                break;
+
+            case 12:
+                $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[44];
+                $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[45];
+                $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[46];
+                $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[47];
+
+                $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[48];
+                $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[49];
+                $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[50];
+                $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[51];
+                break;
+
+            case 13:
+                $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[44];
+                $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[45];
+                $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[46];
+                $s3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[47];
+
+                $e0 = $dt0[($s0 >> 24) & 0xff] ^ $dt1[($s3 >> 16) & 0xff] ^ $dt2[($s2 >> 8) & 0xff] ^ $dt3[$s1 & 0xff] ^ $dw[48];
+                $e1 = $dt0[($s1 >> 24) & 0xff] ^ $dt1[($s0 >> 16) & 0xff] ^ $dt2[($s3 >> 8) & 0xff] ^ $dt3[$s2 & 0xff] ^ $dw[49];
+                $e2 = $dt0[($s2 >> 24) & 0xff] ^ $dt1[($s1 >> 16) & 0xff] ^ $dt2[($s0 >> 8) & 0xff] ^ $dt3[$s3 & 0xff] ^ $dw[50];
+                $e3 = $dt0[($s3 >> 24) & 0xff] ^ $dt1[($s2 >> 16) & 0xff] ^ $dt2[($s1 >> 8) & 0xff] ^ $dt3[$s0 & 0xff] ^ $dw[51];
+
+                $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[52];
+                $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[53];
+                $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[54];
+                $e3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[55];
+                // Note: Here we skip $s3 but using $e3
+
+                $e0 = $s0;
+                $e1 = $s1;
+                $e2 = $s2;
+                // $e3 = $s3;
+                break;
+
+            default: // 11
+                $s0 = $dt0[($e0 >> 24) & 0xff] ^ $dt1[($e3 >> 16) & 0xff] ^ $dt2[($e2 >> 8) & 0xff] ^ $dt3[$e1 & 0xff] ^ $dw[44];
+                $s1 = $dt0[($e1 >> 24) & 0xff] ^ $dt1[($e0 >> 16) & 0xff] ^ $dt2[($e3 >> 8) & 0xff] ^ $dt3[$e2 & 0xff] ^ $dw[45];
+                $s2 = $dt0[($e2 >> 24) & 0xff] ^ $dt1[($e1 >> 16) & 0xff] ^ $dt2[($e0 >> 8) & 0xff] ^ $dt3[$e3 & 0xff] ^ $dw[46];
+                $e3 = $dt0[($e3 >> 24) & 0xff] ^ $dt1[($e2 >> 16) & 0xff] ^ $dt2[($e1 >> 8) & 0xff] ^ $dt3[$e0 & 0xff] ^ $dw[47];
+                // Note: Here we skip $s3 but using $e3
+
+                $e0 = $s0;
+                $e1 = $s1;
+                $e2 = $s2;
+                // $e3 = $s3;
+        }
+
+        // invSubWord
+        $e0 = $sbox[$e0 & 0xff] | ($sbox[($e0 >> 8) & 0xff] << 8) | ($sbox[($e0 >> 16) & 0xff] << 16) | ($sbox[($e0 >> 24) & 0xff] << 24);
+        $e1 = $sbox[$e1 & 0xff] | ($sbox[($e1 >> 8) & 0xff] << 8) | ($sbox[($e1 >> 16) & 0xff] << 16) | ($sbox[($e1 >> 24) & 0xff] << 24);
+        $e2 = $sbox[$e2 & 0xff] | ($sbox[($e2 >> 8) & 0xff] << 8) | ($sbox[($e2 >> 16) & 0xff] << 16) | ($sbox[($e2 >> 24) & 0xff] << 24);
+        $e3 = $sbox[$e3 & 0xff] | ($sbox[($e3 >> 8) & 0xff] << 8) | ($sbox[($e3 >> 16) & 0xff] << 16) | ($sbox[($e3 >> 24) & 0xff] << 24);
+
+        // invShiftRows + addRoundKey
+        return pack('N*',
+            ($e0 & 0xFF000000) ^ ($e3 & 0x00FF0000) ^ ($e2 & 0x0000FF00) ^ ($e1 & 0x000000FF) ^ $dw[0],
+            ($e1 & 0xFF000000) ^ ($e0 & 0x00FF0000) ^ ($e3 & 0x0000FF00) ^ ($e2 & 0x000000FF) ^ $dw[1],
+            ($e2 & 0xFF000000) ^ ($e1 & 0x00FF0000) ^ ($e0 & 0x0000FF00) ^ ($e3 & 0x000000FF) ^ $dw[2],
+            ($e3 & 0xFF000000) ^ ($e2 & 0x00FF0000) ^ ($e1 & 0x0000FF00) ^ ($e0 & 0x000000FF) ^ $dw[3]
+        );
+    }
+
+    /**
+     * Treat consecutive "packets" as if they are a continuous buffer.
+     *
+     * The default behavior.
+     *
+     * @see Crypt_Rijndael::disableContinuousBuffer()
+     * @access public
+     */
+    function enableContinuousBuffer()
+    {
+        parent::enableContinuousBuffer();
+
+        if (CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT) {
+            $this->enbuffer['enmcrypt_init'] = true;
+            $this->debuffer['demcrypt_init'] = true;
+        }
+    }
+
+    /**
+     * Treat consecutive packets as if they are a discontinuous buffer.
+     *
+     * The default behavior.
+     *
+     * @see Crypt_Rijndael::enableContinuousBuffer()
+     * @access public
+     */
+    function disableContinuousBuffer()
+    {
+        parent::disableContinuousBuffer();
+
+        if (CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT) {
+            mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv);
+            mcrypt_generic_init($this->demcrypt, $this->key, $this->iv);
+        }
+    }
+}
+
+// vim: ts=4:sw=4:et:
+// vim6: fdl=1:
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/DES.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/DES.php
new file mode 100644
index 0000000000000000000000000000000000000000..1197a50ab72df4c032eb87a1168ce77458452f85
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/DES.php
@@ -0,0 +1,1334 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of DES.
+ *
+ * Uses mcrypt, if available, and an internal implementation, otherwise.
+ *
+ * PHP versions 4 and 5
+ *
+ * Useful resources are as follows:
+ *
+ *  - {@link http://en.wikipedia.org/wiki/DES_supplementary_material Wikipedia: DES supplementary material}
+ *  - {@link http://www.itl.nist.gov/fipspubs/fip46-2.htm FIPS 46-2 - (DES), Data Encryption Standard}
+ *  - {@link http://www.cs.eku.edu/faculty/styer/460/Encrypt/JS-DES.html JavaScript DES Example}
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ *    include('Crypt/DES.php');
+ *
+ *    $des = new Crypt_DES();
+ *
+ *    $des->setKey('abcdefgh');
+ *
+ *    $size = 10 * 1024;
+ *    $plaintext = '';
+ *    for ($i = 0; $i < $size; $i++) {
+ *        $plaintext.= 'a';
+ *    }
+ *
+ *    echo $des->decrypt($des->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category   Crypt
+ * @package    Crypt_DES
+ * @author     Jim Wigginton <terrafrost@php.net>
+ * @copyright  MMVII Jim Wigginton
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @version    $Id: DES.php,v 1.12 2010/02/09 06:10:26 terrafrost Exp $
+ * @link       http://phpseclib.sourceforge.net
+ */
+
+/**#@+
+ * @access private
+ * @see Crypt_DES::_prepareKey()
+ * @see Crypt_DES::_processBlock()
+ */
+/**
+ * Contains array_reverse($keys[CRYPT_DES_DECRYPT])
+ */
+define('CRYPT_DES_ENCRYPT', 0);
+/**
+ * Contains array_reverse($keys[CRYPT_DES_ENCRYPT])
+ */
+define('CRYPT_DES_DECRYPT', 1);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Crypt_DES::encrypt()
+ * @see Crypt_DES::decrypt()
+ */
+/**
+ * Encrypt / decrypt using the Counter mode.
+ *
+ * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
+ */
+define('CRYPT_DES_MODE_CTR', -1);
+/**
+ * Encrypt / decrypt using the Electronic Code Book mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
+ */
+define('CRYPT_DES_MODE_ECB', 1);
+/**
+ * Encrypt / decrypt using the Code Book Chaining mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
+ */
+define('CRYPT_DES_MODE_CBC', 2);
+/**
+ * Encrypt / decrypt using the Cipher Feedback mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
+ */
+define('CRYPT_DES_MODE_CFB', 3);
+/**
+ * Encrypt / decrypt using the Cipher Feedback mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
+ */
+define('CRYPT_DES_MODE_OFB', 4);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_DES::Crypt_DES()
+ */
+/**
+ * Toggles the internal implementation
+ */
+define('CRYPT_DES_MODE_INTERNAL', 1);
+/**
+ * Toggles the mcrypt implementation
+ */
+define('CRYPT_DES_MODE_MCRYPT', 2);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of DES.
+ *
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access  public
+ * @package Crypt_DES
+ */
+class Crypt_DES {
+    /**
+     * The Key Schedule
+     *
+     * @see Crypt_DES::setKey()
+     * @var Array
+     * @access private
+     */
+    var $keys = "\0\0\0\0\0\0\0\0";
+
+    /**
+     * The Encryption Mode
+     *
+     * @see Crypt_DES::Crypt_DES()
+     * @var Integer
+     * @access private
+     */
+    var $mode;
+
+    /**
+     * Continuous Buffer status
+     *
+     * @see Crypt_DES::enableContinuousBuffer()
+     * @var Boolean
+     * @access private
+     */
+    var $continuousBuffer = false;
+
+    /**
+     * Padding status
+     *
+     * @see Crypt_DES::enablePadding()
+     * @var Boolean
+     * @access private
+     */
+    var $padding = true;
+
+    /**
+     * The Initialization Vector
+     *
+     * @see Crypt_DES::setIV()
+     * @var String
+     * @access private
+     */
+    var $iv = "\0\0\0\0\0\0\0\0";
+
+    /**
+     * A "sliding" Initialization Vector
+     *
+     * @see Crypt_DES::enableContinuousBuffer()
+     * @var String
+     * @access private
+     */
+    var $encryptIV = "\0\0\0\0\0\0\0\0";
+
+    /**
+     * A "sliding" Initialization Vector
+     *
+     * @see Crypt_DES::enableContinuousBuffer()
+     * @var String
+     * @access private
+     */
+    var $decryptIV = "\0\0\0\0\0\0\0\0";
+
+    /**
+     * mcrypt resource for encryption
+     *
+     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+     *
+     * @see Crypt_DES::encrypt()
+     * @var String
+     * @access private
+     */
+    var $enmcrypt;
+
+    /**
+     * mcrypt resource for decryption
+     *
+     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+     *
+     * @see Crypt_DES::decrypt()
+     * @var String
+     * @access private
+     */
+    var $demcrypt;
+
+    /**
+     * Does the enmcrypt resource need to be (re)initialized?
+     *
+     * @see Crypt_DES::setKey()
+     * @see Crypt_DES::setIV()
+     * @var Boolean
+     * @access private
+     */
+    var $enchanged = true;
+
+    /**
+     * Does the demcrypt resource need to be (re)initialized?
+     *
+     * @see Crypt_DES::setKey()
+     * @see Crypt_DES::setIV()
+     * @var Boolean
+     * @access private
+     */
+    var $dechanged = true;
+
+    /**
+     * Is the mode one that is paddable?
+     *
+     * @see Crypt_DES::Crypt_DES()
+     * @var Boolean
+     * @access private
+     */
+    var $paddable = false;
+
+    /**
+     * Encryption buffer for CTR, OFB and CFB modes
+     *
+     * @see Crypt_DES::encrypt()
+     * @var Array
+     * @access private
+     */
+    var $enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true);
+
+    /**
+     * Decryption buffer for CTR, OFB and CFB modes
+     *
+     * @see Crypt_DES::decrypt()
+     * @var Array
+     * @access private
+     */
+    var $debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'demcrypt_init' => true);
+
+    /**
+     * mcrypt resource for CFB mode
+     *
+     * @see Crypt_DES::encrypt()
+     * @see Crypt_DES::decrypt()
+     * @var String
+     * @access private
+     */
+    var $ecb;
+
+    /**
+     * Default Constructor.
+     *
+     * Determines whether or not the mcrypt extension should be used.  $mode should only, at present, be
+     * CRYPT_DES_MODE_ECB or CRYPT_DES_MODE_CBC.  If not explictly set, CRYPT_DES_MODE_CBC will be used.
+     *
+     * @param optional Integer $mode
+     * @return Crypt_DES
+     * @access public
+     */
+    function Crypt_DES($mode = CRYPT_DES_MODE_CBC)
+    {
+        if ( !defined('CRYPT_DES_MODE') ) {
+            switch (true) {
+                case extension_loaded('mcrypt') && in_array('des', mcrypt_list_algorithms()):
+                    define('CRYPT_DES_MODE', CRYPT_DES_MODE_MCRYPT);
+                    break;
+                default:
+                    define('CRYPT_DES_MODE', CRYPT_DES_MODE_INTERNAL);
+            }
+        }
+
+        switch ( CRYPT_DES_MODE ) {
+            case CRYPT_DES_MODE_MCRYPT:
+                switch ($mode) {
+                    case CRYPT_DES_MODE_ECB:
+                        $this->paddable = true;
+                        $this->mode = MCRYPT_MODE_ECB;
+                        break;
+                    case CRYPT_DES_MODE_CTR:
+                        $this->mode = 'ctr';
+                        //$this->mode = in_array('ctr', mcrypt_list_modes()) ? 'ctr' : CRYPT_DES_MODE_CTR;
+                        break;
+                    case CRYPT_DES_MODE_CFB:
+                        $this->mode = 'ncfb';
+                        $this->ecb = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, '');
+                        break;
+                    case CRYPT_DES_MODE_OFB:
+                        $this->mode = MCRYPT_MODE_NOFB;
+                        break;
+                    case CRYPT_DES_MODE_CBC:
+                    default:
+                        $this->paddable = true;
+                        $this->mode = MCRYPT_MODE_CBC;
+                }
+                $this->enmcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, '');
+                $this->demcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, '');
+
+                break;
+            default:
+                switch ($mode) {
+                    case CRYPT_DES_MODE_ECB:
+                    case CRYPT_DES_MODE_CBC:
+                        $this->paddable = true;
+                        $this->mode = $mode;
+                        break;
+                    case CRYPT_DES_MODE_CTR:
+                    case CRYPT_DES_MODE_CFB:
+                    case CRYPT_DES_MODE_OFB:
+                        $this->mode = $mode;
+                        break;
+                    default:
+                        $this->paddable = true;
+                        $this->mode = CRYPT_DES_MODE_CBC;
+                }
+        }
+    }
+
+    /**
+     * Sets the key.
+     *
+     * Keys can be of any length.  DES, itself, uses 64-bit keys (eg. strlen($key) == 8), however, we
+     * only use the first eight, if $key has more then eight characters in it, and pad $key with the
+     * null byte if it is less then eight characters long.
+     *
+     * DES also requires that every eighth bit be a parity bit, however, we'll ignore that.
+     *
+     * If the key is not explicitly set, it'll be assumed to be all zero's.
+     *
+     * @access public
+     * @param String $key
+     */
+    function setKey($key)
+    {
+        $this->keys = ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) ? str_pad(substr($key, 0, 8), 8, chr(0)) : $this->_prepareKey($key);
+        $this->enchanged = true;
+        $this->dechanged = true;
+    }
+
+    /**
+     * Sets the password.
+     *
+     * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:
+     *     {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2}:
+     *         $hash, $salt, $count
+     *
+     * @param String $password
+     * @param optional String $method
+     * @access public
+     */
+    function setPassword($password, $method = 'pbkdf2')
+    {
+        $key = '';
+
+        switch ($method) {
+            default: // 'pbkdf2'
+                list(, , $hash, $salt, $count) = func_get_args();
+                if (!isset($hash)) {
+                    $hash = 'sha1';
+                }
+                // WPA and WPA2 use the SSID as the salt
+                if (!isset($salt)) {
+                    $salt = 'phpseclib/salt';
+                }
+                // RFC2898#section-4.2 uses 1,000 iterations by default
+                // WPA and WPA2 use 4,096.
+                if (!isset($count)) {
+                    $count = 1000;
+                }
+
+                if (!class_exists('Crypt_Hash')) {
+                    require_once('Crypt/Hash.php');
+                }
+
+                $i = 1;
+                while (strlen($key) < 8) { // $dkLen == 8
+                    //$dk.= $this->_pbkdf($password, $salt, $count, $i++);
+                    $hmac = new Crypt_Hash();
+                    $hmac->setHash($hash);
+                    $hmac->setKey($password);
+                    $f = $u = $hmac->hash($salt . pack('N', $i++));
+                    for ($j = 2; $j <= $count; $j++) {
+                        $u = $hmac->hash($u);
+                        $f^= $u;
+                    }
+                    $key.= $f;
+                }
+        }
+
+        $this->setKey($key);
+    }
+
+    /**
+     * Sets the initialization vector. (optional)
+     *
+     * SetIV is not required when CRYPT_DES_MODE_ECB is being used.  If not explictly set, it'll be assumed
+     * to be all zero's.
+     *
+     * @access public
+     * @param String $iv
+     */
+    function setIV($iv)
+    {
+        $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, 8), 8, chr(0));
+        $this->enchanged = true;
+        $this->dechanged = true;
+    }
+
+    /**
+     * Generate CTR XOR encryption key
+     *
+     * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the
+     * plaintext / ciphertext in CTR mode.
+     *
+     * @see Crypt_DES::decrypt()
+     * @see Crypt_DES::encrypt()
+     * @access public
+     * @param String $iv
+     */
+    function _generate_xor(&$iv)
+    {
+        $xor = $iv;
+        for ($j = 4; $j <= 8; $j+=4) {
+            $temp = substr($iv, -$j, 4);
+            switch ($temp) {
+                case "\xFF\xFF\xFF\xFF":
+                    $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4);
+                    break;
+                case "\x7F\xFF\xFF\xFF":
+                    $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4);
+                    break 2;
+                default:
+                    extract(unpack('Ncount', $temp));
+                    $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4);
+                    break 2;
+            }
+        }
+
+        return $xor;
+    }
+
+    /**
+     * Encrypts a message.
+     *
+     * $plaintext will be padded with up to 8 additional bytes.  Other DES implementations may or may not pad in the
+     * same manner.  Other common approaches to padding and the reasons why it's necessary are discussed in the following
+     * URL:
+     *
+     * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
+     *
+     * An alternative to padding is to, separately, send the length of the file.  This is what SSH, in fact, does.
+     * strlen($plaintext) will still need to be a multiple of 8, however, arbitrary values can be added to make it that
+     * length.
+     *
+     * @see Crypt_DES::decrypt()
+     * @access public
+     * @param String $plaintext
+     */
+    function encrypt($plaintext)
+    {
+        if ($this->paddable) {
+            $plaintext = $this->_pad($plaintext);
+        }
+
+        if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
+            if ($this->enchanged) {
+                mcrypt_generic_init($this->enmcrypt, $this->keys, $this->encryptIV);
+                if ($this->mode == 'ncfb') {
+                    mcrypt_generic_init($this->ecb, $this->keys, "\0\0\0\0\0\0\0\0");
+                }
+                $this->enchanged = false;
+            }
+
+            if ($this->mode != 'ncfb' || !$this->continuousBuffer) {
+                $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);
+            } else {
+                $iv = &$this->encryptIV;
+                $pos = &$this->enbuffer['pos'];
+                $len = strlen($plaintext);
+                $ciphertext = '';
+                $i = 0;
+                if ($pos) {
+                    $orig_pos = $pos;
+                    $max = 8 - $pos;
+                    if ($len >= $max) {
+                        $i = $max;
+                        $len-= $max;
+                        $pos = 0;
+                    } else {
+                        $i = $len;
+                        $pos+= $len;
+                        $len = 0;
+                    }
+                    $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
+                    $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
+                    $this->enbuffer['enmcrypt_init'] = true;
+                }
+                if ($len >= 8) {
+                    if ($this->enbuffer['enmcrypt_init'] === false || $len > 600) {
+                        if ($this->enbuffer['enmcrypt_init'] === true) {
+                            mcrypt_generic_init($this->enmcrypt, $this->keys, $iv);
+                            $this->enbuffer['enmcrypt_init'] = false;
+                        }
+                        $ciphertext.= mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % 8));
+                        $iv = substr($ciphertext, -8);
+                        $len%= 8;
+                    } else {
+                        while ($len >= 8) {
+                            $iv = mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, 8);
+                            $ciphertext.= $iv;
+                            $len-= 8;
+                            $i+= 8;
+                        }
+                    }
+                } 
+                if ($len) {
+                    $iv = mcrypt_generic($this->ecb, $iv);
+                    $block = $iv ^ substr($plaintext, -$len);
+                    $iv = substr_replace($iv, $block, 0, $len);
+                    $ciphertext.= $block;
+                    $pos = $len;
+                }
+                return $ciphertext;
+            }
+
+            if (!$this->continuousBuffer) {
+                mcrypt_generic_init($this->enmcrypt, $this->keys, $this->encryptIV);
+            }
+
+            return $ciphertext;
+        }
+
+        if (!is_array($this->keys)) {
+            $this->keys = $this->_prepareKey("\0\0\0\0\0\0\0\0");
+        }
+
+        $buffer = &$this->enbuffer;
+        $continuousBuffer = $this->continuousBuffer;
+        $ciphertext = '';
+        switch ($this->mode) {
+            case CRYPT_DES_MODE_ECB:
+                for ($i = 0; $i < strlen($plaintext); $i+=8) {
+                    $ciphertext.= $this->_processBlock(substr($plaintext, $i, 8), CRYPT_DES_ENCRYPT);
+                }
+                break;
+            case CRYPT_DES_MODE_CBC:
+                $xor = $this->encryptIV;
+                for ($i = 0; $i < strlen($plaintext); $i+=8) {
+                    $block = substr($plaintext, $i, 8);
+                    $block = $this->_processBlock($block ^ $xor, CRYPT_DES_ENCRYPT);
+                    $xor = $block;
+                    $ciphertext.= $block;
+                }
+                if ($this->continuousBuffer) {
+                    $this->encryptIV = $xor;
+                }
+                break;
+            case CRYPT_DES_MODE_CTR:
+                $xor = $this->encryptIV;
+                if (strlen($buffer['encrypted'])) {
+                    for ($i = 0; $i < strlen($plaintext); $i+=8) {
+                        $block = substr($plaintext, $i, 8);
+                        $buffer['encrypted'].= $this->_processBlock($this->_generate_xor($xor), CRYPT_DES_ENCRYPT);
+                        $key = $this->_string_shift($buffer['encrypted'], 8);
+                        $ciphertext.= $block ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($plaintext); $i+=8) {
+                        $block = substr($plaintext, $i, 8);
+                        $key = $this->_processBlock($this->_generate_xor($xor), CRYPT_DES_ENCRYPT);
+                        $ciphertext.= $block ^ $key;
+                    }
+                }
+                if ($this->continuousBuffer) {
+                    $this->encryptIV = $xor;
+                    if ($start = strlen($plaintext) & 7) {
+                        $buffer['encrypted'] = substr($key, $start) . $buffer['encrypted'];
+                    }
+                }
+                break;
+            case CRYPT_DES_MODE_CFB:
+                if ($this->continuousBuffer) {
+                    $iv = &$this->encryptIV;
+                    $pos = &$buffer['pos'];
+                } else {
+                    $iv = $this->encryptIV;
+                    $pos = 0;
+                }
+                $len = strlen($plaintext);
+                $i = 0;
+                if ($pos) {
+                    $orig_pos = $pos;
+                    $max = 8 - $pos;
+                    if ($len >= $max) {
+                        $i = $max;
+                        $len-= $max;
+                        $pos = 0;
+                    } else {
+                        $i = $len;
+                        $pos+= $len;
+                        $len = 0;
+                    }
+                    $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
+                    $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
+                }
+                while ($len >= 8) {
+                    $iv = $this->_processBlock($iv, CRYPT_DES_ENCRYPT) ^ substr($plaintext, $i, 8);
+                    $ciphertext.= $iv;
+                    $len-= 8;
+                    $i+= 8;
+                }
+                if ($len) {
+                    $iv = $this->_processBlock($iv, CRYPT_DES_ENCRYPT);
+                    $block = $iv ^ substr($plaintext, $i);
+                    $iv = substr_replace($iv, $block, 0, $len);
+                    $ciphertext.= $block;
+                    $pos = $len;
+                }
+                return $ciphertext;
+            case CRYPT_DES_MODE_OFB:
+                $xor = $this->encryptIV;
+                if (strlen($buffer['xor'])) {
+                    for ($i = 0; $i < strlen($plaintext); $i+=8) {
+                        $xor = $this->_processBlock($xor, CRYPT_DES_ENCRYPT);
+                        $buffer['xor'].= $xor;
+                        $key = $this->_string_shift($buffer['xor'], 8);
+                        $ciphertext.= substr($plaintext, $i, 8) ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($plaintext); $i+=8) {
+                        $xor = $this->_processBlock($xor, CRYPT_DES_ENCRYPT);
+                        $ciphertext.= substr($plaintext, $i, 8) ^ $xor;
+                    }
+                    $key = $xor;
+                }
+                if ($this->continuousBuffer) {
+                    $this->encryptIV = $xor;
+                    if ($start = strlen($plaintext) & 7) {
+                         $buffer['xor'] = substr($key, $start) . $buffer['xor'];
+                    }
+                }
+        }
+
+        return $ciphertext;
+    }
+
+    /**
+     * Decrypts a message.
+     *
+     * If strlen($ciphertext) is not a multiple of 8, null bytes will be added to the end of the string until it is.
+     *
+     * @see Crypt_DES::encrypt()
+     * @access public
+     * @param String $ciphertext
+     */
+    function decrypt($ciphertext)
+    {
+        if ($this->paddable) {
+            // we pad with chr(0) since that's what mcrypt_generic does.  to quote from http://php.net/function.mcrypt-generic :
+            // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
+            $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, chr(0));
+        }
+
+        if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
+            if ($this->dechanged) {
+                mcrypt_generic_init($this->demcrypt, $this->keys, $this->decryptIV);
+                if ($this->mode == 'ncfb') {
+                    mcrypt_generic_init($this->ecb, $this->keys, "\0\0\0\0\0\0\0\0");
+                }
+                $this->dechanged = false;
+            }
+
+            if ($this->mode != 'ncfb' || !$this->continuousBuffer) {
+                $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);
+            } else {
+                $iv = &$this->decryptIV;
+                $pos = &$this->debuffer['pos'];
+                $len = strlen($ciphertext);
+                $plaintext = '';
+                $i = 0;
+                if ($pos) {
+                    $orig_pos = $pos;
+                    $max = 8 - $pos;
+                    if ($len >= $max) {
+                        $i = $max;
+                        $len-= $max;
+                        $pos = 0;
+                    } else {
+                        $i = $len;
+                        $pos+= $len;
+                        $len = 0;
+                    }
+                    $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
+                    $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
+                }
+                if ($len >= 8) {
+                    $cb = substr($ciphertext, $i, $len - $len % 8);
+                    $plaintext.= mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;
+                    $iv = substr($cb, -8);
+                    $len%= 8;
+                }
+                if ($len) {
+                    $iv = mcrypt_generic($this->ecb, $iv);
+                    $plaintext.= $iv ^ substr($ciphertext, -$len);
+                    $iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len);
+                    $pos = $len;
+                }
+                return $plaintext;
+            }
+
+            if (!$this->continuousBuffer) {
+                mcrypt_generic_init($this->demcrypt, $this->keys, $this->decryptIV);
+            }
+
+            return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+        }
+
+        if (!is_array($this->keys)) {
+            $this->keys = $this->_prepareKey("\0\0\0\0\0\0\0\0");
+        }
+
+        $buffer = &$this->debuffer;
+        $continuousBuffer = $this->continuousBuffer;
+        $plaintext = '';
+        switch ($this->mode) {
+            case CRYPT_DES_MODE_ECB:
+                for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+                    $plaintext.= $this->_processBlock(substr($ciphertext, $i, 8), CRYPT_DES_DECRYPT);
+                }
+                break;
+            case CRYPT_DES_MODE_CBC:
+                $xor = $this->decryptIV;
+                for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+                    $block = substr($ciphertext, $i, 8);
+                    $plaintext.= $this->_processBlock($block, CRYPT_DES_DECRYPT) ^ $xor;
+                    $xor = $block;
+                }
+                if ($this->continuousBuffer) {
+                    $this->decryptIV = $xor;
+                }
+                break;
+            case CRYPT_DES_MODE_CTR:
+                $xor = $this->decryptIV;
+                if (strlen($buffer['ciphertext'])) {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+                        $block = substr($ciphertext, $i, 8);
+                        $buffer['ciphertext'].= $this->_processBlock($this->_generate_xor($xor), CRYPT_DES_ENCRYPT);
+                        $key = $this->_string_shift($buffer['ciphertext'], 8);
+                        $plaintext.= $block ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+                        $block = substr($ciphertext, $i, 8);
+                        $key = $this->_processBlock($this->_generate_xor($xor), CRYPT_DES_ENCRYPT);
+                        $plaintext.= $block ^ $key;
+                    }
+                }
+                if ($this->continuousBuffer) {
+                    $this->decryptIV = $xor;
+                    if ($start = strlen($ciphertext) % 8) {
+                        $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
+                    }
+                }
+                break;
+            case CRYPT_DES_MODE_CFB:
+                if ($this->continuousBuffer) {
+                    $iv = &$this->decryptIV;
+                    $pos = &$buffer['pos'];
+                } else {
+                    $iv = $this->decryptIV;
+                    $pos = 0;
+                }
+                $len = strlen($ciphertext);
+                $i = 0;
+                if ($pos) {
+                    $orig_pos = $pos;
+                    $max = 8 - $pos;
+                    if ($len >= $max) {
+                        $i = $max;
+                        $len-= $max;
+                        $pos = 0;
+                    } else {
+                        $i = $len;
+                        $pos+= $len;
+                        $len = 0;
+                    }
+                    $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
+                    $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
+                }
+                while ($len >= 8) {
+                    $iv = $this->_processBlock($iv, CRYPT_DES_ENCRYPT);
+                    $cb = substr($ciphertext, $i, 8);
+                    $plaintext.= $iv ^ $cb;
+                    $iv = $cb;
+                    $len-= 8;
+                    $i+= 8;
+                }
+                if ($len) {
+                    $iv = $this->_processBlock($iv, CRYPT_DES_ENCRYPT);
+                    $plaintext.= $iv ^ substr($ciphertext, $i);
+                    $iv = substr_replace($iv, substr($ciphertext, $i), 0, $len);
+                    $pos = $len;
+                }
+                return $plaintext;
+            case CRYPT_DES_MODE_OFB:
+                $xor = $this->decryptIV;
+                if (strlen($buffer['xor'])) {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+                        $xor = $this->_processBlock($xor, CRYPT_DES_ENCRYPT);
+                        $buffer['xor'].= $xor;
+                        $key = $this->_string_shift($buffer['xor'], 8);
+                        $plaintext.= substr($ciphertext, $i, 8) ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+                        $xor = $this->_processBlock($xor, CRYPT_DES_ENCRYPT);
+                        $plaintext.= substr($ciphertext, $i, 8) ^ $xor;
+                    }
+                    $key = $xor;
+                }
+                if ($this->continuousBuffer) {
+                    $this->decryptIV = $xor;
+                    if ($start = strlen($ciphertext) % 8) {
+                         $buffer['xor'] = substr($key, $start) . $buffer['xor'];
+                    }
+                }
+        }
+
+        return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+    }
+
+    /**
+     * Treat consecutive "packets" as if they are a continuous buffer.
+     *
+     * Say you have a 16-byte plaintext $plaintext.  Using the default behavior, the two following code snippets
+     * will yield different outputs:
+     *
+     * <code>
+     *    echo $des->encrypt(substr($plaintext, 0, 8));
+     *    echo $des->encrypt(substr($plaintext, 8, 8));
+     * </code>
+     * <code>
+     *    echo $des->encrypt($plaintext);
+     * </code>
+     *
+     * The solution is to enable the continuous buffer.  Although this will resolve the above discrepancy, it creates
+     * another, as demonstrated with the following:
+     *
+     * <code>
+     *    $des->encrypt(substr($plaintext, 0, 8));
+     *    echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+     * </code>
+     * <code>
+     *    echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+     * </code>
+     *
+     * With the continuous buffer disabled, these would yield the same output.  With it enabled, they yield different
+     * outputs.  The reason is due to the fact that the initialization vector's change after every encryption /
+     * decryption round when the continuous buffer is enabled.  When it's disabled, they remain constant.
+     *
+     * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each
+     * encryption / decryption round, whereas otherwise, it'd remain constant.  For this reason, it's recommended that
+     * continuous buffers not be used.  They do offer better security and are, in fact, sometimes required (SSH uses them),
+     * however, they are also less intuitive and more likely to cause you problems.
+     *
+     * @see Crypt_DES::disableContinuousBuffer()
+     * @access public
+     */
+    function enableContinuousBuffer()
+    {
+        $this->continuousBuffer = true;
+    }
+
+    /**
+     * Treat consecutive packets as if they are a discontinuous buffer.
+     *
+     * The default behavior.
+     *
+     * @see Crypt_DES::enableContinuousBuffer()
+     * @access public
+     */
+    function disableContinuousBuffer()
+    {
+        $this->continuousBuffer = false;
+        $this->encryptIV = $this->iv;
+        $this->decryptIV = $this->iv;
+        $this->enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true);
+        $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'demcrypt_init' => true);
+
+        if (CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT) {
+            mcrypt_generic_init($this->enmcrypt, $this->keys, $this->iv);
+            mcrypt_generic_init($this->demcrypt, $this->keys, $this->iv);
+        }
+    }
+
+    /**
+     * Pad "packets".
+     *
+     * DES works by encrypting eight bytes at a time.  If you ever need to encrypt or decrypt something that's not
+     * a multiple of eight, it becomes necessary to pad the input so that it's length is a multiple of eight.
+     *
+     * Padding is enabled by default.  Sometimes, however, it is undesirable to pad strings.  Such is the case in SSH1,
+     * where "packets" are padded with random bytes before being encrypted.  Unpad these packets and you risk stripping
+     * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
+     * transmitted separately)
+     *
+     * @see Crypt_DES::disablePadding()
+     * @access public
+     */
+    function enablePadding()
+    {
+        $this->padding = true;
+    }
+
+    /**
+     * Do not pad packets.
+     *
+     * @see Crypt_DES::enablePadding()
+     * @access public
+     */
+    function disablePadding()
+    {
+        $this->padding = false;
+    }
+
+    /**
+     * Pads a string
+     *
+     * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize (8).
+     * 8 - (strlen($text) & 7) bytes are added, each of which is equal to chr(8 - (strlen($text) & 7)
+     *
+     * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
+     * and padding will, hence forth, be enabled.
+     *
+     * @see Crypt_DES::_unpad()
+     * @access private
+     */
+    function _pad($text)
+    {
+        $length = strlen($text);
+
+        if (!$this->padding) {
+            if (($length & 7) == 0) {
+                return $text;
+            } else {
+                user_error("The plaintext's length ($length) is not a multiple of the block size (8)");
+                $this->padding = true;
+            }
+        }
+
+        $pad = 8 - ($length & 7);
+        return str_pad($text, $length + $pad, chr($pad));
+    }
+
+    /**
+     * Unpads a string
+     *
+     * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
+     * and false will be returned.
+     *
+     * @see Crypt_DES::_pad()
+     * @access private
+     */
+    function _unpad($text)
+    {
+        if (!$this->padding) {
+            return $text;
+        }
+
+        $length = ord($text[strlen($text) - 1]);
+
+        if (!$length || $length > 8) {
+            return false;
+        }
+
+        return substr($text, 0, -$length);
+    }
+
+    /**
+     * Encrypts or decrypts a 64-bit block
+     *
+     * $mode should be either CRYPT_DES_ENCRYPT or CRYPT_DES_DECRYPT.  See
+     * {@link http://en.wikipedia.org/wiki/Image:Feistel.png Feistel.png} to get a general
+     * idea of what this function does.
+     *
+     * @access private
+     * @param String $block
+     * @param Integer $mode
+     * @return String
+     */
+    function _processBlock($block, $mode)
+    {
+        // s-boxes.  in the official DES docs, they're described as being matrices that
+        // one accesses by using the first and last bits to determine the row and the
+        // middle four bits to determine the column.  in this implementation, they've
+        // been converted to vectors
+        static $sbox = array(
+            array(
+                14,  0,  4, 15, 13,  7,  1,  4,  2, 14, 15,  2, 11, 13,  8,  1,
+                 3, 10 ,10,  6,  6, 12, 12, 11,  5,  9,  9,  5,  0,  3,  7,  8,
+                 4, 15,  1, 12, 14,  8,  8,  2, 13,  4,  6,  9,  2,  1, 11,  7,
+                15,  5, 12, 11,  9,  3,  7, 14,  3, 10, 10,  0,  5,  6,  0, 13
+            ),
+            array(
+                15,  3,  1, 13,  8,  4, 14,  7,  6, 15, 11,  2,  3,  8,  4, 14,
+                 9, 12,  7,  0,  2,  1, 13, 10, 12,  6,  0,  9,  5, 11, 10,  5,
+                 0, 13, 14,  8,  7, 10, 11,  1, 10,  3,  4, 15, 13,  4,  1,  2,
+                 5, 11,  8,  6, 12,  7,  6, 12,  9,  0,  3,  5,  2, 14, 15,  9
+            ),
+            array(
+                10, 13,  0,  7,  9,  0, 14,  9,  6,  3,  3,  4, 15,  6,  5, 10,
+                 1,  2, 13,  8, 12,  5,  7, 14, 11, 12,  4, 11,  2, 15,  8,  1,
+                13,  1,  6, 10,  4, 13,  9,  0,  8,  6, 15,  9,  3,  8,  0,  7,
+                11,  4,  1, 15,  2, 14, 12,  3,  5, 11, 10,  5, 14,  2,  7, 12
+            ),
+            array(
+                 7, 13, 13,  8, 14, 11,  3,  5,  0,  6,  6, 15,  9,  0, 10,  3,
+                 1,  4,  2,  7,  8,  2,  5, 12, 11,  1, 12, 10,  4, 14, 15,  9,
+                10,  3,  6, 15,  9,  0,  0,  6, 12, 10, 11,  1,  7, 13, 13,  8,
+                15,  9,  1,  4,  3,  5, 14, 11,  5, 12,  2,  7,  8,  2,  4, 14
+            ),
+            array(
+                 2, 14, 12, 11,  4,  2,  1, 12,  7,  4, 10,  7, 11, 13,  6,  1,
+                 8,  5,  5,  0,  3, 15, 15, 10, 13,  3,  0,  9, 14,  8,  9,  6,
+                 4, 11,  2,  8,  1, 12, 11,  7, 10,  1, 13, 14,  7,  2,  8, 13,
+                15,  6,  9, 15, 12,  0,  5,  9,  6, 10,  3,  4,  0,  5, 14,  3
+            ),
+            array(
+                12, 10,  1, 15, 10,  4, 15,  2,  9,  7,  2, 12,  6,  9,  8,  5,
+                 0,  6, 13,  1,  3, 13,  4, 14, 14,  0,  7, 11,  5,  3, 11,  8,
+                 9,  4, 14,  3, 15,  2,  5, 12,  2,  9,  8,  5, 12, 15,  3, 10,
+                 7, 11,  0, 14,  4,  1, 10,  7,  1,  6, 13,  0, 11,  8,  6, 13
+            ),
+            array(
+                 4, 13, 11,  0,  2, 11, 14,  7, 15,  4,  0,  9,  8,  1, 13, 10,
+                 3, 14, 12,  3,  9,  5,  7, 12,  5,  2, 10, 15,  6,  8,  1,  6,
+                 1,  6,  4, 11, 11, 13, 13,  8, 12,  1,  3,  4,  7, 10, 14,  7,
+                10,  9, 15,  5,  6,  0,  8, 15,  0, 14,  5,  2,  9,  3,  2, 12
+            ),
+            array(
+                13,  1,  2, 15,  8, 13,  4,  8,  6, 10, 15,  3, 11,  7,  1,  4,
+                10, 12,  9,  5,  3,  6, 14, 11,  5,  0,  0, 14, 12,  9,  7,  2,
+                 7,  2, 11,  1,  4, 14,  1,  7,  9,  4, 12, 10, 14,  8,  2, 13,
+                 0, 15,  6, 12, 10,  9, 13,  0, 15,  3,  3,  5,  5,  6,  8, 11
+            )
+        );
+
+        $keys = $this->keys;
+
+        $temp = unpack('Na/Nb', $block);
+        $block = array($temp['a'], $temp['b']);
+
+        // because php does arithmetic right shifts, if the most significant bits are set, right
+        // shifting those into the correct position will add 1's - not 0's.  this will intefere
+        // with the | operation unless a second & is done.  so we isolate these bits and left shift
+        // them into place.  we then & each block with 0x7FFFFFFF to prevennt 1's from being added
+        // for any other shifts.
+        $msb = array(
+            ($block[0] >> 31) & 1,
+            ($block[1] >> 31) & 1
+        );
+        $block[0] &= 0x7FFFFFFF;
+        $block[1] &= 0x7FFFFFFF;
+
+        // we isolate the appropriate bit in the appropriate integer and shift as appropriate.  in
+        // some cases, there are going to be multiple bits in the same integer that need to be shifted
+        // in the same way.  we combine those into one shift operation.
+        $block = array(
+            (($block[1] & 0x00000040) << 25) | (($block[1] & 0x00004000) << 16) |
+            (($block[1] & 0x00400001) <<  7) | (($block[1] & 0x40000100) >>  2) |
+            (($block[0] & 0x00000040) << 21) | (($block[0] & 0x00004000) << 12) |
+            (($block[0] & 0x00400001) <<  3) | (($block[0] & 0x40000100) >>  6) |
+            (($block[1] & 0x00000010) << 19) | (($block[1] & 0x00001000) << 10) |
+            (($block[1] & 0x00100000) <<  1) | (($block[1] & 0x10000000) >>  8) |
+            (($block[0] & 0x00000010) << 15) | (($block[0] & 0x00001000) <<  6) |
+            (($block[0] & 0x00100000) >>  3) | (($block[0] & 0x10000000) >> 12) |
+            (($block[1] & 0x00000004) << 13) | (($block[1] & 0x00000400) <<  4) |
+            (($block[1] & 0x00040000) >>  5) | (($block[1] & 0x04000000) >> 14) |
+            (($block[0] & 0x00000004) <<  9) | ( $block[0] & 0x00000400       ) |
+            (($block[0] & 0x00040000) >>  9) | (($block[0] & 0x04000000) >> 18) |
+            (($block[1] & 0x00010000) >> 11) | (($block[1] & 0x01000000) >> 20) |
+            (($block[0] & 0x00010000) >> 15) | (($block[0] & 0x01000000) >> 24)
+        ,
+            (($block[1] & 0x00000080) << 24) | (($block[1] & 0x00008000) << 15) |
+            (($block[1] & 0x00800002) <<  6) | (($block[0] & 0x00000080) << 20) |
+            (($block[0] & 0x00008000) << 11) | (($block[0] & 0x00800002) <<  2) |
+            (($block[1] & 0x00000020) << 18) | (($block[1] & 0x00002000) <<  9) |
+            ( $block[1] & 0x00200000       ) | (($block[1] & 0x20000000) >>  9) |
+            (($block[0] & 0x00000020) << 14) | (($block[0] & 0x00002000) <<  5) |
+            (($block[0] & 0x00200000) >>  4) | (($block[0] & 0x20000000) >> 13) |
+            (($block[1] & 0x00000008) << 12) | (($block[1] & 0x00000800) <<  3) |
+            (($block[1] & 0x00080000) >>  6) | (($block[1] & 0x08000000) >> 15) |
+            (($block[0] & 0x00000008) <<  8) | (($block[0] & 0x00000800) >>  1) |
+            (($block[0] & 0x00080000) >> 10) | (($block[0] & 0x08000000) >> 19) |
+            (($block[1] & 0x00000200) >>  3) | (($block[0] & 0x00000200) >>  7) |
+            (($block[1] & 0x00020000) >> 12) | (($block[1] & 0x02000000) >> 21) |
+            (($block[0] & 0x00020000) >> 16) | (($block[0] & 0x02000000) >> 25) |
+            ($msb[1] << 28) | ($msb[0] << 24)
+        );
+
+        for ($i = 0; $i < 16; $i++) {
+            // start of "the Feistel (F) function" - see the following URL:
+            // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png
+            $temp = (($sbox[0][((($block[1] >> 27) & 0x1F) | (($block[1] & 1) << 5)) ^ $keys[$mode][$i][0]]) << 28)
+                  | (($sbox[1][(($block[1] & 0x1F800000) >> 23) ^ $keys[$mode][$i][1]]) << 24)
+                  | (($sbox[2][(($block[1] & 0x01F80000) >> 19) ^ $keys[$mode][$i][2]]) << 20)
+                  | (($sbox[3][(($block[1] & 0x001F8000) >> 15) ^ $keys[$mode][$i][3]]) << 16)
+                  | (($sbox[4][(($block[1] & 0x0001F800) >> 11) ^ $keys[$mode][$i][4]]) << 12)
+                  | (($sbox[5][(($block[1] & 0x00001F80) >>  7) ^ $keys[$mode][$i][5]]) <<  8)
+                  | (($sbox[6][(($block[1] & 0x000001F8) >>  3) ^ $keys[$mode][$i][6]]) <<  4)
+                  | ( $sbox[7][((($block[1] & 0x1F) << 1) | (($block[1] >> 31) & 1)) ^ $keys[$mode][$i][7]]);
+
+            $msb = ($temp >> 31) & 1;
+            $temp &= 0x7FFFFFFF;
+            $newBlock = (($temp & 0x00010000) << 15) | (($temp & 0x02020120) <<  5)
+                      | (($temp & 0x00001800) << 17) | (($temp & 0x01000000) >> 10)
+                      | (($temp & 0x00000008) << 24) | (($temp & 0x00100000) <<  6)
+                      | (($temp & 0x00000010) << 21) | (($temp & 0x00008000) <<  9)
+                      | (($temp & 0x00000200) << 12) | (($temp & 0x10000000) >> 27)
+                      | (($temp & 0x00000040) << 14) | (($temp & 0x08000000) >>  8)
+                      | (($temp & 0x00004000) <<  4) | (($temp & 0x00000002) << 16)
+                      | (($temp & 0x00442000) >>  6) | (($temp & 0x40800000) >> 15)
+                      | (($temp & 0x00000001) << 11) | (($temp & 0x20000000) >> 20)
+                      | (($temp & 0x00080000) >> 13) | (($temp & 0x00000004) <<  3)
+                      | (($temp & 0x04000000) >> 22) | (($temp & 0x00000480) >>  7)
+                      | (($temp & 0x00200000) >> 19) | ($msb << 23);
+            // end of "the Feistel (F) function" - $newBlock is F's output
+
+            $temp = $block[1];
+            $block[1] = $block[0] ^ $newBlock;
+            $block[0] = $temp;
+        }
+
+        $msb = array(
+            ($block[0] >> 31) & 1,
+            ($block[1] >> 31) & 1
+        );
+        $block[0] &= 0x7FFFFFFF;
+        $block[1] &= 0x7FFFFFFF;
+
+        $block = array(
+            (($block[0] & 0x01000004) <<  7) | (($block[1] & 0x01000004) <<  6) |
+            (($block[0] & 0x00010000) << 13) | (($block[1] & 0x00010000) << 12) |
+            (($block[0] & 0x00000100) << 19) | (($block[1] & 0x00000100) << 18) |
+            (($block[0] & 0x00000001) << 25) | (($block[1] & 0x00000001) << 24) |
+            (($block[0] & 0x02000008) >>  2) | (($block[1] & 0x02000008) >>  3) |
+            (($block[0] & 0x00020000) <<  4) | (($block[1] & 0x00020000) <<  3) |
+            (($block[0] & 0x00000200) << 10) | (($block[1] & 0x00000200) <<  9) |
+            (($block[0] & 0x00000002) << 16) | (($block[1] & 0x00000002) << 15) |
+            (($block[0] & 0x04000000) >> 11) | (($block[1] & 0x04000000) >> 12) |
+            (($block[0] & 0x00040000) >>  5) | (($block[1] & 0x00040000) >>  6) |
+            (($block[0] & 0x00000400) <<  1) | ( $block[1] & 0x00000400       ) |
+            (($block[0] & 0x08000000) >> 20) | (($block[1] & 0x08000000) >> 21) |
+            (($block[0] & 0x00080000) >> 14) | (($block[1] & 0x00080000) >> 15) |
+            (($block[0] & 0x00000800) >>  8) | (($block[1] & 0x00000800) >>  9)
+        ,
+            (($block[0] & 0x10000040) <<  3) | (($block[1] & 0x10000040) <<  2) |
+            (($block[0] & 0x00100000) <<  9) | (($block[1] & 0x00100000) <<  8) |
+            (($block[0] & 0x00001000) << 15) | (($block[1] & 0x00001000) << 14) |
+            (($block[0] & 0x00000010) << 21) | (($block[1] & 0x00000010) << 20) |
+            (($block[0] & 0x20000080) >>  6) | (($block[1] & 0x20000080) >>  7) |
+            ( $block[0] & 0x00200000       ) | (($block[1] & 0x00200000) >>  1) |
+            (($block[0] & 0x00002000) <<  6) | (($block[1] & 0x00002000) <<  5) |
+            (($block[0] & 0x00000020) << 12) | (($block[1] & 0x00000020) << 11) |
+            (($block[0] & 0x40000000) >> 15) | (($block[1] & 0x40000000) >> 16) |
+            (($block[0] & 0x00400000) >>  9) | (($block[1] & 0x00400000) >> 10) |
+            (($block[0] & 0x00004000) >>  3) | (($block[1] & 0x00004000) >>  4) |
+            (($block[0] & 0x00800000) >> 18) | (($block[1] & 0x00800000) >> 19) |
+            (($block[0] & 0x00008000) >> 12) | (($block[1] & 0x00008000) >> 13) |
+            ($msb[0] <<  7) | ($msb[1] <<  6)
+        );
+
+        return pack('NN', $block[0], $block[1]);
+    }
+
+    /**
+     * Creates the key schedule.
+     *
+     * @access private
+     * @param String $key
+     * @return Array
+     */
+    function _prepareKey($key)
+    {
+        static $shifts = array( // number of key bits shifted per round
+            1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
+        );
+
+        // pad the key and remove extra characters as appropriate.
+        $key = str_pad(substr($key, 0, 8), 8, chr(0));
+
+        $temp = unpack('Na/Nb', $key);
+        $key = array($temp['a'], $temp['b']);
+        $msb = array(
+            ($key[0] >> 31) & 1,
+            ($key[1] >> 31) & 1
+        );
+        $key[0] &= 0x7FFFFFFF;
+        $key[1] &= 0x7FFFFFFF;
+
+        $key = array(
+            (($key[1] & 0x00000002) << 26) | (($key[1] & 0x00000204) << 17) |
+            (($key[1] & 0x00020408) <<  8) | (($key[1] & 0x02040800) >>  1) |
+            (($key[0] & 0x00000002) << 22) | (($key[0] & 0x00000204) << 13) |
+            (($key[0] & 0x00020408) <<  4) | (($key[0] & 0x02040800) >>  5) |
+            (($key[1] & 0x04080000) >> 10) | (($key[0] & 0x04080000) >> 14) |
+            (($key[1] & 0x08000000) >> 19) | (($key[0] & 0x08000000) >> 23) |
+            (($key[0] & 0x00000010) >>  1) | (($key[0] & 0x00001000) >> 10) |
+            (($key[0] & 0x00100000) >> 19) | (($key[0] & 0x10000000) >> 28)
+        ,
+            (($key[1] & 0x00000080) << 20) | (($key[1] & 0x00008000) << 11) |
+            (($key[1] & 0x00800000) <<  2) | (($key[0] & 0x00000080) << 16) |
+            (($key[0] & 0x00008000) <<  7) | (($key[0] & 0x00800000) >>  2) |
+            (($key[1] & 0x00000040) << 13) | (($key[1] & 0x00004000) <<  4) |
+            (($key[1] & 0x00400000) >>  5) | (($key[1] & 0x40000000) >> 14) |
+            (($key[0] & 0x00000040) <<  9) | ( $key[0] & 0x00004000       ) |
+            (($key[0] & 0x00400000) >>  9) | (($key[0] & 0x40000000) >> 18) |
+            (($key[1] & 0x00000020) <<  6) | (($key[1] & 0x00002000) >>  3) |
+            (($key[1] & 0x00200000) >> 12) | (($key[1] & 0x20000000) >> 21) |
+            (($key[0] & 0x00000020) <<  2) | (($key[0] & 0x00002000) >>  7) |
+            (($key[0] & 0x00200000) >> 16) | (($key[0] & 0x20000000) >> 25) |
+            (($key[1] & 0x00000010) >>  1) | (($key[1] & 0x00001000) >> 10) |
+            (($key[1] & 0x00100000) >> 19) | (($key[1] & 0x10000000) >> 28) |
+            ($msb[1] << 24) | ($msb[0] << 20)
+        ); 
+
+        $keys = array();
+        for ($i = 0; $i < 16; $i++) {
+            $key[0] <<= $shifts[$i];
+            $temp = ($key[0] & 0xF0000000) >> 28;
+            $key[0] = ($key[0] | $temp) & 0x0FFFFFFF;
+
+            $key[1] <<= $shifts[$i];
+            $temp = ($key[1] & 0xF0000000) >> 28;
+            $key[1] = ($key[1] | $temp) & 0x0FFFFFFF;
+
+            $temp = array(
+                (($key[1] & 0x00004000) >>  9) | (($key[1] & 0x00000800) >>  7) |
+                (($key[1] & 0x00020000) >> 14) | (($key[1] & 0x00000010) >>  2) |
+                (($key[1] & 0x08000000) >> 26) | (($key[1] & 0x00800000) >> 23)
+            ,
+                (($key[1] & 0x02400000) >> 20) | (($key[1] & 0x00000001) <<  4) |
+                (($key[1] & 0x00002000) >> 10) | (($key[1] & 0x00040000) >> 18) |
+                (($key[1] & 0x00000080) >>  6)
+            ,
+                ( $key[1] & 0x00000020       ) | (($key[1] & 0x00000200) >>  5) |
+                (($key[1] & 0x00010000) >> 13) | (($key[1] & 0x01000000) >> 22) |
+                (($key[1] & 0x00000004) >>  1) | (($key[1] & 0x00100000) >> 20)
+            ,
+                (($key[1] & 0x00001000) >>  7) | (($key[1] & 0x00200000) >> 17) |
+                (($key[1] & 0x00000002) <<  2) | (($key[1] & 0x00000100) >>  6) |
+                (($key[1] & 0x00008000) >> 14) | (($key[1] & 0x04000000) >> 26)
+            ,
+                (($key[0] & 0x00008000) >> 10) | ( $key[0] & 0x00000010       ) |
+                (($key[0] & 0x02000000) >> 22) | (($key[0] & 0x00080000) >> 17) |
+                (($key[0] & 0x00000200) >>  8) | (($key[0] & 0x00000002) >>  1)
+            ,
+                (($key[0] & 0x04000000) >> 21) | (($key[0] & 0x00010000) >> 12) |
+                (($key[0] & 0x00000020) >>  2) | (($key[0] & 0x00000800) >>  9) |
+                (($key[0] & 0x00800000) >> 22) | (($key[0] & 0x00000100) >>  8)
+            ,
+                (($key[0] & 0x00001000) >>  7) | (($key[0] & 0x00000088) >>  3) |
+                (($key[0] & 0x00020000) >> 14) | (($key[0] & 0x00000001) <<  2) |
+                (($key[0] & 0x00400000) >> 21)
+            ,
+                (($key[0] & 0x00000400) >>  5) | (($key[0] & 0x00004000) >> 10) |
+                (($key[0] & 0x00000040) >>  3) | (($key[0] & 0x00100000) >> 18) |
+                (($key[0] & 0x08000000) >> 26) | (($key[0] & 0x01000000) >> 24)
+            );
+
+            $keys[] = $temp;
+        }
+
+        $temp = array(
+            CRYPT_DES_ENCRYPT => $keys,
+            CRYPT_DES_DECRYPT => array_reverse($keys)
+        );
+
+        return $temp;
+    }
+
+    /**
+     * String Shift
+     *
+     * Inspired by array_shift
+     *
+     * @param String $string
+     * @param optional Integer $index
+     * @return String
+     * @access private
+     */
+    function _string_shift(&$string, $index = 1)
+    {
+        $substr = substr($string, 0, $index);
+        $string = substr($string, $index);
+        return $substr;
+    }
+}
+
+// vim: ts=4:sw=4:et:
+// vim6: fdl=1:
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Hash.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Hash.php
new file mode 100644
index 0000000000000000000000000000000000000000..c5d314f009f87ab00cc283d629a9f52ad4572764
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Hash.php
@@ -0,0 +1,825 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic hashing functions.
+ *
+ * Uses hash() or mhash() if available and an internal implementation, otherwise.  Currently supports the following:
+ *
+ * md2, md5, md5-96, sha1, sha1-96, sha256, sha384, and sha512
+ *
+ * If {@link Crypt_Hash::setKey() setKey()} is called, {@link Crypt_Hash::hash() hash()} will return the HMAC as opposed to
+ * the hash.  If no valid algorithm is provided, sha1 will be used.
+ *
+ * PHP versions 4 and 5
+ *
+ * {@internal The variable names are the same as those in 
+ * {@link http://tools.ietf.org/html/rfc2104#section-2 RFC2104}.}}
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ *    include('Crypt/Hash.php');
+ *
+ *    $hash = new Crypt_Hash('sha1');
+ *
+ *    $hash->setKey('abcdefg');
+ *
+ *    echo base64_encode($hash->hash('abcdefg'));
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category   Crypt
+ * @package    Crypt_Hash
+ * @author     Jim Wigginton <terrafrost@php.net>
+ * @copyright  MMVII Jim Wigginton
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @version    $Id: Hash.php,v 1.6 2009/11/23 23:37:07 terrafrost Exp $
+ * @link       http://phpseclib.sourceforge.net
+ */
+
+/**#@+
+ * @access private
+ * @see Crypt_Hash::Crypt_Hash()
+ */
+/**
+ * Toggles the internal implementation
+ */
+define('CRYPT_HASH_MODE_INTERNAL', 1);
+/**
+ * Toggles the mhash() implementation, which has been deprecated on PHP 5.3.0+.
+ */
+define('CRYPT_HASH_MODE_MHASH',    2);
+/**
+ * Toggles the hash() implementation, which works on PHP 5.1.2+.
+ */
+define('CRYPT_HASH_MODE_HASH',     3);
+/**#@-*/
+
+/**
+ * Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic hashing functions.
+ *
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access  public
+ * @package Crypt_Hash
+ */
+class Crypt_Hash {
+    /**
+     * Byte-length of compression blocks / key (Internal HMAC)
+     *
+     * @see Crypt_Hash::setAlgorithm()
+     * @var Integer
+     * @access private
+     */
+    var $b;
+
+    /**
+     * Byte-length of hash output (Internal HMAC)
+     *
+     * @see Crypt_Hash::setHash()
+     * @var Integer
+     * @access private
+     */
+    var $l = false;
+
+    /**
+     * Hash Algorithm
+     *
+     * @see Crypt_Hash::setHash()
+     * @var String
+     * @access private
+     */
+    var $hash;
+
+    /**
+     * Key
+     *
+     * @see Crypt_Hash::setKey()
+     * @var String
+     * @access private
+     */
+    var $key = false;
+
+    /**
+     * Outer XOR (Internal HMAC)
+     *
+     * @see Crypt_Hash::setKey()
+     * @var String
+     * @access private
+     */
+    var $opad;
+
+    /**
+     * Inner XOR (Internal HMAC)
+     *
+     * @see Crypt_Hash::setKey()
+     * @var String
+     * @access private
+     */
+    var $ipad;
+
+    /**
+     * Default Constructor.
+     *
+     * @param optional String $hash
+     * @return Crypt_Hash
+     * @access public
+     */
+    function Crypt_Hash($hash = 'sha1')
+    {
+        if ( !defined('CRYPT_HASH_MODE') ) {
+            switch (true) {
+                case extension_loaded('hash'):
+                    define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_HASH);
+                    break;
+                case extension_loaded('mhash'):
+                    define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_MHASH);
+                    break;
+                default:
+                    define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_INTERNAL);
+            }
+        }
+
+        $this->setHash($hash);
+    }
+
+    /**
+     * Sets the key for HMACs
+     *
+     * Keys can be of any length.
+     *
+     * @access public
+     * @param String $key
+     */
+    function setKey($key = false)
+    {
+        $this->key = $key;
+    }
+
+    /**
+     * Sets the hash function.
+     *
+     * @access public
+     * @param String $hash
+     */
+    function setHash($hash)
+    {
+        $hash = strtolower($hash);
+        switch ($hash) {
+            case 'md5-96':
+            case 'sha1-96':
+                $this->l = 12; // 96 / 8 = 12
+                break;
+            case 'md2':
+            case 'md5':
+                $this->l = 16;
+                break;
+            case 'sha1':
+                $this->l = 20;
+                break;
+            case 'sha256':
+                $this->l = 32;
+                break;
+            case 'sha384':
+                $this->l = 48;
+                break;
+            case 'sha512':
+                $this->l = 64;
+        }
+
+        switch ($hash) {
+            case 'md2':
+                $mode = CRYPT_HASH_MODE == CRYPT_HASH_MODE_HASH && in_array('md2', hash_algos()) ?
+                    CRYPT_HASH_MODE_HASH : CRYPT_HASH_MODE_INTERNAL;
+                break;
+            case 'sha384':
+            case 'sha512':
+                $mode = CRYPT_HASH_MODE == CRYPT_HASH_MODE_MHASH ? CRYPT_HASH_MODE_INTERNAL : CRYPT_HASH_MODE;
+                break;
+            default:
+                $mode = CRYPT_HASH_MODE;
+        }
+
+        switch ( $mode ) {
+            case CRYPT_HASH_MODE_MHASH:
+                switch ($hash) {
+                    case 'md5':
+                    case 'md5-96':
+                        $this->hash = MHASH_MD5;
+                        break;
+                    case 'sha256':
+                        $this->hash = MHASH_SHA256;
+                        break;
+                    case 'sha1':
+                    case 'sha1-96':
+                    default:
+                        $this->hash = MHASH_SHA1;
+                }
+                return;
+            case CRYPT_HASH_MODE_HASH:
+                switch ($hash) {
+                    case 'md5':
+                    case 'md5-96':
+                        $this->hash = 'md5';
+                        return;
+                    case 'md2':
+                    case 'sha256':
+                    case 'sha384':
+                    case 'sha512':
+                        $this->hash = $hash;
+                        return;
+                    case 'sha1':
+                    case 'sha1-96':
+                    default:
+                        $this->hash = 'sha1';
+                }
+                return;
+        }
+
+        switch ($hash) {
+            case 'md2':
+                 $this->b = 16;
+                 $this->hash = array($this, '_md2');
+                 break;
+            case 'md5':
+            case 'md5-96':
+                 $this->b = 64;
+                 $this->hash = array($this, '_md5');
+                 break;
+            case 'sha256':
+                 $this->b = 64;
+                 $this->hash = array($this, '_sha256');
+                 break;
+            case 'sha384':
+            case 'sha512':
+                 $this->b = 128;
+                 $this->hash = array($this, '_sha512');
+                 break;
+            case 'sha1':
+            case 'sha1-96':
+            default:
+                 $this->b = 64;
+                 $this->hash = array($this, '_sha1');
+        }
+
+        $this->ipad = str_repeat(chr(0x36), $this->b);
+        $this->opad = str_repeat(chr(0x5C), $this->b);
+    }
+
+    /**
+     * Compute the HMAC.
+     *
+     * @access public
+     * @param String $text
+     * @return String
+     */
+    function hash($text)
+    {
+        $mode = is_array($this->hash) ? CRYPT_HASH_MODE_INTERNAL : CRYPT_HASH_MODE;
+
+        if (!empty($this->key) || is_string($this->key)) {
+            switch ( $mode ) {
+                case CRYPT_HASH_MODE_MHASH:
+                    $output = mhash($this->hash, $text, $this->key);
+                    break;
+                case CRYPT_HASH_MODE_HASH:
+                    $output = hash_hmac($this->hash, $text, $this->key, true);
+                    break;
+                case CRYPT_HASH_MODE_INTERNAL:
+                    /* "Applications that use keys longer than B bytes will first hash the key using H and then use the
+                        resultant L byte string as the actual key to HMAC."
+
+                        -- http://tools.ietf.org/html/rfc2104#section-2 */
+                    $key = strlen($this->key) > $this->b ? call_user_func($this->hash, $this->key) : $this->key;
+
+                    $key    = str_pad($key, $this->b, chr(0));      // step 1
+                    $temp   = $this->ipad ^ $key;                   // step 2
+                    $temp  .= $text;                                // step 3
+                    $temp   = call_user_func($this->hash, $temp);   // step 4
+                    $output = $this->opad ^ $key;                   // step 5
+                    $output.= $temp;                                // step 6
+                    $output = call_user_func($this->hash, $output); // step 7
+            }
+        } else {
+            switch ( $mode ) {
+                case CRYPT_HASH_MODE_MHASH:
+                    $output = mhash($this->hash, $text);
+                    break;
+                case CRYPT_HASH_MODE_HASH:
+                    $output = hash($this->hash, $text, true);
+                    break;
+                case CRYPT_HASH_MODE_INTERNAL:
+                    $output = call_user_func($this->hash, $text);
+            }
+        }
+
+        return substr($output, 0, $this->l);
+    }
+
+    /**
+     * Returns the hash length (in bytes)
+     *
+     * @access public
+     * @return Integer
+     */
+    function getLength()
+    {
+        return $this->l;
+    }
+
+    /**
+     * Wrapper for MD5
+     *
+     * @access private
+     * @param String $text
+     */
+    function _md5($m)
+    {
+        return pack('H*', md5($m));
+    }
+
+    /**
+     * Wrapper for SHA1
+     *
+     * @access private
+     * @param String $text
+     */
+    function _sha1($m)
+    {
+        return pack('H*', sha1($m));
+    }
+
+    /**
+     * Pure-PHP implementation of MD2
+     *
+     * See {@link http://tools.ietf.org/html/rfc1319 RFC1319}.
+     *
+     * @access private
+     * @param String $text
+     */
+    function _md2($m)
+    {
+        static $s = array(
+             41,  46,  67, 201, 162, 216, 124,   1,  61,  54,  84, 161, 236, 240, 6,
+             19,  98, 167,   5, 243, 192, 199, 115, 140, 152, 147,  43, 217, 188,
+             76, 130, 202,  30, 155,  87,  60, 253, 212, 224,  22, 103,  66, 111, 24,
+            138,  23, 229,  18, 190,  78, 196, 214, 218, 158, 222,  73, 160, 251,
+            245, 142, 187,  47, 238, 122, 169, 104, 121, 145,  21, 178,   7,  63,
+            148, 194,  16, 137,  11,  34,  95,  33, 128, 127,  93, 154,  90, 144, 50,
+             39,  53,  62, 204, 231, 191, 247, 151,   3, 255,  25,  48, 179,  72, 165,
+            181, 209, 215,  94, 146,  42, 172,  86, 170, 198,  79, 184,  56, 210,
+            150, 164, 125, 182, 118, 252, 107, 226, 156, 116,   4, 241,  69, 157,
+            112,  89, 100, 113, 135,  32, 134,  91, 207, 101, 230,  45, 168,   2, 27,
+             96,  37, 173, 174, 176, 185, 246,  28,  70,  97, 105,  52,  64, 126, 15,
+             85,  71, 163,  35, 221,  81, 175,  58, 195,  92, 249, 206, 186, 197,
+            234,  38,  44,  83,  13, 110, 133,  40, 132,   9, 211, 223, 205, 244, 65,
+            129,  77,  82, 106, 220,  55, 200, 108, 193, 171, 250,  36, 225, 123,
+              8,  12, 189, 177,  74, 120, 136, 149, 139, 227,  99, 232, 109, 233,
+            203, 213, 254,  59,   0,  29,  57, 242, 239, 183,  14, 102,  88, 208, 228,
+            166, 119, 114, 248, 235, 117,  75,  10,  49,  68,  80, 180, 143, 237,
+             31,  26, 219, 153, 141,  51, 159,  17, 131, 20
+        );
+
+        // Step 1. Append Padding Bytes
+        $pad = 16 - (strlen($m) & 0xF);
+        $m.= str_repeat(chr($pad), $pad);
+
+        $length = strlen($m);
+
+        // Step 2. Append Checksum
+        $c = str_repeat(chr(0), 16);
+        $l = chr(0);
+        for ($i = 0; $i < $length; $i+= 16) {
+            for ($j = 0; $j < 16; $j++) {
+                // RFC1319 incorrectly states that C[j] should be set to S[c xor L]
+                //$c[$j] = chr($s[ord($m[$i + $j] ^ $l)]);
+                // per <http://www.rfc-editor.org/errata_search.php?rfc=1319>, however, C[j] should be set to S[c xor L] xor C[j]
+                $c[$j] = chr($s[ord($m[$i + $j] ^ $l)] ^ ord($c[$j]));
+                $l = $c[$j];
+            }
+        }
+        $m.= $c;
+
+        $length+= 16;
+
+        // Step 3. Initialize MD Buffer
+        $x = str_repeat(chr(0), 48);
+
+        // Step 4. Process Message in 16-Byte Blocks
+        for ($i = 0; $i < $length; $i+= 16) {
+            for ($j = 0; $j < 16; $j++) {
+                $x[$j + 16] = $m[$i + $j];
+                $x[$j + 32] = $x[$j + 16] ^ $x[$j];
+            }
+            $t = chr(0);
+            for ($j = 0; $j < 18; $j++) {
+                for ($k = 0; $k < 48; $k++) {
+                    $x[$k] = $t = $x[$k] ^ chr($s[ord($t)]);
+                    //$t = $x[$k] = $x[$k] ^ chr($s[ord($t)]);
+                }
+                $t = chr(ord($t) + $j);
+            }
+        }
+
+        // Step 5. Output
+        return substr($x, 0, 16);
+    }
+
+    /**
+     * Pure-PHP implementation of SHA256
+     *
+     * See {@link http://en.wikipedia.org/wiki/SHA_hash_functions#SHA-256_.28a_SHA-2_variant.29_pseudocode SHA-256 (a SHA-2 variant) pseudocode - Wikipedia}.
+     *
+     * @access private
+     * @param String $text
+     */
+    function _sha256($m)
+    {
+        if (extension_loaded('suhosin')) {
+            return pack('H*', sha256($m));
+        }
+
+        // Initialize variables
+        $hash = array(
+            0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
+        );
+        // Initialize table of round constants
+        // (first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)
+        static $k = array(
+            0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
+            0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
+            0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
+            0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
+            0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
+            0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
+            0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
+            0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
+        );
+
+        // Pre-processing
+        $length = strlen($m);
+        // to round to nearest 56 mod 64, we'll add 64 - (length + (64 - 56)) % 64
+        $m.= str_repeat(chr(0), 64 - (($length + 8) & 0x3F));
+        $m[$length] = chr(0x80);
+        // we don't support hashing strings 512MB long
+        $m.= pack('N2', 0, $length << 3);
+
+        // Process the message in successive 512-bit chunks
+        $chunks = str_split($m, 64);
+        foreach ($chunks as $chunk) {
+            $w = array();
+            for ($i = 0; $i < 16; $i++) {
+                extract(unpack('Ntemp', $this->_string_shift($chunk, 4)));
+                $w[] = $temp;
+            }
+
+            // Extend the sixteen 32-bit words into sixty-four 32-bit words
+            for ($i = 16; $i < 64; $i++) {
+                $s0 = $this->_rightRotate($w[$i - 15],  7) ^
+                      $this->_rightRotate($w[$i - 15], 18) ^
+                      $this->_rightShift( $w[$i - 15],  3);
+                $s1 = $this->_rightRotate($w[$i - 2], 17) ^
+                      $this->_rightRotate($w[$i - 2], 19) ^
+                      $this->_rightShift( $w[$i - 2], 10);
+                $w[$i] = $this->_add($w[$i - 16], $s0, $w[$i - 7], $s1);
+
+            }
+
+            // Initialize hash value for this chunk
+            list($a, $b, $c, $d, $e, $f, $g, $h) = $hash;
+
+            // Main loop
+            for ($i = 0; $i < 64; $i++) {
+                $s0 = $this->_rightRotate($a,  2) ^
+                      $this->_rightRotate($a, 13) ^
+                      $this->_rightRotate($a, 22);
+                $maj = ($a & $b) ^
+                       ($a & $c) ^
+                       ($b & $c);
+                $t2 = $this->_add($s0, $maj);
+
+                $s1 = $this->_rightRotate($e,  6) ^
+                      $this->_rightRotate($e, 11) ^
+                      $this->_rightRotate($e, 25);
+                $ch = ($e & $f) ^
+                      ($this->_not($e) & $g);
+                $t1 = $this->_add($h, $s1, $ch, $k[$i], $w[$i]);
+
+                $h = $g;
+                $g = $f;
+                $f = $e;
+                $e = $this->_add($d, $t1);
+                $d = $c;
+                $c = $b;
+                $b = $a;
+                $a = $this->_add($t1, $t2);
+            }
+
+            // Add this chunk's hash to result so far
+            $hash = array(
+                $this->_add($hash[0], $a),
+                $this->_add($hash[1], $b),
+                $this->_add($hash[2], $c),
+                $this->_add($hash[3], $d),
+                $this->_add($hash[4], $e),
+                $this->_add($hash[5], $f),
+                $this->_add($hash[6], $g),
+                $this->_add($hash[7], $h)
+            );
+        }
+
+        // Produce the final hash value (big-endian)
+        return pack('N8', $hash[0], $hash[1], $hash[2], $hash[3], $hash[4], $hash[5], $hash[6], $hash[7]);
+    }
+
+    /**
+     * Pure-PHP implementation of SHA384 and SHA512
+     *
+     * @access private
+     * @param String $text
+     */
+    function _sha512($m)
+    {
+        if (!class_exists('Math_BigInteger')) {
+            require_once('Math/BigInteger.php');
+        }
+
+        static $init384, $init512, $k;
+
+        if (!isset($k)) {
+            // Initialize variables
+            $init384 = array( // initial values for SHA384
+                'cbbb9d5dc1059ed8', '629a292a367cd507', '9159015a3070dd17', '152fecd8f70e5939', 
+                '67332667ffc00b31', '8eb44a8768581511', 'db0c2e0d64f98fa7', '47b5481dbefa4fa4'
+            );
+            $init512 = array( // initial values for SHA512
+                '6a09e667f3bcc908', 'bb67ae8584caa73b', '3c6ef372fe94f82b', 'a54ff53a5f1d36f1', 
+                '510e527fade682d1', '9b05688c2b3e6c1f', '1f83d9abfb41bd6b', '5be0cd19137e2179'
+            );
+
+            for ($i = 0; $i < 8; $i++) {
+                $init384[$i] = new Math_BigInteger($init384[$i], 16);
+                $init384[$i]->setPrecision(64);
+                $init512[$i] = new Math_BigInteger($init512[$i], 16);
+                $init512[$i]->setPrecision(64);
+            }
+
+            // Initialize table of round constants
+            // (first 64 bits of the fractional parts of the cube roots of the first 80 primes 2..409)
+            $k = array(
+                '428a2f98d728ae22', '7137449123ef65cd', 'b5c0fbcfec4d3b2f', 'e9b5dba58189dbbc',
+                '3956c25bf348b538', '59f111f1b605d019', '923f82a4af194f9b', 'ab1c5ed5da6d8118',
+                'd807aa98a3030242', '12835b0145706fbe', '243185be4ee4b28c', '550c7dc3d5ffb4e2',
+                '72be5d74f27b896f', '80deb1fe3b1696b1', '9bdc06a725c71235', 'c19bf174cf692694',
+                'e49b69c19ef14ad2', 'efbe4786384f25e3', '0fc19dc68b8cd5b5', '240ca1cc77ac9c65',
+                '2de92c6f592b0275', '4a7484aa6ea6e483', '5cb0a9dcbd41fbd4', '76f988da831153b5',
+                '983e5152ee66dfab', 'a831c66d2db43210', 'b00327c898fb213f', 'bf597fc7beef0ee4',
+                'c6e00bf33da88fc2', 'd5a79147930aa725', '06ca6351e003826f', '142929670a0e6e70',
+                '27b70a8546d22ffc', '2e1b21385c26c926', '4d2c6dfc5ac42aed', '53380d139d95b3df',
+                '650a73548baf63de', '766a0abb3c77b2a8', '81c2c92e47edaee6', '92722c851482353b',
+                'a2bfe8a14cf10364', 'a81a664bbc423001', 'c24b8b70d0f89791', 'c76c51a30654be30',
+                'd192e819d6ef5218', 'd69906245565a910', 'f40e35855771202a', '106aa07032bbd1b8',
+                '19a4c116b8d2d0c8', '1e376c085141ab53', '2748774cdf8eeb99', '34b0bcb5e19b48a8',
+                '391c0cb3c5c95a63', '4ed8aa4ae3418acb', '5b9cca4f7763e373', '682e6ff3d6b2b8a3',
+                '748f82ee5defb2fc', '78a5636f43172f60', '84c87814a1f0ab72', '8cc702081a6439ec',
+                '90befffa23631e28', 'a4506cebde82bde9', 'bef9a3f7b2c67915', 'c67178f2e372532b',
+                'ca273eceea26619c', 'd186b8c721c0c207', 'eada7dd6cde0eb1e', 'f57d4f7fee6ed178',
+                '06f067aa72176fba', '0a637dc5a2c898a6', '113f9804bef90dae', '1b710b35131c471b',
+                '28db77f523047d84', '32caab7b40c72493', '3c9ebe0a15c9bebc', '431d67c49c100d4c',
+                '4cc5d4becb3e42b6', '597f299cfc657e2a', '5fcb6fab3ad6faec', '6c44198c4a475817'
+            );
+
+            for ($i = 0; $i < 80; $i++) {
+                $k[$i] = new Math_BigInteger($k[$i], 16);
+            }
+        }
+
+        $hash = $this->l == 48 ? $init384 : $init512;
+
+        // Pre-processing
+        $length = strlen($m);
+        // to round to nearest 112 mod 128, we'll add 128 - (length + (128 - 112)) % 128
+        $m.= str_repeat(chr(0), 128 - (($length + 16) & 0x7F));
+        $m[$length] = chr(0x80);
+        // we don't support hashing strings 512MB long
+        $m.= pack('N4', 0, 0, 0, $length << 3);
+
+        // Process the message in successive 1024-bit chunks
+        $chunks = str_split($m, 128);
+        foreach ($chunks as $chunk) {
+            $w = array();
+            for ($i = 0; $i < 16; $i++) {
+                $temp = new Math_BigInteger($this->_string_shift($chunk, 8), 256);
+                $temp->setPrecision(64);
+                $w[] = $temp;
+            }
+
+            // Extend the sixteen 32-bit words into eighty 32-bit words
+            for ($i = 16; $i < 80; $i++) {
+                $temp = array(
+                          $w[$i - 15]->bitwise_rightRotate(1),
+                          $w[$i - 15]->bitwise_rightRotate(8),
+                          $w[$i - 15]->bitwise_rightShift(7)
+                );
+                $s0 = $temp[0]->bitwise_xor($temp[1]);
+                $s0 = $s0->bitwise_xor($temp[2]);
+                $temp = array(
+                          $w[$i - 2]->bitwise_rightRotate(19),
+                          $w[$i - 2]->bitwise_rightRotate(61),
+                          $w[$i - 2]->bitwise_rightShift(6)
+                );
+                $s1 = $temp[0]->bitwise_xor($temp[1]);
+                $s1 = $s1->bitwise_xor($temp[2]);
+                $w[$i] = $w[$i - 16]->copy();
+                $w[$i] = $w[$i]->add($s0);
+                $w[$i] = $w[$i]->add($w[$i - 7]);
+                $w[$i] = $w[$i]->add($s1);
+            }
+
+            // Initialize hash value for this chunk
+            $a = $hash[0]->copy();
+            $b = $hash[1]->copy();
+            $c = $hash[2]->copy();
+            $d = $hash[3]->copy();
+            $e = $hash[4]->copy();
+            $f = $hash[5]->copy();
+            $g = $hash[6]->copy();
+            $h = $hash[7]->copy();
+
+            // Main loop
+            for ($i = 0; $i < 80; $i++) {
+                $temp = array(
+                    $a->bitwise_rightRotate(28),
+                    $a->bitwise_rightRotate(34),
+                    $a->bitwise_rightRotate(39)
+                );
+                $s0 = $temp[0]->bitwise_xor($temp[1]);
+                $s0 = $s0->bitwise_xor($temp[2]);
+                $temp = array(
+                    $a->bitwise_and($b),
+                    $a->bitwise_and($c),
+                    $b->bitwise_and($c)
+                );
+                $maj = $temp[0]->bitwise_xor($temp[1]);
+                $maj = $maj->bitwise_xor($temp[2]);
+                $t2 = $s0->add($maj);
+
+                $temp = array(
+                    $e->bitwise_rightRotate(14),
+                    $e->bitwise_rightRotate(18),
+                    $e->bitwise_rightRotate(41)
+                );
+                $s1 = $temp[0]->bitwise_xor($temp[1]);
+                $s1 = $s1->bitwise_xor($temp[2]);
+                $temp = array(
+                    $e->bitwise_and($f),
+                    $g->bitwise_and($e->bitwise_not())
+                );
+                $ch = $temp[0]->bitwise_xor($temp[1]);
+                $t1 = $h->add($s1);
+                $t1 = $t1->add($ch);
+                $t1 = $t1->add($k[$i]);
+                $t1 = $t1->add($w[$i]);
+
+                $h = $g->copy();
+                $g = $f->copy();
+                $f = $e->copy();
+                $e = $d->add($t1);
+                $d = $c->copy();
+                $c = $b->copy();
+                $b = $a->copy();
+                $a = $t1->add($t2);
+            }
+
+            // Add this chunk's hash to result so far
+            $hash = array(
+                $hash[0]->add($a),
+                $hash[1]->add($b),
+                $hash[2]->add($c),
+                $hash[3]->add($d),
+                $hash[4]->add($e),
+                $hash[5]->add($f),
+                $hash[6]->add($g),
+                $hash[7]->add($h)
+            );
+        }
+
+        // Produce the final hash value (big-endian)
+        // (Crypt_Hash::hash() trims the output for hashes but not for HMACs.  as such, we trim the output here)
+        $temp = $hash[0]->toBytes() . $hash[1]->toBytes() . $hash[2]->toBytes() . $hash[3]->toBytes() .
+                $hash[4]->toBytes() . $hash[5]->toBytes();
+        if ($this->l != 48) {
+            $temp.= $hash[6]->toBytes() . $hash[7]->toBytes();
+        }
+
+        return $temp;
+    }
+
+    /**
+     * Right Rotate
+     *
+     * @access private
+     * @param Integer $int
+     * @param Integer $amt
+     * @see _sha256()
+     * @return Integer
+     */
+    function _rightRotate($int, $amt)
+    {
+        $invamt = 32 - $amt;
+        $mask = (1 << $invamt) - 1;
+        return (($int << $invamt) & 0xFFFFFFFF) | (($int >> $amt) & $mask);
+    }
+
+    /**
+     * Right Shift
+     *
+     * @access private
+     * @param Integer $int
+     * @param Integer $amt
+     * @see _sha256()
+     * @return Integer
+     */
+    function _rightShift($int, $amt)
+    {
+        $mask = (1 << (32 - $amt)) - 1;
+        return ($int >> $amt) & $mask;
+    }
+
+    /**
+     * Not
+     *
+     * @access private
+     * @param Integer $int
+     * @see _sha256()
+     * @return Integer
+     */
+    function _not($int)
+    {
+        return ~$int & 0xFFFFFFFF;
+    }
+
+    /**
+     * Add
+     *
+     * _sha256() adds multiple unsigned 32-bit integers.  Since PHP doesn't support unsigned integers and since the
+     * possibility of overflow exists, care has to be taken.  Math_BigInteger() could be used but this should be faster.
+     *
+     * @param String $string
+     * @param optional Integer $index
+     * @return String
+     * @see _sha256()
+     * @access private
+     */
+    function _add()
+    {
+        static $mod;
+        if (!isset($mod)) {
+            $mod = pow(2, 32);
+        }
+
+        $result = 0;
+        $arguments = func_get_args();
+        foreach ($arguments as $argument) {
+            $result+= $argument < 0 ? ($argument & 0x7FFFFFFF) + 0x80000000 : $argument;
+        }
+
+        return fmod($result, $mod);
+    }
+
+    /**
+     * String Shift
+     *
+     * Inspired by array_shift
+     *
+     * @param String $string
+     * @param optional Integer $index
+     * @return String
+     * @access private
+     */
+    function _string_shift(&$string, $index = 1)
+    {
+        $substr = substr($string, 0, $index);
+        $string = substr($string, $index);
+        return $substr;
+    }
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RC4.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RC4.php
new file mode 100644
index 0000000000000000000000000000000000000000..390108e04800c99bde2053ec924cb7a53fd8459e
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RC4.php
@@ -0,0 +1,519 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of RC4.
+ *
+ * Uses mcrypt, if available, and an internal implementation, otherwise.
+ *
+ * PHP versions 4 and 5
+ *
+ * Useful resources are as follows:
+ *
+ *  - {@link http://www.mozilla.org/projects/security/pki/nss/draft-kaukonen-cipher-arcfour-03.txt ARCFOUR Algorithm}
+ *  - {@link http://en.wikipedia.org/wiki/RC4 - Wikipedia: RC4}
+ *
+ * RC4 is also known as ARCFOUR or ARC4.  The reason is elaborated upon at Wikipedia.  This class is named RC4 and not
+ * ARCFOUR or ARC4 because RC4 is how it is refered to in the SSH1 specification.
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ *    include('Crypt/RC4.php');
+ *
+ *    $rc4 = new Crypt_RC4();
+ *
+ *    $rc4->setKey('abcdefgh');
+ *
+ *    $size = 10 * 1024;
+ *    $plaintext = '';
+ *    for ($i = 0; $i < $size; $i++) {
+ *        $plaintext.= 'a';
+ *    }
+ *
+ *    echo $rc4->decrypt($rc4->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category   Crypt
+ * @package    Crypt_RC4
+ * @author     Jim Wigginton <terrafrost@php.net>
+ * @copyright  MMVII Jim Wigginton
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @version    $Id: RC4.php,v 1.8 2009/06/09 04:00:38 terrafrost Exp $
+ * @link       http://phpseclib.sourceforge.net
+ */
+
+/**#@+
+ * @access private
+ * @see Crypt_RC4::Crypt_RC4()
+ */
+/**
+ * Toggles the internal implementation
+ */
+define('CRYPT_RC4_MODE_INTERNAL', 1);
+/**
+ * Toggles the mcrypt implementation
+ */
+define('CRYPT_RC4_MODE_MCRYPT', 2);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_RC4::_crypt()
+ */
+define('CRYPT_RC4_ENCRYPT', 0);
+define('CRYPT_RC4_DECRYPT', 1);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of RC4.
+ *
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access  public
+ * @package Crypt_RC4
+ */
+class Crypt_RC4 {
+    /**
+     * The Key
+     *
+     * @see Crypt_RC4::setKey()
+     * @var String
+     * @access private
+     */
+    var $key = "\0";
+
+    /**
+     * The Key Stream for encryption
+     *
+     * If CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT, this will be equal to the mcrypt object
+     *
+     * @see Crypt_RC4::setKey()
+     * @var Array
+     * @access private
+     */
+    var $encryptStream = false;
+
+    /**
+     * The Key Stream for decryption
+     *
+     * If CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT, this will be equal to the mcrypt object
+     *
+     * @see Crypt_RC4::setKey()
+     * @var Array
+     * @access private
+     */
+    var $decryptStream = false;
+
+    /**
+     * The $i and $j indexes for encryption
+     *
+     * @see Crypt_RC4::_crypt()
+     * @var Integer
+     * @access private
+     */
+    var $encryptIndex = 0;
+
+    /**
+     * The $i and $j indexes for decryption
+     *
+     * @see Crypt_RC4::_crypt()
+     * @var Integer
+     * @access private
+     */
+    var $decryptIndex = 0;
+
+    /**
+     * The Encryption Algorithm
+     *
+     * Only used if CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT.  Only possible values are MCRYPT_RC4 or MCRYPT_ARCFOUR.
+     *
+     * @see Crypt_RC4::Crypt_RC4()
+     * @var Integer
+     * @access private
+     */
+    var $mode;
+
+    /**
+     * Continuous Buffer status
+     *
+     * @see Crypt_RC4::enableContinuousBuffer()
+     * @var Boolean
+     * @access private
+     */
+    var $continuousBuffer = false;
+
+    /**
+     * Default Constructor.
+     *
+     * Determines whether or not the mcrypt extension should be used.
+     *
+     * @return Crypt_RC4
+     * @access public
+     */
+    function Crypt_RC4()
+    {
+        if ( !defined('CRYPT_RC4_MODE') ) {
+            switch (true) {
+                case extension_loaded('mcrypt') && (defined('MCRYPT_ARCFOUR') || defined('MCRYPT_RC4')) && in_array('arcfour', mcrypt_list_algorithms()):
+                    define('CRYPT_RC4_MODE', CRYPT_RC4_MODE_MCRYPT);
+                    break;
+                default:
+                    define('CRYPT_RC4_MODE', CRYPT_RC4_MODE_INTERNAL);
+            }
+        }
+
+        switch ( CRYPT_RC4_MODE ) {
+            case CRYPT_RC4_MODE_MCRYPT:
+                switch (true) {
+                    case defined('MCRYPT_ARCFOUR'):
+                        $this->mode = MCRYPT_ARCFOUR;
+                        break;
+                    case defined('MCRYPT_RC4');
+                        $this->mode = MCRYPT_RC4;
+                }
+                $this->encryptStream = mcrypt_module_open($this->mode, '', MCRYPT_MODE_STREAM, '');
+                $this->decryptStream = mcrypt_module_open($this->mode, '', MCRYPT_MODE_STREAM, '');
+
+        }
+    }
+
+    /**
+     * Sets the key.
+     *
+     * Keys can be between 1 and 256 bytes long.  If they are longer then 256 bytes, the first 256 bytes will
+     * be used.  If no key is explicitly set, it'll be assumed to be a single null byte.
+     *
+     * @access public
+     * @param String $key
+     */
+    function setKey($key)
+    {
+        $this->key = $key;
+
+        if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
+            mcrypt_generic_init($this->encryptStream, $this->key, '');
+            mcrypt_generic_init($this->decryptStream, $this->key, '');
+            return;
+        }
+
+        $keyLength = strlen($key);
+        $keyStream = array();
+        for ($i = 0; $i < 256; $i++) {
+            $keyStream[$i] = $i;
+        }
+        $j = 0;
+        for ($i = 0; $i < 256; $i++) {
+            $j = ($j + $keyStream[$i] + ord($key[$i % $keyLength])) & 255;
+            $temp = $keyStream[$i];
+            $keyStream[$i] = $keyStream[$j];
+            $keyStream[$j] = $temp;
+        }
+
+        $this->encryptIndex = $this->decryptIndex = array(0, 0);
+        $this->encryptStream = $this->decryptStream = $keyStream;
+    }
+
+    /**
+     * Sets the password.
+     *
+     * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:
+     *     {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2}:
+     *         $hash, $salt, $count, $dkLen
+     *
+     * @param String $password
+     * @param optional String $method
+     * @access public
+     */
+    function setPassword($password, $method = 'pbkdf2')
+    {
+        $key = '';
+
+        switch ($method) {
+            default: // 'pbkdf2'
+                list(, , $hash, $salt, $count) = func_get_args();
+                if (!isset($hash)) {
+                    $hash = 'sha1';
+                }
+                // WPA and WPA2 use the SSID as the salt
+                if (!isset($salt)) {
+                    $salt = 'phpseclib/salt';
+                }
+                // RFC2898#section-4.2 uses 1,000 iterations by default
+                // WPA and WPA2 use 4,096.
+                if (!isset($count)) {
+                    $count = 1000;
+                }
+                if (!isset($dkLen)) {
+                    $dkLen = 128;
+                }
+
+                if (!class_exists('Crypt_Hash')) {
+                    require_once('Crypt/Hash.php');
+                }
+
+                $i = 1;
+                while (strlen($key) < $dkLen) {
+                    //$dk.= $this->_pbkdf($password, $salt, $count, $i++);
+                    $hmac = new Crypt_Hash();
+                    $hmac->setHash($hash);
+                    $hmac->setKey($password);
+                    $f = $u = $hmac->hash($salt . pack('N', $i++));
+                    for ($j = 2; $j <= $count; $j++) {
+                        $u = $hmac->hash($u);
+                        $f^= $u;
+                    }
+                    $key.= $f;
+                }
+        }
+
+        $this->setKey(substr($key, 0, $dkLen));
+    }
+
+    /**
+     * Dummy function.
+     *
+     * Some protocols, such as WEP, prepend an "initialization vector" to the key, effectively creating a new key [1].
+     * If you need to use an initialization vector in this manner, feel free to prepend it to the key, yourself, before
+     * calling setKey().
+     *
+     * [1] WEP's initialization vectors (IV's) are used in a somewhat insecure way.  Since, in that protocol,
+     * the IV's are relatively easy to predict, an attack described by
+     * {@link http://www.drizzle.com/~aboba/IEEE/rc4_ksaproc.pdf Scott Fluhrer, Itsik Mantin, and Adi Shamir}
+     * can be used to quickly guess at the rest of the key.  The following links elaborate:
+     *
+     * {@link http://www.rsa.com/rsalabs/node.asp?id=2009 http://www.rsa.com/rsalabs/node.asp?id=2009}
+     * {@link http://en.wikipedia.org/wiki/Related_key_attack http://en.wikipedia.org/wiki/Related_key_attack}
+     *
+     * @param String $iv
+     * @see Crypt_RC4::setKey()
+     * @access public
+     */
+    function setIV($iv)
+    {
+    }
+
+    /**
+     * Encrypts a message.
+     *
+     * @see Crypt_RC4::_crypt()
+     * @access public
+     * @param String $plaintext
+     */
+    function encrypt($plaintext)
+    {
+        return $this->_crypt($plaintext, CRYPT_RC4_ENCRYPT);
+    }
+
+    /**
+     * Decrypts a message.
+     *
+     * $this->decrypt($this->encrypt($plaintext)) == $this->encrypt($this->encrypt($plaintext)).
+     * Atleast if the continuous buffer is disabled.
+     *
+     * @see Crypt_RC4::_crypt()
+     * @access public
+     * @param String $ciphertext
+     */
+    function decrypt($ciphertext)
+    {
+        return $this->_crypt($ciphertext, CRYPT_RC4_DECRYPT);
+    }
+
+    /**
+     * Encrypts or decrypts a message.
+     *
+     * @see Crypt_RC4::encrypt()
+     * @see Crypt_RC4::decrypt()
+     * @access private
+     * @param String $text
+     * @param Integer $mode
+     */
+    function _crypt($text, $mode)
+    {
+        if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
+            $keyStream = $mode == CRYPT_RC4_ENCRYPT ? 'encryptStream' : 'decryptStream';
+
+            if (!$this->continuousBuffer) {
+                mcrypt_generic_init($this->$keyStream, $this->key, '');
+            }
+
+            return mcrypt_generic($this->$keyStream, $text);
+        }
+
+        if ($this->encryptStream === false) {
+            $this->setKey($this->key);
+        }
+
+        switch ($mode) {
+            case CRYPT_RC4_ENCRYPT:
+                $keyStream = $this->encryptStream;
+                list($i, $j) = $this->encryptIndex;
+                break;
+            case CRYPT_RC4_DECRYPT:
+                $keyStream = $this->decryptStream;
+                list($i, $j) = $this->decryptIndex;
+        }
+
+        $newText = '';
+        for ($k = 0; $k < strlen($text); $k++) {
+            $i = ($i + 1) & 255;
+            $j = ($j + $keyStream[$i]) & 255;
+            $temp = $keyStream[$i];
+            $keyStream[$i] = $keyStream[$j];
+            $keyStream[$j] = $temp;
+            $temp = $keyStream[($keyStream[$i] + $keyStream[$j]) & 255];
+            $newText.= chr(ord($text[$k]) ^ $temp);
+        }
+
+        if ($this->continuousBuffer) {
+            switch ($mode) {
+                case CRYPT_RC4_ENCRYPT:
+                    $this->encryptStream = $keyStream;
+                    $this->encryptIndex = array($i, $j);
+                    break;
+                case CRYPT_RC4_DECRYPT:
+                    $this->decryptStream = $keyStream;
+                    $this->decryptIndex = array($i, $j);
+            }
+        }
+
+        return $newText;
+    }
+
+    /**
+     * Treat consecutive "packets" as if they are a continuous buffer.
+     *
+     * Say you have a 16-byte plaintext $plaintext.  Using the default behavior, the two following code snippets
+     * will yield different outputs:
+     *
+     * <code>
+     *    echo $rc4->encrypt(substr($plaintext, 0, 8));
+     *    echo $rc4->encrypt(substr($plaintext, 8, 8));
+     * </code>
+     * <code>
+     *    echo $rc4->encrypt($plaintext);
+     * </code>
+     *
+     * The solution is to enable the continuous buffer.  Although this will resolve the above discrepancy, it creates
+     * another, as demonstrated with the following:
+     *
+     * <code>
+     *    $rc4->encrypt(substr($plaintext, 0, 8));
+     *    echo $rc4->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+     * </code>
+     * <code>
+     *    echo $rc4->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+     * </code>
+     *
+     * With the continuous buffer disabled, these would yield the same output.  With it enabled, they yield different
+     * outputs.  The reason is due to the fact that the initialization vector's change after every encryption /
+     * decryption round when the continuous buffer is enabled.  When it's disabled, they remain constant.
+     *
+     * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each
+     * encryption / decryption round, whereas otherwise, it'd remain constant.  For this reason, it's recommended that
+     * continuous buffers not be used.  They do offer better security and are, in fact, sometimes required (SSH uses them),
+     * however, they are also less intuitive and more likely to cause you problems.
+     *
+     * @see Crypt_RC4::disableContinuousBuffer()
+     * @access public
+     */
+    function enableContinuousBuffer()
+    {
+        if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
+            mcrypt_generic_init($this->encryptStream, $this->key, '');
+            mcrypt_generic_init($this->decryptStream, $this->key, '');
+        }
+
+        $this->continuousBuffer = true;
+    }
+
+    /**
+     * Treat consecutive packets as if they are a discontinuous buffer.
+     *
+     * The default behavior.
+     *
+     * @see Crypt_RC4::enableContinuousBuffer()
+     * @access public
+     */
+    function disableContinuousBuffer()
+    {
+        if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_INTERNAL ) {
+            $this->encryptIndex = $this->decryptIndex = array(0, 0);
+            $this->encryptStream = $this->decryptStream = false;
+        }
+
+        $this->continuousBuffer = false;
+    }
+
+    /**
+     * Dummy function.
+     *
+     * Since RC4 is a stream cipher and not a block cipher, no padding is necessary.  The only reason this function is
+     * included is so that you can switch between a block cipher and a stream cipher transparently.
+     *
+     * @see Crypt_RC4::disablePadding()
+     * @access public
+     */
+    function enablePadding()
+    {
+    }
+
+    /**
+     * Dummy function.
+     *
+     * @see Crypt_RC4::enablePadding()
+     * @access public
+     */
+    function disablePadding()
+    {
+    }
+
+    /**
+     * Class destructor.
+     *
+     * Will be called, automatically, if you're using PHP5.  If you're using PHP4, call it yourself.  Only really
+     * needs to be called if mcrypt is being used.
+     *
+     * @access public
+     */
+    function __destruct()
+    {
+        if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
+            $this->_closeMCrypt();
+        }
+    }
+
+    /**
+     * Properly close the MCrypt objects.
+     *
+     * @access prviate
+     */
+    function _closeMCrypt()
+    {
+        mcrypt_module_close($this->encryptStream);
+        mcrypt_module_close($this->decryptStream);
+    }
+}
+
+// vim: ts=4:sw=4:et:
+// vim6: fdl=1:
\ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RSA.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RSA.php
new file mode 100644
index 0000000000000000000000000000000000000000..db1ba1581b684001eaadad51f2bc086171036746
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/RSA.php
@@ -0,0 +1,2646 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP PKCS#1 (v2.1) compliant implementation of RSA.
+ *
+ * PHP versions 4 and 5
+ *
+ * Here's an example of how to encrypt and decrypt text with this library:
+ * <code>
+ * <?php
+ *    include('Crypt/RSA.php');
+ *
+ *    $rsa = new Crypt_RSA();
+ *    extract($rsa->createKey());
+ *
+ *    $plaintext = 'terrafrost';
+ *
+ *    $rsa->loadKey($privatekey);
+ *    $ciphertext = $rsa->encrypt($plaintext);
+ *
+ *    $rsa->loadKey($publickey);
+ *    echo $rsa->decrypt($ciphertext);
+ * ?>
+ * </code>
+ *
+ * Here's an example of how to create signatures and verify signatures with this library:
+ * <code>
+ * <?php
+ *    include('Crypt/RSA.php');
+ *
+ *    $rsa = new Crypt_RSA();
+ *    extract($rsa->createKey());
+ *
+ *    $plaintext = 'terrafrost';
+ *
+ *    $rsa->loadKey($privatekey);
+ *    $signature = $rsa->sign($plaintext);
+ *
+ *    $rsa->loadKey($publickey);
+ *    echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified';
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category   Crypt
+ * @package    Crypt_RSA
+ * @author     Jim Wigginton <terrafrost@php.net>
+ * @copyright  MMIX Jim Wigginton
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @version    $Id: RSA.php,v 1.19 2010/09/12 21:58:54 terrafrost Exp $
+ * @link       http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Math_BigInteger
+ */
+if (!class_exists('Math_BigInteger')) {
+    require_once('Math/BigInteger.php');
+}
+
+/**
+ * Include Crypt_Random
+ */
+// the class_exists() will only be called if the crypt_random_string function hasn't been defined and
+// will trigger a call to __autoload() if you're wanting to auto-load classes
+// call function_exists() a second time to stop the require_once from being called outside
+// of the auto loader
+if (!function_exists('crypt_random_string') && !class_exists('Crypt_Random') && !function_exists('crypt_random_string')) {
+    require_once('Crypt/Random.php');
+}
+
+/**
+ * Include Crypt_Hash
+ */
+if (!class_exists('Crypt_Hash')) {
+    require_once('Crypt/Hash.php');
+}
+
+/**#@+
+ * @access public
+ * @see Crypt_RSA::encrypt()
+ * @see Crypt_RSA::decrypt()
+ */
+/**
+ * Use {@link http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding Optimal Asymmetric Encryption Padding}
+ * (OAEP) for encryption / decryption.
+ *
+ * Uses sha1 by default.
+ *
+ * @see Crypt_RSA::setHash()
+ * @see Crypt_RSA::setMGFHash()
+ */
+define('CRYPT_RSA_ENCRYPTION_OAEP',  1);
+/**
+ * Use PKCS#1 padding.
+ *
+ * Although CRYPT_RSA_ENCRYPTION_OAEP offers more security, including PKCS#1 padding is necessary for purposes of backwards
+ * compatability with protocols (like SSH-1) written before OAEP's introduction.
+ */
+define('CRYPT_RSA_ENCRYPTION_PKCS1', 2);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Crypt_RSA::sign()
+ * @see Crypt_RSA::verify()
+ * @see Crypt_RSA::setHash()
+ */
+/**
+ * Use the Probabilistic Signature Scheme for signing
+ *
+ * Uses sha1 by default.
+ *
+ * @see Crypt_RSA::setSaltLength()
+ * @see Crypt_RSA::setMGFHash()
+ */
+define('CRYPT_RSA_SIGNATURE_PSS',  1);
+/**
+ * Use the PKCS#1 scheme by default.
+ *
+ * Although CRYPT_RSA_SIGNATURE_PSS offers more security, including PKCS#1 signing is necessary for purposes of backwards
+ * compatability with protocols (like SSH-2) written before PSS's introduction.
+ */
+define('CRYPT_RSA_SIGNATURE_PKCS1', 2);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_RSA::createKey()
+ */
+/**
+ * ASN1 Integer
+ */
+define('CRYPT_RSA_ASN1_INTEGER',   2);
+/**
+ * ASN1 Bit String
+ */
+define('CRYPT_RSA_ASN1_BITSTRING', 3); 
+/**
+ * ASN1 Sequence (with the constucted bit set)
+ */
+define('CRYPT_RSA_ASN1_SEQUENCE', 48);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_RSA::Crypt_RSA()
+ */
+/**
+ * To use the pure-PHP implementation
+ */
+define('CRYPT_RSA_MODE_INTERNAL', 1);
+/**
+ * To use the OpenSSL library
+ *
+ * (if enabled; otherwise, the internal implementation will be used)
+ */
+define('CRYPT_RSA_MODE_OPENSSL', 2);
+/**#@-*/
+
+/**
+ * Default openSSL configuration file.
+ */
+define('CRYPT_RSA_OPENSSL_CONFIG', dirname(__FILE__) . '/../openssl.cnf');
+
+
+/**#@+
+ * @access public
+ * @see Crypt_RSA::createKey()
+ * @see Crypt_RSA::setPrivateKeyFormat()
+ */
+/**
+ * PKCS#1 formatted private key
+ *
+ * Used by OpenSSH
+ */
+define('CRYPT_RSA_PRIVATE_FORMAT_PKCS1', 0);
+/**
+ * PuTTY formatted private key
+ */
+define('CRYPT_RSA_PRIVATE_FORMAT_PUTTY', 1);
+/**
+ * XML formatted private key
+ */
+define('CRYPT_RSA_PRIVATE_FORMAT_XML', 2);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Crypt_RSA::createKey()
+ * @see Crypt_RSA::setPublicKeyFormat()
+ */
+/**
+ * Raw public key
+ *
+ * An array containing two Math_BigInteger objects.
+ *
+ * The exponent can be indexed with any of the following:
+ *
+ * 0, e, exponent, publicExponent
+ *
+ * The modulus can be indexed with any of the following:
+ *
+ * 1, n, modulo, modulus
+ */
+define('CRYPT_RSA_PUBLIC_FORMAT_RAW', 3);
+/**
+ * PKCS#1 formatted public key (raw)
+ *
+ * Used by File/X509.php
+ */
+define('CRYPT_RSA_PUBLIC_FORMAT_PKCS1_RAW', 4);
+/**
+ * XML formatted public key
+ */
+define('CRYPT_RSA_PUBLIC_FORMAT_XML', 5);
+/**
+ * OpenSSH formatted public key
+ *
+ * Place in $HOME/.ssh/authorized_keys
+ */
+define('CRYPT_RSA_PUBLIC_FORMAT_OPENSSH', 6);
+/**
+ * PKCS#1 formatted public key (encapsulated)
+ *
+ * Used by PHP's openssl_public_encrypt() and openssl's rsautl (when -pubin is set)
+ */
+define('CRYPT_RSA_PUBLIC_FORMAT_PKCS1', 7);
+/**#@-*/
+
+/**
+ * Pure-PHP PKCS#1 compliant implementation of RSA.
+ *
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access  public
+ * @package Crypt_RSA
+ */
+class Crypt_RSA {
+    /**
+     * Precomputed Zero
+     *
+     * @var Array
+     * @access private
+     */
+    var $zero;
+
+    /**
+     * Precomputed One
+     *
+     * @var Array
+     * @access private
+     */
+    var $one;
+
+    /**
+     * Private Key Format
+     *
+     * @var Integer
+     * @access private
+     */
+    var $privateKeyFormat = CRYPT_RSA_PRIVATE_FORMAT_PKCS1;
+
+    /**
+     * Public Key Format
+     *
+     * @var Integer
+     * @access public
+     */
+    var $publicKeyFormat = CRYPT_RSA_PUBLIC_FORMAT_PKCS1;
+
+    /**
+     * Modulus (ie. n)
+     *
+     * @var Math_BigInteger
+     * @access private
+     */
+    var $modulus;
+
+    /**
+     * Modulus length
+     *
+     * @var Math_BigInteger
+     * @access private
+     */
+    var $k;
+
+    /**
+     * Exponent (ie. e or d)
+     *
+     * @var Math_BigInteger
+     * @access private
+     */
+    var $exponent;
+
+    /**
+     * Primes for Chinese Remainder Theorem (ie. p and q)
+     *
+     * @var Array
+     * @access private
+     */
+    var $primes;
+
+    /**
+     * Exponents for Chinese Remainder Theorem (ie. dP and dQ)
+     *
+     * @var Array
+     * @access private
+     */
+    var $exponents;
+
+    /**
+     * Coefficients for Chinese Remainder Theorem (ie. qInv)
+     *
+     * @var Array
+     * @access private
+     */
+    var $coefficients;
+
+    /**
+     * Hash name
+     *
+     * @var String
+     * @access private
+     */
+    var $hashName;
+
+    /**
+     * Hash function
+     *
+     * @var Crypt_Hash
+     * @access private
+     */
+    var $hash;
+
+    /**
+     * Length of hash function output
+     *
+     * @var Integer
+     * @access private
+     */
+    var $hLen;
+
+    /**
+     * Length of salt
+     *
+     * @var Integer
+     * @access private
+     */
+    var $sLen;
+
+    /**
+     * Hash function for the Mask Generation Function
+     *
+     * @var Crypt_Hash
+     * @access private
+     */
+    var $mgfHash;
+
+    /**
+     * Length of MGF hash function output
+     *
+     * @var Integer
+     * @access private
+     */
+    var $mgfHLen;
+
+    /**
+     * Encryption mode
+     *
+     * @var Integer
+     * @access private
+     */
+    var $encryptionMode = CRYPT_RSA_ENCRYPTION_OAEP;
+
+    /**
+     * Signature mode
+     *
+     * @var Integer
+     * @access private
+     */
+    var $signatureMode = CRYPT_RSA_SIGNATURE_PSS;
+
+    /**
+     * Public Exponent
+     *
+     * @var Mixed
+     * @access private
+     */
+    var $publicExponent = false;
+
+    /**
+     * Password
+     *
+     * @var String
+     * @access private
+     */
+    var $password = false;
+
+    /**
+     * Components
+     *
+     * For use with parsing XML formatted keys.  PHP's XML Parser functions use utilized - instead of PHP's DOM functions -
+     * because PHP's XML Parser functions work on PHP4 whereas PHP's DOM functions - although surperior - don't.
+     *
+     * @see Crypt_RSA::_start_element_handler()
+     * @var Array
+     * @access private
+     */
+    var $components = array();
+
+    /**
+     * Current String
+     *
+     * For use with parsing XML formatted keys.
+     *
+     * @see Crypt_RSA::_character_handler()
+     * @see Crypt_RSA::_stop_element_handler()
+     * @var Mixed
+     * @access private
+     */
+    var $current;
+
+    /**
+     * OpenSSL configuration file name.
+     *
+     * Set to NULL to use system configuration file.
+     * @see Crypt_RSA::createKey()
+     * @var Mixed
+     * @Access public
+     */
+    var $configFile;
+
+    /**
+     * The constructor
+     *
+     * If you want to make use of the openssl extension, you'll need to set the mode manually, yourself.  The reason
+     * Crypt_RSA doesn't do it is because OpenSSL doesn't fail gracefully.  openssl_pkey_new(), in particular, requires
+     * openssl.cnf be present somewhere and, unfortunately, the only real way to find out is too late.
+     *
+     * @return Crypt_RSA
+     * @access public
+     */
+    function Crypt_RSA()
+    {
+        $this->configFile = CRYPT_RSA_OPENSSL_CONFIG;
+
+        if ( !defined('CRYPT_RSA_MODE') ) {
+            switch (true) {
+                case extension_loaded('openssl') && version_compare(PHP_VERSION, '4.2.0', '>='):
+                    define('CRYPT_RSA_MODE', CRYPT_RSA_MODE_OPENSSL);
+                    break;
+                default:
+                    define('CRYPT_RSA_MODE', CRYPT_RSA_MODE_INTERNAL);
+            }
+        }
+
+        if (!defined('CRYPT_RSA_COMMENT')) {
+            define('CRYPT_RSA_COMMENT', 'phpseclib-generated-key');
+        }
+
+        $this->zero = new Math_BigInteger();
+        $this->one = new Math_BigInteger(1);
+
+        $this->hash = new Crypt_Hash('sha1');
+        $this->hLen = $this->hash->getLength();
+        $this->hashName = 'sha1';
+        $this->mgfHash = new Crypt_Hash('sha1');
+        $this->mgfHLen = $this->mgfHash->getLength();
+    }
+
+    /**
+     * Create public / private key pair
+     *
+     * Returns an array with the following three elements:
+     *  - 'privatekey': The private key.
+     *  - 'publickey':  The public key.
+     *  - 'partialkey': A partially computed key (if the execution time exceeded $timeout).
+     *                  Will need to be passed back to Crypt_RSA::createKey() as the third parameter for further processing.
+     *
+     * @access public
+     * @param optional Integer $bits
+     * @param optional Integer $timeout
+     * @param optional Math_BigInteger $p
+     */
+    function createKey($bits = 1024, $timeout = false, $partial = array())
+    {
+        if (!defined('CRYPT_RSA_EXPONENT')) {
+            // http://en.wikipedia.org/wiki/65537_%28number%29
+            define('CRYPT_RSA_EXPONENT', '65537');
+        }
+        // per <http://cseweb.ucsd.edu/~hovav/dist/survey.pdf#page=5>, this number ought not result in primes smaller
+        // than 256 bits. as a consequence if the key you're trying to create is 1024 bits and you've set CRYPT_RSA_SMALLEST_PRIME
+        // to 384 bits then you're going to get a 384 bit prime and a 640 bit prime (384 + 1024 % 384). at least if
+        // CRYPT_RSA_MODE is set to CRYPT_RSA_MODE_INTERNAL. if CRYPT_RSA_MODE is set to CRYPT_RSA_MODE_OPENSSL then
+        // CRYPT_RSA_SMALLEST_PRIME is ignored (ie. multi-prime RSA support is more intended as a way to speed up RSA key
+        // generation when there's a chance neither gmp nor OpenSSL are installed)
+        if (!defined('CRYPT_RSA_SMALLEST_PRIME')) {
+            define('CRYPT_RSA_SMALLEST_PRIME', 4096);
+        }
+
+        // OpenSSL uses 65537 as the exponent and requires RSA keys be 384 bits minimum
+        if ( CRYPT_RSA_MODE == CRYPT_RSA_MODE_OPENSSL && $bits >= 384 && CRYPT_RSA_EXPONENT == 65537) {
+            $config = array();
+            if (isset($this->configFile)) {
+                $config['config'] = $this->configFile;
+            }
+            $rsa = openssl_pkey_new(array('private_key_bits' => $bits) + $config);
+            openssl_pkey_export($rsa, $privatekey, NULL, $config);
+            $publickey = openssl_pkey_get_details($rsa);
+            $publickey = $publickey['key'];
+
+            $privatekey = call_user_func_array(array($this, '_convertPrivateKey'), array_values($this->_parseKey($privatekey, CRYPT_RSA_PRIVATE_FORMAT_PKCS1)));
+            $publickey = call_user_func_array(array($this, '_convertPublicKey'), array_values($this->_parseKey($publickey, CRYPT_RSA_PUBLIC_FORMAT_PKCS1)));
+
+            // clear the buffer of error strings stemming from a minimalistic openssl.cnf
+            while (openssl_error_string() !== false);
+
+            return array(
+                'privatekey' => $privatekey,
+                'publickey' => $publickey,
+                'partialkey' => false
+            );
+        }
+
+        static $e;
+        if (!isset($e)) {
+            $e = new Math_BigInteger(CRYPT_RSA_EXPONENT);
+        }
+
+        extract($this->_generateMinMax($bits));
+        $absoluteMin = $min;
+        $temp = $bits >> 1; // divide by two to see how many bits P and Q would be
+        if ($temp > CRYPT_RSA_SMALLEST_PRIME) {
+            $num_primes = floor($bits / CRYPT_RSA_SMALLEST_PRIME);
+            $temp = CRYPT_RSA_SMALLEST_PRIME;
+        } else {
+            $num_primes = 2;
+        }
+        extract($this->_generateMinMax($temp + $bits % $temp));
+        $finalMax = $max;
+        extract($this->_generateMinMax($temp));
+
+        $generator = new Math_BigInteger();
+
+        $n = $this->one->copy();
+        if (!empty($partial)) {
+            extract(unserialize($partial));
+        } else {
+            $exponents = $coefficients = $primes = array();
+            $lcm = array(
+                'top' => $this->one->copy(),
+                'bottom' => false
+            );
+        }
+
+        $start = time();
+        $i0 = count($primes) + 1;
+
+        do {
+            for ($i = $i0; $i <= $num_primes; $i++) {
+                if ($timeout !== false) {
+                    $timeout-= time() - $start;
+                    $start = time();
+                    if ($timeout <= 0) {
+                        return array(
+                            'privatekey' => '',
+                            'publickey'  => '',
+                            'partialkey' => serialize(array(
+                                'primes' => $primes,
+                                'coefficients' => $coefficients,
+                                'lcm' => $lcm,
+                                'exponents' => $exponents
+                            ))
+                        );
+                    }
+                }
+
+                if ($i == $num_primes) {
+                    list($min, $temp) = $absoluteMin->divide($n);
+                    if (!$temp->equals($this->zero)) {
+                        $min = $min->add($this->one); // ie. ceil()
+                    }
+                    $primes[$i] = $generator->randomPrime($min, $finalMax, $timeout);
+                } else {
+                    $primes[$i] = $generator->randomPrime($min, $max, $timeout);
+                }
+
+                if ($primes[$i] === false) { // if we've reached the timeout
+                    if (count($primes) > 1) {
+                        $partialkey = '';
+                    } else {
+                        array_pop($primes);
+                        $partialkey = serialize(array(
+                            'primes' => $primes,
+                            'coefficients' => $coefficients,
+                            'lcm' => $lcm,
+                            'exponents' => $exponents
+                        ));
+                    }
+
+                    return array(
+                        'privatekey' => '',
+                        'publickey'  => '',
+                        'partialkey' => $partialkey
+                    );
+                }
+
+                // the first coefficient is calculated differently from the rest
+                // ie. instead of being $primes[1]->modInverse($primes[2]), it's $primes[2]->modInverse($primes[1])
+                if ($i > 2) {
+                    $coefficients[$i] = $n->modInverse($primes[$i]);
+                }
+
+                $n = $n->multiply($primes[$i]);
+
+                $temp = $primes[$i]->subtract($this->one);
+
+                // textbook RSA implementations use Euler's totient function instead of the least common multiple.
+                // see http://en.wikipedia.org/wiki/Euler%27s_totient_function
+                $lcm['top'] = $lcm['top']->multiply($temp);
+                $lcm['bottom'] = $lcm['bottom'] === false ? $temp : $lcm['bottom']->gcd($temp);
+
+                $exponents[$i] = $e->modInverse($temp);
+            }
+
+            list($lcm) = $lcm['top']->divide($lcm['bottom']);
+            $gcd = $lcm->gcd($e);
+            $i0 = 1;
+        } while (!$gcd->equals($this->one));
+
+        $d = $e->modInverse($lcm);
+
+        $coefficients[2] = $primes[2]->modInverse($primes[1]);
+
+        // from <http://tools.ietf.org/html/rfc3447#appendix-A.1.2>:
+        // RSAPrivateKey ::= SEQUENCE {
+        //     version           Version,
+        //     modulus           INTEGER,  -- n
+        //     publicExponent    INTEGER,  -- e
+        //     privateExponent   INTEGER,  -- d
+        //     prime1            INTEGER,  -- p
+        //     prime2            INTEGER,  -- q
+        //     exponent1         INTEGER,  -- d mod (p-1)
+        //     exponent2         INTEGER,  -- d mod (q-1)
+        //     coefficient       INTEGER,  -- (inverse of q) mod p
+        //     otherPrimeInfos   OtherPrimeInfos OPTIONAL
+        // }
+
+        return array(
+            'privatekey' => $this->_convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients),
+            'publickey'  => $this->_convertPublicKey($n, $e),
+            'partialkey' => false
+        );
+    }
+
+    /**
+     * Convert a private key to the appropriate format.
+     *
+     * @access private
+     * @see setPrivateKeyFormat()
+     * @param String $RSAPrivateKey
+     * @return String
+     */
+    function _convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients)
+    {
+        $num_primes = count($primes);
+        $raw = array(
+            'version' => $num_primes == 2 ? chr(0) : chr(1), // two-prime vs. multi
+            'modulus' => $n->toBytes(true),
+            'publicExponent' => $e->toBytes(true),
+            'privateExponent' => $d->toBytes(true),
+            'prime1' => $primes[1]->toBytes(true),
+            'prime2' => $primes[2]->toBytes(true),
+            'exponent1' => $exponents[1]->toBytes(true),
+            'exponent2' => $exponents[2]->toBytes(true),
+            'coefficient' => $coefficients[2]->toBytes(true)
+        );
+
+        // if the format in question does not support multi-prime rsa and multi-prime rsa was used,
+        // call _convertPublicKey() instead.
+        switch ($this->privateKeyFormat) {
+            case CRYPT_RSA_PRIVATE_FORMAT_XML:
+                if ($num_primes != 2) {
+                    return false;
+                }
+                return "<RSAKeyValue>\r\n" .
+                       '  <Modulus>' . base64_encode($raw['modulus']) . "</Modulus>\r\n" .
+                       '  <Exponent>' . base64_encode($raw['publicExponent']) . "</Exponent>\r\n" .
+                       '  <P>' . base64_encode($raw['prime1']) . "</P>\r\n" .
+                       '  <Q>' . base64_encode($raw['prime2']) . "</Q>\r\n" .
+                       '  <DP>' . base64_encode($raw['exponent1']) . "</DP>\r\n" .
+                       '  <DQ>' . base64_encode($raw['exponent2']) . "</DQ>\r\n" .
+                       '  <InverseQ>' . base64_encode($raw['coefficient']) . "</InverseQ>\r\n" .
+                       '  <D>' . base64_encode($raw['privateExponent']) . "</D>\r\n" .
+                       '</RSAKeyValue>';
+                break;
+            case CRYPT_RSA_PRIVATE_FORMAT_PUTTY:
+                if ($num_primes != 2) {
+                    return false;
+                }
+                $key = "PuTTY-User-Key-File-2: ssh-rsa\r\nEncryption: ";
+                $encryption = (!empty($this->password) || is_string($this->password)) ? 'aes256-cbc' : 'none';
+                $key.= $encryption;
+                $key.= "\r\nComment: " . CRYPT_RSA_COMMENT . "\r\n";
+                $public = pack('Na*Na*Na*',
+                    strlen('ssh-rsa'), 'ssh-rsa', strlen($raw['publicExponent']), $raw['publicExponent'], strlen($raw['modulus']), $raw['modulus']
+                );
+                $source = pack('Na*Na*Na*Na*',
+                              strlen('ssh-rsa'), 'ssh-rsa', strlen($encryption), $encryption,
+                              strlen(CRYPT_RSA_COMMENT), CRYPT_RSA_COMMENT, strlen($public), $public
+                );
+                $public = base64_encode($public);
+                $key.= "Public-Lines: " . ((strlen($public) + 32) >> 6) . "\r\n";
+                $key.= chunk_split($public, 64);
+                $private = pack('Na*Na*Na*Na*',
+                    strlen($raw['privateExponent']), $raw['privateExponent'], strlen($raw['prime1']), $raw['prime1'],
+                    strlen($raw['prime2']), $raw['prime2'], strlen($raw['coefficient']), $raw['coefficient']
+                );
+                if (empty($this->password) && !is_string($this->password)) {
+                    $source.= pack('Na*', strlen($private), $private);
+                    $hashkey = 'putty-private-key-file-mac-key';
+                } else {
+                    $private.= crypt_random_string(16 - (strlen($private) & 15));
+                    $source.= pack('Na*', strlen($private), $private);
+                    if (!class_exists('Crypt_AES')) {
+                        require_once('Crypt/AES.php');
+                    }
+                    $sequence = 0;
+                    $symkey = '';
+                    while (strlen($symkey) < 32) {
+                        $temp = pack('Na*', $sequence++, $this->password);
+                        $symkey.= pack('H*', sha1($temp));
+                    }
+                    $symkey = substr($symkey, 0, 32);
+                    $crypto = new Crypt_AES();
+
+                    $crypto->setKey($symkey);
+                    $crypto->disablePadding();
+                    $private = $crypto->encrypt($private);
+                    $hashkey = 'putty-private-key-file-mac-key' . $this->password;
+                }
+
+                $private = base64_encode($private);
+                $key.= 'Private-Lines: ' . ((strlen($private) + 32) >> 6) . "\r\n";
+                $key.= chunk_split($private, 64);
+                if (!class_exists('Crypt_Hash')) {
+                    require_once('Crypt/Hash.php');
+                }
+                $hash = new Crypt_Hash('sha1');
+                $hash->setKey(pack('H*', sha1($hashkey)));
+                $key.= 'Private-MAC: ' . bin2hex($hash->hash($source)) . "\r\n";
+
+                return $key;
+            default: // eg. CRYPT_RSA_PRIVATE_FORMAT_PKCS1
+                $components = array();
+                foreach ($raw as $name => $value) {
+                    $components[$name] = pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($value)), $value);
+                }
+
+                $RSAPrivateKey = implode('', $components);
+
+                if ($num_primes > 2) {
+                    $OtherPrimeInfos = '';
+                    for ($i = 3; $i <= $num_primes; $i++) {
+                        // OtherPrimeInfos ::= SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo
+                        //
+                        // OtherPrimeInfo ::= SEQUENCE {
+                        //     prime             INTEGER,  -- ri
+                        //     exponent          INTEGER,  -- di
+                        //     coefficient       INTEGER   -- ti
+                        // }
+                        $OtherPrimeInfo = pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($primes[$i]->toBytes(true))), $primes[$i]->toBytes(true));
+                        $OtherPrimeInfo.= pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($exponents[$i]->toBytes(true))), $exponents[$i]->toBytes(true));
+                        $OtherPrimeInfo.= pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($coefficients[$i]->toBytes(true))), $coefficients[$i]->toBytes(true));
+                        $OtherPrimeInfos.= pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfo)), $OtherPrimeInfo);
+                    }
+                    $RSAPrivateKey.= pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfos)), $OtherPrimeInfos);
+                }
+
+                $RSAPrivateKey = pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($RSAPrivateKey)), $RSAPrivateKey);
+
+                if (!empty($this->password) || is_string($this->password)) {
+                    $iv = crypt_random_string(8);
+                    $symkey = pack('H*', md5($this->password . $iv)); // symkey is short for symmetric key
+                    $symkey.= substr(pack('H*', md5($symkey . $this->password . $iv)), 0, 8);
+                    if (!class_exists('Crypt_TripleDES')) {
+                        require_once('Crypt/TripleDES.php');
+                    }
+                    $des = new Crypt_TripleDES();
+                    $des->setKey($symkey);
+                    $des->setIV($iv);
+                    $iv = strtoupper(bin2hex($iv));
+                    $RSAPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n" .
+                                     "Proc-Type: 4,ENCRYPTED\r\n" .
+                                     "DEK-Info: DES-EDE3-CBC,$iv\r\n" .
+                                     "\r\n" .
+                                     chunk_split(base64_encode($des->encrypt($RSAPrivateKey)), 64) .
+                                     '-----END RSA PRIVATE KEY-----';
+                } else {
+                    $RSAPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n" .
+                                     chunk_split(base64_encode($RSAPrivateKey), 64) .
+                                     '-----END RSA PRIVATE KEY-----';
+                }
+
+                return $RSAPrivateKey;
+        }
+    }
+
+    /**
+     * Convert a public key to the appropriate format
+     *
+     * @access private
+     * @see setPublicKeyFormat()
+     * @param String $RSAPrivateKey
+     * @return String
+     */
+    function _convertPublicKey($n, $e)
+    {
+        $modulus = $n->toBytes(true);
+        $publicExponent = $e->toBytes(true);
+
+        switch ($this->publicKeyFormat) {
+            case CRYPT_RSA_PUBLIC_FORMAT_RAW:
+                return array('e' => $e->copy(), 'n' => $n->copy());
+            case CRYPT_RSA_PUBLIC_FORMAT_XML:
+                return "<RSAKeyValue>\r\n" .
+                       '  <Modulus>' . base64_encode($modulus) . "</Modulus>\r\n" .
+                       '  <Exponent>' . base64_encode($publicExponent) . "</Exponent>\r\n" .
+                       '</RSAKeyValue>';
+                break;
+            case CRYPT_RSA_PUBLIC_FORMAT_OPENSSH:
+                // from <http://tools.ietf.org/html/rfc4253#page-15>:
+                // string    "ssh-rsa"
+                // mpint     e
+                // mpint     n
+                $RSAPublicKey = pack('Na*Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($publicExponent), $publicExponent, strlen($modulus), $modulus);
+                $RSAPublicKey = 'ssh-rsa ' . base64_encode($RSAPublicKey) . ' ' . CRYPT_RSA_COMMENT;
+
+                return $RSAPublicKey;
+            default: // eg. CRYPT_RSA_PUBLIC_FORMAT_PKCS1_RAW or CRYPT_RSA_PUBLIC_FORMAT_PKCS1
+                // from <http://tools.ietf.org/html/rfc3447#appendix-A.1.1>:
+                // RSAPublicKey ::= SEQUENCE {
+                //     modulus           INTEGER,  -- n
+                //     publicExponent    INTEGER   -- e
+                // }
+                $components = array(
+                    'modulus' => pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($modulus)), $modulus),
+                    'publicExponent' => pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($publicExponent)), $publicExponent)
+                );
+
+                $RSAPublicKey = pack('Ca*a*a*',
+                    CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($components['modulus']) + strlen($components['publicExponent'])),
+                    $components['modulus'], $components['publicExponent']
+                );
+
+                if ($this->publicKeyFormat == CRYPT_RSA_PUBLIC_FORMAT_PKCS1) {
+                    // sequence(oid(1.2.840.113549.1.1.1), null)) = rsaEncryption.
+                    $rsaOID = pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA
+                    $RSAPublicKey = chr(0) . $RSAPublicKey;
+                    $RSAPublicKey = chr(3) . $this->_encodeLength(strlen($RSAPublicKey)) . $RSAPublicKey;
+
+                    $RSAPublicKey = pack('Ca*a*',
+                        CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($rsaOID . $RSAPublicKey)), $rsaOID . $RSAPublicKey
+                    );
+                }
+
+                $RSAPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" .
+                                 chunk_split(base64_encode($RSAPublicKey), 64) .
+                                 '-----END PUBLIC KEY-----';
+
+                return $RSAPublicKey;
+        }
+    }
+
+    /**
+     * Break a public or private key down into its constituant components
+     *
+     * @access private
+     * @see _convertPublicKey()
+     * @see _convertPrivateKey()
+     * @param String $key
+     * @param Integer $type
+     * @return Array
+     */
+    function _parseKey($key, $type)
+    {
+        if ($type != CRYPT_RSA_PUBLIC_FORMAT_RAW && !is_string($key)) {
+            return false;
+        }
+
+        switch ($type) {
+            case CRYPT_RSA_PUBLIC_FORMAT_RAW:
+                if (!is_array($key)) {
+                    return false;
+                }
+                $components = array();
+                switch (true) {
+                    case isset($key['e']):
+                        $components['publicExponent'] = $key['e']->copy();
+                        break;
+                    case isset($key['exponent']):
+                        $components['publicExponent'] = $key['exponent']->copy();
+                        break;
+                    case isset($key['publicExponent']):
+                        $components['publicExponent'] = $key['publicExponent']->copy();
+                        break;
+                    case isset($key[0]):
+                        $components['publicExponent'] = $key[0]->copy();
+                }
+                switch (true) {
+                    case isset($key['n']):
+                        $components['modulus'] = $key['n']->copy();
+                        break;
+                    case isset($key['modulo']):
+                        $components['modulus'] = $key['modulo']->copy();
+                        break;
+                    case isset($key['modulus']):
+                        $components['modulus'] = $key['modulus']->copy();
+                        break;
+                    case isset($key[1]):
+                        $components['modulus'] = $key[1]->copy();
+                }
+                return isset($components['modulus']) && isset($components['publicExponent']) ? $components : false;
+            case CRYPT_RSA_PRIVATE_FORMAT_PKCS1:
+            case CRYPT_RSA_PUBLIC_FORMAT_PKCS1:
+                /* Although PKCS#1 proposes a format that public and private keys can use, encrypting them is
+                   "outside the scope" of PKCS#1.  PKCS#1 then refers you to PKCS#12 and PKCS#15 if you're wanting to
+                   protect private keys, however, that's not what OpenSSL* does.  OpenSSL protects private keys by adding
+                   two new "fields" to the key - DEK-Info and Proc-Type.  These fields are discussed here:
+
+                   http://tools.ietf.org/html/rfc1421#section-4.6.1.1
+                   http://tools.ietf.org/html/rfc1421#section-4.6.1.3
+
+                   DES-EDE3-CBC as an algorithm, however, is not discussed anywhere, near as I can tell.
+                   DES-CBC and DES-EDE are discussed in RFC1423, however, DES-EDE3-CBC isn't, nor is its key derivation
+                   function.  As is, the definitive authority on this encoding scheme isn't the IETF but rather OpenSSL's
+                   own implementation.  ie. the implementation *is* the standard and any bugs that may exist in that 
+                   implementation are part of the standard, as well.
+
+                   * OpenSSL is the de facto standard.  It's utilized by OpenSSH and other projects */
+                if (preg_match('#DEK-Info: (.+),(.+)#', $key, $matches)) {
+                    $iv = pack('H*', trim($matches[2]));
+                    $symkey = pack('H*', md5($this->password . substr($iv, 0, 8))); // symkey is short for symmetric key
+                    $symkey.= substr(pack('H*', md5($symkey . $this->password . $iv)), 0, 8);
+                    $ciphertext = preg_replace('#.+(\r|\n|\r\n)\1|[\r\n]|-.+-| #s', '', $key);
+                    $ciphertext = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $ciphertext) ? base64_decode($ciphertext) : false;
+                    if ($ciphertext === false) {
+                        $ciphertext = $key;
+                    }
+                    switch ($matches[1]) {
+                        case 'AES-128-CBC':
+                            if (!class_exists('Crypt_AES')) {
+                                require_once('Crypt/AES.php');
+                            }
+                            $symkey = substr($symkey, 0, 16);
+                            $crypto = new Crypt_AES();
+                            break;
+                        case 'DES-EDE3-CFB':
+                            if (!class_exists('Crypt_TripleDES')) {
+                                require_once('Crypt/TripleDES.php');
+                            }
+                            $crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CFB);
+                            break;
+                        case 'DES-EDE3-CBC':
+                            if (!class_exists('Crypt_TripleDES')) {
+                                require_once('Crypt/TripleDES.php');
+                            }
+                            $crypto = new Crypt_TripleDES();
+                            break;
+                        case 'DES-CBC':
+                            if (!class_exists('Crypt_DES')) {
+                                require_once('Crypt/DES.php');
+                            }
+                            $crypto = new Crypt_DES();
+                            break;
+                        default:
+                            return false;
+                    }
+                    $crypto->setKey($symkey);
+                    $crypto->setIV($iv);
+                    $decoded = $crypto->decrypt($ciphertext);
+                } else {
+                    $decoded = preg_replace('#-.+-|[\r\n]| #', '', $key);
+                    $decoded = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $decoded) ? base64_decode($decoded) : false;
+                }
+
+                if ($decoded !== false) {
+                    $key = $decoded;
+                }
+
+                $components = array();
+
+                if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+                    return false;
+                }
+                if ($this->_decodeLength($key) != strlen($key)) {
+                    return false;
+                }
+
+                $tag = ord($this->_string_shift($key));
+                /* intended for keys for which OpenSSL's asn1parse returns the following:
+
+                    0:d=0  hl=4 l= 631 cons: SEQUENCE
+                    4:d=1  hl=2 l=   1 prim:  INTEGER           :00
+                    7:d=1  hl=2 l=  13 cons:  SEQUENCE
+                    9:d=2  hl=2 l=   9 prim:   OBJECT            :rsaEncryption
+                   20:d=2  hl=2 l=   0 prim:   NULL
+                   22:d=1  hl=4 l= 609 prim:  OCTET STRING */
+
+                if ($tag == CRYPT_RSA_ASN1_INTEGER && substr($key, 0, 3) == "\x01\x00\x30") {
+                    $this->_string_shift($key, 3);
+                    $tag = CRYPT_RSA_ASN1_SEQUENCE;
+                }
+
+                if ($tag == CRYPT_RSA_ASN1_SEQUENCE) {
+                    /* intended for keys for which OpenSSL's asn1parse returns the following:
+
+                        0:d=0  hl=4 l= 290 cons: SEQUENCE
+                        4:d=1  hl=2 l=  13 cons:  SEQUENCE
+                        6:d=2  hl=2 l=   9 prim:   OBJECT            :rsaEncryption
+                       17:d=2  hl=2 l=   0 prim:   NULL
+                       19:d=1  hl=4 l= 271 prim:  BIT STRING */
+                    $this->_string_shift($key, $this->_decodeLength($key));
+                    $tag = ord($this->_string_shift($key)); // skip over the BIT STRING / OCTET STRING tag
+                    $this->_decodeLength($key); // skip over the BIT STRING / OCTET STRING length
+                    // "The initial octet shall encode, as an unsigned binary integer wtih bit 1 as the least significant bit, the number of
+                    //  unused bits in the final subsequent octet. The number shall be in the range zero to seven."
+                    //  -- http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf (section 8.6.2.2)
+                    if ($tag == CRYPT_RSA_ASN1_BITSTRING) {
+                        $this->_string_shift($key);
+                    }
+                    if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+                        return false;
+                    }
+                    if ($this->_decodeLength($key) != strlen($key)) {
+                        return false;
+                    }
+                    $tag = ord($this->_string_shift($key));
+                }
+                if ($tag != CRYPT_RSA_ASN1_INTEGER) {
+                    return false;
+                }
+
+                $length = $this->_decodeLength($key);
+                $temp = $this->_string_shift($key, $length);
+                if (strlen($temp) != 1 || ord($temp) > 2) {
+                    $components['modulus'] = new Math_BigInteger($temp, 256);
+                    $this->_string_shift($key); // skip over CRYPT_RSA_ASN1_INTEGER
+                    $length = $this->_decodeLength($key);
+                    $components[$type == CRYPT_RSA_PUBLIC_FORMAT_PKCS1 ? 'publicExponent' : 'privateExponent'] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+
+                    return $components;
+                }
+                if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_INTEGER) {
+                    return false;
+                }
+                $length = $this->_decodeLength($key);
+                $components['modulus'] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+                $this->_string_shift($key);
+                $length = $this->_decodeLength($key);
+                $components['publicExponent'] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+                $this->_string_shift($key);
+                $length = $this->_decodeLength($key);
+                $components['privateExponent'] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+                $this->_string_shift($key);
+                $length = $this->_decodeLength($key);
+                $components['primes'] = array(1 => new Math_BigInteger($this->_string_shift($key, $length), 256));
+                $this->_string_shift($key);
+                $length = $this->_decodeLength($key);
+                $components['primes'][] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+                $this->_string_shift($key);
+                $length = $this->_decodeLength($key);
+                $components['exponents'] = array(1 => new Math_BigInteger($this->_string_shift($key, $length), 256));
+                $this->_string_shift($key);
+                $length = $this->_decodeLength($key);
+                $components['exponents'][] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+                $this->_string_shift($key);
+                $length = $this->_decodeLength($key);
+                $components['coefficients'] = array(2 => new Math_BigInteger($this->_string_shift($key, $length), 256));
+
+                if (!empty($key)) {
+                    if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+                        return false;
+                    }
+                    $this->_decodeLength($key);
+                    while (!empty($key)) {
+                        if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+                            return false;
+                        }
+                        $this->_decodeLength($key);
+                        $key = substr($key, 1);
+                        $length = $this->_decodeLength($key);
+                        $components['primes'][] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+                        $this->_string_shift($key);
+                        $length = $this->_decodeLength($key);
+                        $components['exponents'][] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+                        $this->_string_shift($key);
+                        $length = $this->_decodeLength($key);
+                        $components['coefficients'][] = new Math_BigInteger($this->_string_shift($key, $length), 256);
+                    }
+                }
+
+                return $components;
+            case CRYPT_RSA_PUBLIC_FORMAT_OPENSSH:
+                $key = base64_decode(preg_replace('#^ssh-rsa | .+$#', '', $key));
+                if ($key === false) {
+                    return false;
+                }
+
+                $cleanup = substr($key, 0, 11) == "\0\0\0\7ssh-rsa";
+
+                if (strlen($key) <= 4) {
+                    return false;
+                }
+                extract(unpack('Nlength', $this->_string_shift($key, 4)));
+                $publicExponent = new Math_BigInteger($this->_string_shift($key, $length), -256);
+                if (strlen($key) <= 4) {
+                    return false;
+                }
+                extract(unpack('Nlength', $this->_string_shift($key, 4)));
+                $modulus = new Math_BigInteger($this->_string_shift($key, $length), -256);
+
+                if ($cleanup && strlen($key)) {
+                    if (strlen($key) <= 4) {
+                        return false;
+                    }
+                    extract(unpack('Nlength', $this->_string_shift($key, 4)));
+                    $realModulus = new Math_BigInteger($this->_string_shift($key, $length), -256);
+                    return strlen($key) ? false : array(
+                        'modulus' => $realModulus,
+                        'publicExponent' => $modulus
+                    );
+                } else {
+                    return strlen($key) ? false : array(
+                        'modulus' => $modulus,
+                        'publicExponent' => $publicExponent
+                    );
+                }
+            // http://www.w3.org/TR/xmldsig-core/#sec-RSAKeyValue
+            // http://en.wikipedia.org/wiki/XML_Signature
+            case CRYPT_RSA_PRIVATE_FORMAT_XML:
+            case CRYPT_RSA_PUBLIC_FORMAT_XML:
+                $this->components = array();
+
+                $xml = xml_parser_create('UTF-8');
+                xml_set_object($xml, $this);
+                xml_set_element_handler($xml, '_start_element_handler', '_stop_element_handler');
+                xml_set_character_data_handler($xml, '_data_handler');
+                // add <xml></xml> to account for "dangling" tags like <BitStrength>...</BitStrength> that are sometimes added
+                if (!xml_parse($xml, '<xml>' . $key . '</xml>')) {
+                    return false;
+                }
+
+                return isset($this->components['modulus']) && isset($this->components['publicExponent']) ? $this->components : false;
+            // from PuTTY's SSHPUBK.C
+            case CRYPT_RSA_PRIVATE_FORMAT_PUTTY:
+                $components = array();
+                $key = preg_split('#\r\n|\r|\n#', $key);
+                $type = trim(preg_replace('#PuTTY-User-Key-File-2: (.+)#', '$1', $key[0]));
+                if ($type != 'ssh-rsa') {
+                    return false;
+                }
+                $encryption = trim(preg_replace('#Encryption: (.+)#', '$1', $key[1]));
+
+                $publicLength = trim(preg_replace('#Public-Lines: (\d+)#', '$1', $key[3]));
+                $public = base64_decode(implode('', array_map('trim', array_slice($key, 4, $publicLength))));
+                $public = substr($public, 11);
+                extract(unpack('Nlength', $this->_string_shift($public, 4)));
+                $components['publicExponent'] = new Math_BigInteger($this->_string_shift($public, $length), -256);
+                extract(unpack('Nlength', $this->_string_shift($public, 4)));
+                $components['modulus'] = new Math_BigInteger($this->_string_shift($public, $length), -256);
+
+                $privateLength = trim(preg_replace('#Private-Lines: (\d+)#', '$1', $key[$publicLength + 4]));
+                $private = base64_decode(implode('', array_map('trim', array_slice($key, $publicLength + 5, $privateLength))));
+
+                switch ($encryption) {
+                    case 'aes256-cbc':
+                        if (!class_exists('Crypt_AES')) {
+                            require_once('Crypt/AES.php');
+                        }
+                        $symkey = '';
+                        $sequence = 0;
+                        while (strlen($symkey) < 32) {
+                            $temp = pack('Na*', $sequence++, $this->password);
+                            $symkey.= pack('H*', sha1($temp));
+                        }
+                        $symkey = substr($symkey, 0, 32);
+                        $crypto = new Crypt_AES();
+                }
+
+                if ($encryption != 'none') {
+                    $crypto->setKey($symkey);
+                    $crypto->disablePadding();
+                    $private = $crypto->decrypt($private);
+                    if ($private === false) {
+                        return false;
+                    }
+                }
+
+                extract(unpack('Nlength', $this->_string_shift($private, 4)));
+                if (strlen($private) < $length) {
+                    return false;
+                }
+                $components['privateExponent'] = new Math_BigInteger($this->_string_shift($private, $length), -256);
+                extract(unpack('Nlength', $this->_string_shift($private, 4)));
+                if (strlen($private) < $length) {
+                    return false;
+                }
+                $components['primes'] = array(1 => new Math_BigInteger($this->_string_shift($private, $length), -256));
+                extract(unpack('Nlength', $this->_string_shift($private, 4)));
+                if (strlen($private) < $length) {
+                    return false;
+                }
+                $components['primes'][] = new Math_BigInteger($this->_string_shift($private, $length), -256);
+
+                $temp = $components['primes'][1]->subtract($this->one);
+                $components['exponents'] = array(1 => $components['publicExponent']->modInverse($temp));
+                $temp = $components['primes'][2]->subtract($this->one);
+                $components['exponents'][] = $components['publicExponent']->modInverse($temp);
+
+                extract(unpack('Nlength', $this->_string_shift($private, 4)));
+                if (strlen($private) < $length) {
+                    return false;
+                }
+                $components['coefficients'] = array(2 => new Math_BigInteger($this->_string_shift($private, $length), -256));
+
+                return $components;
+        }
+    }
+
+    /**
+     * Returns the key size
+     *
+     * More specifically, this returns the size of the modulo in bits.
+     *
+     * @access public
+     * @return Integer
+     */
+    function getSize()
+    {
+        return !isset($this->modulus) ? 0 : strlen($this->modulus->toBits());
+    }
+
+    /**
+     * Start Element Handler
+     *
+     * Called by xml_set_element_handler()
+     *
+     * @access private
+     * @param Resource $parser
+     * @param String $name
+     * @param Array $attribs
+     */
+    function _start_element_handler($parser, $name, $attribs)
+    {
+        //$name = strtoupper($name);
+        switch ($name) {
+            case 'MODULUS':
+                $this->current = &$this->components['modulus'];
+                break;
+            case 'EXPONENT':
+                $this->current = &$this->components['publicExponent'];
+                break;
+            case 'P':
+                $this->current = &$this->components['primes'][1];
+                break;
+            case 'Q':
+                $this->current = &$this->components['primes'][2];
+                break;
+            case 'DP':
+                $this->current = &$this->components['exponents'][1];
+                break;
+            case 'DQ':
+                $this->current = &$this->components['exponents'][2];
+                break;
+            case 'INVERSEQ':
+                $this->current = &$this->components['coefficients'][2];
+                break;
+            case 'D':
+                $this->current = &$this->components['privateExponent'];
+                break;
+            default:
+                unset($this->current);
+        }
+        $this->current = '';
+    }
+
+    /**
+     * Stop Element Handler
+     *
+     * Called by xml_set_element_handler()
+     *
+     * @access private
+     * @param Resource $parser
+     * @param String $name
+     */
+    function _stop_element_handler($parser, $name)
+    {
+        //$name = strtoupper($name);
+        if ($name == 'RSAKEYVALUE') {
+            return;
+        }
+        $this->current = new Math_BigInteger(base64_decode($this->current), 256);
+    }
+
+    /**
+     * Data Handler
+     *
+     * Called by xml_set_character_data_handler()
+     *
+     * @access private
+     * @param Resource $parser
+     * @param String $data
+     */
+    function _data_handler($parser, $data)
+    {
+        if (!isset($this->current) || is_object($this->current)) {
+            return;
+        }
+        $this->current.= trim($data);
+    }
+
+    /**
+     * Loads a public or private key
+     *
+     * Returns true on success and false on failure (ie. an incorrect password was provided or the key was malformed)
+     *
+     * @access public
+     * @param String $key
+     * @param Integer $type optional
+     */
+    function loadKey($key, $type = false)
+    {
+        if ($type === false) {
+            $types = array(
+                CRYPT_RSA_PUBLIC_FORMAT_RAW,
+                CRYPT_RSA_PRIVATE_FORMAT_PKCS1,
+                CRYPT_RSA_PRIVATE_FORMAT_XML,
+                CRYPT_RSA_PRIVATE_FORMAT_PUTTY,
+                CRYPT_RSA_PUBLIC_FORMAT_OPENSSH
+            );
+            foreach ($types as $type) {
+                $components = $this->_parseKey($key, $type);
+                if ($components !== false) {
+                    break;
+                }
+            }
+            
+        } else {
+            $components = $this->_parseKey($key, $type);
+        }
+
+        if ($components === false) {
+            return false;
+        }
+
+        $this->modulus = $components['modulus'];
+        $this->k = strlen($this->modulus->toBytes());
+        $this->exponent = isset($components['privateExponent']) ? $components['privateExponent'] : $components['publicExponent'];
+        if (isset($components['primes'])) {
+            $this->primes = $components['primes'];
+            $this->exponents = $components['exponents'];
+            $this->coefficients = $components['coefficients'];
+            $this->publicExponent = $components['publicExponent'];
+        } else {
+            $this->primes = array();
+            $this->exponents = array();
+            $this->coefficients = array();
+            $this->publicExponent = false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Sets the password
+     *
+     * Private keys can be encrypted with a password.  To unset the password, pass in the empty string or false.
+     * Or rather, pass in $password such that empty($password) && !is_string($password) is true.
+     *
+     * @see createKey()
+     * @see loadKey()
+     * @access public
+     * @param String $password
+     */
+    function setPassword($password = false)
+    {
+        $this->password = $password;
+    }
+
+    /**
+     * Defines the public key
+     *
+     * Some private key formats define the public exponent and some don't.  Those that don't define it are problematic when
+     * used in certain contexts.  For example, in SSH-2, RSA authentication works by sending the public key along with a
+     * message signed by the private key to the server.  The SSH-2 server looks the public key up in an index of public keys
+     * and if it's present then proceeds to verify the signature.  Problem is, if your private key doesn't include the public
+     * exponent this won't work unless you manually add the public exponent.
+     *
+     * Do note that when a new key is loaded the index will be cleared.
+     *
+     * Returns true on success, false on failure
+     *
+     * @see getPublicKey()
+     * @access public
+     * @param String $key optional
+     * @param Integer $type optional
+     * @return Boolean
+     */
+    function setPublicKey($key = false, $type = false)
+    {
+        if ($key === false && !empty($this->modulus)) {
+            $this->publicExponent = $this->exponent;
+            return true;
+        }
+
+        if ($type === false) {
+            $types = array(
+                CRYPT_RSA_PUBLIC_FORMAT_RAW,
+                CRYPT_RSA_PUBLIC_FORMAT_PKCS1,
+                CRYPT_RSA_PUBLIC_FORMAT_XML,
+                CRYPT_RSA_PUBLIC_FORMAT_OPENSSH
+            );
+            foreach ($types as $type) {
+                $components = $this->_parseKey($key, $type);
+                if ($components !== false) {
+                    break;
+                }
+            }
+        } else {
+            $components = $this->_parseKey($key, $type);
+        }
+
+        if ($components === false) {
+            return false;
+        }
+
+        if (empty($this->modulus) || !$this->modulus->equals($components['modulus'])) {
+            $this->modulus = $components['modulus'];
+            $this->exponent = $this->publicExponent = $components['publicExponent'];
+            return true;
+        }
+
+        $this->publicExponent = $components['publicExponent'];
+
+        return true;
+    }
+
+    /**
+     * Returns the public key
+     *
+     * The public key is only returned under two circumstances - if the private key had the public key embedded within it
+     * or if the public key was set via setPublicKey().  If the currently loaded key is supposed to be the public key this
+     * function won't return it since this library, for the most part, doesn't distinguish between public and private keys.
+     *
+     * @see getPublicKey()
+     * @access public
+     * @param String $key
+     * @param Integer $type optional
+     */
+    function getPublicKey($type = CRYPT_RSA_PUBLIC_FORMAT_PKCS1)
+    {
+        if (empty($this->modulus) || empty($this->publicExponent)) {
+            return false;
+        }
+
+        $oldFormat = $this->publicKeyFormat;
+        $this->publicKeyFormat = $type;
+        $temp = $this->_convertPublicKey($this->modulus, $this->publicExponent);
+        $this->publicKeyFormat = $oldFormat;
+        return $temp;
+    }
+
+    /**
+     * Returns the private key
+     *
+     * The private key is only returned if the currently loaded key contains the constituent prime numbers.
+     *
+     * @see getPublicKey()
+     * @access public
+     * @param String $key
+     * @param Integer $type optional
+     */
+    function getPrivateKey($type = CRYPT_RSA_PUBLIC_FORMAT_PKCS1)
+    {
+        if (empty($this->primes)) {
+            return false;
+        }
+
+        $oldFormat = $this->privateKeyFormat;
+        $this->privateKeyFormat = $type;
+        $temp = $this->_convertPrivateKey($this->modulus, $this->publicExponent, $this->exponent, $this->primes, $this->exponents, $this->coefficients);
+        $this->privateKeyFormat = $oldFormat;
+        return $temp;
+    }
+
+    /**
+     * Returns a minimalistic private key
+     *
+     * Returns the private key without the prime number constituants.  Structurally identical to a public key that
+     * hasn't been set as the public key
+     *
+     * @see getPrivateKey()
+     * @access private
+     * @param String $key
+     * @param Integer $type optional
+     */
+    function _getPrivatePublicKey($mode = CRYPT_RSA_PUBLIC_FORMAT_PKCS1)
+    {
+        if (empty($this->modulus) || empty($this->exponent)) {
+            return false;
+        }
+
+        $oldFormat = $this->publicKeyFormat;
+        $this->publicKeyFormat = $mode;
+        $temp = $this->_convertPublicKey($this->modulus, $this->exponent);
+        $this->publicKeyFormat = $oldFormat;
+        return $temp;
+    }
+
+    /**
+     *  __toString() magic method
+     *
+     * @access public
+     */
+    function __toString()
+    {
+        $key = $this->getPrivateKey($this->privateKeyFormat);
+        if ($key !== false) {
+            return $key;
+        }
+        $key = $this->_getPrivatePublicKey($this->publicKeyFormat);
+        return $key !== false ? $key : '';
+    }
+
+    /**
+     * Generates the smallest and largest numbers requiring $bits bits
+     *
+     * @access private
+     * @param Integer $bits
+     * @return Array
+     */
+    function _generateMinMax($bits)
+    {
+        $bytes = $bits >> 3;
+        $min = str_repeat(chr(0), $bytes);
+        $max = str_repeat(chr(0xFF), $bytes);
+        $msb = $bits & 7;
+        if ($msb) {
+            $min = chr(1 << ($msb - 1)) . $min;
+            $max = chr((1 << $msb) - 1) . $max;
+        } else {
+            $min[0] = chr(0x80);
+        }
+
+        return array(
+            'min' => new Math_BigInteger($min, 256),
+            'max' => new Math_BigInteger($max, 256)
+        );
+    }
+
+    /**
+     * DER-decode the length
+     *
+     * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4.  See
+     * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 � 8.1.3} for more information.
+     *
+     * @access private
+     * @param String $string
+     * @return Integer
+     */
+    function _decodeLength(&$string)
+    {
+        $length = ord($this->_string_shift($string));
+        if ( $length & 0x80 ) { // definite length, long form
+            $length&= 0x7F;
+            $temp = $this->_string_shift($string, $length);
+            list(, $length) = unpack('N', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4));
+        }
+        return $length;
+    }
+
+    /**
+     * DER-encode the length
+     *
+     * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4.  See
+     * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 � 8.1.3} for more information.
+     *
+     * @access private
+     * @param Integer $length
+     * @return String
+     */
+    function _encodeLength($length)
+    {
+        if ($length <= 0x7F) {
+            return chr($length);
+        }
+
+        $temp = ltrim(pack('N', $length), chr(0));
+        return pack('Ca*', 0x80 | strlen($temp), $temp);
+    }
+
+    /**
+     * String Shift
+     *
+     * Inspired by array_shift
+     *
+     * @param String $string
+     * @param optional Integer $index
+     * @return String
+     * @access private
+     */
+    function _string_shift(&$string, $index = 1)
+    {
+        $substr = substr($string, 0, $index);
+        $string = substr($string, $index);
+        return $substr;
+    }
+
+    /**
+     * Determines the private key format
+     *
+     * @see createKey()
+     * @access public
+     * @param Integer $format
+     */
+    function setPrivateKeyFormat($format)
+    {
+        $this->privateKeyFormat = $format;
+    }
+
+    /**
+     * Determines the public key format
+     *
+     * @see createKey()
+     * @access public
+     * @param Integer $format
+     */
+    function setPublicKeyFormat($format)
+    {
+        $this->publicKeyFormat = $format;
+    }
+
+    /**
+     * Determines which hashing function should be used
+     *
+     * Used with signature production / verification and (if the encryption mode is CRYPT_RSA_ENCRYPTION_OAEP) encryption and
+     * decryption.  If $hash isn't supported, sha1 is used.
+     *
+     * @access public
+     * @param String $hash
+     */
+    function setHash($hash)
+    {
+        // Crypt_Hash supports algorithms that PKCS#1 doesn't support.  md5-96 and sha1-96, for example.
+        switch ($hash) {
+            case 'md2':
+            case 'md5':
+            case 'sha1':
+            case 'sha256':
+            case 'sha384':
+            case 'sha512':
+                $this->hash = new Crypt_Hash($hash);
+                $this->hashName = $hash;
+                break;
+            default:
+                $this->hash = new Crypt_Hash('sha1');
+                $this->hashName = 'sha1';
+        }
+        $this->hLen = $this->hash->getLength();
+    }
+
+    /**
+     * Determines which hashing function should be used for the mask generation function
+     *
+     * The mask generation function is used by CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_SIGNATURE_PSS and although it's
+     * best if Hash and MGFHash are set to the same thing this is not a requirement.
+     *
+     * @access public
+     * @param String $hash
+     */
+    function setMGFHash($hash)
+    {
+        // Crypt_Hash supports algorithms that PKCS#1 doesn't support.  md5-96 and sha1-96, for example.
+        switch ($hash) {
+            case 'md2':
+            case 'md5':
+            case 'sha1':
+            case 'sha256':
+            case 'sha384':
+            case 'sha512':
+                $this->mgfHash = new Crypt_Hash($hash);
+                break;
+            default:
+                $this->mgfHash = new Crypt_Hash('sha1');
+        }
+        $this->mgfHLen = $this->mgfHash->getLength();
+    }
+
+    /**
+     * Determines the salt length
+     *
+     * To quote from {@link http://tools.ietf.org/html/rfc3447#page-38 RFC3447#page-38}:
+     *
+     *    Typical salt lengths in octets are hLen (the length of the output
+     *    of the hash function Hash) and 0.
+     *
+     * @access public
+     * @param Integer $format
+     */
+    function setSaltLength($sLen)
+    {
+        $this->sLen = $sLen;
+    }
+
+    /**
+     * Integer-to-Octet-String primitive
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-4.1 RFC3447#section-4.1}.
+     *
+     * @access private
+     * @param Math_BigInteger $x
+     * @param Integer $xLen
+     * @return String
+     */
+    function _i2osp($x, $xLen)
+    {
+        $x = $x->toBytes();
+        if (strlen($x) > $xLen) {
+            user_error('Integer too large');
+            return false;
+        }
+        return str_pad($x, $xLen, chr(0), STR_PAD_LEFT);
+    }
+
+    /**
+     * Octet-String-to-Integer primitive
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-4.2 RFC3447#section-4.2}.
+     *
+     * @access private
+     * @param String $x
+     * @return Math_BigInteger
+     */
+    function _os2ip($x)
+    {
+        return new Math_BigInteger($x, 256);
+    }
+
+    /**
+     * Exponentiate with or without Chinese Remainder Theorem
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.2}.
+     *
+     * @access private
+     * @param Math_BigInteger $x
+     * @return Math_BigInteger
+     */
+    function _exponentiate($x)
+    {
+        if (empty($this->primes) || empty($this->coefficients) || empty($this->exponents)) {
+            return $x->modPow($this->exponent, $this->modulus);
+        }
+
+        $num_primes = count($this->primes);
+
+        if (defined('CRYPT_RSA_DISABLE_BLINDING')) {
+            $m_i = array(
+                1 => $x->modPow($this->exponents[1], $this->primes[1]),
+                2 => $x->modPow($this->exponents[2], $this->primes[2])
+            );
+            $h = $m_i[1]->subtract($m_i[2]);
+            $h = $h->multiply($this->coefficients[2]);
+            list(, $h) = $h->divide($this->primes[1]);
+            $m = $m_i[2]->add($h->multiply($this->primes[2]));
+
+            $r = $this->primes[1];
+            for ($i = 3; $i <= $num_primes; $i++) {
+                $m_i = $x->modPow($this->exponents[$i], $this->primes[$i]);
+
+                $r = $r->multiply($this->primes[$i - 1]);
+
+                $h = $m_i->subtract($m);
+                $h = $h->multiply($this->coefficients[$i]);
+                list(, $h) = $h->divide($this->primes[$i]);
+
+                $m = $m->add($r->multiply($h));
+            }
+        } else {
+            $smallest = $this->primes[1];
+            for ($i = 2; $i <= $num_primes; $i++) {
+                if ($smallest->compare($this->primes[$i]) > 0) {
+                    $smallest = $this->primes[$i];
+                }
+            }
+
+            $one = new Math_BigInteger(1);
+
+            $r = $one->random($one, $smallest->subtract($one));
+
+            $m_i = array(
+                1 => $this->_blind($x, $r, 1),
+                2 => $this->_blind($x, $r, 2)
+            );
+            $h = $m_i[1]->subtract($m_i[2]);
+            $h = $h->multiply($this->coefficients[2]);
+            list(, $h) = $h->divide($this->primes[1]);
+            $m = $m_i[2]->add($h->multiply($this->primes[2]));
+
+            $r = $this->primes[1];
+            for ($i = 3; $i <= $num_primes; $i++) {
+                $m_i = $this->_blind($x, $r, $i);
+
+                $r = $r->multiply($this->primes[$i - 1]);
+
+                $h = $m_i->subtract($m);
+                $h = $h->multiply($this->coefficients[$i]);
+                list(, $h) = $h->divide($this->primes[$i]);
+
+                $m = $m->add($r->multiply($h));
+            }
+        }
+
+        return $m;
+    }
+
+    /**
+     * Performs RSA Blinding
+     *
+     * Protects against timing attacks by employing RSA Blinding.
+     * Returns $x->modPow($this->exponents[$i], $this->primes[$i])
+     *
+     * @access private
+     * @param Math_BigInteger $x
+     * @param Math_BigInteger $r
+     * @param Integer $i
+     * @return Math_BigInteger
+     */
+    function _blind($x, $r, $i)
+    {
+        $x = $x->multiply($r->modPow($this->publicExponent, $this->primes[$i]));
+        $x = $x->modPow($this->exponents[$i], $this->primes[$i]);
+
+        $r = $r->modInverse($this->primes[$i]);
+        $x = $x->multiply($r);
+        list(, $x) = $x->divide($this->primes[$i]);
+
+        return $x;
+    }
+
+    /**
+     * Performs blinded RSA equality testing
+     *
+     * Protects against a particular type of timing attack described.
+     *
+     * See {@link http://codahale.com/a-lesson-in-timing-attacks/ A Lesson In Timing Attacks (or, Don�t use MessageDigest.isEquals)}
+     *
+     * Thanks for the heads up singpolyma!
+     *
+     * @access private
+     * @param String $x
+     * @param String $y
+     * @return Boolean
+     */
+    function _equals($x, $y)
+    {
+        if (strlen($x) != strlen($y)) {
+            return false;
+        }
+
+        $result = 0;
+        for ($i = 0; $i < strlen($x); $i++) {
+            $result |= ord($x[$i]) ^ ord($y[$i]);
+        }
+
+        return $result == 0;
+    }
+
+    /**
+     * RSAEP
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.1}.
+     *
+     * @access private
+     * @param Math_BigInteger $m
+     * @return Math_BigInteger
+     */
+    function _rsaep($m)
+    {
+        if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) {
+            user_error('Message representative out of range');
+            return false;
+        }
+        return $this->_exponentiate($m);
+    }
+
+    /**
+     * RSADP
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.2 RFC3447#section-5.1.2}.
+     *
+     * @access private
+     * @param Math_BigInteger $c
+     * @return Math_BigInteger
+     */
+    function _rsadp($c)
+    {
+        if ($c->compare($this->zero) < 0 || $c->compare($this->modulus) > 0) {
+            user_error('Ciphertext representative out of range');
+            return false;
+        }
+        return $this->_exponentiate($c);
+    }
+
+    /**
+     * RSASP1
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.1 RFC3447#section-5.2.1}.
+     *
+     * @access private
+     * @param Math_BigInteger $m
+     * @return Math_BigInteger
+     */
+    function _rsasp1($m)
+    {
+        if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) {
+            user_error('Message representative out of range');
+            return false;
+        }
+        return $this->_exponentiate($m);
+    }
+
+    /**
+     * RSAVP1
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.2 RFC3447#section-5.2.2}.
+     *
+     * @access private
+     * @param Math_BigInteger $s
+     * @return Math_BigInteger
+     */
+    function _rsavp1($s)
+    {
+        if ($s->compare($this->zero) < 0 || $s->compare($this->modulus) > 0) {
+            user_error('Signature representative out of range');
+            return false;
+        }
+        return $this->_exponentiate($s);
+    }
+
+    /**
+     * MGF1
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#appendix-B.2.1 RFC3447#appendix-B.2.1}.
+     *
+     * @access private
+     * @param String $mgfSeed
+     * @param Integer $mgfLen
+     * @return String
+     */
+    function _mgf1($mgfSeed, $maskLen)
+    {
+        // if $maskLen would yield strings larger than 4GB, PKCS#1 suggests a "Mask too long" error be output.
+
+        $t = '';
+        $count = ceil($maskLen / $this->mgfHLen);
+        for ($i = 0; $i < $count; $i++) {
+            $c = pack('N', $i);
+            $t.= $this->mgfHash->hash($mgfSeed . $c);
+        }
+
+        return substr($t, 0, $maskLen);
+    }
+
+    /**
+     * RSAES-OAEP-ENCRYPT
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.1 RFC3447#section-7.1.1} and
+     * {http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding OAES}.
+     *
+     * @access private
+     * @param String $m
+     * @param String $l
+     * @return String
+     */
+    function _rsaes_oaep_encrypt($m, $l = '')
+    {
+        $mLen = strlen($m);
+
+        // Length checking
+
+        // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
+        // be output.
+
+        if ($mLen > $this->k - 2 * $this->hLen - 2) {
+            user_error('Message too long');
+            return false;
+        }
+
+        // EME-OAEP encoding
+
+        $lHash = $this->hash->hash($l);
+        $ps = str_repeat(chr(0), $this->k - $mLen - 2 * $this->hLen - 2);
+        $db = $lHash . $ps . chr(1) . $m;
+        $seed = crypt_random_string($this->hLen);
+        $dbMask = $this->_mgf1($seed, $this->k - $this->hLen - 1);
+        $maskedDB = $db ^ $dbMask;
+        $seedMask = $this->_mgf1($maskedDB, $this->hLen);
+        $maskedSeed = $seed ^ $seedMask;
+        $em = chr(0) . $maskedSeed . $maskedDB;
+
+        // RSA encryption
+
+        $m = $this->_os2ip($em);
+        $c = $this->_rsaep($m);
+        $c = $this->_i2osp($c, $this->k);
+
+        // Output the ciphertext C
+
+        return $c;
+    }
+
+    /**
+     * RSAES-OAEP-DECRYPT
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.2 RFC3447#section-7.1.2}.  The fact that the error
+     * messages aren't distinguishable from one another hinders debugging, but, to quote from RFC3447#section-7.1.2:
+     * 
+     *    Note.  Care must be taken to ensure that an opponent cannot
+     *    distinguish the different error conditions in Step 3.g, whether by
+     *    error message or timing, or, more generally, learn partial
+     *    information about the encoded message EM.  Otherwise an opponent may
+     *    be able to obtain useful information about the decryption of the
+     *    ciphertext C, leading to a chosen-ciphertext attack such as the one
+     *    observed by Manger [36].
+     *
+     * As for $l...  to quote from {@link http://tools.ietf.org/html/rfc3447#page-17 RFC3447#page-17}:
+     *
+     *    Both the encryption and the decryption operations of RSAES-OAEP take
+     *    the value of a label L as input.  In this version of PKCS #1, L is
+     *    the empty string; other uses of the label are outside the scope of
+     *    this document.
+     *
+     * @access private
+     * @param String $c
+     * @param String $l
+     * @return String
+     */
+    function _rsaes_oaep_decrypt($c, $l = '')
+    {
+        // Length checking
+
+        // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
+        // be output.
+
+        if (strlen($c) != $this->k || $this->k < 2 * $this->hLen + 2) {
+            user_error('Decryption error');
+            return false;
+        }
+
+        // RSA decryption
+
+        $c = $this->_os2ip($c);
+        $m = $this->_rsadp($c);
+        if ($m === false) {
+            user_error('Decryption error');
+            return false;
+        }
+        $em = $this->_i2osp($m, $this->k);
+
+        // EME-OAEP decoding
+
+        $lHash = $this->hash->hash($l);
+        $y = ord($em[0]);
+        $maskedSeed = substr($em, 1, $this->hLen);
+        $maskedDB = substr($em, $this->hLen + 1);
+        $seedMask = $this->_mgf1($maskedDB, $this->hLen);
+        $seed = $maskedSeed ^ $seedMask;
+        $dbMask = $this->_mgf1($seed, $this->k - $this->hLen - 1);
+        $db = $maskedDB ^ $dbMask;
+        $lHash2 = substr($db, 0, $this->hLen);
+        $m = substr($db, $this->hLen);
+        if ($lHash != $lHash2) {
+            user_error('Decryption error');
+            return false;
+        }
+        $m = ltrim($m, chr(0));
+        if (ord($m[0]) != 1) {
+            user_error('Decryption error');
+            return false;
+        }
+
+        // Output the message M
+
+        return substr($m, 1);
+    }
+
+    /**
+     * RSAES-PKCS1-V1_5-ENCRYPT
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.1 RFC3447#section-7.2.1}.
+     *
+     * @access private
+     * @param String $m
+     * @return String
+     */
+    function _rsaes_pkcs1_v1_5_encrypt($m)
+    {
+        $mLen = strlen($m);
+
+        // Length checking
+
+        if ($mLen > $this->k - 11) {
+            user_error('Message too long');
+            return false;
+        }
+
+        // EME-PKCS1-v1_5 encoding
+        $psLen = $this->k - $mLen - 3;
+        $ps = '';
+        while (strlen($ps) != $psLen) {
+            $temp = crypt_random_string($psLen - strlen($ps));
+            $temp = str_replace("\x00", '', $temp);
+            $ps.= $temp;
+        }
+        $em = chr(0) . chr(2) . $ps . chr(0) . $m;
+
+        // RSA encryption
+        $m = $this->_os2ip($em);
+        $c = $this->_rsaep($m);
+        $c = $this->_i2osp($c, $this->k);
+
+        // Output the ciphertext C
+
+        return $c;
+    }
+
+    /**
+     * RSAES-PKCS1-V1_5-DECRYPT
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.2 RFC3447#section-7.2.2}.
+     *
+     * For compatability purposes, this function departs slightly from the description given in RFC3447.
+     * The reason being that RFC2313#section-8.1 (PKCS#1 v1.5) states that ciphertext's encrypted by the
+     * private key should have the second byte set to either 0 or 1 and that ciphertext's encrypted by the
+     * public key should have the second byte set to 2.  In RFC3447 (PKCS#1 v2.1), the second byte is supposed
+     * to be 2 regardless of which key is used.  For compatability purposes, we'll just check to make sure the
+     * second byte is 2 or less.  If it is, we'll accept the decrypted string as valid.
+     *
+     * As a consequence of this, a private key encrypted ciphertext produced with Crypt_RSA may not decrypt
+     * with a strictly PKCS#1 v1.5 compliant RSA implementation.  Public key encrypted ciphertext's should but
+     * not private key encrypted ciphertext's.
+     *
+     * @access private
+     * @param String $c
+     * @return String
+     */
+    function _rsaes_pkcs1_v1_5_decrypt($c)
+    {
+        // Length checking
+
+        if (strlen($c) != $this->k) { // or if k < 11
+            user_error('Decryption error');
+            return false;
+        }
+
+        // RSA decryption
+
+        $c = $this->_os2ip($c);
+        $m = $this->_rsadp($c);
+
+        if ($m === false) {
+            user_error('Decryption error');
+            return false;
+        }
+        $em = $this->_i2osp($m, $this->k);
+
+        // EME-PKCS1-v1_5 decoding
+
+        if (ord($em[0]) != 0 || ord($em[1]) > 2) {
+            user_error('Decryption error');
+            return false;
+        }
+
+        $ps = substr($em, 2, strpos($em, chr(0), 2) - 2);
+        $m = substr($em, strlen($ps) + 3);
+
+        if (strlen($ps) < 8) {
+            user_error('Decryption error');
+            return false;
+        }
+
+        // Output M
+
+        return $m;
+    }
+
+    /**
+     * EMSA-PSS-ENCODE
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.1 RFC3447#section-9.1.1}.
+     *
+     * @access private
+     * @param String $m
+     * @param Integer $emBits
+     */
+    function _emsa_pss_encode($m, $emBits)
+    {
+        // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
+        // be output.
+
+        $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8)
+        $sLen = $this->sLen == false ? $this->hLen : $this->sLen;
+
+        $mHash = $this->hash->hash($m);
+        if ($emLen < $this->hLen + $sLen + 2) {
+            user_error('Encoding error');
+            return false;
+        }
+
+        $salt = crypt_random_string($sLen);
+        $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt;
+        $h = $this->hash->hash($m2);
+        $ps = str_repeat(chr(0), $emLen - $sLen - $this->hLen - 2);
+        $db = $ps . chr(1) . $salt;
+        $dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1);
+        $maskedDB = $db ^ $dbMask;
+        $maskedDB[0] = ~chr(0xFF << ($emBits & 7)) & $maskedDB[0];
+        $em = $maskedDB . $h . chr(0xBC);
+
+        return $em;
+    }
+
+    /**
+     * EMSA-PSS-VERIFY
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.2 RFC3447#section-9.1.2}.
+     *
+     * @access private
+     * @param String $m
+     * @param String $em
+     * @param Integer $emBits
+     * @return String
+     */
+    function _emsa_pss_verify($m, $em, $emBits)
+    {
+        // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
+        // be output.
+
+        $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8);
+        $sLen = $this->sLen == false ? $this->hLen : $this->sLen;
+
+        $mHash = $this->hash->hash($m);
+        if ($emLen < $this->hLen + $sLen + 2) {
+            return false;
+        }
+
+        if ($em[strlen($em) - 1] != chr(0xBC)) {
+            return false;
+        }
+
+        $maskedDB = substr($em, 0, -$this->hLen - 1);
+        $h = substr($em, -$this->hLen - 1, $this->hLen);
+        $temp = chr(0xFF << ($emBits & 7));
+        if ((~$maskedDB[0] & $temp) != $temp) {
+            return false;
+        }
+        $dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1);
+        $db = $maskedDB ^ $dbMask;
+        $db[0] = ~chr(0xFF << ($emBits & 7)) & $db[0];
+        $temp = $emLen - $this->hLen - $sLen - 2;
+        if (substr($db, 0, $temp) != str_repeat(chr(0), $temp) || ord($db[$temp]) != 1) {
+            return false;
+        }
+        $salt = substr($db, $temp + 1); // should be $sLen long
+        $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt;
+        $h2 = $this->hash->hash($m2);
+        return $this->_equals($h, $h2);
+    }
+
+    /**
+     * RSASSA-PSS-SIGN
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.1 RFC3447#section-8.1.1}.
+     *
+     * @access private
+     * @param String $m
+     * @return String
+     */
+    function _rsassa_pss_sign($m)
+    {
+        // EMSA-PSS encoding
+
+        $em = $this->_emsa_pss_encode($m, 8 * $this->k - 1);
+
+        // RSA signature
+
+        $m = $this->_os2ip($em);
+        $s = $this->_rsasp1($m);
+        $s = $this->_i2osp($s, $this->k);
+
+        // Output the signature S
+
+        return $s;
+    }
+
+    /**
+     * RSASSA-PSS-VERIFY
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.2 RFC3447#section-8.1.2}.
+     *
+     * @access private
+     * @param String $m
+     * @param String $s
+     * @return String
+     */
+    function _rsassa_pss_verify($m, $s)
+    {
+        // Length checking
+
+        if (strlen($s) != $this->k) {
+            user_error('Invalid signature');
+            return false;
+        }
+
+        // RSA verification
+
+        $modBits = 8 * $this->k;
+
+        $s2 = $this->_os2ip($s);
+        $m2 = $this->_rsavp1($s2);
+        if ($m2 === false) {
+            user_error('Invalid signature');
+            return false;
+        }
+        $em = $this->_i2osp($m2, $modBits >> 3);
+        if ($em === false) {
+            user_error('Invalid signature');
+            return false;
+        }
+
+        // EMSA-PSS verification
+
+        return $this->_emsa_pss_verify($m, $em, $modBits - 1);
+    }
+
+    /**
+     * EMSA-PKCS1-V1_5-ENCODE
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-9.2 RFC3447#section-9.2}.
+     *
+     * @access private
+     * @param String $m
+     * @param Integer $emLen
+     * @return String
+     */
+    function _emsa_pkcs1_v1_5_encode($m, $emLen)
+    {
+        $h = $this->hash->hash($m);
+        if ($h === false) {
+            return false;
+        }
+
+        // see http://tools.ietf.org/html/rfc3447#page-43
+        switch ($this->hashName) {
+            case 'md2':
+                $t = pack('H*', '3020300c06082a864886f70d020205000410');
+                break;
+            case 'md5':
+                $t = pack('H*', '3020300c06082a864886f70d020505000410');
+                break;
+            case 'sha1':
+                $t = pack('H*', '3021300906052b0e03021a05000414');
+                break;
+            case 'sha256':
+                $t = pack('H*', '3031300d060960864801650304020105000420');
+                break;
+            case 'sha384':
+                $t = pack('H*', '3041300d060960864801650304020205000430');
+                break;
+            case 'sha512':
+                $t = pack('H*', '3051300d060960864801650304020305000440');
+        }
+        $t.= $h;
+        $tLen = strlen($t);
+
+        if ($emLen < $tLen + 11) {
+            user_error('Intended encoded message length too short');
+            return false;
+        }
+
+        $ps = str_repeat(chr(0xFF), $emLen - $tLen - 3);
+
+        $em = "\0\1$ps\0$t";
+
+        return $em;
+    }
+
+    /**
+     * RSASSA-PKCS1-V1_5-SIGN
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.1 RFC3447#section-8.2.1}.
+     *
+     * @access private
+     * @param String $m
+     * @return String
+     */
+    function _rsassa_pkcs1_v1_5_sign($m)
+    {
+        // EMSA-PKCS1-v1_5 encoding
+
+        $em = $this->_emsa_pkcs1_v1_5_encode($m, $this->k);
+        if ($em === false) {
+            user_error('RSA modulus too short');
+            return false;
+        }
+
+        // RSA signature
+
+        $m = $this->_os2ip($em);
+        $s = $this->_rsasp1($m);
+        $s = $this->_i2osp($s, $this->k);
+
+        // Output the signature S
+
+        return $s;
+    }
+
+    /**
+     * RSASSA-PKCS1-V1_5-VERIFY
+     *
+     * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.2 RFC3447#section-8.2.2}.
+     *
+     * @access private
+     * @param String $m
+     * @return String
+     */
+    function _rsassa_pkcs1_v1_5_verify($m, $s)
+    {
+        // Length checking
+
+        if (strlen($s) != $this->k) {
+            user_error('Invalid signature');
+            return false;
+        }
+
+        // RSA verification
+
+        $s = $this->_os2ip($s);
+        $m2 = $this->_rsavp1($s);
+        if ($m2 === false) {
+            user_error('Invalid signature');
+            return false;
+        }
+        $em = $this->_i2osp($m2, $this->k);
+        if ($em === false) {
+            user_error('Invalid signature');
+            return false;
+        }
+
+        // EMSA-PKCS1-v1_5 encoding
+
+        $em2 = $this->_emsa_pkcs1_v1_5_encode($m, $this->k);
+        if ($em2 === false) {
+            user_error('RSA modulus too short');
+            return false;
+        }
+
+        // Compare
+        return $this->_equals($em, $em2);
+    }
+
+    /**
+     * Set Encryption Mode
+     *
+     * Valid values include CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_ENCRYPTION_PKCS1.
+     *
+     * @access public
+     * @param Integer $mode
+     */
+    function setEncryptionMode($mode)
+    {
+        $this->encryptionMode = $mode;
+    }
+
+    /**
+     * Set Signature Mode
+     *
+     * Valid values include CRYPT_RSA_SIGNATURE_PSS and CRYPT_RSA_SIGNATURE_PKCS1
+     *
+     * @access public
+     * @param Integer $mode
+     */
+    function setSignatureMode($mode)
+    {
+        $this->signatureMode = $mode;
+    }
+
+    /**
+     * Encryption
+     *
+     * Both CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_ENCRYPTION_PKCS1 both place limits on how long $plaintext can be.
+     * If $plaintext exceeds those limits it will be broken up so that it does and the resultant ciphertext's will
+     * be concatenated together.
+     *
+     * @see decrypt()
+     * @access public
+     * @param String $plaintext
+     * @return String
+     */
+    function encrypt($plaintext)
+    {
+        switch ($this->encryptionMode) {
+            case CRYPT_RSA_ENCRYPTION_PKCS1:
+                $length = $this->k - 11;
+                if ($length <= 0) {
+                    return false;
+                }
+
+                $plaintext = str_split($plaintext, $length);
+                $ciphertext = '';
+                foreach ($plaintext as $m) {
+                    $ciphertext.= $this->_rsaes_pkcs1_v1_5_encrypt($m);
+                }
+                return $ciphertext;
+            //case CRYPT_RSA_ENCRYPTION_OAEP:
+            default:
+                $length = $this->k - 2 * $this->hLen - 2;
+                if ($length <= 0) {
+                    return false;
+                }
+
+                $plaintext = str_split($plaintext, $length);
+                $ciphertext = '';
+                foreach ($plaintext as $m) {
+                    $ciphertext.= $this->_rsaes_oaep_encrypt($m);
+                }
+                return $ciphertext;
+        }
+    }
+
+    /**
+     * Decryption
+     *
+     * @see encrypt()
+     * @access public
+     * @param String $plaintext
+     * @return String
+     */
+    function decrypt($ciphertext)
+    {
+        if ($this->k <= 0) {
+            return false;
+        }
+
+        $ciphertext = str_split($ciphertext, $this->k);
+        $ciphertext[count($ciphertext) - 1] = str_pad($ciphertext[count($ciphertext) - 1], $this->k, chr(0), STR_PAD_LEFT);
+
+        $plaintext = '';
+
+        switch ($this->encryptionMode) {
+            case CRYPT_RSA_ENCRYPTION_PKCS1:
+                $decrypt = '_rsaes_pkcs1_v1_5_decrypt';
+                break;
+            //case CRYPT_RSA_ENCRYPTION_OAEP:
+            default:
+                $decrypt = '_rsaes_oaep_decrypt';
+        }
+
+        foreach ($ciphertext as $c) {
+            $temp = $this->$decrypt($c);
+            if ($temp === false) {
+                return false;
+            }
+            $plaintext.= $temp;
+        }
+
+        return $plaintext;
+    }
+
+    /**
+     * Create a signature
+     *
+     * @see verify()
+     * @access public
+     * @param String $message
+     * @return String
+     */
+    function sign($message)
+    {
+        if (empty($this->modulus) || empty($this->exponent)) {
+            return false;
+        }
+
+        switch ($this->signatureMode) {
+            case CRYPT_RSA_SIGNATURE_PKCS1:
+                return $this->_rsassa_pkcs1_v1_5_sign($message);
+            //case CRYPT_RSA_SIGNATURE_PSS:
+            default:
+                return $this->_rsassa_pss_sign($message);
+        }
+    }
+
+    /**
+     * Verifies a signature
+     *
+     * @see sign()
+     * @access public
+     * @param String $message
+     * @param String $signature
+     * @return Boolean
+     */
+    function verify($message, $signature)
+    {
+        if (empty($this->modulus) || empty($this->exponent)) {
+            return false;
+        }
+
+        switch ($this->signatureMode) {
+            case CRYPT_RSA_SIGNATURE_PKCS1:
+                return $this->_rsassa_pkcs1_v1_5_verify($message, $signature);
+            //case CRYPT_RSA_SIGNATURE_PSS:
+            default:
+                return $this->_rsassa_pss_verify($message, $signature);
+        }
+    }
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Random.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Random.php
new file mode 100644
index 0000000000000000000000000000000000000000..a60857df95ddf12870d91934822cb4aaad3cd330
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Random.php
@@ -0,0 +1,243 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Random Number Generator
+ *
+ * PHP versions 4 and 5
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ *    include('Crypt/Random.php');
+ *
+ *    echo bin2hex(crypt_random_string(8));
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category   Crypt
+ * @package    Crypt_Random
+ * @author     Jim Wigginton <terrafrost@php.net>
+ * @copyright  MMVII Jim Wigginton
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @version    $Id: Random.php,v 1.9 2010/04/24 06:40:48 terrafrost Exp $
+ * @link       http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Generate a random string.
+ *
+ * Although microoptimizations are generally discouraged as they impair readability this function is ripe with
+ * microoptimizations because this function has the potential of being called a huge number of times.
+ * eg. for RSA key generation.
+ *
+ * @param Integer $length
+ * @return String
+ * @access public
+ */
+function crypt_random_string($length) {
+    // PHP_OS & "\xDF\xDF\xDF" == strtoupper(substr(PHP_OS, 0, 3)), but a lot faster
+    if ((PHP_OS & "\xDF\xDF\xDF") === 'WIN') {
+        // method 1. prior to PHP 5.3 this would call rand() on windows hence the function_exists('class_alias') call.
+        // ie. class_alias is a function that was introduced in PHP 5.3
+        if (function_exists('mcrypt_create_iv') && function_exists('class_alias')) {
+            return mcrypt_create_iv($length);
+        }
+        // method 2. openssl_random_pseudo_bytes was introduced in PHP 5.3.0 but prior to PHP 5.3.4 there was,
+        // to quote <http://php.net/ChangeLog-5.php#5.3.4>, "possible blocking behavior". as of 5.3.4
+        // openssl_random_pseudo_bytes and mcrypt_create_iv do the exact same thing on Windows. ie. they both
+        // call php_win32_get_random_bytes():
+        //
+        // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/openssl/openssl.c#L5008
+        // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1392
+        //
+        // php_win32_get_random_bytes() is defined thusly:
+        //
+        // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/win32/winutil.c#L80
+        //
+        // we're calling it, all the same, in the off chance that the mcrypt extension is not available
+        if (function_exists('openssl_random_pseudo_bytes') && version_compare(PHP_VERSION, '5.3.4', '>=')) {
+            return openssl_random_pseudo_bytes($length);
+        }
+    } else {
+        // method 1. the fastest
+        if (function_exists('openssl_random_pseudo_bytes')) {
+            return openssl_random_pseudo_bytes($length);
+        }
+        // method 2
+        static $fp = true;
+        if ($fp === true) {
+            // warning's will be output unles the error suppression operator is used. errors such as
+            // "open_basedir restriction in effect", "Permission denied", "No such file or directory", etc.
+            $fp = @fopen('/dev/urandom', 'rb');
+        }
+        if ($fp !== true && $fp !== false) { // surprisingly faster than !is_bool() or is_resource()
+            return fread($fp, $length);
+        }
+        // method 3. pretty much does the same thing as method 2 per the following url:
+        // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1391
+        // surprisingly slower than method 2. maybe that's because mcrypt_create_iv does a bunch of error checking that we're
+        // not doing. regardless, this'll only be called if this PHP script couldn't open /dev/urandom due to open_basedir
+        // restrictions or some such
+        if (function_exists('mcrypt_create_iv')) {
+            return mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
+        }
+    }
+    // at this point we have no choice but to use a pure-PHP CSPRNG
+
+    // cascade entropy across multiple PHP instances by fixing the session and collecting all
+    // environmental variables, including the previous session data and the current session
+    // data.
+    //
+    // mt_rand seeds itself by looking at the PID and the time, both of which are (relatively)
+    // easy to guess at. linux uses mouse clicks, keyboard timings, etc, as entropy sources, but
+    // PHP isn't low level to be able to use those as sources and on a web server there's not likely
+    // going to be a ton of keyboard or mouse action. web servers do have one thing that we can use
+    // however. a ton of people visiting the website. obviously you don't want to base your seeding
+    // soley on parameters a potential attacker sends but (1) not everything in $_SERVER is controlled
+    // by the user and (2) this isn't just looking at the data sent by the current user - it's based
+    // on the data sent by all users. one user requests the page and a hash of their info is saved.
+    // another user visits the page and the serialization of their data is utilized along with the
+    // server envirnment stuff and a hash of the previous http request data (which itself utilizes
+    // a hash of the session data before that). certainly an attacker should be assumed to have
+    // full control over his own http requests. he, however, is not going to have control over
+    // everyone's http requests.
+    static $crypto = false, $v;
+    if ($crypto === false) {
+        // save old session data
+        $old_session_id = session_id();
+        $old_use_cookies = ini_get('session.use_cookies');
+        $old_session_cache_limiter = session_cache_limiter();
+        if (isset($_SESSION)) {
+            $_OLD_SESSION = $_SESSION;
+        }
+        if ($old_session_id != '') {
+            session_write_close();
+        }
+
+        session_id(1);
+        ini_set('session.use_cookies', 0);
+        session_cache_limiter('');
+        session_start();
+
+        $v = $seed = $_SESSION['seed'] = pack('H*', sha1(
+            serialize($_SERVER) .
+            serialize($_POST) .
+            serialize($_GET) .
+            serialize($_COOKIE) .
+            serialize($_GLOBAL) .
+            serialize($_SESSION) .
+            serialize($_OLD_SESSION)
+        ));
+        if (!isset($_SESSION['count'])) {
+            $_SESSION['count'] = 0;
+        }
+        $_SESSION['count']++;
+
+        session_write_close();
+
+        // restore old session data
+        if ($old_session_id != '') {
+            session_id($old_session_id);
+            session_start();
+            ini_set('session.use_cookies', $old_use_cookies);
+            session_cache_limiter($old_session_cache_limiter);
+        } else {
+           if (isset($_OLD_SESSION)) {
+               $_SESSION = $_OLD_SESSION;
+               unset($_OLD_SESSION);
+            } else {
+                unset($_SESSION);
+            }
+        }
+
+        // in SSH2 a shared secret and an exchange hash are generated through the key exchange process.
+        // the IV client to server is the hash of that "nonce" with the letter A and for the encryption key it's the letter C.
+        // if the hash doesn't produce enough a key or an IV that's long enough concat successive hashes of the
+        // original hash and the current hash. we'll be emulating that. for more info see the following URL:
+        //
+        // http://tools.ietf.org/html/rfc4253#section-7.2
+        //
+        // see the is_string($crypto) part for an example of how to expand the keys
+        $key = pack('H*', sha1($seed . 'A'));
+        $iv = pack('H*', sha1($seed . 'C'));
+
+        // ciphers are used as per the nist.gov link below. also, see this link:
+        //
+        // http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator#Designs_based_on_cryptographic_primitives
+        switch (true) {
+            case class_exists('Crypt_AES'):
+                $crypto = new Crypt_AES(CRYPT_AES_MODE_CTR);
+                break;
+            case class_exists('Crypt_TripleDES'):
+                $crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
+                break;
+            case class_exists('Crypt_DES'):
+                $crypto = new Crypt_DES(CRYPT_DES_MODE_CTR);
+                break;
+            case class_exists('Crypt_RC4'):
+                $crypto = new Crypt_RC4();
+                break;
+            default:
+                $crypto = $seed;
+                return crypt_random_string($length);
+        }
+
+        $crypto->setKey($key);
+        $crypto->setIV($iv);
+        $crypto->enableContinuousBuffer();
+    }
+
+    if (is_string($crypto)) {
+        // the following is based off of ANSI X9.31:
+        //
+        // http://csrc.nist.gov/groups/STM/cavp/documents/rng/931rngext.pdf
+        //
+        // OpenSSL uses that same standard for it's random numbers:
+        //
+        // http://www.opensource.apple.com/source/OpenSSL/OpenSSL-38/openssl/fips-1.0/rand/fips_rand.c
+        // (do a search for "ANS X9.31 A.2.4")
+        //
+        // ANSI X9.31 recommends ciphers be used and phpseclib does use them if they're available (see
+        // later on in the code) but if they're not we'll use sha1
+        $result = '';
+        while (strlen($result) < $length) { // each loop adds 20 bytes
+            // microtime() isn't packed as "densely" as it could be but then neither is that the idea.
+            // the idea is simply to ensure that each "block" has a unique element to it.
+            $i = pack('H*', sha1(microtime()));
+            $r = pack('H*', sha1($i ^ $v));
+            $v = pack('H*', sha1($r ^ $i));
+            $result.= $r;
+        }
+        return substr($result, 0, $length);
+    }
+
+    //return $crypto->encrypt(str_repeat("\0", $length));
+
+    $result = '';
+    while (strlen($result) < $length) {
+        $i = $crypto->encrypt(microtime());
+        $r = $crypto->encrypt($i ^ $v);
+        $v = $crypto->encrypt($r ^ $i);
+        $result.= $r;
+    }
+    return substr($result, 0, $length);
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Rijndael.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Rijndael.php
new file mode 100644
index 0000000000000000000000000000000000000000..335d5233c4d6c537d4cdf72c16a02f5ce6c4f58a
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/Rijndael.php
@@ -0,0 +1,1525 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of Rijndael.
+ *
+ * Does not use mcrypt, even when available, for reasons that are explained below.
+ *
+ * PHP versions 4 and 5
+ *
+ * If {@link Crypt_Rijndael::setBlockLength() setBlockLength()} isn't called, it'll be assumed to be 128 bits.  If 
+ * {@link Crypt_Rijndael::setKeyLength() setKeyLength()} isn't called, it'll be calculated from 
+ * {@link Crypt_Rijndael::setKey() setKey()}.  ie. if the key is 128-bits, the key length will be 128-bits.  If it's 
+ * 136-bits it'll be null-padded to 160-bits and 160 bits will be the key length until 
+ * {@link Crypt_Rijndael::setKey() setKey()} is called, again, at which point, it'll be recalculated.
+ *
+ * Not all Rijndael implementations may support 160-bits or 224-bits as the block length / key length.  mcrypt, for example,
+ * does not.  AES, itself, only supports block lengths of 128 and key lengths of 128, 192, and 256.
+ * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=10 Rijndael-ammended.pdf#page=10} defines the
+ * algorithm for block lengths of 192 and 256 but not for block lengths / key lengths of 160 and 224.  Indeed, 160 and 224
+ * are first defined as valid key / block lengths in 
+ * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=44 Rijndael-ammended.pdf#page=44}: 
+ * Extensions: Other block and Cipher Key lengths.
+ *
+ * {@internal The variable names are the same as those in 
+ * {@link http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf#page=10 fips-197.pdf#page=10}.}}
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ *    include('Crypt/Rijndael.php');
+ *
+ *    $rijndael = new Crypt_Rijndael();
+ *
+ *    $rijndael->setKey('abcdefghijklmnop');
+ *
+ *    $size = 10 * 1024;
+ *    $plaintext = '';
+ *    for ($i = 0; $i < $size; $i++) {
+ *        $plaintext.= 'a';
+ *    }
+ *
+ *    echo $rijndael->decrypt($rijndael->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category   Crypt
+ * @package    Crypt_Rijndael
+ * @author     Jim Wigginton <terrafrost@php.net>
+ * @copyright  MMVIII Jim Wigginton
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @version    $Id: Rijndael.php,v 1.12 2010/02/09 06:10:26 terrafrost Exp $
+ * @link       http://phpseclib.sourceforge.net
+ */
+
+/**#@+
+ * @access public
+ * @see Crypt_Rijndael::encrypt()
+ * @see Crypt_Rijndael::decrypt()
+ */
+/**
+ * Encrypt / decrypt using the Counter mode.
+ *
+ * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
+ */
+define('CRYPT_RIJNDAEL_MODE_CTR', -1);
+/**
+ * Encrypt / decrypt using the Electronic Code Book mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
+ */
+define('CRYPT_RIJNDAEL_MODE_ECB', 1);
+/**
+ * Encrypt / decrypt using the Code Book Chaining mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
+ */
+define('CRYPT_RIJNDAEL_MODE_CBC', 2);
+/**
+ * Encrypt / decrypt using the Cipher Feedback mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
+ */
+define('CRYPT_RIJNDAEL_MODE_CFB', 3);
+/**
+ * Encrypt / decrypt using the Cipher Feedback mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
+ */
+define('CRYPT_RIJNDAEL_MODE_OFB', 4);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_Rijndael::Crypt_Rijndael()
+ */
+/**
+ * Toggles the internal implementation
+ */
+define('CRYPT_RIJNDAEL_MODE_INTERNAL', 1);
+/**
+ * Toggles the mcrypt implementation
+ */
+define('CRYPT_RIJNDAEL_MODE_MCRYPT', 2);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of Rijndael.
+ *
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access  public
+ * @package Crypt_Rijndael
+ */
+class Crypt_Rijndael {
+    /**
+     * The Encryption Mode
+     *
+     * @see Crypt_Rijndael::Crypt_Rijndael()
+     * @var Integer
+     * @access private
+     */
+    var $mode;
+
+    /**
+     * The Key
+     *
+     * @see Crypt_Rijndael::setKey()
+     * @var String
+     * @access private
+     */
+    var $key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
+
+    /**
+     * The Initialization Vector
+     *
+     * @see Crypt_Rijndael::setIV()
+     * @var String
+     * @access private
+     */
+    var $iv = '';
+
+    /**
+     * A "sliding" Initialization Vector
+     *
+     * @see Crypt_Rijndael::enableContinuousBuffer()
+     * @var String
+     * @access private
+     */
+    var $encryptIV = '';
+
+    /**
+     * A "sliding" Initialization Vector
+     *
+     * @see Crypt_Rijndael::enableContinuousBuffer()
+     * @var String
+     * @access private
+     */
+    var $decryptIV = '';
+
+    /**
+     * Continuous Buffer status
+     *
+     * @see Crypt_Rijndael::enableContinuousBuffer()
+     * @var Boolean
+     * @access private
+     */
+    var $continuousBuffer = false;
+
+    /**
+     * Padding status
+     *
+     * @see Crypt_Rijndael::enablePadding()
+     * @var Boolean
+     * @access private
+     */
+    var $padding = true;
+
+    /**
+     * Does the key schedule need to be (re)calculated?
+     *
+     * @see setKey()
+     * @see setBlockLength()
+     * @see setKeyLength()
+     * @var Boolean
+     * @access private
+     */
+    var $changed = true;
+
+    /**
+     * Has the key length explicitly been set or should it be derived from the key, itself?
+     *
+     * @see setKeyLength()
+     * @var Boolean
+     * @access private
+     */
+    var $explicit_key_length = false;
+
+    /**
+     * The Key Schedule
+     *
+     * @see _setup()
+     * @var Array
+     * @access private
+     */
+    var $w;
+
+    /**
+     * The Inverse Key Schedule
+     *
+     * @see _setup()
+     * @var Array
+     * @access private
+     */
+    var $dw;
+
+    /**
+     * The Block Length
+     *
+     * @see setBlockLength()
+     * @var Integer
+     * @access private
+     * @internal The max value is 32, the min value is 16.  All valid values are multiples of 4.  Exists in conjunction with
+     *     $Nb because we need this value and not $Nb to pad strings appropriately.  
+     */
+    var $block_size = 16;
+
+    /**
+     * The Block Length divided by 32
+     *
+     * @see setBlockLength()
+     * @var Integer
+     * @access private
+     * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4.  Exists in conjunction with $block_size 
+     *    because the encryption / decryption / key schedule creation requires this number and not $block_size.  We could 
+     *    derive this from $block_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
+     *    of that, we'll just precompute it once.
+     *
+     */
+    var $Nb = 4;
+
+    /**
+     * The Key Length
+     *
+     * @see setKeyLength()
+     * @var Integer
+     * @access private
+     * @internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16.  Exists in conjunction with $key_size
+     *    because the encryption / decryption / key schedule creation requires this number and not $key_size.  We could 
+     *    derive this from $key_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
+     *    of that, we'll just precompute it once.
+     */
+    var $key_size = 16;
+
+    /**
+     * The Key Length divided by 32
+     *
+     * @see setKeyLength()
+     * @var Integer
+     * @access private
+     * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4
+     */
+    var $Nk = 4;
+
+    /**
+     * The Number of Rounds
+     *
+     * @var Integer
+     * @access private
+     * @internal The max value is 14, the min value is 10.
+     */
+    var $Nr;
+
+    /**
+     * Shift offsets
+     *
+     * @var Array
+     * @access private
+     */
+    var $c;
+
+    /**
+     * Precomputed mixColumns table
+     *
+     * @see Crypt_Rijndael()
+     * @var Array
+     * @access private
+     */
+    var $t0;
+
+    /**
+     * Precomputed mixColumns table
+     *
+     * @see Crypt_Rijndael()
+     * @var Array
+     * @access private
+     */
+    var $t1;
+
+    /**
+     * Precomputed mixColumns table
+     *
+     * @see Crypt_Rijndael()
+     * @var Array
+     * @access private
+     */
+    var $t2;
+
+    /**
+     * Precomputed mixColumns table
+     *
+     * @see Crypt_Rijndael()
+     * @var Array
+     * @access private
+     */
+    var $t3;
+
+    /**
+     * Precomputed invMixColumns table
+     *
+     * @see Crypt_Rijndael()
+     * @var Array
+     * @access private
+     */
+    var $dt0;
+
+    /**
+     * Precomputed invMixColumns table
+     *
+     * @see Crypt_Rijndael()
+     * @var Array
+     * @access private
+     */
+    var $dt1;
+
+    /**
+     * Precomputed invMixColumns table
+     *
+     * @see Crypt_Rijndael()
+     * @var Array
+     * @access private
+     */
+    var $dt2;
+
+    /**
+     * Precomputed invMixColumns table
+     *
+     * @see Crypt_Rijndael()
+     * @var Array
+     * @access private
+     */
+    var $dt3;
+
+    /**
+     * Is the mode one that is paddable?
+     *
+     * @see Crypt_Rijndael::Crypt_Rijndael()
+     * @var Boolean
+     * @access private
+     */
+    var $paddable = false;
+
+    /**
+     * Encryption buffer for CTR, OFB and CFB modes
+     *
+     * @see Crypt_Rijndael::encrypt()
+     * @var String
+     * @access private
+     */
+    var $enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0);
+
+    /**
+     * Decryption buffer for CTR, OFB and CFB modes
+     *
+     * @see Crypt_Rijndael::decrypt()
+     * @var String
+     * @access private
+     */
+    var $debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0);
+
+    /**
+     * Default Constructor.
+     *
+     * Determines whether or not the mcrypt extension should be used.  $mode should only, at present, be
+     * CRYPT_RIJNDAEL_MODE_ECB or CRYPT_RIJNDAEL_MODE_CBC.  If not explictly set, CRYPT_RIJNDAEL_MODE_CBC will be used.
+     *
+     * @param optional Integer $mode
+     * @return Crypt_Rijndael
+     * @access public
+     */
+    function Crypt_Rijndael($mode = CRYPT_RIJNDAEL_MODE_CBC)
+    {
+        switch ($mode) {
+            case CRYPT_RIJNDAEL_MODE_ECB:
+            case CRYPT_RIJNDAEL_MODE_CBC:
+                $this->paddable = true;
+                $this->mode = $mode;
+                break;
+            case CRYPT_RIJNDAEL_MODE_CTR:
+            case CRYPT_RIJNDAEL_MODE_CFB:
+            case CRYPT_RIJNDAEL_MODE_OFB:
+                $this->mode = $mode;
+                break;
+            default:
+                $this->paddable = true;
+                $this->mode = CRYPT_RIJNDAEL_MODE_CBC;
+        }
+
+        $t3 = &$this->t3;
+        $t2 = &$this->t2;
+        $t1 = &$this->t1;
+        $t0 = &$this->t0;
+
+        $dt3 = &$this->dt3;
+        $dt2 = &$this->dt2;
+        $dt1 = &$this->dt1;
+        $dt0 = &$this->dt0;
+
+        // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=19> (section 5.2.1), 
+        // precomputed tables can be used in the mixColumns phase.  in that example, they're assigned t0...t3, so
+        // those are the names we'll use.
+        $t3 = array(
+            0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491, 
+            0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC, 
+            0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB, 
+            0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B, 
+            0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83, 
+            0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A, 
+            0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F, 
+            0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA, 
+            0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B, 
+            0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713, 
+            0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6, 
+            0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85, 
+            0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411, 
+            0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B, 
+            0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1, 
+            0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF, 
+            0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E, 
+            0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6, 
+            0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B, 
+            0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD, 
+            0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8, 
+            0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2, 
+            0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049, 
+            0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810, 
+            0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197, 
+            0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F, 
+            0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C, 
+            0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927, 
+            0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733, 
+            0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5, 
+            0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0, 
+            0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C
+        );
+
+        $dt3 = array(
+            0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B, 
+            0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026, 0x62A38FB5, 
+            0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B, 
+            0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E, 
+            0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D, 
+            0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9, 
+            0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66, 
+            0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED, 
+            0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, 0x34621FD1, 0xA6FE8AC4, 
+            0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD, 
+            0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60, 
+            0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79, 
+            0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C, 
+            0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24, 
+            0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C, 
+            0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814, 
+            0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B, 
+            0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, 0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084, 
+            0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077, 
+            0xB3166C2B, 0x70B999A9, 0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22, 
+            0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F, 
+            0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582, 
+            0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB, 
+            0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF, 
+            0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035, 
+            0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17, 
+            0x4DD68D76, 0xEFB04D43, 0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46, 
+            0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D, 
+            0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A, 
+            0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678, 
+            0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF, 
+            0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0
+        );
+
+        for ($i = 0; $i < 256; $i++) {
+            $t2[] = (($t3[$i] <<  8) & 0xFFFFFF00) | (($t3[$i] >> 24) & 0x000000FF);
+            $t1[] = (($t3[$i] << 16) & 0xFFFF0000) | (($t3[$i] >> 16) & 0x0000FFFF);
+            $t0[] = (($t3[$i] << 24) & 0xFF000000) | (($t3[$i] >>  8) & 0x00FFFFFF);
+
+            $dt2[] = (($dt3[$i] <<  8) & 0xFFFFFF00) | (($dt3[$i] >> 24) & 0x000000FF);
+            $dt1[] = (($dt3[$i] << 16) & 0xFFFF0000) | (($dt3[$i] >> 16) & 0x0000FFFF);
+            $dt0[] = (($dt3[$i] << 24) & 0xFF000000) | (($dt3[$i] >>  8) & 0x00FFFFFF);
+        }
+    }
+
+    /**
+     * Sets the key.
+     *
+     * Keys can be of any length.  Rijndael, itself, requires the use of a key that's between 128-bits and 256-bits long and
+     * whose length is a multiple of 32.  If the key is less than 256-bits and the key length isn't set, we round the length
+     * up to the closest valid key length, padding $key with null bytes.  If the key is more than 256-bits, we trim the
+     * excess bits.
+     *
+     * If the key is not explicitly set, it'll be assumed to be all null bytes.
+     *
+     * @access public
+     * @param String $key
+     */
+    function setKey($key)
+    {
+        $this->key = $key;
+        $this->changed = true;
+    }
+
+    /**
+     * Sets the initialization vector. (optional)
+     *
+     * SetIV is not required when CRYPT_RIJNDAEL_MODE_ECB is being used.  If not explictly set, it'll be assumed
+     * to be all zero's.
+     *
+     * @access public
+     * @param String $iv
+     */
+    function setIV($iv)
+    {
+        $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, $this->block_size), $this->block_size, chr(0));
+    }
+
+    /**
+     * Sets the key length
+     *
+     * Valid key lengths are 128, 160, 192, 224, and 256.  If the length is less than 128, it will be rounded up to
+     * 128.  If the length is greater then 128 and invalid, it will be rounded down to the closest valid amount.
+     *
+     * @access public
+     * @param Integer $length
+     */
+    function setKeyLength($length)
+    {
+        $length >>= 5;
+        if ($length > 8) {
+            $length = 8;
+        } else if ($length < 4) {
+            $length = 4;
+        }
+        $this->Nk = $length;
+        $this->key_size = $length << 2;
+
+        $this->explicit_key_length = true;
+        $this->changed = true;
+    }
+
+    /**
+     * Sets the password.
+     *
+     * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:
+     *     {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2}:
+     *         $hash, $salt, $method
+     *     Set $dkLen by calling setKeyLength()
+     *
+     * @param String $password
+     * @param optional String $method
+     * @access public
+     */
+    function setPassword($password, $method = 'pbkdf2')
+    {
+        $key = '';
+
+        switch ($method) {
+            default: // 'pbkdf2'
+                list(, , $hash, $salt, $count) = func_get_args();
+                if (!isset($hash)) {
+                    $hash = 'sha1';
+                }
+                // WPA and WPA2 use the SSID as the salt
+                if (!isset($salt)) {
+                    $salt = 'phpseclib';
+                }
+                // RFC2898#section-4.2 uses 1,000 iterations by default
+                // WPA and WPA2 use 4,096.
+                if (!isset($count)) {
+                    $count = 1000;
+                }
+
+                if (!class_exists('Crypt_Hash')) {
+                    require_once('Crypt/Hash.php');
+                }
+
+                $i = 1;
+                while (strlen($key) < $this->key_size) { // $dkLen == $this->key_size
+                    //$dk.= $this->_pbkdf($password, $salt, $count, $i++);
+                    $hmac = new Crypt_Hash();
+                    $hmac->setHash($hash);
+                    $hmac->setKey($password);
+                    $f = $u = $hmac->hash($salt . pack('N', $i++));
+                    for ($j = 2; $j <= $count; $j++) {
+                        $u = $hmac->hash($u);
+                        $f^= $u;
+                    }
+                    $key.= $f;
+                }
+        }
+
+        $this->setKey(substr($key, 0, $this->key_size));
+    }
+
+    /**
+     * Sets the block length
+     *
+     * Valid block lengths are 128, 160, 192, 224, and 256.  If the length is less than 128, it will be rounded up to
+     * 128.  If the length is greater then 128 and invalid, it will be rounded down to the closest valid amount.
+     *
+     * @access public
+     * @param Integer $length
+     */
+    function setBlockLength($length)
+    {
+        $length >>= 5;
+        if ($length > 8) {
+            $length = 8;
+        } else if ($length < 4) {
+            $length = 4;
+        }
+        $this->Nb = $length;
+        $this->block_size = $length << 2;
+        $this->changed = true;
+    }
+
+    /**
+     * Generate CTR XOR encryption key
+     *
+     * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the
+     * plaintext / ciphertext in CTR mode.
+     *
+     * @see Crypt_Rijndael::decrypt()
+     * @see Crypt_Rijndael::encrypt()
+     * @access public
+     * @param Integer $length
+     * @param String $iv
+     */
+    function _generate_xor($length, &$iv)
+    {
+        $xor = '';
+        $block_size = $this->block_size;
+        $num_blocks = floor(($length + ($block_size - 1)) / $block_size);
+        for ($i = 0; $i < $num_blocks; $i++) {
+            $xor.= $iv;
+            for ($j = 4; $j <= $block_size; $j+=4) {
+                $temp = substr($iv, -$j, 4);
+                switch ($temp) {
+                    case "\xFF\xFF\xFF\xFF":
+                        $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4);
+                        break;
+                    case "\x7F\xFF\xFF\xFF":
+                        $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4);
+                        break 2;
+                    default:
+                        extract(unpack('Ncount', $temp));
+                        $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4);
+                        break 2;
+                }
+            }
+        }
+
+        return $xor;
+    }
+
+    /**
+     * Encrypts a message.
+     *
+     * $plaintext will be padded with additional bytes such that it's length is a multiple of the block size.  Other Rjindael
+     * implementations may or may not pad in the same manner.  Other common approaches to padding and the reasons why it's
+     * necessary are discussed in the following
+     * URL:
+     *
+     * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
+     *
+     * An alternative to padding is to, separately, send the length of the file.  This is what SSH, in fact, does.
+     * strlen($plaintext) will still need to be a multiple of 8, however, arbitrary values can be added to make it that
+     * length.
+     *
+     * @see Crypt_Rijndael::decrypt()
+     * @access public
+     * @param String $plaintext
+     */
+    function encrypt($plaintext)
+    {
+        $this->_setup();
+        if ($this->paddable) {
+            $plaintext = $this->_pad($plaintext);
+        }
+
+        $block_size = $this->block_size;
+        $buffer = &$this->enbuffer;
+        $ciphertext = '';
+        switch ($this->mode) {
+            case CRYPT_RIJNDAEL_MODE_ECB:
+                for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+                    $ciphertext.= $this->_encryptBlock(substr($plaintext, $i, $block_size));
+                }
+                break;
+            case CRYPT_RIJNDAEL_MODE_CBC:
+                $xor = $this->encryptIV;
+                for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+                    $block = substr($plaintext, $i, $block_size);
+                    $block = $this->_encryptBlock($block ^ $xor);
+                    $xor = $block;
+                    $ciphertext.= $block;
+                }
+                if ($this->continuousBuffer) {
+                    $this->encryptIV = $xor;
+                }
+                break;
+            case CRYPT_RIJNDAEL_MODE_CTR:
+                $xor = $this->encryptIV;
+                if (strlen($buffer['encrypted'])) {
+                    for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+                        $block = substr($plaintext, $i, $block_size);
+                        $buffer['encrypted'].= $this->_encryptBlock($this->_generate_xor($block_size, $xor));
+                        $key = $this->_string_shift($buffer['encrypted'], $block_size);
+                        $ciphertext.= $block ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+                        $block = substr($plaintext, $i, $block_size);
+                        $key = $this->_encryptBlock($this->_generate_xor($block_size, $xor));
+                        $ciphertext.= $block ^ $key;
+                    }
+                }
+                if ($this->continuousBuffer) {
+                    $this->encryptIV = $xor;
+                    if ($start = strlen($plaintext) % $block_size) {
+                        $buffer['encrypted'] = substr($key, $start) . $buffer['encrypted'];
+                    }
+                }
+                break;
+            case CRYPT_RIJNDAEL_MODE_CFB:
+                // cfb loosely routines inspired by openssl's:
+                // http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1
+                if ($this->continuousBuffer) {
+                    $iv = &$this->encryptIV;
+                    $pos = &$buffer['pos'];
+                } else {
+                    $iv = $this->encryptIV;
+                    $pos = 0;
+                }
+                $len = strlen($plaintext);
+                $i = 0;
+                if ($pos) {
+                    $orig_pos = $pos;
+                    $max = $block_size - $pos;
+                    if ($len >= $max) {
+                        $i = $max;
+                        $len-= $max;
+                        $pos = 0;
+                    } else {
+                        $i = $len;
+                        $pos+= $len;
+                        $len = 0;
+                    }
+                    // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
+                    $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
+                    $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
+                }
+                while ($len >= $block_size) {
+                    $iv = $this->_encryptBlock($iv) ^ substr($plaintext, $i, $block_size);
+                    $ciphertext.= $iv;
+                    $len-= $block_size;
+                    $i+= $block_size;
+                }
+                if ($len) {
+                    $iv = $this->_encryptBlock($iv);
+                    $block = $iv ^ substr($plaintext, $i);
+                    $iv = substr_replace($iv, $block, 0, $len);
+                    $ciphertext.= $block;
+                    $pos = $len;
+                }
+                break;
+            case CRYPT_RIJNDAEL_MODE_OFB:
+                $xor = $this->encryptIV;
+                if (strlen($buffer['xor'])) {
+                    for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+                        $xor = $this->_encryptBlock($xor);
+                        $buffer['xor'].= $xor;
+                        $key = $this->_string_shift($buffer['xor'], $block_size);
+                        $ciphertext.= substr($plaintext, $i, $block_size) ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+                        $xor = $this->_encryptBlock($xor);
+                        $ciphertext.= substr($plaintext, $i, $block_size) ^ $xor;
+                    }
+                    $key = $xor;
+                }
+                if ($this->continuousBuffer) {
+                    $this->encryptIV = $xor;
+                    if ($start = strlen($plaintext) % $block_size) {
+                         $buffer['xor'] = substr($key, $start) . $buffer['xor'];
+                    }
+                }
+        }
+
+        return $ciphertext;
+    }
+
+    /**
+     * Decrypts a message.
+     *
+     * If strlen($ciphertext) is not a multiple of the block size, null bytes will be added to the end of the string until
+     * it is.
+     *
+     * @see Crypt_Rijndael::encrypt()
+     * @access public
+     * @param String $ciphertext
+     */
+    function decrypt($ciphertext)
+    {
+        $this->_setup();
+
+        if ($this->paddable) {
+            // we pad with chr(0) since that's what mcrypt_generic does.  to quote from http://php.net/function.mcrypt-generic :
+            // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
+            $ciphertext = str_pad($ciphertext, strlen($ciphertext) + ($this->block_size - strlen($ciphertext) % $this->block_size) % $this->block_size, chr(0));
+        }
+
+        $block_size = $this->block_size;
+        $buffer = &$this->debuffer;
+        $plaintext = '';
+        switch ($this->mode) {
+            case CRYPT_RIJNDAEL_MODE_ECB:
+                for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+                    $plaintext.= $this->_decryptBlock(substr($ciphertext, $i, $block_size));
+                }
+                break;
+            case CRYPT_RIJNDAEL_MODE_CBC:
+                $xor = $this->decryptIV;
+                for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+                    $block = substr($ciphertext, $i, $block_size);
+                    $plaintext.= $this->_decryptBlock($block) ^ $xor;
+                    $xor = $block;
+                }
+                if ($this->continuousBuffer) {
+                    $this->decryptIV = $xor;
+                }
+                break;
+            case CRYPT_RIJNDAEL_MODE_CTR:
+                $xor = $this->decryptIV;
+                if (strlen($buffer['ciphertext'])) {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+                        $block = substr($ciphertext, $i, $block_size);
+                        $buffer['ciphertext'].= $this->_encryptBlock($this->_generate_xor($block_size, $xor));
+                        $key = $this->_string_shift($buffer['ciphertext'], $block_size);
+                        $plaintext.= $block ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+                        $block = substr($ciphertext, $i, $block_size);
+                        $key = $this->_encryptBlock($this->_generate_xor($block_size, $xor));
+                        $plaintext.= $block ^ $key;
+                    }
+                }
+                if ($this->continuousBuffer) {
+                    $this->decryptIV = $xor;
+                    if ($start = strlen($ciphertext) % $block_size) {
+                        $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
+                    }
+                }
+                break;
+            case CRYPT_RIJNDAEL_MODE_CFB:
+                if ($this->continuousBuffer) {
+                    $iv = &$this->decryptIV;
+                    $pos = &$buffer['pos'];
+                } else {
+                    $iv = $this->decryptIV;
+                    $pos = 0;
+                }
+                $len = strlen($ciphertext);
+                $i = 0;
+                if ($pos) {
+                    $orig_pos = $pos;
+                    $max = $block_size - $pos;
+                    if ($len >= $max) {
+                        $i = $max;
+                        $len-= $max;
+                        $pos = 0;
+                    } else {
+                        $i = $len;
+                        $pos+= $len;
+                        $len = 0;
+                    }
+                    // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
+                    $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
+                    $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
+                }
+                while ($len >= $block_size) {
+                    $iv = $this->_encryptBlock($iv);
+                    $cb = substr($ciphertext, $i, $block_size);
+                    $plaintext.= $iv ^ $cb;
+                    $iv = $cb;
+                    $len-= $block_size;
+                    $i+= $block_size;
+                }
+                if ($len) {
+                    $iv = $this->_encryptBlock($iv);
+                    $plaintext.= $iv ^ substr($ciphertext, $i);
+                    $iv = substr_replace($iv, substr($ciphertext, $i), 0, $len);
+                    $pos = $len;
+                }
+                break;
+            case CRYPT_RIJNDAEL_MODE_OFB:
+                $xor = $this->decryptIV;
+                if (strlen($buffer['xor'])) {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+                        $xor = $this->_encryptBlock($xor);
+                        $buffer['xor'].= $xor;
+                        $key = $this->_string_shift($buffer['xor'], $block_size);
+                        $plaintext.= substr($ciphertext, $i, $block_size) ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+                        $xor = $this->_encryptBlock($xor);
+                        $plaintext.= substr($ciphertext, $i, $block_size) ^ $xor;
+                    }
+                    $key = $xor;
+                }
+                if ($this->continuousBuffer) {
+                    $this->decryptIV = $xor;
+                    if ($start = strlen($ciphertext) % $block_size) {
+                         $buffer['xor'] = substr($key, $start) . $buffer['xor'];
+                    }
+                }
+        }
+
+        return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+    }
+
+    /**
+     * Encrypts a block
+     *
+     * @access private
+     * @param String $in
+     * @return String
+     */
+    function _encryptBlock($in)
+    {
+        $state = array();
+        $words = unpack('N*word', $in);
+
+        $w = $this->w;
+        $t0 = $this->t0;
+        $t1 = $this->t1;
+        $t2 = $this->t2;
+        $t3 = $this->t3;
+        $Nb = $this->Nb;
+        $Nr = $this->Nr;
+        $c = $this->c;
+
+        // addRoundKey
+        $i = -1;
+        foreach ($words as $word) {
+            $state[] = $word ^ $w[0][++$i];
+        }
+
+        // fips-197.pdf#page=19, "Figure 5. Pseudo Code for the Cipher", states that this loop has four components - 
+        // subBytes, shiftRows, mixColumns, and addRoundKey. fips-197.pdf#page=30, "Implementation Suggestions Regarding 
+        // Various Platforms" suggests that performs enhanced implementations are described in Rijndael-ammended.pdf.
+        // Rijndael-ammended.pdf#page=20, "Implementation aspects / 32-bit processor", discusses such an optimization.
+        // Unfortunately, the description given there is not quite correct.  Per aes.spec.v316.pdf#page=19 [1], 
+        // equation (7.4.7) is supposed to use addition instead of subtraction, so we'll do that here, as well.
+
+        // [1] http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.v316.pdf
+        $temp = array();
+        for ($round = 1; $round < $Nr; ++$round) {
+            $i = 0; // $c[0] == 0
+            $j = $c[1];
+            $k = $c[2];
+            $l = $c[3];
+
+            while ($i < $Nb) {
+                $temp[$i] = $t0[$state[$i] >> 24 & 0x000000FF] ^
+                            $t1[$state[$j] >> 16 & 0x000000FF] ^
+                            $t2[$state[$k] >>  8 & 0x000000FF] ^
+                            $t3[$state[$l]       & 0x000000FF] ^
+                            $w[$round][$i];
+                ++$i;
+                $j = ($j + 1) % $Nb;
+                $k = ($k + 1) % $Nb;
+                $l = ($l + 1) % $Nb;
+            }
+            $state = $temp;
+        }
+
+        // subWord
+        for ($i = 0; $i < $Nb; ++$i) {
+            $state[$i] = $this->_subWord($state[$i]);
+        }
+
+        // shiftRows + addRoundKey
+        $i = 0; // $c[0] == 0
+        $j = $c[1];
+        $k = $c[2];
+        $l = $c[3];
+        while ($i < $Nb) {
+            $temp[$i] = ($state[$i] & 0xFF000000) ^
+                        ($state[$j] & 0x00FF0000) ^
+                        ($state[$k] & 0x0000FF00) ^
+                        ($state[$l] & 0x000000FF) ^
+                         $w[$Nr][$i];
+            ++$i;
+            $j = ($j + 1) % $Nb;
+            $k = ($k + 1) % $Nb;
+            $l = ($l + 1) % $Nb;
+        }
+
+        // 100% ugly switch/case code... but ~5% faster (meaning: ~half second faster de/encrypting 1MB text, tested with php5.4.9 on linux/32bit with an AMD Athlon II P360 CPU) then the commented smart code below. Don't know it's worth or not
+        switch ($Nb) {
+            case 8:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
+            case 7:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
+            case 6:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
+            case 5:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
+            default:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]);
+        }
+        /*
+        $state = $temp;
+
+        array_unshift($state, 'N*');
+
+        return call_user_func_array('pack', $state);
+        */
+    }
+
+    /**
+     * Decrypts a block
+     *
+     * @access private
+     * @param String $in
+     * @return String
+     */
+    function _decryptBlock($in)
+    {
+        $state = array();
+        $words = unpack('N*word', $in);
+
+        $dw = $this->dw;
+        $dt0 = $this->dt0;
+        $dt1 = $this->dt1;
+        $dt2 = $this->dt2;
+        $dt3 = $this->dt3;
+        $Nb = $this->Nb;
+        $Nr = $this->Nr;
+        $c = $this->c;
+
+        // addRoundKey
+        $i = -1;
+        foreach ($words as $word) {
+            $state[] = $word ^ $dw[$Nr][++$i];
+        }
+
+        $temp = array();
+        for ($round = $Nr - 1; $round > 0; --$round) {
+            $i = 0; // $c[0] == 0
+            $j = $Nb - $c[1];
+            $k = $Nb - $c[2];
+            $l = $Nb - $c[3];
+
+            while ($i < $Nb) {
+                $temp[$i] = $dt0[$state[$i] >> 24 & 0x000000FF] ^
+                            $dt1[$state[$j] >> 16 & 0x000000FF] ^
+                            $dt2[$state[$k] >>  8 & 0x000000FF] ^
+                            $dt3[$state[$l]       & 0x000000FF] ^
+                            $dw[$round][$i];
+                ++$i;
+                $j = ($j + 1) % $Nb;
+                $k = ($k + 1) % $Nb;
+                $l = ($l + 1) % $Nb;
+            }
+            $state = $temp;
+        }
+
+        // invShiftRows + invSubWord + addRoundKey
+        $i = 0; // $c[0] == 0
+        $j = $Nb - $c[1];
+        $k = $Nb - $c[2];
+        $l = $Nb - $c[3];
+
+        while ($i < $Nb) {
+            $temp[$i] = $dw[0][$i] ^ 
+                        $this->_invSubWord(($state[$i] & 0xFF000000) | 
+                                           ($state[$j] & 0x00FF0000) | 
+                                           ($state[$k] & 0x0000FF00) | 
+                                           ($state[$l] & 0x000000FF));
+            ++$i;
+            $j = ($j + 1) % $Nb;
+            $k = ($k + 1) % $Nb;
+            $l = ($l + 1) % $Nb;
+        }
+
+        switch ($Nb) {
+            case 8:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
+            case 7:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
+            case 6:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
+            case 5:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
+            default:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]);
+        }
+        /*
+        $state = $temp;
+
+        array_unshift($state, 'N*');
+
+        return call_user_func_array('pack', $state);
+        */
+    }
+
+    /**
+     * Setup Rijndael
+     *
+     * Validates all the variables and calculates $Nr - the number of rounds that need to be performed - and $w - the key
+     * key schedule.
+     *
+     * @access private
+     */
+    function _setup()
+    {
+        // Each number in $rcon is equal to the previous number multiplied by two in Rijndael's finite field.
+        // See http://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplicative_inverse
+        static $rcon = array(0,
+            0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000,
+            0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000,
+            0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000,
+            0x2F000000, 0x5E000000, 0xBC000000, 0x63000000, 0xC6000000,
+            0x97000000, 0x35000000, 0x6A000000, 0xD4000000, 0xB3000000,
+            0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000
+        );
+
+        if (!$this->changed) {
+            return;
+        }
+
+        if (!$this->explicit_key_length) {
+            // we do >> 2, here, and not >> 5, as we do above, since strlen($this->key) tells us the number of bytes - not bits
+            $length = strlen($this->key) >> 2;
+            if ($length > 8) {
+                $length = 8;
+            } else if ($length < 4) {
+                $length = 4;
+            }
+            $this->Nk = $length;
+            $this->key_size = $length << 2;
+        }
+
+        $this->key = str_pad(substr($this->key, 0, $this->key_size), $this->key_size, chr(0));
+        $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($this->iv, 0, $this->block_size), $this->block_size, chr(0));
+
+        // see Rijndael-ammended.pdf#page=44
+        $this->Nr = max($this->Nk, $this->Nb) + 6;
+
+        // shift offsets for Nb = 5, 7 are defined in Rijndael-ammended.pdf#page=44,
+        //     "Table 8: Shift offsets in Shiftrow for the alternative block lengths"
+        // shift offsets for Nb = 4, 6, 8 are defined in Rijndael-ammended.pdf#page=14,
+        //     "Table 2: Shift offsets for different block lengths"
+        switch ($this->Nb) {
+            case 4:
+            case 5:
+            case 6:
+                $this->c = array(0, 1, 2, 3);
+                break;
+            case 7:
+                $this->c = array(0, 1, 2, 4);
+                break;
+            case 8:
+                $this->c = array(0, 1, 3, 4);
+        }
+
+        $key = $this->key;
+
+        $w = array_values(unpack('N*words', $key));
+
+        $length = $this->Nb * ($this->Nr + 1);
+        for ($i = $this->Nk; $i < $length; $i++) {
+            $temp = $w[$i - 1];
+            if ($i % $this->Nk == 0) {
+                // according to <http://php.net/language.types.integer>, "the size of an integer is platform-dependent".
+                // on a 32-bit machine, it's 32-bits, and on a 64-bit machine, it's 64-bits. on a 32-bit machine,
+                // 0xFFFFFFFF << 8 == 0xFFFFFF00, but on a 64-bit machine, it equals 0xFFFFFFFF00. as such, doing 'and'
+                // with 0xFFFFFFFF (or 0xFFFFFF00) on a 32-bit machine is unnecessary, but on a 64-bit machine, it is.
+                $temp = (($temp << 8) & 0xFFFFFF00) | (($temp >> 24) & 0x000000FF); // rotWord
+                $temp = $this->_subWord($temp) ^ $rcon[$i / $this->Nk];
+            } else if ($this->Nk > 6 && $i % $this->Nk == 4) {
+                $temp = $this->_subWord($temp);
+            }
+            $w[$i] = $w[$i - $this->Nk] ^ $temp;
+        }
+
+        // convert the key schedule from a vector of $Nb * ($Nr + 1) length to a matrix with $Nr + 1 rows and $Nb columns
+        // and generate the inverse key schedule.  more specifically,
+        // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=23> (section 5.3.3), 
+        // "The key expansion for the Inverse Cipher is defined as follows:
+        //        1. Apply the Key Expansion.
+        //        2. Apply InvMixColumn to all Round Keys except the first and the last one."
+        // also, see fips-197.pdf#page=27, "5.3.5 Equivalent Inverse Cipher"
+        $temp = array();
+        for ($i = $row = $col = 0; $i < $length; $i++, $col++) {
+            if ($col == $this->Nb) {
+                if ($row == 0) {
+                    $this->dw[0] = $this->w[0];
+                } else {
+                    // subWord + invMixColumn + invSubWord = invMixColumn
+                    $j = 0;
+                    while ($j < $this->Nb) {
+                        $dw = $this->_subWord($this->w[$row][$j]);
+                        $temp[$j] = $this->dt0[$dw >> 24 & 0x000000FF] ^ 
+                                    $this->dt1[$dw >> 16 & 0x000000FF] ^ 
+                                    $this->dt2[$dw >>  8 & 0x000000FF] ^ 
+                                    $this->dt3[$dw       & 0x000000FF];
+                        $j++;
+                    }
+                    $this->dw[$row] = $temp;
+                }
+
+                $col = 0;
+                $row++;
+            }
+            $this->w[$row][$col] = $w[$i];
+        }
+
+        $this->dw[$row] = $this->w[$row];
+
+        $this->changed = false;
+    }
+
+    /**
+     * Performs S-Box substitutions
+     *
+     * @access private
+     */
+    function _subWord($word)
+    {
+        static $sbox0, $sbox1, $sbox2, $sbox3;
+
+        if (empty($sbox0)) {
+            $sbox0 = array(
+                0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
+                0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
+                0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
+                0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
+                0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
+                0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
+                0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
+                0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
+                0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
+                0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
+                0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
+                0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
+                0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
+                0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
+                0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
+                0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
+            );
+
+            $sbox1 = array();
+            $sbox2 = array();
+            $sbox3 = array();
+
+            for ($i = 0; $i < 256; $i++) {
+                $sbox1[] = $sbox0[$i] <<  8;
+                $sbox2[] = $sbox0[$i] << 16;
+                $sbox3[] = $sbox0[$i] << 24;
+            }
+        }
+
+        return $sbox0[$word       & 0x000000FF] |
+               $sbox1[$word >>  8 & 0x000000FF] |
+               $sbox2[$word >> 16 & 0x000000FF] |
+               $sbox3[$word >> 24 & 0x000000FF];
+    }
+    
+
+    /**
+     * Performs inverse S-Box substitutions
+     *
+     * @access private
+     */
+    function _invSubWord($word)
+    {
+        static $sbox0, $sbox1, $sbox2, $sbox3;
+
+        if (empty($sbox0)) {
+            $sbox0 = array(
+                0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
+                0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
+                0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
+                0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
+                0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
+                0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
+                0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
+                0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
+                0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
+                0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
+                0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
+                0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
+                0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
+                0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
+                0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
+                0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
+            );
+
+            $sbox1 = array();
+            $sbox2 = array();
+            $sbox3 = array();
+
+            for ($i = 0; $i < 256; $i++) {
+                $sbox1[] = $sbox0[$i] <<  8;
+                $sbox2[] = $sbox0[$i] << 16;
+                $sbox3[] = $sbox0[$i] << 24;
+            }
+        }
+
+        return $sbox0[$word       & 0x000000FF] |
+               $sbox1[$word >>  8 & 0x000000FF] |
+               $sbox2[$word >> 16 & 0x000000FF] |
+               $sbox3[$word >> 24 & 0x000000FF];
+    }
+
+    /**
+     * Pad "packets".
+     *
+     * Rijndael works by encrypting between sixteen and thirty-two bytes at a time, provided that number is also a multiple
+     * of four.  If you ever need to encrypt or decrypt something that isn't of the proper length, it becomes necessary to
+     * pad the input so that it is of the proper length.
+     *
+     * Padding is enabled by default.  Sometimes, however, it is undesirable to pad strings.  Such is the case in SSH,
+     * where "packets" are padded with random bytes before being encrypted.  Unpad these packets and you risk stripping
+     * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
+     * transmitted separately)
+     *
+     * @see Crypt_Rijndael::disablePadding()
+     * @access public
+     */
+    function enablePadding()
+    {
+        $this->padding = true;
+    }
+
+    /**
+     * Do not pad packets.
+     *
+     * @see Crypt_Rijndael::enablePadding()
+     * @access public
+     */
+    function disablePadding()
+    {
+        $this->padding = false;
+    }
+
+    /**
+     * Pads a string
+     *
+     * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize.
+     * $block_size - (strlen($text) % $block_size) bytes are added, each of which is equal to 
+     * chr($block_size - (strlen($text) % $block_size)
+     *
+     * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
+     * and padding will, hence forth, be enabled.
+     *
+     * @see Crypt_Rijndael::_unpad()
+     * @access private
+     */
+    function _pad($text)
+    {
+        $length = strlen($text);
+
+        if (!$this->padding) {
+            if ($length % $this->block_size == 0) {
+                return $text;
+            } else {
+                user_error("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size})");
+                $this->padding = true;
+            }
+        }
+
+        $pad = $this->block_size - ($length % $this->block_size);
+
+        return str_pad($text, $length + $pad, chr($pad));
+    }
+
+    /**
+     * Unpads a string.
+     *
+     * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
+     * and false will be returned.
+     *
+     * @see Crypt_Rijndael::_pad()
+     * @access private
+     */
+    function _unpad($text)
+    {
+        if (!$this->padding) {
+            return $text;
+        }
+
+        $length = ord($text[strlen($text) - 1]);
+
+        if (!$length || $length > $this->block_size) {
+            return false;
+        }
+
+        return substr($text, 0, -$length);
+    }
+
+    /**
+     * Treat consecutive "packets" as if they are a continuous buffer.
+     *
+     * Say you have a 32-byte plaintext $plaintext.  Using the default behavior, the two following code snippets
+     * will yield different outputs:
+     *
+     * <code>
+     *    echo $rijndael->encrypt(substr($plaintext,  0, 16));
+     *    echo $rijndael->encrypt(substr($plaintext, 16, 16));
+     * </code>
+     * <code>
+     *    echo $rijndael->encrypt($plaintext);
+     * </code>
+     *
+     * The solution is to enable the continuous buffer.  Although this will resolve the above discrepancy, it creates
+     * another, as demonstrated with the following:
+     *
+     * <code>
+     *    $rijndael->encrypt(substr($plaintext, 0, 16));
+     *    echo $rijndael->decrypt($des->encrypt(substr($plaintext, 16, 16)));
+     * </code>
+     * <code>
+     *    echo $rijndael->decrypt($des->encrypt(substr($plaintext, 16, 16)));
+     * </code>
+     *
+     * With the continuous buffer disabled, these would yield the same output.  With it enabled, they yield different
+     * outputs.  The reason is due to the fact that the initialization vector's change after every encryption /
+     * decryption round when the continuous buffer is enabled.  When it's disabled, they remain constant.
+     *
+     * Put another way, when the continuous buffer is enabled, the state of the Crypt_Rijndael() object changes after each
+     * encryption / decryption round, whereas otherwise, it'd remain constant.  For this reason, it's recommended that
+     * continuous buffers not be used.  They do offer better security and are, in fact, sometimes required (SSH uses them),
+     * however, they are also less intuitive and more likely to cause you problems.
+     *
+     * @see Crypt_Rijndael::disableContinuousBuffer()
+     * @access public
+     */
+    function enableContinuousBuffer()
+    {
+        $this->continuousBuffer = true;
+    }
+
+    /**
+     * Treat consecutive packets as if they are a discontinuous buffer.
+     *
+     * The default behavior.
+     *
+     * @see Crypt_Rijndael::enableContinuousBuffer()
+     * @access public
+     */
+    function disableContinuousBuffer()
+    {
+        $this->continuousBuffer = false;
+        $this->encryptIV = $this->iv;
+        $this->decryptIV = $this->iv;
+        $this->enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0);
+        $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0);
+    }
+
+    /**
+     * String Shift
+     *
+     * Inspired by array_shift
+     *
+     * @param String $string
+     * @param optional Integer $index
+     * @return String
+     * @access private
+     */
+    function _string_shift(&$string, $index = 1)
+    {
+        $substr = substr($string, 0, $index);
+        $string = substr($string, $index);
+        return $substr;
+    }
+}
+
+// vim: ts=4:sw=4:et:
+// vim6: fdl=1:
\ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/TripleDES.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/TripleDES.php
new file mode 100644
index 0000000000000000000000000000000000000000..3b4c8c3622fdd4e275b24c50543cf03cd72c6ccd
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Crypt/TripleDES.php
@@ -0,0 +1,1080 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of Triple DES.
+ *
+ * Uses mcrypt, if available, and an internal implementation, otherwise.  Operates in the EDE3 mode (encrypt-decrypt-encrypt).
+ *
+ * PHP versions 4 and 5
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ *    include('Crypt/TripleDES.php');
+ *
+ *    $des = new Crypt_TripleDES();
+ *
+ *    $des->setKey('abcdefghijklmnopqrstuvwx');
+ *
+ *    $size = 10 * 1024;
+ *    $plaintext = '';
+ *    for ($i = 0; $i < $size; $i++) {
+ *        $plaintext.= 'a';
+ *    }
+ *
+ *    echo $des->decrypt($des->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category   Crypt
+ * @package    Crypt_TripleDES
+ * @author     Jim Wigginton <terrafrost@php.net>
+ * @copyright  MMVII Jim Wigginton
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @version    $Id: TripleDES.php,v 1.13 2010/02/26 03:40:25 terrafrost Exp $
+ * @link       http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Crypt_DES
+ */
+if (!class_exists('Crypt_DES')) {
+    require_once('DES.php');
+}
+
+/**
+ * Encrypt / decrypt using inner chaining
+ *
+ * Inner chaining is used by SSH-1 and is generally considered to be less secure then outer chaining (CRYPT_DES_MODE_CBC3).
+ */
+define('CRYPT_DES_MODE_3CBC', -2);
+
+/**
+ * Encrypt / decrypt using outer chaining
+ *
+ * Outer chaining is used by SSH-2 and when the mode is set to CRYPT_DES_MODE_CBC.
+ */
+define('CRYPT_DES_MODE_CBC3', CRYPT_DES_MODE_CBC);
+
+/**
+ * Pure-PHP implementation of Triple DES.
+ *
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access  public
+ * @package Crypt_TerraDES
+ */
+class Crypt_TripleDES {
+    /**
+     * The Three Keys
+     *
+     * @see Crypt_TripleDES::setKey()
+     * @var String
+     * @access private
+     */
+    var $key = "\0\0\0\0\0\0\0\0";
+
+    /**
+     * The Encryption Mode
+     *
+     * @see Crypt_TripleDES::Crypt_TripleDES()
+     * @var Integer
+     * @access private
+     */
+    var $mode = CRYPT_DES_MODE_CBC;
+
+    /**
+     * Continuous Buffer status
+     *
+     * @see Crypt_TripleDES::enableContinuousBuffer()
+     * @var Boolean
+     * @access private
+     */
+    var $continuousBuffer = false;
+
+    /**
+     * Padding status
+     *
+     * @see Crypt_TripleDES::enablePadding()
+     * @var Boolean
+     * @access private
+     */
+    var $padding = true;
+
+    /**
+     * The Initialization Vector
+     *
+     * @see Crypt_TripleDES::setIV()
+     * @var String
+     * @access private
+     */
+    var $iv = "\0\0\0\0\0\0\0\0";
+
+    /**
+     * A "sliding" Initialization Vector
+     *
+     * @see Crypt_TripleDES::enableContinuousBuffer()
+     * @var String
+     * @access private
+     */
+    var $encryptIV = "\0\0\0\0\0\0\0\0";
+
+    /**
+     * A "sliding" Initialization Vector
+     *
+     * @see Crypt_TripleDES::enableContinuousBuffer()
+     * @var String
+     * @access private
+     */
+    var $decryptIV = "\0\0\0\0\0\0\0\0";
+
+    /**
+     * The Crypt_DES objects
+     *
+     * @var Array
+     * @access private
+     */
+    var $des;
+
+    /**
+     * mcrypt resource for encryption
+     *
+     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+     *
+     * @see Crypt_TripleDES::encrypt()
+     * @var String
+     * @access private
+     */
+    var $enmcrypt;
+
+    /**
+     * mcrypt resource for decryption
+     *
+     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+     *
+     * @see Crypt_TripleDES::decrypt()
+     * @var String
+     * @access private
+     */
+    var $demcrypt;
+
+    /**
+     * Does the enmcrypt resource need to be (re)initialized?
+     *
+     * @see Crypt_TripleDES::setKey()
+     * @see Crypt_TripleDES::setIV()
+     * @var Boolean
+     * @access private
+     */
+    var $enchanged = true;
+
+    /**
+     * Does the demcrypt resource need to be (re)initialized?
+     *
+     * @see Crypt_TripleDES::setKey()
+     * @see Crypt_TripleDES::setIV()
+     * @var Boolean
+     * @access private
+     */
+    var $dechanged = true;
+
+    /**
+     * Is the mode one that is paddable?
+     *
+     * @see Crypt_TripleDES::Crypt_TripleDES()
+     * @var Boolean
+     * @access private
+     */
+    var $paddable = false;
+
+    /**
+     * Encryption buffer for CTR, OFB and CFB modes
+     *
+     * @see Crypt_TripleDES::encrypt()
+     * @var Array
+     * @access private
+     */
+    var $enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true);
+
+    /**
+     * Decryption buffer for CTR, OFB and CFB modes
+     *
+     * @see Crypt_TripleDES::decrypt()
+     * @var Array
+     * @access private
+     */
+    var $debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'demcrypt_init' => true);
+
+    /**
+     * mcrypt resource for CFB mode
+     *
+     * @see Crypt_TripleDES::encrypt()
+     * @see Crypt_TripleDES::decrypt()
+     * @var String
+     * @access private
+     */
+    var $ecb;
+
+    /**
+     * Default Constructor.
+     *
+     * Determines whether or not the mcrypt extension should be used.  $mode should only, at present, be
+     * CRYPT_DES_MODE_ECB or CRYPT_DES_MODE_CBC.  If not explictly set, CRYPT_DES_MODE_CBC will be used.
+     *
+     * @param optional Integer $mode
+     * @return Crypt_TripleDES
+     * @access public
+     */
+    function Crypt_TripleDES($mode = CRYPT_DES_MODE_CBC)
+    {
+        if ( !defined('CRYPT_DES_MODE') ) {
+            switch (true) {
+                case extension_loaded('mcrypt') && in_array('tripledes', mcrypt_list_algorithms()):
+                    define('CRYPT_DES_MODE', CRYPT_DES_MODE_MCRYPT);
+                    break;
+                default:
+                    define('CRYPT_DES_MODE', CRYPT_DES_MODE_INTERNAL);
+            }
+        }
+
+        if ( $mode == CRYPT_DES_MODE_3CBC ) {
+            $this->mode = CRYPT_DES_MODE_3CBC;
+            $this->des = array(
+                new Crypt_DES(CRYPT_DES_MODE_CBC),
+                new Crypt_DES(CRYPT_DES_MODE_CBC),
+                new Crypt_DES(CRYPT_DES_MODE_CBC)
+            );
+            $this->paddable = true;
+
+            // we're going to be doing the padding, ourselves, so disable it in the Crypt_DES objects
+            $this->des[0]->disablePadding();
+            $this->des[1]->disablePadding();
+            $this->des[2]->disablePadding();
+
+            return;
+        }
+
+        switch ( CRYPT_DES_MODE ) {
+            case CRYPT_DES_MODE_MCRYPT:
+                switch ($mode) {
+                    case CRYPT_DES_MODE_ECB:
+                        $this->paddable = true;
+                        $this->mode = MCRYPT_MODE_ECB;
+                        break;
+                    case CRYPT_DES_MODE_CTR:
+                        $this->mode = 'ctr';
+                        break;
+                    case CRYPT_DES_MODE_CFB:
+                        $this->mode = 'ncfb';
+                        $this->ecb = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
+                        break;
+                    case CRYPT_DES_MODE_OFB:
+                        $this->mode = MCRYPT_MODE_NOFB;
+                        break;
+                    case CRYPT_DES_MODE_CBC:
+                    default:
+                        $this->paddable = true;
+                        $this->mode = MCRYPT_MODE_CBC;
+                }
+                $this->enmcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, '');
+                $this->demcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, '');
+
+                break;
+            default:
+                $this->des = array(
+                    new Crypt_DES(CRYPT_DES_MODE_ECB),
+                    new Crypt_DES(CRYPT_DES_MODE_ECB),
+                    new Crypt_DES(CRYPT_DES_MODE_ECB)
+                );
+ 
+                // we're going to be doing the padding, ourselves, so disable it in the Crypt_DES objects
+                $this->des[0]->disablePadding();
+                $this->des[1]->disablePadding();
+                $this->des[2]->disablePadding();
+
+                switch ($mode) {
+                    case CRYPT_DES_MODE_ECB:
+                    case CRYPT_DES_MODE_CBC:
+                        $this->paddable = true;
+                        $this->mode = $mode;
+                        break;
+                    case CRYPT_DES_MODE_CTR:
+                    case CRYPT_DES_MODE_CFB:
+                    case CRYPT_DES_MODE_OFB:
+                        $this->mode = $mode;
+                        break;
+                    default:
+                        $this->paddable = true;
+                        $this->mode = CRYPT_DES_MODE_CBC;
+                }
+        }
+    }
+
+    /**
+     * Sets the key.
+     *
+     * Keys can be of any length.  Triple DES, itself, can use 128-bit (eg. strlen($key) == 16) or
+     * 192-bit (eg. strlen($key) == 24) keys.  This function pads and truncates $key as appropriate.
+     *
+     * DES also requires that every eighth bit be a parity bit, however, we'll ignore that.
+     *
+     * If the key is not explicitly set, it'll be assumed to be all zero's.
+     *
+     * @access public
+     * @param String $key
+     */
+    function setKey($key)
+    {
+        $length = strlen($key);
+        if ($length > 8) {
+            $key = str_pad($key, 24, chr(0));
+            // if $key is between 64 and 128-bits, use the first 64-bits as the last, per this:
+            // http://php.net/function.mcrypt-encrypt#47973
+            //$key = $length <= 16 ? substr_replace($key, substr($key, 0, 8), 16) : substr($key, 0, 24);
+        } else {
+            $key = str_pad($key, 8, chr(0));
+        }
+        $this->key = $key;
+        switch (true) {
+            case CRYPT_DES_MODE == CRYPT_DES_MODE_INTERNAL:
+            case $this->mode == CRYPT_DES_MODE_3CBC:
+                $this->des[0]->setKey(substr($key,  0, 8));
+                $this->des[1]->setKey(substr($key,  8, 8));
+                $this->des[2]->setKey(substr($key, 16, 8));
+        }
+        $this->enchanged = $this->dechanged = true;
+    }
+
+    /**
+     * Sets the password.
+     *
+     * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:
+     *     {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2}:
+     *         $hash, $salt, $method
+     *
+     * @param String $password
+     * @param optional String $method
+     * @access public
+     */
+    function setPassword($password, $method = 'pbkdf2')
+    {
+        $key = '';
+
+        switch ($method) {
+            default: // 'pbkdf2'
+                list(, , $hash, $salt, $count) = func_get_args();
+                if (!isset($hash)) {
+                    $hash = 'sha1';
+                }
+                // WPA and WPA2 use the SSID as the salt
+                if (!isset($salt)) {
+                    $salt = 'phpseclib';
+                }
+                // RFC2898#section-4.2 uses 1,000 iterations by default
+                // WPA and WPA2 use 4,096.
+                if (!isset($count)) {
+                    $count = 1000;
+                }
+
+                if (!class_exists('Crypt_Hash')) {
+                    require_once('Crypt/Hash.php');
+                }
+
+                $i = 1;
+                while (strlen($key) < 24) { // $dkLen == 24
+                    $hmac = new Crypt_Hash();
+                    $hmac->setHash($hash);
+                    $hmac->setKey($password);
+                    $f = $u = $hmac->hash($salt . pack('N', $i++));
+                    for ($j = 2; $j <= $count; $j++) {
+                        $u = $hmac->hash($u);
+                        $f^= $u;
+                    }
+                    $key.= $f;
+                }
+        }
+
+        $this->setKey($key);
+    }
+
+    /**
+     * Sets the initialization vector. (optional)
+     *
+     * SetIV is not required when CRYPT_DES_MODE_ECB is being used.  If not explictly set, it'll be assumed
+     * to be all zero's.
+     *
+     * @access public
+     * @param String $iv
+     */
+    function setIV($iv)
+    {
+        $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, 8), 8, chr(0));
+        if ($this->mode == CRYPT_DES_MODE_3CBC) {
+            $this->des[0]->setIV($iv);
+            $this->des[1]->setIV($iv);
+            $this->des[2]->setIV($iv);
+        }
+        $this->enchanged = $this->dechanged = true;
+    }
+
+    /**
+     * Generate CTR XOR encryption key
+     *
+     * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the
+     * plaintext / ciphertext in CTR mode.
+     *
+     * @see Crypt_TripleDES::decrypt()
+     * @see Crypt_TripleDES::encrypt()
+     * @access private
+     * @param String $iv
+     */
+    function _generate_xor(&$iv)
+    {
+        $xor = $iv;
+        for ($j = 4; $j <= 8; $j+=4) {
+            $temp = substr($iv, -$j, 4);
+            switch ($temp) {
+                case "\xFF\xFF\xFF\xFF":
+                    $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4);
+                    break;
+                case "\x7F\xFF\xFF\xFF":
+                    $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4);
+                    break 2;
+                default:
+                    extract(unpack('Ncount', $temp));
+                    $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4);
+                    break 2;
+            }
+        }
+
+        return $xor;
+    }
+
+    /**
+     * Encrypts a message.
+     *
+     * @access public
+     * @param String $plaintext
+     */
+    function encrypt($plaintext)
+    {
+        if ($this->paddable) {
+            $plaintext = $this->_pad($plaintext);
+        }
+
+        // if the key is smaller then 8, do what we'd normally do
+        if ($this->mode == CRYPT_DES_MODE_3CBC && strlen($this->key) > 8) {
+            $ciphertext = $this->des[2]->encrypt($this->des[1]->decrypt($this->des[0]->encrypt($plaintext)));
+
+            return $ciphertext;
+        }
+
+        if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
+            if ($this->enchanged) {
+                mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
+                if ($this->mode == 'ncfb') {
+                    mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0");
+                }
+                $this->enchanged = false;
+            }
+
+            if ($this->mode != 'ncfb' || !$this->continuousBuffer) {
+                $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);
+            } else {
+                $iv = &$this->encryptIV;
+                $pos = &$this->enbuffer['pos'];
+                $len = strlen($plaintext);
+                $ciphertext = '';
+                $i = 0;
+                if ($pos) {
+                    $orig_pos = $pos;
+                    $max = 8 - $pos;
+                    if ($len >= $max) {
+                        $i = $max;
+                        $len-= $max;
+                        $pos = 0;
+                    } else {
+                        $i = $len;
+                        $pos+= $len;
+                        $len = 0;
+                    }
+                    $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
+                    $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
+                    $this->enbuffer['enmcrypt_init'] = true;
+                }
+                if ($len >= 8) {
+                    if ($this->enbuffer['enmcrypt_init'] === false || $len > 950) {
+                        if ($this->enbuffer['enmcrypt_init'] === true) {
+                            mcrypt_generic_init($this->enmcrypt, $this->key, $iv);
+                            $this->enbuffer['enmcrypt_init'] = false;
+                        }
+                        $ciphertext.= mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % 8));
+                        $iv = substr($ciphertext, -8);
+                        $i = strlen($ciphertext);
+                        $len%= 8;
+                    } else {
+                        while ($len >= 8) {
+                            $iv = mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, 8);
+                            $ciphertext.= $iv;
+                            $len-= 8;
+                            $i+= 8;
+                        }
+                    }
+                } 
+                if ($len) {
+                    $iv = mcrypt_generic($this->ecb, $iv);
+                    $block = $iv ^ substr($plaintext, $i);
+                    $iv = substr_replace($iv, $block, 0, $len);
+                    $ciphertext.= $block;
+                    $pos = $len;
+                }
+                return $ciphertext;
+            }
+
+            if (!$this->continuousBuffer) {
+                mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
+            }
+
+            return $ciphertext;
+        }
+
+        if (strlen($this->key) <= 8) {
+            $this->des[0]->mode = $this->mode;
+
+            return $this->des[0]->encrypt($plaintext);
+        }
+
+        $des = $this->des;
+
+        $buffer = &$this->enbuffer;
+        $continuousBuffer = $this->continuousBuffer;
+        $ciphertext = '';
+        switch ($this->mode) {
+            case CRYPT_DES_MODE_ECB:
+                for ($i = 0; $i < strlen($plaintext); $i+=8) {
+                    $block = substr($plaintext, $i, 8);
+                    // all of these _processBlock calls could, in theory, be put in a function - say Crypt_TripleDES::_ede_encrypt() or something.
+                    // only problem with that: it would slow encryption and decryption down.  $this->des would have to be called every time that
+                    // function is called, instead of once for the whole string of text that's being encrypted, which would, in turn, make 
+                    // encryption and decryption take more time, per this:
+                    //
+                    // http://blog.libssh2.org/index.php?/archives/21-Compiled-Variables.html
+                    $block = $des[0]->_processBlock($block, CRYPT_DES_ENCRYPT);
+                    $block = $des[1]->_processBlock($block, CRYPT_DES_DECRYPT);
+                    $block = $des[2]->_processBlock($block, CRYPT_DES_ENCRYPT);
+                    $ciphertext.= $block;
+                }
+                break;
+            case CRYPT_DES_MODE_CBC:
+                $xor = $this->encryptIV;
+                for ($i = 0; $i < strlen($plaintext); $i+=8) {
+                    $block = substr($plaintext, $i, 8) ^ $xor;
+                    $block = $des[0]->_processBlock($block, CRYPT_DES_ENCRYPT);
+                    $block = $des[1]->_processBlock($block, CRYPT_DES_DECRYPT);
+                    $block = $des[2]->_processBlock($block, CRYPT_DES_ENCRYPT);
+                    $xor = $block;
+                    $ciphertext.= $block;
+                }
+                if ($this->continuousBuffer) {
+                    $this->encryptIV = $xor;
+                }
+                break;
+            case CRYPT_DES_MODE_CTR:
+                $xor = $this->encryptIV;
+                if (strlen($buffer['encrypted'])) {
+                    for ($i = 0; $i < strlen($plaintext); $i+=8) {
+                        $block = substr($plaintext, $i, 8);
+                        $key = $this->_generate_xor($xor);
+                        $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT);
+                        $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT);
+                        $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT);
+                        $buffer['encrypted'].= $key;
+                        $key = $this->_string_shift($buffer['encrypted'], 8);
+                        $ciphertext.= $block ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($plaintext); $i+=8) {
+                        $block = substr($plaintext, $i, 8);
+                        $key = $this->_generate_xor($xor);
+                        $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT);
+                        $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT);
+                        $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT);
+                        $ciphertext.= $block ^ $key;
+                    }
+                }
+                if ($this->continuousBuffer) {
+                    $this->encryptIV = $xor;
+                    if ($start = strlen($plaintext) & 7) {
+                        $buffer['encrypted'] = substr($key, $start) . $buffer['encrypted'];
+                    }
+                }
+                break;
+            case CRYPT_DES_MODE_CFB:
+                if (strlen($buffer['xor'])) {
+                    $ciphertext = $plaintext ^ $buffer['xor'];
+                    $iv = $buffer['encrypted'] . $ciphertext;
+                    $start = strlen($ciphertext);
+                    $buffer['encrypted'].= $ciphertext;
+                    $buffer['xor'] = substr($buffer['xor'], strlen($ciphertext));
+                } else {
+                    $ciphertext = '';
+                    $iv = $this->encryptIV;
+                    $start = 0;
+                }
+
+                for ($i = $start; $i < strlen($plaintext); $i+=8) {
+                    $block = substr($plaintext, $i, 8);
+                    $iv = $des[0]->_processBlock($iv, CRYPT_DES_ENCRYPT);
+                    $iv = $des[1]->_processBlock($iv, CRYPT_DES_DECRYPT);
+                    $xor= $des[2]->_processBlock($iv, CRYPT_DES_ENCRYPT);
+
+                    $iv = $block ^ $xor;
+                    if ($continuousBuffer && strlen($iv) != 8) {
+                        $buffer = array(
+                            'encrypted' => $iv,
+                            'xor' => substr($xor, strlen($iv))
+                        );
+                    }
+                    $ciphertext.= $iv;
+                }
+
+                if ($this->continuousBuffer) {
+                    $this->encryptIV = $iv;
+                }
+                break;
+            case CRYPT_DES_MODE_OFB:
+                $xor = $this->encryptIV;
+                if (strlen($buffer['xor'])) {
+                    for ($i = 0; $i < strlen($plaintext); $i+=8) {
+                        $xor = $des[0]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+                        $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT);
+                        $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+                        $buffer['xor'].= $xor;
+                        $key = $this->_string_shift($buffer['xor'], 8);
+                        $ciphertext.= substr($plaintext, $i, 8) ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($plaintext); $i+=8) {
+                        $xor = $des[0]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+                        $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT);
+                        $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+                        $ciphertext.= substr($plaintext, $i, 8) ^ $xor;
+                    }
+                    $key = $xor;
+                }
+                if ($this->continuousBuffer) {
+                    $this->encryptIV = $xor;
+                    if ($start = strlen($plaintext) & 7) {
+                         $buffer['xor'] = substr($key, $start) . $buffer['xor'];
+                    }
+                }
+        }
+
+        return $ciphertext;
+    }
+
+    /**
+     * Decrypts a message.
+     *
+     * @access public
+     * @param String $ciphertext
+     */
+    function decrypt($ciphertext)
+    {
+        if ($this->mode == CRYPT_DES_MODE_3CBC && strlen($this->key) > 8) {
+            $plaintext = $this->des[0]->decrypt($this->des[1]->encrypt($this->des[2]->decrypt($ciphertext)));
+
+            return $this->_unpad($plaintext);
+        }
+
+        if ($this->paddable) {
+            // we pad with chr(0) since that's what mcrypt_generic does.  to quote from http://php.net/function.mcrypt-generic :
+            // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
+            $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, chr(0));
+        }
+
+        if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
+            if ($this->dechanged) {
+                mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
+                if ($this->mode == 'ncfb') {
+                    mcrypt_generic_init($this->ecb, $this->key, "\0\0\0\0\0\0\0\0");
+                }
+                $this->dechanged = false;
+            }
+
+            if ($this->mode != 'ncfb' || !$this->continuousBuffer) {
+                $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);
+            } else {
+                $iv = &$this->decryptIV;
+                $pos = &$this->debuffer['pos'];
+                $len = strlen($ciphertext);
+                $plaintext = '';
+                $i = 0;
+                if ($pos) {
+                    $orig_pos = $pos;
+                    $max = 8 - $pos;
+                    if ($len >= $max) {
+                        $i = $max;
+                        $len-= $max;
+                        $pos = 0;
+                    } else {
+                        $i = $len;
+                        $pos+= $len;
+                        $len = 0;
+                    }
+                    $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
+                    $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
+                }
+                if ($len >= 8) {
+                    $cb = substr($ciphertext, $i, $len - $len % 8);
+                    $plaintext.= mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;
+                    $iv = substr($cb, -8);
+                    $len%= 8;
+                }
+                if ($len) {
+                    $iv = mcrypt_generic($this->ecb, $iv);
+                    $cb = substr($ciphertext, -$len);
+                    $plaintext.= $iv ^ $cb;
+                    $iv = substr_replace($iv, $cb, 0, $len);
+                    $pos = $len;
+                }
+                return $plaintext;
+            }
+
+            if (!$this->continuousBuffer) {
+                mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
+            }
+
+            return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+        }
+
+        if (strlen($this->key) <= 8) {
+            $this->des[0]->mode = $this->mode;
+            $plaintext = $this->des[0]->decrypt($ciphertext);
+            return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+        }
+
+        $des = $this->des;
+
+        $buffer = &$this->debuffer;
+        $continuousBuffer = $this->continuousBuffer;
+        $plaintext = '';
+        switch ($this->mode) {
+            case CRYPT_DES_MODE_ECB:
+                for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+                    $block = substr($ciphertext, $i, 8);
+                    $block = $des[2]->_processBlock($block, CRYPT_DES_DECRYPT);
+                    $block = $des[1]->_processBlock($block, CRYPT_DES_ENCRYPT);
+                    $block = $des[0]->_processBlock($block, CRYPT_DES_DECRYPT);
+                    $plaintext.= $block;
+                }
+                break;
+            case CRYPT_DES_MODE_CBC:
+                $xor = $this->decryptIV;
+                for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+                    $orig = $block = substr($ciphertext, $i, 8);
+                    $block = $des[2]->_processBlock($block, CRYPT_DES_DECRYPT);
+                    $block = $des[1]->_processBlock($block, CRYPT_DES_ENCRYPT);
+                    $block = $des[0]->_processBlock($block, CRYPT_DES_DECRYPT);
+                    $plaintext.= $block ^ $xor;
+                    $xor = $orig;
+                }
+                if ($this->continuousBuffer) {
+                    $this->decryptIV = $xor;
+                }
+                break;
+            case CRYPT_DES_MODE_CTR:
+                $xor = $this->decryptIV;
+                if (strlen($buffer['ciphertext'])) {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+                        $block = substr($ciphertext, $i, 8);
+                        $key = $this->_generate_xor($xor);
+                        $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT);
+                        $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT);
+                        $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT);
+                        $buffer['ciphertext'].= $key;
+                        $key = $this->_string_shift($buffer['ciphertext'], 8);
+                        $plaintext.= $block ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+                        $block = substr($ciphertext, $i, 8);
+                        $key = $this->_generate_xor($xor);
+                        $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT);
+                        $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT);
+                        $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT);
+                        $plaintext.= $block ^ $key;
+                    }
+                }
+                if ($this->continuousBuffer) {
+                    $this->decryptIV = $xor;
+                    if ($start = strlen($plaintext) & 7) {
+                        $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
+                    }
+                }
+                break;
+            case CRYPT_DES_MODE_CFB:
+                if (strlen($buffer['ciphertext'])) {
+                    $plaintext = $ciphertext ^ substr($this->decryptIV, strlen($buffer['ciphertext']));
+                    $buffer['ciphertext'].= substr($ciphertext, 0, strlen($plaintext));
+                    if (strlen($buffer['ciphertext']) != 8) {
+                        $block = $this->decryptIV;
+                    } else {
+                        $block = $buffer['ciphertext'];
+                        $xor = $des[0]->_processBlock($buffer['ciphertext'], CRYPT_DES_ENCRYPT);
+                        $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT);
+                        $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+                        $buffer['ciphertext'] = '';
+                    }
+                    $start = strlen($plaintext);
+                } else {
+                    $plaintext = '';
+                    $xor = $des[0]->_processBlock($this->decryptIV, CRYPT_DES_ENCRYPT);
+                    $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT);
+                    $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+                    $start = 0;
+                }
+
+                for ($i = $start; $i < strlen($ciphertext); $i+=8) {
+                    $block = substr($ciphertext, $i, 8);
+                    $plaintext.= $block ^ $xor;
+                    if ($continuousBuffer && strlen($block) != 8) {
+                        $buffer['ciphertext'].= $block;
+                        $block = $xor;
+                    } else if (strlen($block) == 8) {
+                        $xor = $des[0]->_processBlock($block, CRYPT_DES_ENCRYPT);
+                        $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT);
+                        $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+                    }
+                }
+                if ($this->continuousBuffer) {
+                    $this->decryptIV = $block;
+                }
+                break;
+            case CRYPT_DES_MODE_OFB:
+                $xor = $this->decryptIV;
+                if (strlen($buffer['xor'])) {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+                        $xor = $des[0]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+                        $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT);
+                        $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+                        $buffer['xor'].= $xor;
+                        $key = $this->_string_shift($buffer['xor'], 8);
+                        $plaintext.= substr($ciphertext, $i, 8) ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+                        $xor = $des[0]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+                        $xor = $des[1]->_processBlock($xor, CRYPT_DES_DECRYPT);
+                        $xor = $des[2]->_processBlock($xor, CRYPT_DES_ENCRYPT);
+                        $plaintext.= substr($ciphertext, $i, 8) ^ $xor;
+                    }
+                    $key = $xor;
+                }
+                if ($this->continuousBuffer) {
+                    $this->decryptIV = $xor;
+                    if ($start = strlen($ciphertext) & 7) {
+                         $buffer['xor'] = substr($key, $start) . $buffer['xor'];
+                    }
+                }
+        }
+
+        return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+    }
+
+    /**
+     * Treat consecutive "packets" as if they are a continuous buffer.
+     *
+     * Say you have a 16-byte plaintext $plaintext.  Using the default behavior, the two following code snippets
+     * will yield different outputs:
+     *
+     * <code>
+     *    echo $des->encrypt(substr($plaintext, 0, 8));
+     *    echo $des->encrypt(substr($plaintext, 8, 8));
+     * </code>
+     * <code>
+     *    echo $des->encrypt($plaintext);
+     * </code>
+     *
+     * The solution is to enable the continuous buffer.  Although this will resolve the above discrepancy, it creates
+     * another, as demonstrated with the following:
+     *
+     * <code>
+     *    $des->encrypt(substr($plaintext, 0, 8));
+     *    echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+     * </code>
+     * <code>
+     *    echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+     * </code>
+     *
+     * With the continuous buffer disabled, these would yield the same output.  With it enabled, they yield different
+     * outputs.  The reason is due to the fact that the initialization vector's change after every encryption /
+     * decryption round when the continuous buffer is enabled.  When it's disabled, they remain constant.
+     *
+     * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each
+     * encryption / decryption round, whereas otherwise, it'd remain constant.  For this reason, it's recommended that
+     * continuous buffers not be used.  They do offer better security and are, in fact, sometimes required (SSH uses them),
+     * however, they are also less intuitive and more likely to cause you problems.
+     *
+     * @see Crypt_TripleDES::disableContinuousBuffer()
+     * @access public
+     */
+    function enableContinuousBuffer()
+    {
+        $this->continuousBuffer = true;
+        if ($this->mode == CRYPT_DES_MODE_3CBC) {
+            $this->des[0]->enableContinuousBuffer();
+            $this->des[1]->enableContinuousBuffer();
+            $this->des[2]->enableContinuousBuffer();
+        }
+    }
+
+    /**
+     * Treat consecutive packets as if they are a discontinuous buffer.
+     *
+     * The default behavior.
+     *
+     * @see Crypt_TripleDES::enableContinuousBuffer()
+     * @access public
+     */
+    function disableContinuousBuffer()
+    {
+        $this->continuousBuffer = false;
+        $this->encryptIV = $this->iv;
+        $this->decryptIV = $this->iv;
+        $this->enchanged = true;
+        $this->dechanged = true;
+        $this->enbuffer = array('encrypted' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true);
+        $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'demcrypt_init' => true);
+
+        if ($this->mode == CRYPT_DES_MODE_3CBC) {
+            $this->des[0]->disableContinuousBuffer();
+            $this->des[1]->disableContinuousBuffer();
+            $this->des[2]->disableContinuousBuffer();
+        }
+    }
+
+    /**
+     * Pad "packets".
+     *
+     * DES works by encrypting eight bytes at a time.  If you ever need to encrypt or decrypt something that's not
+     * a multiple of eight, it becomes necessary to pad the input so that it's length is a multiple of eight.
+     *
+     * Padding is enabled by default.  Sometimes, however, it is undesirable to pad strings.  Such is the case in SSH1,
+     * where "packets" are padded with random bytes before being encrypted.  Unpad these packets and you risk stripping
+     * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
+     * transmitted separately)
+     *
+     * @see Crypt_TripleDES::disablePadding()
+     * @access public
+     */
+    function enablePadding()
+    {
+        $this->padding = true;
+    }
+
+    /**
+     * Do not pad packets.
+     *
+     * @see Crypt_TripleDES::enablePadding()
+     * @access public
+     */
+    function disablePadding()
+    {
+        $this->padding = false;
+    }
+
+    /**
+     * Pads a string
+     *
+     * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize (8).
+     * 8 - (strlen($text) & 7) bytes are added, each of which is equal to chr(8 - (strlen($text) & 7)
+     *
+     * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
+     * and padding will, hence forth, be enabled.
+     *
+     * @see Crypt_TripleDES::_unpad()
+     * @access private
+     */
+    function _pad($text)
+    {
+        $length = strlen($text);
+
+        if (!$this->padding) {
+            if (($length & 7) == 0) {
+                return $text;
+            } else {
+                user_error("The plaintext's length ($length) is not a multiple of the block size (8)", E_USER_NOTICE);
+                $this->padding = true;
+            }
+        }
+
+        $pad = 8 - ($length & 7);
+        return str_pad($text, $length + $pad, chr($pad));
+    }
+
+    /**
+     * Unpads a string
+     *
+     * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
+     * and false will be returned.
+     *
+     * @see Crypt_TripleDES::_pad()
+     * @access private
+     */
+    function _unpad($text)
+    {
+        if (!$this->padding) {
+            return $text;
+        }
+
+        $length = ord($text[strlen($text) - 1]);
+
+        if (!$length || $length > 8) {
+            return false;
+        }
+
+        return substr($text, 0, -$length);
+    }
+
+    /**
+     * String Shift
+     *
+     * Inspired by array_shift
+     *
+     * @param String $string
+     * @param optional Integer $index
+     * @return String
+     * @access private
+     */
+    function _string_shift(&$string, $index = 1)
+    {
+        $substr = substr($string, 0, $index);
+        $string = substr($string, $index);
+        return $substr;
+    }
+}
+
+// vim: ts=4:sw=4:et:
+// vim6: fdl=1:
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/File/ANSI.php b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ANSI.php
new file mode 100644
index 0000000000000000000000000000000000000000..29ad949e104061604c75a3c1ae91b134f12c4f56
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ANSI.php
@@ -0,0 +1,540 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP ANSI Decoder
+ *
+ * PHP versions 4 and 5
+ *
+ * If you call read() in Net_SSH2 you may get {@link http://en.wikipedia.org/wiki/ANSI_escape_code ANSI escape codes} back.
+ * They'd look like chr(0x1B) . '[00m' or whatever (0x1B = ESC).  They tell a
+ * {@link http://en.wikipedia.org/wiki/Terminal_emulator terminal emulator} how to format the characters, what
+ * color to display them in, etc. File_ANSI is a {@link http://en.wikipedia.org/wiki/VT100 VT100} terminal emulator.
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category   File
+ * @package    File_ANSI
+ * @author     Jim Wigginton <terrafrost@php.net>
+ * @copyright  MMXII Jim Wigginton
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @version    $Id$
+ * @link       htp://phpseclib.sourceforge.net
+ */
+
+/**
+ * Pure-PHP ANSI Decoder
+ *
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @version 0.3.0
+ * @access  public
+ * @package File_ANSI
+ */
+class File_ANSI {
+    /**
+     * Max Width
+     *
+     * @var Integer
+     * @access private
+     */
+    var $max_x;
+
+    /**
+     * Max Height
+     *
+     * @var Integer
+     * @access private
+     */
+    var $max_y;
+
+    /**
+     * Max History
+     *
+     * @var Integer
+     * @access private
+     */
+    var $max_history;
+
+    /**
+     * History
+     *
+     * @var Array
+     * @access private
+     */
+    var $history;
+
+    /**
+     * History Attributes
+     *
+     * @var Array
+     * @access private
+     */
+    var $history_attrs;
+
+    /**
+     * Current Column
+     *
+     * @var Integer
+     * @access private
+     */
+    var $x;
+
+    /**
+     * Current Row
+     *
+     * @var Integer
+     * @access private
+     */
+    var $y;
+
+    /**
+     * Old Column
+     *
+     * @var Integer
+     * @access private
+     */
+    var $old_x;
+
+    /**
+     * Old Row
+     *
+     * @var Integer
+     * @access private
+     */
+    var $old_y;
+
+    /**
+     * An empty attribute row
+     *
+     * @var Array
+     * @access private
+     */
+    var $attr_row;
+
+    /**
+     * The current screen text
+     *
+     * @var Array
+     * @access private
+     */
+    var $screen;
+
+    /**
+     * The current screen attributes
+     *
+     * @var Array
+     * @access private
+     */
+    var $attrs;
+
+    /**
+     * The current foreground color
+     *
+     * @var String
+     * @access private
+     */
+    var $foreground;
+
+    /**
+     * The current background color
+     *
+     * @var String
+     * @access private
+     */
+    var $background;
+
+    /**
+     * Bold flag
+     *
+     * @var Boolean
+     * @access private
+     */
+    var $bold;
+
+    /**
+     * Underline flag
+     *
+     * @var Boolean
+     * @access private
+     */
+    var $underline;
+
+    /**
+     * Blink flag
+     *
+     * @var Boolean
+     * @access private
+     */
+    var $blink;
+
+    /**
+     * Reverse flag
+     *
+     * @var Boolean
+     * @access private
+     */
+    var $reverse;
+
+    /**
+     * Color flag
+     *
+     * @var Boolean
+     * @access private
+     */
+    var $color;
+
+    /**
+     * Current ANSI code
+     *
+     * @var String
+     * @access private
+     */
+    var $ansi;
+
+    /**
+     * Default Constructor.
+     *
+     * @return File_ANSI
+     * @access public
+     */
+    function File_ANSI()
+    {
+        $this->setHistory(200);
+        $this->setDimensions(80, 24);
+    }
+
+    /**
+     * Set terminal width and height
+     *
+     * Resets the screen as well
+     *
+     * @param Integer $x
+     * @param Integer $y
+     * @access public
+     */
+    function setDimensions($x, $y)
+    {
+        $this->max_x = $x - 1;
+        $this->max_y = $y - 1;
+        $this->x = $this->y = 0;
+        $this->history = $this->history_attrs = array();
+        $this->attr_row = array_fill(0, $this->max_x + 1, '');
+        $this->screen = array_fill(0, $this->max_y + 1, '');
+        $this->attrs = array_fill(0, $this->max_y + 1, $this->attr_row);
+        $this->foreground = 'white';
+        $this->background = 'black';
+        $this->bold = false;
+        $this->underline = false;
+        $this->blink = false;
+        $this->reverse = false;
+        $this->color = false;
+
+        $this->ansi = '';
+    }
+
+    /**
+     * Set the number of lines that should be logged past the terminal height
+     *
+     * @param Integer $x
+     * @param Integer $y
+     * @access public
+     */
+    function setHistory($history)
+    {
+        $this->max_history = $history;
+    }
+
+    /**
+     * Load a string
+     *
+     * @param String $source
+     * @access public
+     */
+    function loadString($source)
+    {
+        $this->setDimensions($this->max_x + 1, $this->max_y + 1);
+        $this->appendString($source);
+    }
+
+    /**
+     * Appdend a string
+     *
+     * @param String $source
+     * @access public
+     */
+    function appendString($source)
+    {
+        for ($i = 0; $i < strlen($source); $i++) {
+            if (strlen($this->ansi)) {
+                $this->ansi.= $source[$i];
+                $chr = ord($source[$i]);
+                // http://en.wikipedia.org/wiki/ANSI_escape_code#Sequence_elements
+                // single character CSI's not currently supported
+                switch (true) {
+                    case $this->ansi == "\x1B=":
+                        $this->ansi = '';
+                        continue 2;
+                    case strlen($this->ansi) == 2 && $chr >= 64 && $chr <= 95 && $chr != ord('['):
+                    case strlen($this->ansi) > 2 && $chr >= 64 && $chr <= 126:
+                        break;
+                    default:
+                        continue 2;
+                }
+                // http://ascii-table.com/ansi-escape-sequences-vt-100.php
+                switch ($this->ansi) {
+                    case "\x1B[H":
+                        $this->old_x = $this->x;
+                        $this->old_y = $this->y;
+                        $this->x = $this->y = 0;
+                        break;
+                    case "\x1B[J":
+                        $this->history = array_merge($this->history, array_slice(array_splice($this->screen, $this->y + 1), 0, $this->old_y));
+                        $this->screen = array_merge($this->screen, array_fill($this->y, $this->max_y, ''));
+
+                        $this->history_attrs = array_merge($this->history_attrs, array_slice(array_splice($this->attrs, $this->y + 1), 0, $this->old_y));
+                        $this->attrs = array_merge($this->attrs, array_fill($this->y, $this->max_y, $this->attr_row));
+
+                        if (count($this->history) == $this->max_history) {
+                            array_shift($this->history);
+                            array_shift($this->history_attrs);
+                        }
+                    case "\x1B[K":
+                        $this->screen[$this->y] = substr($this->screen[$this->y], 0, $this->x);
+
+                        array_splice($this->attrs[$this->y], $this->x + 1);
+                        break;
+                    case "\x1B[?1h": // set cursor key to application
+                        break;
+                    default:
+                        switch (true) {
+                            case preg_match('#\x1B\[(\d+);(\d+)H#', $this->ansi, $match):
+                                $this->old_x = $this->x;
+                                $this->old_y = $this->y;
+                                $this->x = $match[2] - 1;
+                                $this->y = $match[1] - 1;
+                                break;
+                            case preg_match('#\x1B\[(\d+)C#', $this->ansi, $match):
+                                $this->old_x = $this->x;
+                                $x = $match[1] - 1;
+                                break;
+                            case preg_match('#\x1B\[(\d+);(\d+)r#', $this->ansi, $match): // Set top and bottom lines of a window
+                                break;
+                            case preg_match('#\x1B\[(\d*(?:;\d*)*)m#', $this->ansi, $match):
+                                $mods = explode(';', $match[1]);
+                                foreach ($mods as $mod) {
+                                    switch ($mod) {
+                                        case 0:
+                                            $this->attrs[$this->y][$this->x] = '';
+
+                                            if ($this->bold) $this->attrs[$this->y][$this->x].= '</b>';
+                                            if ($this->underline) $this->attrs[$this->y][$this->x].= '</underline>';
+                                            if ($this->blink) $this->attrs[$this->y][$this->x].= '</blink>';
+                                            if ($this->color) $this->attrs[$this->y][$this->x].= '</span>';
+
+                                            if ($this->reverse) {
+                                                $temp = $this->background;
+                                                $this->background = $this->foreground;
+                                                $this->foreground = $temp;
+                                            }
+
+                                            $this->bold = $this->underline = $this->blink = $this->color = $this->reverse = false;
+                                            break;
+                                        case 1:
+                                            if (!$this->bold) {
+                                                $this->attrs[$this->y][$this->x] = '<b>';
+                                                $this->bold = true;
+                                            }
+                                            break;
+                                        case 4:
+                                            if (!$this->underline) {
+                                                $this->attrs[$this->y][$this->x] = '<u>';
+                                                $this->underline = true;
+                                            }
+                                            break;
+                                        case 5:
+                                            if (!$this->blink) {
+                                                $this->attrs[$this->y][$this->x] = '<blink>';
+                                                $this->blink = true;
+                                            }
+                                            break;
+                                        case 7:
+                                            $this->reverse = !$this->reverse;
+                                            $temp = $this->background;
+                                            $this->background = $this->foreground;
+                                            $this->foreground = $temp;
+                                            $this->attrs[$this->y][$this->x] = '<span style="color: ' . $this->foreground . '; background: ' . $this->background . '">';
+                                            if ($this->color) {
+                                                $this->attrs[$this->y][$this->x] = '</span>' . $this->attrs[$this->y][$this->x];
+                                            }
+                                            $this->color = true;
+                                            break;
+                                        default:
+                                            //$front = $this->reverse ? &$this->background : &$this->foreground;
+                                            $front = &$this->{ $this->reverse ? 'background' : 'foreground' };
+                                            //$back = $this->reverse ? &$this->foreground : &$this->background;
+                                            $back = &$this->{ $this->reverse ? 'foreground' : 'background' };
+                                            switch ($mod) {
+                                                case 30: $front = 'black'; break;
+                                                case 31: $front = 'red'; break;
+                                                case 32: $front = 'green'; break;
+                                                case 33: $front = 'yellow'; break;
+                                                case 34: $front = 'blue'; break;
+                                                case 35: $front = 'magenta'; break;
+                                                case 36: $front = 'cyan'; break;
+                                                case 37: $front = 'white'; break;
+
+                                                case 40: $back = 'black'; break;
+                                                case 41: $back = 'red'; break;
+                                                case 42: $back = 'green'; break;
+                                                case 43: $back = 'yellow'; break;
+                                                case 44: $back = 'blue'; break;
+                                                case 45: $back = 'magenta'; break;
+                                                case 46: $back = 'cyan'; break;
+                                                case 47: $back = 'white'; break;
+
+                                                default:
+                                                    user_error('Unsupported attribute: ' . $mod);
+                                                    $this->ansi = '';
+                                                    break 2;
+                                            }
+
+                                            unset($temp);
+                                            $this->attrs[$this->y][$this->x] = '<span style="color: ' . $this->foreground . '; background: ' . $this->background . '">';
+                                            if ($this->color) {
+                                                $this->attrs[$this->y][$this->x] = '</span>' . $this->attrs[$this->y][$this->x];
+                                            }
+                                            $this->color = true;
+                                    }
+                                }
+                                break;
+                            default:
+                                echo "{$this->ansi} unsupported\r\n";
+                        }
+                }
+                $this->ansi = '';
+                continue;
+            }
+
+            switch ($source[$i]) {
+                case "\r":
+                    $this->x = 0;
+                    break;
+                case "\n":
+                    //if ($this->y < $this->max_y) {
+                    //    $this->y++;
+                    //}
+
+                    while ($this->y >= $this->max_y) {
+                        $this->history = array_merge($this->history, array(array_shift($this->screen)));
+                        $this->screen[] = '';
+
+                        $this->history_attrs = array_merge($this->history_attrs, array(array_shift($this->attrs)));
+                        $this->attrs[] = $this->attr_row;
+
+                        if (count($this->history) >= $this->max_history) {
+                            array_shift($this->history);
+                            array_shift($this->history_attrs);
+                        }
+
+                        $this->y--;
+                    }
+                    $this->y++;
+                    break;
+                case "\x0F": // shift
+                    break;
+                case "\x1B": // start ANSI escape code
+                    $this->ansi.= "\x1B";
+                    break;
+                default:
+                    $this->screen[$this->y] = substr_replace(
+                        $this->screen[$this->y],
+                        $source[$i],
+                        $this->x,
+                        1
+                    );
+
+                    if ($this->x > $this->max_x) {
+                        $this->x = 0;
+                        $this->y++;
+                    } else {
+                        $this->x++;
+                    }
+            }
+        }
+    }
+
+    /**
+     * Returns the current screen without preformating
+     *
+     * @access private
+     * @return String
+     */
+    function _getScreen()
+    {
+        $output = '';
+        for ($i = 0; $i <= $this->max_y; $i++) {
+            for ($j = 0; $j <= $this->max_x + 1; $j++) {
+                if (isset($this->attrs[$i][$j])) {
+                    $output.= $this->attrs[$i][$j];
+                }
+                if (isset($this->screen[$i][$j])) {
+                    $output.= htmlspecialchars($this->screen[$i][$j]);
+                }
+            }
+            $output.= "\r\n";
+        }
+        return rtrim($output);
+    }
+
+    /**
+     * Returns the current screen
+     *
+     * @access public
+     * @return String
+     */
+    function getScreen()
+    {
+        return '<pre style="color: white; background: black" width="' . ($this->max_x + 1) . '">' . $this->_getScreen() . '</pre>';
+    }
+
+    /**
+     * Returns the current screen and the x previous lines
+     *
+     * @access public
+     * @return String
+     */
+    function getHistory()
+    {
+        $scrollback = '';
+        for ($i = 0; $i < count($this->history); $i++) {
+            for ($j = 0; $j <= $this->max_x + 1; $j++) {
+                if (isset($this->history_attrs[$i][$j])) {
+                    $scrollback.= $this->history_attrs[$i][$j];
+                }
+                if (isset($this->history[$i][$j])) {
+                    $scrollback.= htmlspecialchars($this->history[$i][$j]);
+                }
+            }
+            $scrollback.= "\r\n";
+        }
+        $scrollback.= $this->_getScreen();
+
+        return '<pre style="color: white; background: black" width="' . ($this->max_x + 1) . '">' . $scrollback . '</pre>';
+    }
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/File/ASN1.php b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ASN1.php
new file mode 100644
index 0000000000000000000000000000000000000000..766c6e7ebf448f14abcb4c471191fd7018acbb58
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/File/ASN1.php
@@ -0,0 +1,1277 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP ASN.1 Parser
+ *
+ * PHP versions 4 and 5
+ *
+ * ASN.1 provides the semantics for data encoded using various schemes.  The most commonly
+ * utilized scheme is DER or the "Distinguished Encoding Rules".  PEM's are base64 encoded
+ * DER blobs.
+ *
+ * File_ASN1 decodes and encodes DER formatted messages and places them in a semantic context.
+ *
+ * Uses the 1988 ASN.1 syntax.
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category   File
+ * @package    File_ASN1
+ * @author     Jim Wigginton <terrafrost@php.net>
+ * @copyright  MMXII Jim Wigginton
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @version    $Id$
+ * @link       http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Math_BigInteger
+ */
+if (!class_exists('Math_BigInteger')) {
+    require_once('Math/BigInteger.php');
+}
+
+/**#@+
+ * Tag Classes
+ *
+ * @access private
+ * @link http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=12
+ */
+define('FILE_ASN1_CLASS_UNIVERSAL',        0);
+define('FILE_ASN1_CLASS_APPLICATION',      1);
+define('FILE_ASN1_CLASS_CONTEXT_SPECIFIC', 2);
+define('FILE_ASN1_CLASS_PRIVATE',          3);
+/**#@-*/
+
+/**#@+
+ * Tag Classes
+ *
+ * @access private
+ * @link http://www.obj-sys.com/asn1tutorial/node124.html
+ */
+define('FILE_ASN1_TYPE_BOOLEAN',          1);
+define('FILE_ASN1_TYPE_INTEGER',          2);
+define('FILE_ASN1_TYPE_BIT_STRING',       3);
+define('FILE_ASN1_TYPE_OCTET_STRING',     4);
+define('FILE_ASN1_TYPE_NULL',             5);
+define('FILE_ASN1_TYPE_OBJECT_IDENTIFIER',6);
+//define('FILE_ASN1_TYPE_OBJECT_DESCRIPTOR',7);
+//define('FILE_ASN1_TYPE_INSTANCE_OF',      8); // EXTERNAL
+define('FILE_ASN1_TYPE_REAL',             9);
+define('FILE_ASN1_TYPE_ENUMERATED',      10);
+//define('FILE_ASN1_TYPE_EMBEDDED',        11);
+define('FILE_ASN1_TYPE_UTF8_STRING',     12);
+//define('FILE_ASN1_TYPE_RELATIVE_OID',    13);
+define('FILE_ASN1_TYPE_SEQUENCE',        16); // SEQUENCE OF
+define('FILE_ASN1_TYPE_SET',             17); // SET OF
+/**#@-*/
+/**#@+
+ * More Tag Classes
+ *
+ * @access private
+ * @link http://www.obj-sys.com/asn1tutorial/node10.html
+ */
+define('FILE_ASN1_TYPE_NUMERIC_STRING',  18);
+define('FILE_ASN1_TYPE_PRINTABLE_STRING',19);
+define('FILE_ASN1_TYPE_TELETEX_STRING',  20); // T61String
+define('FILE_ASN1_TYPE_VIDEOTEX_STRING', 21);
+define('FILE_ASN1_TYPE_IA5_STRING',      22);
+define('FILE_ASN1_TYPE_UTC_TIME',        23);
+define('FILE_ASN1_TYPE_GENERALIZED_TIME',24);
+define('FILE_ASN1_TYPE_GRAPHIC_STRING',  25);
+define('FILE_ASN1_TYPE_VISIBLE_STRING',  26); // ISO646String
+define('FILE_ASN1_TYPE_GENERAL_STRING',  27);
+define('FILE_ASN1_TYPE_UNIVERSAL_STRING',28);
+//define('FILE_ASN1_TYPE_CHARACTER_STRING',29);
+define('FILE_ASN1_TYPE_BMP_STRING',      30);
+/**#@-*/
+
+/**#@+
+ * Tag Aliases
+ *
+ * These tags are kinda place holders for other tags.
+ *
+ * @access private
+ */
+define('FILE_ASN1_TYPE_CHOICE',          -1);
+define('FILE_ASN1_TYPE_ANY',             -2);
+/**#@-*/
+
+/**
+ * ASN.1 Element
+ *
+ * Bypass normal encoding rules in File_ASN1::encodeDER()
+ *
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @version 0.3.0
+ * @access  public
+ * @package File_ASN1
+ */
+class File_ASN1_Element {
+    /**
+     * Raw element value
+     *
+     * @var String
+     * @access private
+     */
+    var $element;
+
+    /**
+     * Constructor
+     *
+     * @param String $encoded
+     * @return File_ASN1_Element
+     * @access public
+     */
+    function File_ASN1_Element($encoded)
+    {
+        $this->element = $encoded;
+    }
+}
+
+/**
+ * Pure-PHP ASN.1 Parser
+ *
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @version 0.3.0
+ * @access  public
+ * @package File_ASN1
+ */
+class File_ASN1 {
+    /**
+     * ASN.1 object identifier
+     *
+     * @var Array
+     * @access private
+     * @link http://en.wikipedia.org/wiki/Object_identifier
+     */
+    var $oids = array();
+
+    /**
+     * Default date format
+     *
+     * @var String
+     * @access private
+     * @link http://php.net/class.datetime
+     */
+    var $format = 'D, d M y H:i:s O';
+
+    /**
+     * Default date format
+     *
+     * @var Array
+     * @access private
+     * @see File_ASN1::setTimeFormat()
+     * @see File_ASN1::asn1map()
+     * @link http://php.net/class.datetime
+     */
+    var $encoded;
+
+    /**
+     * Filters
+     *
+     * If the mapping type is FILE_ASN1_TYPE_ANY what do we actually encode it as?
+     *
+     * @var Array
+     * @access private
+     * @see File_ASN1::_encode_der()
+     */
+    var $filters;
+
+    /**
+     * Type mapping table for the ANY type.
+     *
+     * Structured or unknown types are mapped to a FILE_ASN1_Element.
+     * Unambiguous types get the direct mapping (int/real/bool).
+     * Others are mapped as a choice, with an extra indexing level.
+     *
+     * @var Array
+     * @access public
+     */
+    var $ANYmap = array(
+        FILE_ASN1_TYPE_BOOLEAN              => true,
+        FILE_ASN1_TYPE_INTEGER              => true,
+        FILE_ASN1_TYPE_BIT_STRING           => 'bitString',
+        FILE_ASN1_TYPE_OCTET_STRING         => 'octetString',
+        FILE_ASN1_TYPE_NULL                 => 'null',
+        FILE_ASN1_TYPE_OBJECT_IDENTIFIER    => 'objectIdentifier',
+        FILE_ASN1_TYPE_REAL                 => true,
+        FILE_ASN1_TYPE_ENUMERATED           => 'enumerated',
+        FILE_ASN1_TYPE_UTF8_STRING          => 'utf8String',
+        FILE_ASN1_TYPE_NUMERIC_STRING       => 'numericString',
+        FILE_ASN1_TYPE_PRINTABLE_STRING     => 'printableString',
+        FILE_ASN1_TYPE_TELETEX_STRING       => 'teletexString',
+        FILE_ASN1_TYPE_VIDEOTEX_STRING      => 'videotexString',
+        FILE_ASN1_TYPE_IA5_STRING           => 'ia5String',
+        FILE_ASN1_TYPE_UTC_TIME             => 'utcTime',
+        FILE_ASN1_TYPE_GENERALIZED_TIME     => 'generalTime',
+        FILE_ASN1_TYPE_GRAPHIC_STRING       => 'graphicString',
+        FILE_ASN1_TYPE_VISIBLE_STRING       => 'visibleString',
+        FILE_ASN1_TYPE_GENERAL_STRING       => 'generalString',
+        FILE_ASN1_TYPE_UNIVERSAL_STRING     => 'universalString',
+        //FILE_ASN1_TYPE_CHARACTER_STRING     => 'characterString',
+        FILE_ASN1_TYPE_BMP_STRING           => 'bmpString'
+    );
+
+    /**
+     * String type to character size mapping table.
+     *
+     * Non-convertable types are absent from this table.
+     * size == 0 indicates variable length encoding.
+     *
+     * @var Array
+     * @access public
+     */
+    var $stringTypeSize = array(
+        FILE_ASN1_TYPE_UTF8_STRING      => 0,
+        FILE_ASN1_TYPE_BMP_STRING       => 2,
+        FILE_ASN1_TYPE_UNIVERSAL_STRING => 4,
+        FILE_ASN1_TYPE_PRINTABLE_STRING => 1,
+        FILE_ASN1_TYPE_TELETEX_STRING   => 1,
+        FILE_ASN1_TYPE_IA5_STRING       => 1,
+        FILE_ASN1_TYPE_VISIBLE_STRING   => 1,
+    );
+
+    /**
+     * Parse BER-encoding
+     *
+     * Serves a similar purpose to openssl's asn1parse
+     *
+     * @param String $encoded
+     * @return Array
+     * @access public
+     */
+    function decodeBER($encoded)
+    {
+        if (is_object($encoded) && strtolower(get_class($encoded)) == 'file_asn1_element') {
+            $encoded = $encoded->element;
+        }
+
+        $this->encoded = $encoded;
+        return $this->_decode_ber($encoded);
+    }
+
+    /**
+     * Parse BER-encoding (Helper function)
+     *
+     * Sometimes we want to get the BER encoding of a particular tag.  $start lets us do that without having to reencode.
+     * $encoded is passed by reference for the recursive calls done for FILE_ASN1_TYPE_BIT_STRING and
+     * FILE_ASN1_TYPE_OCTET_STRING. In those cases, the indefinite length is used.
+     *
+     * @param String $encoded
+     * @param Integer $start
+     * @return Array
+     * @access private
+     */
+    function _decode_ber(&$encoded, $start = 0)
+    {
+        $decoded = array();
+
+        while ( strlen($encoded) ) {
+            $current = array('start' => $start);
+
+            $type = ord($this->_string_shift($encoded));
+            $start++;
+
+            $constructed = ($type >> 5) & 1;
+
+            $tag = $type & 0x1F;
+            if ($tag == 0x1F) {
+                $tag = 0;
+                // process septets (since the eighth bit is ignored, it's not an octet)
+                do {
+                    $loop = ord($encoded[0]) >> 7;
+                    $tag <<= 7;
+                    $tag |= ord($this->_string_shift($encoded)) & 0x7F;
+                    $start++;
+                } while ( $loop );
+            }
+
+            // Length, as discussed in � 8.1.3 of X.690-0207.pdf#page=13
+            $length = ord($this->_string_shift($encoded));
+            $start++;
+            if ( $length == 0x80 ) { // indefinite length
+                // "[A sender shall] use the indefinite form (see 8.1.3.6) if the encoding is constructed and is not all 
+                //  immediately available." -- � 8.1.3.2.c
+                //if ( !$constructed ) {
+                //    return false;
+                //}
+                $length = strlen($encoded);
+            } elseif ( $length & 0x80 ) { // definite length, long form
+                // technically, the long form of the length can be represented by up to 126 octets (bytes), but we'll only
+                // support it up to four.
+                $length&= 0x7F;
+                $temp = $this->_string_shift($encoded, $length);
+                $start+= $length;
+                extract(unpack('Nlength', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4)));
+            }
+
+            // End-of-content, see �� 8.1.1.3, 8.1.3.2, 8.1.3.6, 8.1.5, and (for an example) 8.6.4.2
+            if (!$type && !$length) {
+                return $decoded;
+            }
+            $content = $this->_string_shift($encoded, $length);
+
+            /* Class is UNIVERSAL, APPLICATION, PRIVATE, or CONTEXT-SPECIFIC. The UNIVERSAL class is restricted to the ASN.1
+               built-in types. It defines an application-independent data type that must be distinguishable from all other
+               data types. The other three classes are user defined. The APPLICATION class distinguishes data types that
+               have a wide, scattered use within a particular presentation context. PRIVATE distinguishes data types within
+               a particular organization or country. CONTEXT-SPECIFIC distinguishes members of a sequence or set, the
+               alternatives of a CHOICE, or universally tagged set members. Only the class number appears in braces for this
+               data type; the term CONTEXT-SPECIFIC does not appear.
+
+                 -- http://www.obj-sys.com/asn1tutorial/node12.html */
+            $class = ($type >> 6) & 3;
+            switch ($class) {
+                case FILE_ASN1_CLASS_APPLICATION:
+                case FILE_ASN1_CLASS_PRIVATE:
+                case FILE_ASN1_CLASS_CONTEXT_SPECIFIC:
+                    $decoded[] = array(
+                        'type'     => $class,
+                        'constant' => $tag,
+                        'content'  => $constructed ? $this->_decode_ber($content, $start) : $content,
+                        'length'   => $length + $start - $current['start']
+                    ) + $current;
+                    continue 2;
+            }
+
+            $current+= array('type' => $tag);
+
+            // decode UNIVERSAL tags
+            switch ($tag) {
+                case FILE_ASN1_TYPE_BOOLEAN:
+                    // "The contents octets shall consist of a single octet." -- � 8.2.1
+                    //if (strlen($content) != 1) {
+                    //    return false;
+                    //}
+                    $current['content'] = (bool) ord($content[0]);
+                    break;
+                case FILE_ASN1_TYPE_INTEGER:
+                case FILE_ASN1_TYPE_ENUMERATED:
+                    $current['content'] = new Math_BigInteger($content, -256);
+                    break;
+                case FILE_ASN1_TYPE_REAL: // not currently supported
+                    return false;
+                case FILE_ASN1_TYPE_BIT_STRING:
+                    // The initial octet shall encode, as an unsigned binary integer with bit 1 as the least significant bit,
+                    // the number of unused bits in the final subsequent octet. The number shall be in the range zero to
+                    // seven.
+                    if (!$constructed) {
+                        $current['content'] = $content;
+                    } else {
+                        $temp = $this->_decode_ber($content, $start);
+                        $length-= strlen($content);
+                        $last = count($temp) - 1;
+                        for ($i = 0; $i < $last; $i++) {
+                            // all subtags should be bit strings
+                            //if ($temp[$i]['type'] != FILE_ASN1_TYPE_BIT_STRING) {
+                            //    return false;
+                            //}
+                            $current['content'].= substr($temp[$i]['content'], 1);
+                        }
+                        // all subtags should be bit strings
+                        //if ($temp[$last]['type'] != FILE_ASN1_TYPE_BIT_STRING) {
+                        //    return false;
+                        //}
+                        $current['content'] = $temp[$last]['content'][0] . $current['content'] . substr($temp[$i]['content'], 1);
+                    }
+                    break;
+                case FILE_ASN1_TYPE_OCTET_STRING:
+                    if (!$constructed) {
+                        $current['content'] = $content;
+                    } else {
+                        $temp = $this->_decode_ber($content, $start);
+                        $length-= strlen($content);
+                        for ($i = 0, $size = count($temp); $i < $size; $i++) {
+                            // all subtags should be octet strings
+                            //if ($temp[$i]['type'] != FILE_ASN1_TYPE_OCTET_STRING) {
+                            //    return false;
+                            //}
+                            $current['content'].= $temp[$i]['content'];
+                        }
+                        // $length = 
+                    }
+                    break;
+                case FILE_ASN1_TYPE_NULL:
+                    // "The contents octets shall not contain any octets." -- � 8.8.2
+                    //if (strlen($content)) {
+                    //    return false;
+                    //}
+                    break;
+                case FILE_ASN1_TYPE_SEQUENCE:
+                case FILE_ASN1_TYPE_SET:
+                    $current['content'] = $this->_decode_ber($content, $start);
+                    break;
+                case FILE_ASN1_TYPE_OBJECT_IDENTIFIER:
+                    $temp = ord($this->_string_shift($content));
+                    $current['content'] = sprintf('%d.%d', floor($temp / 40), $temp % 40);
+                    $valuen = 0;
+                    // process septets
+                    while (strlen($content)) {
+                        $temp = ord($this->_string_shift($content));
+                        $valuen <<= 7;
+                        $valuen |= $temp & 0x7F;
+                        if (~$temp & 0x80) {
+                            $current['content'].= ".$valuen";
+                            $valuen = 0;
+                        }
+                    }
+                    // the eighth bit of the last byte should not be 1
+                    //if ($temp >> 7) {
+                    //    return false;
+                    //}
+                    break;
+                /* Each character string type shall be encoded as if it had been declared:
+                   [UNIVERSAL x] IMPLICIT OCTET STRING
+
+                     -- X.690-0207.pdf#page=23 (� 8.21.3)
+
+                   Per that, we're not going to do any validation.  If there are any illegal characters in the string, 
+                   we don't really care */
+                case FILE_ASN1_TYPE_NUMERIC_STRING:
+                    // 0,1,2,3,4,5,6,7,8,9, and space
+                case FILE_ASN1_TYPE_PRINTABLE_STRING:
+                    // Upper and lower case letters, digits, space, apostrophe, left/right parenthesis, plus sign, comma,
+                    // hyphen, full stop, solidus, colon, equal sign, question mark
+                case FILE_ASN1_TYPE_TELETEX_STRING:
+                    // The Teletex character set in CCITT's T61, space, and delete
+                    // see http://en.wikipedia.org/wiki/Teletex#Character_sets
+                case FILE_ASN1_TYPE_VIDEOTEX_STRING:
+                    // The Videotex character set in CCITT's T.100 and T.101, space, and delete
+                case FILE_ASN1_TYPE_VISIBLE_STRING:
+                    // Printing character sets of international ASCII, and space
+                case FILE_ASN1_TYPE_IA5_STRING:
+                    // International Alphabet 5 (International ASCII)
+                case FILE_ASN1_TYPE_GRAPHIC_STRING:
+                    // All registered G sets, and space
+                case FILE_ASN1_TYPE_GENERAL_STRING:
+                    // All registered C and G sets, space and delete
+                case FILE_ASN1_TYPE_UTF8_STRING:
+                    // ????
+                case FILE_ASN1_TYPE_BMP_STRING:
+                    $current['content'] = $content;
+                    break;
+                case FILE_ASN1_TYPE_UTC_TIME:
+                case FILE_ASN1_TYPE_GENERALIZED_TIME:
+                    $current['content'] = $this->_decodeTime($content, $tag);
+                default:
+
+            }
+
+            $start+= $length;
+            $decoded[] = $current + array('length' => $start - $current['start']);
+        }
+
+        return $decoded;
+    }
+
+    /**
+     * ASN.1 Decode
+     *
+     * Provides an ASN.1 semantic mapping ($mapping) from a parsed BER-encoding to a human readable format.
+     *
+     * @param Array $decoded
+     * @param Array $mapping
+     * @return Array
+     * @access public
+     */
+    function asn1map($decoded, $mapping)
+    {
+        if (isset($mapping['explicit'])) {
+            $decoded = $decoded['content'][0];
+        }
+
+        switch (true) {
+            case $mapping['type'] == FILE_ASN1_TYPE_ANY:
+                $intype = $decoded['type'];
+                if (isset($decoded['constant']) || !isset($this->ANYmap[$intype]) || ($this->encoded[$decoded['start']] & 0x20)) {
+                    return new File_ASN1_Element(substr($this->encoded, $decoded['start'], $decoded['length']));
+                }
+                $inmap = $this->ANYmap[$intype];
+                if (is_string($inmap)) {
+                    return array($inmap => $this->asn1map($decoded, array('type' => $intype) + $mapping));
+                }
+                break;
+            case $mapping['type'] == FILE_ASN1_TYPE_CHOICE:
+                foreach ($mapping['children'] as $key => $option) {
+                    switch (true) {
+                        case isset($option['constant']) && $option['constant'] == $decoded['constant']:
+                        case !isset($option['constant']) && $option['type'] == $decoded['type']:
+                            $value = $this->asn1map($decoded, $option);
+                            break;
+                        case !isset($option['constant']) && $option['type'] == FILE_ASN1_TYPE_CHOICE:
+                            $v = $this->asn1map($decoded, $option);
+                            if (isset($v)) {
+                                $value = $v;
+                            }
+                    }
+                    if (isset($value)) {
+                        return array($key => $value);
+                    }
+                }
+                return NULL;
+            case isset($mapping['implicit']):
+            case isset($mapping['explicit']):
+            case $decoded['type'] == $mapping['type']:
+                break;
+            default:
+                return NULL;
+        }
+
+        if (isset($mapping['implicit'])) {
+            $decoded['type'] = $mapping['type'];
+        }
+
+        switch ($decoded['type']) {
+            case FILE_ASN1_TYPE_SEQUENCE:
+                $map = array();
+
+                // ignore the min and max
+                if (isset($mapping['min']) && isset($mapping['max'])) {
+                    $child = $mapping['children'];
+                    foreach ($decoded['content'] as $content) {
+                        if (($map[] = $this->asn1map($content, $child)) === NULL) {
+                            return NULL;
+                        }
+                    }
+
+                    return $map;
+                }
+
+                $n = count($decoded['content']);
+                $i = 0;
+
+                foreach ($mapping['children'] as $key => $child) {
+                    $maymatch = $i < $n; // Match only existing input.
+                    if ($maymatch) {
+                        $temp = $decoded['content'][$i];
+
+                        if ($child['type'] != FILE_ASN1_TYPE_CHOICE) {
+                            // Get the mapping and input class & constant.
+                            $childClass = $tempClass = FILE_ASN1_CLASS_UNIVERSAL;
+                            $constant = NULL;
+                            if (isset($temp['constant'])) {
+                                $tempClass = isset($temp['class']) ? $temp['class'] : FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
+                            }
+                            if (isset($child['class'])) {
+                                $childClass = $child['class'];
+                                $constant = $child['cast'];
+                            }
+                            elseif (isset($child['constant'])) {
+                                $childClass = FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
+                                $constant = $child['constant'];
+                            }
+
+                            if (isset($constant) && isset($temp['constant'])) {
+                                // Can only match if constants and class match.
+                                $maymatch = $constant == $temp['constant'] && $childClass == $tempClass;
+                            } else {
+                                // Can only match if no constant expected and type matches or is generic.
+                                $maymatch = !isset($child['constant']) && array_search($child['type'], array($temp['type'], FILE_ASN1_TYPE_ANY, FILE_ASN1_TYPE_CHOICE)) !== false;
+                            }
+                        }
+                    }
+
+                    if ($maymatch) {
+                        // Attempt submapping.
+                        $candidate = $this->asn1map($temp, $child);
+                        $maymatch = $candidate !== NULL;
+                    }
+
+                    if ($maymatch) {
+                        // Got the match: use it.
+                        $map[$key] = $candidate;
+                        $i++;
+                    } elseif (isset($child['default'])) {
+                        $map[$key] = $child['default']; // Use default.
+                    } elseif (!isset($child['optional'])) {
+                        return NULL; // Syntax error.
+                    }
+                }
+
+                // Fail mapping if all input items have not been consumed.
+                return $i < $n? NULL: $map;
+
+            // the main diff between sets and sequences is the encapsulation of the foreach in another for loop
+            case FILE_ASN1_TYPE_SET:
+                $map = array();
+
+                // ignore the min and max
+                if (isset($mapping['min']) && isset($mapping['max'])) {
+                    $child = $mapping['children'];
+                    foreach ($decoded['content'] as $content) {
+                        if (($map[] = $this->asn1map($content, $child)) === NULL) {
+                            return NULL;
+                        }
+                    }
+
+                    return $map;
+                }
+
+                for ($i = 0; $i < count($decoded['content']); $i++) {
+                    $temp = $decoded['content'][$i];
+                    $tempClass = FILE_ASN1_CLASS_UNIVERSAL;
+                    if (isset($temp['constant'])) {
+                        $tempClass = isset($temp['class']) ? $temp['class'] : FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
+                    }
+
+                    foreach ($mapping['children'] as $key => $child) {
+                        if (isset($map[$key])) {
+                            continue;
+                        }
+                        $maymatch = true;
+                        if ($child['type'] != FILE_ASN1_TYPE_CHOICE) {
+                            $childClass = FILE_ASN1_CLASS_UNIVERSAL;
+                            $constant = NULL;
+                            if (isset($child['class'])) {
+                                $childClass = $child['class'];
+                                $constant = $child['cast'];
+                            }
+                            elseif (isset($child['constant'])) {
+                                $childClass = FILE_ASN1_CLASS_CONTEXT_SPECIFIC;
+                                $constant = $child['constant'];
+                            }
+
+                            if (isset($constant) && isset($temp['constant'])) {
+                                // Can only match if constants and class match.
+                                $maymatch = $constant == $temp['constant'] && $childClass == $tempClass;
+                            } else {
+                                // Can only match if no constant expected and type matches or is generic.
+                                $maymatch = !isset($child['constant']) && array_search($child['type'], array($temp['type'], FILE_ASN1_TYPE_ANY, FILE_ASN1_TYPE_CHOICE)) !== false;
+                            }
+                        }
+
+                        if ($maymatch) {
+                            // Attempt submapping.
+                            $candidate = $this->asn1map($temp, $child);
+                            $maymatch = $candidate !== NULL;
+                        }
+
+                        if (!$maymatch) {
+                            break;
+                        }
+
+                        // Got the match: use it.
+                        $map[$key] = $candidate;
+                        break;
+                    }
+                }
+
+                foreach ($mapping['children'] as $key => $child) {
+                    if (!isset($map[$key])) {
+                        if (isset($child['default'])) {
+                            $map[$key] = $child['default'];
+                        } elseif (!isset($child['optional'])) {
+                            return NULL;
+                        }
+                    }
+                }
+                return $map;
+            case FILE_ASN1_TYPE_OBJECT_IDENTIFIER:
+                return isset($this->oids[$decoded['content']]) ? $this->oids[$decoded['content']] : $decoded['content'];
+            case FILE_ASN1_TYPE_UTC_TIME:
+            case FILE_ASN1_TYPE_GENERALIZED_TIME:
+                if (isset($mapping['implicit'])) {
+                    $decoded['content'] = $this->_decodeTime($decoded['content'], $decoded['type']);
+                }
+                return @date($this->format, $decoded['content']);
+            case FILE_ASN1_TYPE_BIT_STRING:
+                if (isset($mapping['mapping'])) {
+                    $offset = ord($decoded['content'][0]);
+                    $size = (strlen($decoded['content']) - 1) * 8 - $offset;
+                    /*
+                       From X.680-0207.pdf#page=46 (21.7):
+
+                       "When a "NamedBitList" is used in defining a bitstring type ASN.1 encoding rules are free to add (or remove)
+                        arbitrarily any trailing 0 bits to (or from) values that are being encoded or decoded. Application designers should
+                        therefore ensure that different semantics are not associated with such values which differ only in the number of trailing
+                        0 bits."
+                    */
+                    $bits = count($mapping['mapping']) == $size ? array() : array_fill(0, count($mapping['mapping']) - $size, false);
+                    for ($i = strlen($decoded['content']) - 1; $i > 0; $i--) {
+                        $current = ord($decoded['content'][$i]);
+                        for ($j = $offset; $j < 8; $j++) {
+                            $bits[] = (bool) ($current & (1 << $j));
+                        }
+                        $offset = 0;
+                    }
+                    $values = array();
+                    $map = array_reverse($mapping['mapping']);
+                    foreach ($map as $i => $value) {
+                        if ($bits[$i]) {
+                            $values[] = $value;
+                        }
+                    }
+                    return $values;
+                }
+            case FILE_ASN1_TYPE_OCTET_STRING:
+                return base64_encode($decoded['content']);
+            case FILE_ASN1_TYPE_NULL:
+                return '';
+            case FILE_ASN1_TYPE_BOOLEAN:
+                return $decoded['content'];
+            case FILE_ASN1_TYPE_NUMERIC_STRING:
+            case FILE_ASN1_TYPE_PRINTABLE_STRING:
+            case FILE_ASN1_TYPE_TELETEX_STRING:
+            case FILE_ASN1_TYPE_VIDEOTEX_STRING:
+            case FILE_ASN1_TYPE_IA5_STRING:
+            case FILE_ASN1_TYPE_GRAPHIC_STRING:
+            case FILE_ASN1_TYPE_VISIBLE_STRING:
+            case FILE_ASN1_TYPE_GENERAL_STRING:
+            case FILE_ASN1_TYPE_UNIVERSAL_STRING:
+            case FILE_ASN1_TYPE_UTF8_STRING:
+            case FILE_ASN1_TYPE_BMP_STRING:
+                return $decoded['content'];
+            case FILE_ASN1_TYPE_INTEGER:
+            case FILE_ASN1_TYPE_ENUMERATED:
+                $temp = $decoded['content'];
+                if (isset($mapping['implicit'])) {
+                    $temp = new Math_BigInteger($decoded['content'], -256);
+                }
+                if (isset($mapping['mapping'])) {
+                    $temp = (int) $temp->toString();
+                    return isset($mapping['mapping'][$temp]) ?
+                        $mapping['mapping'][$temp] :
+                        false;
+                }
+                return $temp;
+        }
+    }
+
+    /**
+     * ASN.1 Encode
+     *
+     * DER-encodes an ASN.1 semantic mapping ($mapping).  Some libraries would probably call this function
+     * an ASN.1 compiler.
+     *
+     * @param String $source
+     * @param String $mapping
+     * @param Integer $idx
+     * @return String
+     * @access public
+     */
+    function encodeDER($source, $mapping)
+    {
+        $this->location = array();
+        return $this->_encode_der($source, $mapping);
+    }
+
+    /**
+     * ASN.1 Encode (Helper function)
+     *
+     * @param String $source
+     * @param String $mapping
+     * @param Integer $idx
+     * @return String
+     * @access private
+     */
+    function _encode_der($source, $mapping, $idx = NULL)
+    {
+        if (is_object($source) && strtolower(get_class($source)) == 'file_asn1_element') {
+            return $source->element;
+        }
+
+        // do not encode (implicitly optional) fields with value set to default
+        if (isset($mapping['default']) && $source === $mapping['default']) {
+            return '';
+        }
+
+        if (isset($idx)) {
+            $this->location[] = $idx;
+        }
+
+        $tag = $mapping['type'];
+
+        switch ($tag) {
+            case FILE_ASN1_TYPE_SET:    // Children order is not important, thus process in sequence.
+            case FILE_ASN1_TYPE_SEQUENCE:
+                $tag|= 0x20; // set the constructed bit
+                $value = '';
+
+                // ignore the min and max
+                if (isset($mapping['min']) && isset($mapping['max'])) {
+                    $child = $mapping['children'];
+
+                    foreach ($source as $content) {
+                        $temp = $this->_encode_der($content, $child);
+                        if ($temp === false) {
+                            return false;
+                        }
+                        $value.= $temp;
+                    }
+                    break;
+                }
+
+                foreach ($mapping['children'] as $key => $child) {
+                    if (!isset($source[$key])) {
+                        if (!isset($child['optional'])) {
+                            return false;
+                        }
+                        continue;
+                    }
+
+                    $temp = $this->_encode_der($source[$key], $child, $key);
+                    if ($temp === false) {
+                        return false;
+                    }
+
+                    // An empty child encoding means it has been optimized out.
+                    // Else we should have at least one tag byte.
+                    if ($temp === '') {
+                        continue;
+                    }
+
+                    // if isset($child['constant']) is true then isset($child['optional']) should be true as well
+                    if (isset($child['constant'])) {
+                        /*
+                           From X.680-0207.pdf#page=58 (30.6):
+
+                           "The tagging construction specifies explicit tagging if any of the following holds:
+                            ...
+                            c) the "Tag Type" alternative is used and the value of "TagDefault" for the module is IMPLICIT TAGS or
+                            AUTOMATIC TAGS, but the type defined by "Type" is an untagged choice type, an untagged open type, or
+                            an untagged "DummyReference" (see ITU-T Rec. X.683 | ISO/IEC 8824-4, 8.3)."
+                         */
+                        if (isset($child['explicit']) || $child['type'] == FILE_ASN1_TYPE_CHOICE) {
+                            $subtag = chr((FILE_ASN1_CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | $child['constant']);
+                            $temp = $subtag . $this->_encodeLength(strlen($temp)) . $temp;
+                        } else {
+                            $subtag = chr((FILE_ASN1_CLASS_CONTEXT_SPECIFIC << 6) | (ord($temp[0]) & 0x20) | $child['constant']);
+                            $temp = $subtag . substr($temp, 1);
+                        }
+                    }
+                    $value.= $temp;
+                }
+                break;
+            case FILE_ASN1_TYPE_CHOICE:
+                $temp = false;
+
+                foreach ($mapping['children'] as $key => $child) {
+                    if (!isset($source[$key])) {
+                        continue;
+                    }
+
+                    $temp = $this->_encode_der($source[$key], $child, $key);
+                    if ($temp === false) {
+                        return false;
+                    }
+
+                    // An empty child encoding means it has been optimized out.
+                    // Else we should have at least one tag byte.
+                    if ($temp === '') {
+                        continue;
+                    }
+
+                    $tag = ord($temp[0]);
+
+                    // if isset($child['constant']) is true then isset($child['optional']) should be true as well
+                    if (isset($child['constant'])) {
+                        if (isset($child['explicit']) || $child['type'] == FILE_ASN1_TYPE_CHOICE) {
+                            $subtag = chr((FILE_ASN1_CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | $child['constant']);
+                            $temp = $subtag . $this->_encodeLength(strlen($temp)) . $temp;
+                        } else {
+                            $subtag = chr((FILE_ASN1_CLASS_CONTEXT_SPECIFIC << 6) | (ord($temp[0]) & 0x20) | $child['constant']);
+                            $temp = $subtag . substr($temp, 1);
+                        }
+                    }
+                }
+
+                if (isset($idx)) {
+                    array_pop($this->location);
+                }
+
+                if ($temp && isset($mapping['cast'])) {
+                    $temp[0] = chr(($mapping['class'] << 6) | ($tag & 0x20) | $mapping['cast']);
+                }
+
+                return $temp;
+            case FILE_ASN1_TYPE_INTEGER:
+            case FILE_ASN1_TYPE_ENUMERATED:
+                if (!isset($mapping['mapping'])) {
+                    $value = $source->toBytes(true);
+                } else {
+                    $value = array_search($source, $mapping['mapping']);
+                    if ($value === false) {
+                        return false;
+                    }
+                    $value = new Math_BigInteger($value);
+                    $value = $value->toBytes(true);
+                }
+                break;
+            case FILE_ASN1_TYPE_UTC_TIME:
+            case FILE_ASN1_TYPE_GENERALIZED_TIME:
+                $format = $mapping['type'] == FILE_ASN1_TYPE_UTC_TIME ? 'y' : 'Y';
+                $format.= 'mdHis';
+                $value = @gmdate($format, strtotime($source)) . 'Z';
+                break;
+            case FILE_ASN1_TYPE_BIT_STRING:
+                if (isset($mapping['mapping'])) {
+                    $bits = array_fill(0, count($mapping['mapping']), 0);
+                    $size = 0;
+                    for ($i = 0; $i < count($mapping['mapping']); $i++) {
+                        if (in_array($mapping['mapping'][$i], $source)) {
+                            $bits[$i] = 1;
+                            $size = $i;
+                        }
+                    }
+
+                    $offset = 8 - (($size + 1) & 7);
+                    $offset = $offset !== 8 ? $offset : 0;
+
+                    $value = chr($offset);
+
+                    for ($i = $size + 1; $i < count($mapping['mapping']); $i++) {
+                        unset($bits[$i]);
+                    }
+
+                    $bits = implode('', array_pad($bits, $size + $offset + 1, 0));
+                    $bytes = explode(' ', rtrim(chunk_split($bits, 8, ' ')));
+                    foreach ($bytes as $byte) {
+                        $value.= chr(bindec($byte));
+                    }
+
+                    break;
+                }
+            case FILE_ASN1_TYPE_OCTET_STRING:
+                /* The initial octet shall encode, as an unsigned binary integer with bit 1 as the least significant bit,
+                   the number of unused bits in the final subsequent octet. The number shall be in the range zero to seven.
+
+                   -- http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=16 */
+                $value = base64_decode($source);
+                break;
+            case FILE_ASN1_TYPE_OBJECT_IDENTIFIER:
+                $oid = preg_match('#(?:\d+\.)+#', $source) ? $source : array_search($source, $this->oids);
+                if ($oid === false) {
+                    user_error('Invalid OID');
+                    return false;
+                }
+                $value = '';
+                $parts = explode('.', $oid);
+                $value = chr(40 * $parts[0] + $parts[1]);
+                for ($i = 2; $i < count($parts); $i++) {
+                    $temp = '';
+                    if (!$parts[$i]) {
+                        $temp = "\0";
+                    } else {
+                        while ($parts[$i]) {
+                            $temp = chr(0x80 | ($parts[$i] & 0x7F)) . $temp;
+                            $parts[$i] >>= 7;
+                        }
+                        $temp[strlen($temp) - 1] = $temp[strlen($temp) - 1] & chr(0x7F);
+                    }
+                    $value.= $temp;
+                }
+                break;
+            case FILE_ASN1_TYPE_ANY:
+                $loc = $this->location;
+                if (isset($idx)) {
+                    array_pop($this->location);
+                }
+
+                switch (true) {
+                    case !isset($source):
+                        return $this->_encode_der(NULL, array('type' => FILE_ASN1_TYPE_NULL) + $mapping);
+                    case is_int($source):
+                    case is_object($source) && strtolower(get_class($source)) == 'math_biginteger':
+                        return $this->_encode_der($source, array('type' => FILE_ASN1_TYPE_INTEGER) + $mapping);
+                    case is_float($source):
+                        return $this->_encode_der($source, array('type' => FILE_ASN1_TYPE_REAL) + $mapping);
+                    case is_bool($source):
+                        return $this->_encode_der($source, array('type' => FILE_ASN1_TYPE_BOOLEAN) + $mapping);
+                    case is_array($source) && count($source) == 1:
+                        $typename = implode('', array_keys($source));
+                        $outtype = array_search($typename, $this->ANYmap, true);
+                        if ($outtype !== false) {
+                            return $this->_encode_der($source[$typename], array('type' => $outtype) + $mapping);
+                        }
+                    }
+
+                $filters = $this->filters;
+                foreach ($loc as $part) {
+                    if (!isset($filters[$part])) {
+                        $filters = false;
+                        break;
+                    }
+                    $filters = $filters[$part];
+                }
+                if ($filters === false) {
+                    user_error('No filters defined for ' . implode('/', $loc));
+                    return false;
+                }
+                return $this->_encode_der($source, $filters + $mapping);
+            case FILE_ASN1_TYPE_NULL:
+                $value = '';
+                break;
+            case FILE_ASN1_TYPE_NUMERIC_STRING:
+            case FILE_ASN1_TYPE_TELETEX_STRING:
+            case FILE_ASN1_TYPE_PRINTABLE_STRING:
+            case FILE_ASN1_TYPE_UNIVERSAL_STRING:
+            case FILE_ASN1_TYPE_UTF8_STRING:
+            case FILE_ASN1_TYPE_BMP_STRING:
+            case FILE_ASN1_TYPE_IA5_STRING:
+            case FILE_ASN1_TYPE_VISIBLE_STRING:
+            case FILE_ASN1_TYPE_VIDEOTEX_STRING:
+            case FILE_ASN1_TYPE_GRAPHIC_STRING:
+            case FILE_ASN1_TYPE_GENERAL_STRING:
+                $value = $source;
+                break;
+            case FILE_ASN1_TYPE_BOOLEAN:
+                $value = $source ? "\xFF" : "\x00";
+                break;
+            default:
+                user_error('Mapping provides no type definition for ' . implode('/', $this->location));
+                return false;
+        }
+
+        if (isset($idx)) {
+            array_pop($this->location);
+        }
+
+        if (isset($mapping['cast'])) {
+            $tag = ($mapping['class'] << 6) | ($tag & 0x20) | $mapping['cast'];
+        }
+
+        return chr($tag) . $this->_encodeLength(strlen($value)) . $value;
+    }
+
+    /**
+     * DER-encode the length
+     *
+     * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4.  See
+     * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 � 8.1.3} for more information.
+     *
+     * @access private
+     * @param Integer $length
+     * @return String
+     */
+    function _encodeLength($length)
+    {
+        if ($length <= 0x7F) {
+            return chr($length);
+        }
+
+        $temp = ltrim(pack('N', $length), chr(0));
+        return pack('Ca*', 0x80 | strlen($temp), $temp);
+    }
+
+    /**
+     * BER-decode the time
+     *
+     * Called by _decode_ber() and in the case of implicit tags asn1map().
+     *
+     * @access private
+     * @param String $content
+     * @param Integer $tag
+     * @return String
+     */
+    function _decodeTime($content, $tag)
+    {
+        /* UTCTime:
+           http://tools.ietf.org/html/rfc5280#section-4.1.2.5.1
+           http://www.obj-sys.com/asn1tutorial/node15.html
+
+           GeneralizedTime:
+           http://tools.ietf.org/html/rfc5280#section-4.1.2.5.2
+           http://www.obj-sys.com/asn1tutorial/node14.html */
+
+        $pattern = $tag == FILE_ASN1_TYPE_UTC_TIME ?
+            '#(..)(..)(..)(..)(..)(..)(.*)#' :
+            '#(....)(..)(..)(..)(..)(..).*([Z+-].*)$#';
+
+        preg_match($pattern, $content, $matches);
+
+        list(, $year, $month, $day, $hour, $minute, $second, $timezone) = $matches;
+
+        if ($tag == FILE_ASN1_TYPE_UTC_TIME) {
+            $year = $year >= 50 ? "19$year" : "20$year";
+        }
+
+        if ($timezone == 'Z') {
+            $mktime = 'gmmktime';
+            $timezone = 0;
+        } elseif (preg_match('#([+-])(\d\d)(\d\d)#', $timezone, $matches)) {
+            $mktime = 'gmmktime';
+            $timezone = 60 * $matches[3] + 3600 * $matches[2];
+            if ($matches[1] == '-') {
+                $timezone = -$timezone;
+            }
+        } else {
+            $mktime = 'mktime';
+            $timezone = 0;
+        }
+
+        return @$mktime($hour, $minute, $second, $month, $day, $year) + $timezone;
+    }
+
+    /**
+     * Set the time format
+     *
+     * Sets the time / date format for asn1map().
+     *
+     * @access public
+     * @param String $format
+     */
+    function setTimeFormat($format)
+    {
+        $this->format = $format;
+    }
+
+    /**
+     * Load OIDs
+     *
+     * Load the relevant OIDs for a particular ASN.1 semantic mapping.
+     *
+     * @access public
+     * @param Array $oids
+     */
+    function loadOIDs($oids)
+    {
+        $this->oids = $oids;
+    }
+
+    /**
+     * Load filters
+     *
+     * See File_X509, etc, for an example.
+     *
+     * @access public
+     * @param Array $filters
+     */
+    function loadFilters($filters)
+    {
+        $this->filters = $filters;
+    }
+
+    /**
+     * String Shift
+     *
+     * Inspired by array_shift
+     *
+     * @param String $string
+     * @param optional Integer $index
+     * @return String
+     * @access private
+     */
+    function _string_shift(&$string, $index = 1)
+    {
+        $substr = substr($string, 0, $index);
+        $string = substr($string, $index);
+        return $substr;
+    }
+
+    /**
+     * String type conversion
+     *
+     * This is a lazy conversion, dealing only with character size.
+     * No real conversion table is used.
+     *
+     * @param String $in
+     * @param optional Integer $from
+     * @param optional Integer $to
+     * @return String
+     * @access public
+     */
+    function convert($in, $from = FILE_ASN1_TYPE_UTF8_STRING, $to = FILE_ASN1_TYPE_UTF8_STRING)
+    {
+        if (!isset($this->stringTypeSize[$from]) || !isset($this->stringTypeSize[$to])) {
+            return false;
+        }
+        $insize = $this->stringTypeSize[$from];
+        $outsize = $this->stringTypeSize[$to];
+        $inlength = strlen($in);
+        $out = '';
+
+        for ($i = 0; $i < $inlength;) {
+            if ($inlength - $i < $insize) {
+                return false;
+            }
+
+            // Get an input character as a 32-bit value.
+            $c = ord($in[$i++]);
+            switch (true) {
+                case $insize == 4:
+                    $c = ($c << 8) | ord($in[$i++]);
+                    $c = ($c << 8) | ord($in[$i++]);
+                case $insize == 2:
+                    $c = ($c << 8) | ord($in[$i++]);
+                case $insize == 1:
+                    break;
+                case ($c & 0x80) == 0x00:
+                    break;
+                case ($c & 0x40) == 0x00:
+                    return false;
+                default:
+                    $bit = 6;
+                    do {
+                        if ($bit > 25 || $i >= $inlength || (ord($in[$i]) & 0xC0) != 0x80) {
+                            return false;
+                        }
+                        $c = ($c << 6) | (ord($in[$i++]) & 0x3F);
+                        $bit += 5;
+                        $mask = 1 << $bit;
+                    } while ($c & $bit);
+                    $c &= $mask - 1;
+                    break;
+            }
+
+            // Convert and append the character to output string.
+            $v = '';
+            switch (true) {
+                case $outsize == 4:
+                    $v .= chr($c & 0xFF);
+                    $c >>= 8;
+                    $v .= chr($c & 0xFF);
+                    $c >>= 8;
+                case $outsize == 2:
+                    $v .= chr($c & 0xFF);
+                    $c >>= 8;
+                case $outsize == 1:
+                    $v .= chr($c & 0xFF);
+                    $c >>= 8;
+                    if ($c) {
+                        return false;
+                    }
+                    break;
+                case ($c & 0x80000000) != 0:
+                    return false;
+                case $c >= 0x04000000:
+                    $v .= chr(0x80 | ($c & 0x3F));
+                    $c = ($c >> 6) | 0x04000000;
+                case $c >= 0x00200000:
+                    $v .= chr(0x80 | ($c & 0x3F));
+                    $c = ($c >> 6) | 0x00200000;
+                case $c >= 0x00010000:
+                    $v .= chr(0x80 | ($c & 0x3F));
+                    $c = ($c >> 6) | 0x00010000;
+                case $c >= 0x00000800:
+                    $v .= chr(0x80 | ($c & 0x3F));
+                    $c = ($c >> 6) | 0x00000800;
+                case $c >= 0x00000080:
+                    $v .= chr(0x80 | ($c & 0x3F));
+                    $c = ($c >> 6) | 0x000000C0;
+                default:
+                    $v .= chr($c);
+                    break;
+            }
+            $out .= strrev($v);
+        }
+        return $out;
+    }
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/File/X509.php b/apps/files_external/3rdparty/phpseclib/phpseclib/File/X509.php
new file mode 100644
index 0000000000000000000000000000000000000000..278da62e26208c9d1a547040b3479f010ea9029c
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/File/X509.php
@@ -0,0 +1,4323 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP X.509 Parser
+ *
+ * PHP versions 4 and 5
+ *
+ * Encode and decode X.509 certificates.
+ *
+ * The extensions are from {@link http://tools.ietf.org/html/rfc5280 RFC5280} and 
+ * {@link http://web.archive.org/web/19961027104704/http://www3.netscape.com/eng/security/cert-exts.html Netscape Certificate Extensions}.
+ *
+ * Note that loading an X.509 certificate and resaving it may invalidate the signature.  The reason being that the signature is based on a
+ * portion of the certificate that contains optional parameters with default values.  ie. if the parameter isn't there the default value is
+ * used.  Problem is, if the parameter is there and it just so happens to have the default value there are two ways that that parameter can
+ * be encoded.  It can be encoded explicitly or left out all together.  This would effect the signature value and thus may invalidate the
+ * the certificate all together unless the certificate is re-signed.
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category   File
+ * @package    File_X509
+ * @author     Jim Wigginton <terrafrost@php.net>
+ * @copyright  MMXII Jim Wigginton
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @version    $Id$
+ * @link       htp://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include File_ASN1
+ */
+if (!class_exists('File_ASN1')) {
+    require_once('File/ASN1.php');
+}
+
+/**
+ * Flag to only accept signatures signed by certificate authorities
+ *
+ * @access public
+ * @see File_X509::validateSignature()
+ */
+define('FILE_X509_VALIDATE_SIGNATURE_BY_CA', 1);
+
+/**#@+
+ * @access public
+ * @see File_X509::getDN()
+ */
+/**
+ * Return internal array representation
+ */
+define('FILE_X509_DN_ARRAY', 0);
+/**
+ * Return string
+ */
+define('FILE_X509_DN_STRING', 1);
+/**
+ * Return ASN.1 name string
+ */
+define('FILE_X509_DN_ASN1', 2);
+/**
+ * Return OpenSSL compatible array
+ */
+define('FILE_X509_DN_OPENSSL', 3);
+/**
+ * Return canonical ASN.1 RDNs string
+ */
+define('FILE_X509_DN_CANON', 4);
+/**
+ * Return name hash for file indexing
+ */
+define('FILE_X509_DN_HASH', 5);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see File_X509::saveX509()
+ * @see File_X509::saveCSR()
+ * @see File_X509::saveCRL()
+ */
+/**
+ * Save as PEM
+ *
+ * ie. a base64-encoded PEM with a header and a footer
+ */
+define('FILE_X509_FORMAT_PEM', 0);
+/**
+ * Save as DER
+ */
+define('FILE_X509_FORMAT_DER', 1);
+/**
+ * Save as a SPKAC
+ *
+ * Only works on CSRs. Not currently supported.
+ */
+define('FILE_X509_FORMAT_SPKAC', 2);
+/**#@-*/
+
+/**
+ * Attribute value disposition.
+ * If disposition is >= 0, this is the index of the target value.
+ */
+define('FILE_X509_ATTR_ALL', -1); // All attribute values (array).
+define('FILE_X509_ATTR_APPEND', -2); // Add a value.
+define('FILE_X509_ATTR_REPLACE', -3); // Clear first, then add a value.
+
+/**
+ * Pure-PHP X.509 Parser
+ *
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @version 0.3.1
+ * @access  public
+ * @package File_X509
+ */
+class File_X509 {
+    /**
+     * ASN.1 syntax for X.509 certificates
+     *
+     * @var Array
+     * @access private
+     */
+    var $Certificate;
+
+    /**#@+
+     * ASN.1 syntax for various extensions
+     *
+     * @access private
+     */
+    var $DirectoryString;
+    var $PKCS9String;
+    var $AttributeValue;
+    var $Extensions;
+    var $KeyUsage;
+    var $ExtKeyUsageSyntax;
+    var $BasicConstraints;
+    var $KeyIdentifier;
+    var $CRLDistributionPoints;
+    var $AuthorityKeyIdentifier;
+    var $CertificatePolicies;
+    var $AuthorityInfoAccessSyntax;
+    var $SubjectAltName;
+    var $PrivateKeyUsagePeriod;
+    var $IssuerAltName;
+    var $PolicyMappings;
+    var $NameConstraints;
+
+    var $CPSuri;
+    var $UserNotice;
+
+    var $netscape_cert_type;
+    var $netscape_comment;
+    var $netscape_ca_policy_url;
+
+    var $Name;
+    var $RelativeDistinguishedName;
+    var $CRLNumber;
+    var $CRLReason;
+    var $IssuingDistributionPoint;
+    var $InvalidityDate;
+    var $CertificateIssuer;
+    var $HoldInstructionCode;
+    var $SignedPublicKeyAndChallenge;
+    /**#@-*/
+
+    /**
+     * ASN.1 syntax for Certificate Signing Requests (RFC2986)
+     *
+     * @var Array
+     * @access private
+     */
+    var $CertificationRequest;
+
+    /**
+     * ASN.1 syntax for Certificate Revocation Lists (RFC5280)
+     *
+     * @var Array
+     * @access private
+     */
+    var $CertificateList;
+
+    /**
+     * Distinguished Name
+     *
+     * @var Array
+     * @access private
+     */
+    var $dn;
+
+    /**
+     * Public key
+     *
+     * @var String
+     * @access private
+     */
+    var $publicKey;
+
+    /**
+     * Private key
+     *
+     * @var String
+     * @access private
+     */
+    var $privateKey;
+
+    /**
+     * Object identifiers for X.509 certificates
+     *
+     * @var Array
+     * @access private
+     * @link http://en.wikipedia.org/wiki/Object_identifier
+     */
+    var $oids;
+
+    /**
+     * The certificate authorities
+     *
+     * @var Array
+     * @access private
+     */
+    var $CAs;
+
+    /**
+     * The currently loaded certificate
+     *
+     * @var Array
+     * @access private
+     */
+    var $currentCert;
+
+    /**
+     * The signature subject
+     *
+     * There's no guarantee File_X509 is going to reencode an X.509 cert in the same way it was originally
+     * encoded so we take save the portion of the original cert that the signature would have made for. 
+     *
+     * @var String
+     * @access private
+     */
+    var $signatureSubject;
+
+    /**
+     * Certificate Start Date
+     *
+     * @var String
+     * @access private
+     */
+    var $startDate;
+
+    /**
+     * Certificate End Date
+     *
+     * @var String
+     * @access private
+     */
+    var $endDate;
+
+    /**
+     * Serial Number
+     *
+     * @var String
+     * @access private
+     */
+    var $serialNumber;
+
+    /**
+     * Key Identifier
+     *
+     * See {@link http://tools.ietf.org/html/rfc5280#section-4.2.1.1 RFC5280#section-4.2.1.1} and
+     * {@link http://tools.ietf.org/html/rfc5280#section-4.2.1.2 RFC5280#section-4.2.1.2}.
+     *
+     * @var String
+     * @access private
+     */
+    var $currentKeyIdentifier;
+
+    /**
+     * CA Flag
+     *
+     * @var Boolean
+     * @access private
+     */
+    var $caFlag = false;
+
+    /**
+     * Default Constructor.
+     *
+     * @return File_X509
+     * @access public
+     */
+    function File_X509()
+    {
+        // Explicitly Tagged Module, 1988 Syntax
+        // http://tools.ietf.org/html/rfc5280#appendix-A.1
+
+        $this->DirectoryString = array(
+            'type'     => FILE_ASN1_TYPE_CHOICE,
+            'children' => array(
+                'teletexString'   => array('type' => FILE_ASN1_TYPE_TELETEX_STRING),
+                'printableString' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING),
+                'universalString' => array('type' => FILE_ASN1_TYPE_UNIVERSAL_STRING),
+                'utf8String'      => array('type' => FILE_ASN1_TYPE_UTF8_STRING),
+                'bmpString'       => array('type' => FILE_ASN1_TYPE_BMP_STRING)
+            )
+        );
+
+        $this->PKCS9String = array(
+            'type'     => FILE_ASN1_TYPE_CHOICE,
+            'children' => array(
+                'ia5String'       => array('type' => FILE_ASN1_TYPE_IA5_STRING),
+                'directoryString' => $this->DirectoryString
+            )
+        );
+
+        $this->AttributeValue = array('type' => FILE_ASN1_TYPE_ANY);
+
+        $AttributeType = array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER);
+
+        $AttributeTypeAndValue = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'type' => $AttributeType,
+                'value'=> $this->AttributeValue
+            )
+        );
+
+        /*
+        In practice, RDNs containing multiple name-value pairs (called "multivalued RDNs") are rare,
+        but they can be useful at times when either there is no unique attribute in the entry or you
+        want to ensure that the entry's DN contains some useful identifying information.
+
+        - https://www.opends.org/wiki/page/DefinitionRelativeDistinguishedName
+        */
+        $this->RelativeDistinguishedName = array(
+            'type'     => FILE_ASN1_TYPE_SET,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $AttributeTypeAndValue
+        );
+
+        // http://tools.ietf.org/html/rfc5280#section-4.1.2.4
+        $RDNSequence = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            // RDNSequence does not define a min or a max, which means it doesn't have one
+            'min'      => 0,
+            'max'      => -1,
+            'children' => $this->RelativeDistinguishedName
+        );
+
+        $this->Name = array(
+            'type'     => FILE_ASN1_TYPE_CHOICE,
+            'children' => array(
+                'rdnSequence' => $RDNSequence
+            )
+        );
+
+        // http://tools.ietf.org/html/rfc5280#section-4.1.1.2
+        $AlgorithmIdentifier = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'algorithm'  => array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER),
+                'parameters' => array(
+                                    'type'     => FILE_ASN1_TYPE_ANY,
+                                    'optional' => true
+                                )
+            )
+        );
+
+        /*
+           A certificate using system MUST reject the certificate if it encounters
+           a critical extension it does not recognize; however, a non-critical
+           extension may be ignored if it is not recognized.
+
+           http://tools.ietf.org/html/rfc5280#section-4.2
+        */
+        $Extension = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'extnId'   => array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER),
+                'critical' => array(
+                                  'type'     => FILE_ASN1_TYPE_BOOLEAN,
+                                  'optional' => true,
+                                  'default'  => false
+                              ),
+                'extnValue' => array('type' => FILE_ASN1_TYPE_OCTET_STRING)
+            )
+        );
+
+        $this->Extensions = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'min'      => 1,
+            // technically, it's MAX, but we'll assume anything < 0 is MAX
+            'max'      => -1,
+            // if 'children' isn't an array then 'min' and 'max' must be defined
+            'children' => $Extension
+        );
+
+        $SubjectPublicKeyInfo = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'algorithm'        => $AlgorithmIdentifier,
+                'subjectPublicKey' => array('type' => FILE_ASN1_TYPE_BIT_STRING)
+            )
+        );
+
+        $UniqueIdentifier = array('type' => FILE_ASN1_TYPE_BIT_STRING);
+
+        $Time = array(
+            'type'     => FILE_ASN1_TYPE_CHOICE,
+            'children' => array(
+                'utcTime'     => array('type' => FILE_ASN1_TYPE_UTC_TIME),
+                'generalTime' => array('type' => FILE_ASN1_TYPE_GENERALIZED_TIME)
+            )
+        );
+
+        // http://tools.ietf.org/html/rfc5280#section-4.1.2.5
+        $Validity = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'notBefore' => $Time,
+                'notAfter'  => $Time
+            )
+        );
+
+        $CertificateSerialNumber = array('type' => FILE_ASN1_TYPE_INTEGER);
+
+        $Version = array(
+            'type'    => FILE_ASN1_TYPE_INTEGER,
+            'mapping' => array('v1', 'v2', 'v3')
+        );
+
+        // assert($TBSCertificate['children']['signature'] == $Certificate['children']['signatureAlgorithm'])
+        $TBSCertificate = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                // technically, default implies optional, but we'll define it as being optional, none-the-less, just to
+                // reenforce that fact
+                'version'             => array(
+                                             'constant' => 0,
+                                             'optional' => true,
+                                             'explicit' => true,
+                                             'default'  => 'v1'
+                                         ) + $Version,
+                'serialNumber'         => $CertificateSerialNumber,
+                'signature'            => $AlgorithmIdentifier,
+                'issuer'               => $this->Name,
+                'validity'             => $Validity,
+                'subject'              => $this->Name,
+                'subjectPublicKeyInfo' => $SubjectPublicKeyInfo,
+                // implicit means that the T in the TLV structure is to be rewritten, regardless of the type
+                'issuerUniqueID'       => array(
+                                               'constant' => 1,
+                                               'optional' => true,
+                                               'implicit' => true
+                                           ) + $UniqueIdentifier,
+                'subjectUniqueID'       => array(
+                                               'constant' => 2,
+                                               'optional' => true,
+                                               'implicit' => true
+                                           ) + $UniqueIdentifier,
+                // <http://tools.ietf.org/html/rfc2459#page-74> doesn't use the EXPLICIT keyword but if
+                // it's not IMPLICIT, it's EXPLICIT
+                'extensions'            => array(
+                                               'constant' => 3,
+                                               'optional' => true,
+                                               'explicit' => true
+                                           ) + $this->Extensions
+            )
+        );
+
+        $this->Certificate = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                 'tbsCertificate'     => $TBSCertificate,
+                 'signatureAlgorithm' => $AlgorithmIdentifier,
+                 'signature'          => array('type' => FILE_ASN1_TYPE_BIT_STRING)
+            )
+        );
+
+        $this->KeyUsage = array(
+            'type'    => FILE_ASN1_TYPE_BIT_STRING,
+            'mapping' => array(
+                'digitalSignature',
+                'nonRepudiation',
+                'keyEncipherment',
+                'dataEncipherment',
+                'keyAgreement',
+                'keyCertSign',
+                'cRLSign',
+                'encipherOnly',
+                'decipherOnly'
+            )
+        );
+
+        $this->BasicConstraints = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'cA'                => array(
+                                                 'type'     => FILE_ASN1_TYPE_BOOLEAN,
+                                                 'optional' => true,
+                                                 'default'  => false
+                                       ),
+                'pathLenConstraint' => array(
+                                                 'type' => FILE_ASN1_TYPE_INTEGER,
+                                                 'optional' => true
+                                       )
+            )
+        );
+
+        $this->KeyIdentifier = array('type' => FILE_ASN1_TYPE_OCTET_STRING);
+
+        $OrganizationalUnitNames = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => 4, // ub-organizational-units
+            'children' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING)
+        );
+
+        $PersonalName = array(
+            'type'     => FILE_ASN1_TYPE_SET,
+            'children' => array(
+                'surname'              => array(
+                                           'type' => FILE_ASN1_TYPE_PRINTABLE_STRING,
+                                           'constant' => 0,
+                                           'optional' => true,
+                                           'implicit' => true
+                                         ),
+                'given-name'           => array(
+                                           'type' => FILE_ASN1_TYPE_PRINTABLE_STRING,
+                                           'constant' => 1,
+                                           'optional' => true,
+                                           'implicit' => true
+                                         ),
+                'initials'             => array(
+                                           'type' => FILE_ASN1_TYPE_PRINTABLE_STRING,
+                                           'constant' => 2,
+                                           'optional' => true,
+                                           'implicit' => true
+                                         ),
+                'generation-qualifier' => array(
+                                           'type' => FILE_ASN1_TYPE_PRINTABLE_STRING,
+                                           'constant' => 3,
+                                           'optional' => true,
+                                           'implicit' => true
+                                         )
+            )
+        );
+
+        $NumericUserIdentifier = array('type' => FILE_ASN1_TYPE_NUMERIC_STRING);
+
+        $OrganizationName = array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING);
+
+        $PrivateDomainName = array(
+            'type'     => FILE_ASN1_TYPE_CHOICE,
+            'children' => array(
+                'numeric'   => array('type' => FILE_ASN1_TYPE_NUMERIC_STRING),
+                'printable' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING)
+            )
+        );
+
+        $TerminalIdentifier = array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING);
+
+        $NetworkAddress = array('type' => FILE_ASN1_TYPE_NUMERIC_STRING);
+
+        $AdministrationDomainName = array(
+            'type'     => FILE_ASN1_TYPE_CHOICE,
+            // if class isn't present it's assumed to be FILE_ASN1_CLASS_UNIVERSAL or
+            // (if constant is present) FILE_ASN1_CLASS_CONTEXT_SPECIFIC
+            'class'    => FILE_ASN1_CLASS_APPLICATION,
+            'cast'     => 2,
+            'children' => array(
+                'numeric'   => array('type' => FILE_ASN1_TYPE_NUMERIC_STRING),
+                'printable' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING)
+            )
+        );
+
+        $CountryName = array(
+            'type'     => FILE_ASN1_TYPE_CHOICE,
+            // if class isn't present it's assumed to be FILE_ASN1_CLASS_UNIVERSAL or
+            // (if constant is present) FILE_ASN1_CLASS_CONTEXT_SPECIFIC
+            'class'    => FILE_ASN1_CLASS_APPLICATION,
+            'cast'     => 1,
+            'children' => array(
+                'x121-dcc-code'        => array('type' => FILE_ASN1_TYPE_NUMERIC_STRING),
+                'iso-3166-alpha2-code' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING)
+            )
+        );
+
+        $AnotherName = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                 'type-id' => array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER),
+                 'value'   => array(
+                                  'type' => FILE_ASN1_TYPE_ANY,
+                                  'constant' => 0,
+                                  'optional' => true,
+                                  'explicit' => true
+                              )
+            )
+        );
+
+        $ExtensionAttribute = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                 'extension-attribute-type'  => array(
+                                                    'type' => FILE_ASN1_TYPE_PRINTABLE_STRING,
+                                                    'constant' => 0,
+                                                    'optional' => true,
+                                                    'implicit' => true
+                                                ),
+                 'extension-attribute-value' => array(
+                                                    'type' => FILE_ASN1_TYPE_ANY,
+                                                    'constant' => 1,
+                                                    'optional' => true,
+                                                    'explicit' => true
+                                                )
+            )
+        );
+
+        $ExtensionAttributes = array(
+            'type'     => FILE_ASN1_TYPE_SET,
+            'min'      => 1,
+            'max'      => 256, // ub-extension-attributes
+            'children' => $ExtensionAttribute
+        );
+
+        $BuiltInDomainDefinedAttribute = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                 'type'  => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING),
+                 'value' => array('type' => FILE_ASN1_TYPE_PRINTABLE_STRING)
+            )
+        );
+
+        $BuiltInDomainDefinedAttributes = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => 4, // ub-domain-defined-attributes
+            'children' => $BuiltInDomainDefinedAttribute
+        );
+
+        $BuiltInStandardAttributes =  array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'country-name'               => array('optional' => true) + $CountryName,
+                'administration-domain-name' => array('optional' => true) + $AdministrationDomainName,
+                'network-address'            => array(
+                                                 'constant' => 0,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $NetworkAddress,
+                'terminal-identifier'        => array(
+                                                 'constant' => 1,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $TerminalIdentifier,
+                'private-domain-name'        => array(
+                                                 'constant' => 2,
+                                                 'optional' => true,
+                                                 'explicit' => true
+                                               ) + $PrivateDomainName,
+                'organization-name'          => array(
+                                                 'constant' => 3,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $OrganizationName,
+                'numeric-user-identifier'    => array(
+                                                 'constant' => 4,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $NumericUserIdentifier,
+                'personal-name'              => array(
+                                                 'constant' => 5,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $PersonalName,
+                'organizational-unit-names'  => array(
+                                                 'constant' => 6,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $OrganizationalUnitNames
+            )
+        );
+
+        $ORAddress = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                 'built-in-standard-attributes'       => $BuiltInStandardAttributes,
+                 'built-in-domain-defined-attributes' => array('optional' => true) + $BuiltInDomainDefinedAttributes,
+                 'extension-attributes'               => array('optional' => true) + $ExtensionAttributes
+            )
+        );
+
+        $EDIPartyName = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                 'nameAssigner' => array(
+                                    'constant' => 0,
+                                    'optional' => true,
+                                    'implicit' => true
+                                ) + $this->DirectoryString,
+                 // partyName is technically required but File_ASN1 doesn't currently support non-optional constants and
+                 // setting it to optional gets the job done in any event.
+                 'partyName'    => array(
+                                    'constant' => 1,
+                                    'optional' => true,
+                                    'implicit' => true
+                                ) + $this->DirectoryString
+            )
+        );
+
+        $GeneralName = array(
+            'type'     => FILE_ASN1_TYPE_CHOICE,
+            'children' => array(
+                'otherName'                 => array(
+                                                 'constant' => 0,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $AnotherName,
+                'rfc822Name'                => array(
+                                                 'type' => FILE_ASN1_TYPE_IA5_STRING,
+                                                 'constant' => 1,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ),
+                'dNSName'                   => array(
+                                                 'type' => FILE_ASN1_TYPE_IA5_STRING,
+                                                 'constant' => 2,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ),
+                'x400Address'               => array(
+                                                 'constant' => 3,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $ORAddress,
+                'directoryName'             => array(
+                                                 'constant' => 4,
+                                                 'optional' => true,
+                                                 'explicit' => true
+                                               ) + $this->Name,
+                'ediPartyName'              => array(
+                                                 'constant' => 5,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $EDIPartyName,
+                'uniformResourceIdentifier' => array(
+                                                 'type' => FILE_ASN1_TYPE_IA5_STRING,
+                                                 'constant' => 6,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ),
+                'iPAddress'                 => array(
+                                                 'type' => FILE_ASN1_TYPE_OCTET_STRING,
+                                                 'constant' => 7,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ),
+                'registeredID'              => array(
+                                                 'type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER,
+                                                 'constant' => 8,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               )
+            )
+        );
+
+        $GeneralNames = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $GeneralName
+        );
+
+        $this->IssuerAltName = $GeneralNames;
+
+        $ReasonFlags = array(
+            'type'    => FILE_ASN1_TYPE_BIT_STRING,
+            'mapping' => array(
+                'unused',
+                'keyCompromise',
+                'cACompromise',
+                'affiliationChanged',
+                'superseded',
+                'cessationOfOperation',
+                'certificateHold',
+                'privilegeWithdrawn',
+                'aACompromise'
+            )
+        );
+
+        $DistributionPointName = array(
+            'type'     => FILE_ASN1_TYPE_CHOICE,
+            'children' => array(
+                'fullName'                => array(
+                                                 'constant' => 0,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                       ) + $GeneralNames,
+                'nameRelativeToCRLIssuer' => array(
+                                                 'constant' => 1,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                       ) + $this->RelativeDistinguishedName
+            )
+        );
+
+        $DistributionPoint = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'distributionPoint' => array(
+                                                 'constant' => 0,
+                                                 'optional' => true,
+                                                 'explicit' => true
+                                       ) + $DistributionPointName,
+                'reasons'           => array(
+                                                 'constant' => 1,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                       ) + $ReasonFlags,
+                'cRLIssuer'         => array(
+                                                 'constant' => 2,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                       ) + $GeneralNames
+            )
+        );
+
+        $this->CRLDistributionPoints = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $DistributionPoint
+        );
+
+        $this->AuthorityKeyIdentifier = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'keyIdentifier'             => array(
+                                                 'constant' => 0,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $this->KeyIdentifier,
+                'authorityCertIssuer'       => array(
+                                                 'constant' => 1,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $GeneralNames,
+                'authorityCertSerialNumber' => array(
+                                                 'constant' => 2,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $CertificateSerialNumber
+            )
+        );
+
+        $PolicyQualifierId = array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER);
+
+        $PolicyQualifierInfo = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'policyQualifierId' => $PolicyQualifierId,
+                'qualifier'         => array('type' => FILE_ASN1_TYPE_ANY)
+            )
+        );
+
+        $CertPolicyId = array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER);
+
+        $PolicyInformation = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'policyIdentifier' => $CertPolicyId,
+                'policyQualifiers' => array(
+                                          'type'     => FILE_ASN1_TYPE_SEQUENCE,
+                                          'min'      => 0,
+                                          'max'      => -1,
+                                          'optional' => true,
+                                          'children' => $PolicyQualifierInfo
+                                      )
+            )
+        );
+
+        $this->CertificatePolicies = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $PolicyInformation
+        );
+
+        $this->PolicyMappings = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => array(
+                              'type'     => FILE_ASN1_TYPE_SEQUENCE,
+                              'children' => array(
+                                  'issuerDomainPolicy' => $CertPolicyId,
+                                  'subjectDomainPolicy' => $CertPolicyId
+                              )
+                       )
+        );
+
+        $KeyPurposeId = array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER);
+
+        $this->ExtKeyUsageSyntax = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $KeyPurposeId
+        );
+
+        $AccessDescription = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'accessMethod'   => array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER),
+                'accessLocation' => $GeneralName
+            )
+        );
+
+        $this->AuthorityInfoAccessSyntax = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $AccessDescription
+        );
+
+        $this->SubjectAltName = $GeneralNames;
+
+        $this->PrivateKeyUsagePeriod = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'notBefore' => array(
+                                                 'constant' => 0,
+                                                 'optional' => true,
+                                                 'implicit' => true,
+                                                 'type' => FILE_ASN1_TYPE_GENERALIZED_TIME),
+                'notAfter'  => array(
+                                                 'constant' => 1,
+                                                 'optional' => true,
+                                                 'implicit' => true,
+                                                 'type' => FILE_ASN1_TYPE_GENERALIZED_TIME)
+            )
+        );
+
+        $BaseDistance = array('type' => FILE_ASN1_TYPE_INTEGER);
+
+        $GeneralSubtree = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'base'    => $GeneralName,
+                'minimum' => array(
+                                 'constant' => 0,
+                                 'optional' => true,
+                                 'implicit' => true,
+                                 'default' => new Math_BigInteger(0)
+                             ) + $BaseDistance,
+                'maximum' => array(
+                                 'constant' => 1,
+                                 'optional' => true,
+                                 'implicit' => true,
+                             ) + $BaseDistance
+            )
+        );
+
+        $GeneralSubtrees = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $GeneralSubtree
+        );
+
+        $this->NameConstraints = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'permittedSubtrees' => array(
+                                           'constant' => 0,
+                                           'optional' => true,
+                                           'implicit' => true
+                                       ) + $GeneralSubtrees,
+                'excludedSubtrees'  => array(
+                                           'constant' => 1,
+                                           'optional' => true,
+                                           'implicit' => true
+                                       ) + $GeneralSubtrees
+            )
+        );
+
+        $this->CPSuri = array('type' => FILE_ASN1_TYPE_IA5_STRING);
+
+        $DisplayText = array(
+            'type'     => FILE_ASN1_TYPE_CHOICE,
+            'children' => array(
+                'ia5String'     => array('type' => FILE_ASN1_TYPE_IA5_STRING),
+                'visibleString' => array('type' => FILE_ASN1_TYPE_VISIBLE_STRING),
+                'bmpString'     => array('type' => FILE_ASN1_TYPE_BMP_STRING),
+                'utf8String'    => array('type' => FILE_ASN1_TYPE_UTF8_STRING)
+            )
+        );
+
+        $NoticeReference = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'organization'  => $DisplayText,
+                'noticeNumbers' => array(
+                                       'type'     => FILE_ASN1_TYPE_SEQUENCE,
+                                       'min'      => 1,
+                                       'max'      => 200,
+                                       'children' => array('type' => FILE_ASN1_TYPE_INTEGER)
+                                   )
+            )
+        );
+
+        $this->UserNotice = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'noticeRef' => array(
+                                           'optional' => true,
+                                           'implicit' => true
+                                       ) + $NoticeReference,
+                'explicitText'  => array(
+                                           'optional' => true,
+                                           'implicit' => true
+                                       ) + $DisplayText
+            )
+        );
+
+        // mapping is from <http://www.mozilla.org/projects/security/pki/nss/tech-notes/tn3.html>
+        $this->netscape_cert_type = array(
+            'type'    => FILE_ASN1_TYPE_BIT_STRING,
+            'mapping' => array(
+                'SSLClient',
+                'SSLServer',
+                'Email',
+                'ObjectSigning',
+                'Reserved',
+                'SSLCA',
+                'EmailCA',
+                'ObjectSigningCA'
+            )
+        );
+
+        $this->netscape_comment = array('type' => FILE_ASN1_TYPE_IA5_STRING);
+        $this->netscape_ca_policy_url = array('type' => FILE_ASN1_TYPE_IA5_STRING);
+
+        // attribute is used in RFC2986 but we're using the RFC5280 definition
+
+        $Attribute = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'type' => $AttributeType,
+                'value'=> array(
+                              'type'     => FILE_ASN1_TYPE_SET,
+                              'min'      => 1,
+                              'max'      => -1,
+                              'children' => $this->AttributeValue
+                          )
+            )
+        );
+
+        // adapted from <http://tools.ietf.org/html/rfc2986>
+
+        $Attributes = array(
+            'type'     => FILE_ASN1_TYPE_SET,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $Attribute
+        );
+
+        $CertificationRequestInfo = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'version'       => array(
+                                       'type' => FILE_ASN1_TYPE_INTEGER,
+                                       'mapping' => array('v1')
+                                   ),
+                'subject'       => $this->Name,
+                'subjectPKInfo' => $SubjectPublicKeyInfo,
+                'attributes'    => array(
+                                       'constant' => 0,
+                                       'optional' => true,
+                                       'implicit' => true
+                                   ) + $Attributes,
+            )
+        );
+
+        $this->CertificationRequest = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'certificationRequestInfo' => $CertificationRequestInfo,
+                'signatureAlgorithm'       => $AlgorithmIdentifier,
+                'signature'                => array('type' => FILE_ASN1_TYPE_BIT_STRING)
+            )
+        );
+
+        $RevokedCertificate = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                              'userCertificate'    => $CertificateSerialNumber,
+                              'revocationDate'     => $Time,
+                              'crlEntryExtensions' => array(
+                                                          'optional' => true
+                                                      ) + $this->Extensions
+                          )
+        );
+
+        $TBSCertList = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'version'             => array(
+                                             'optional' => true,
+                                             'default'  => 'v1'
+                                         ) + $Version,
+                'signature'           => $AlgorithmIdentifier,
+                'issuer'              => $this->Name,
+                'thisUpdate'          => $Time,
+                'nextUpdate'          => array(
+                                             'optional' => true
+                                         ) + $Time,
+                'revokedCertificates' => array(
+                                             'type'     => FILE_ASN1_TYPE_SEQUENCE,
+                                             'optional' => true,
+                                             'min'      => 0,
+                                             'max'      => -1,
+                                             'children' => $RevokedCertificate
+                                         ),
+                'crlExtensions'       => array(
+                                             'constant' => 0,
+                                             'optional' => true,
+                                             'explicit' => true
+                                         ) + $this->Extensions
+            )
+        );
+
+        $this->CertificateList = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'tbsCertList'        => $TBSCertList,
+                'signatureAlgorithm' => $AlgorithmIdentifier,
+                'signature'          => array('type' => FILE_ASN1_TYPE_BIT_STRING)
+            )
+        );
+
+        $this->CRLNumber = array('type' => FILE_ASN1_TYPE_INTEGER);
+
+        $this->CRLReason = array('type' => FILE_ASN1_TYPE_ENUMERATED,
+           'mapping' => array(
+                            'unspecified',
+                            'keyCompromise',
+                            'cACompromise',
+                            'affiliationChanged',
+                            'superseded',
+                            'cessationOfOperation',
+                            'certificateHold',
+                            // Value 7 is not used.
+                            8 => 'removeFromCRL',
+                            'privilegeWithdrawn',
+                            'aACompromise'
+            )
+        );
+
+        $this->IssuingDistributionPoint = array('type' => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'distributionPoint'          => array(
+                                                    'constant' => 0,
+                                                    'optional' => true,
+                                                    'explicit' => true
+                                                ) + $DistributionPointName,
+                'onlyContainsUserCerts'      => array(
+                                                    'type'     => FILE_ASN1_TYPE_BOOLEAN,
+                                                    'constant' => 1,
+                                                    'optional' => true,
+                                                    'default'  => false,
+                                                    'implicit' => true
+                                                ),
+                'onlyContainsCACerts'        => array(
+                                                    'type'     => FILE_ASN1_TYPE_BOOLEAN,
+                                                    'constant' => 2,
+                                                    'optional' => true,
+                                                    'default'  => false,
+                                                    'implicit' => true
+                                                ),
+                'onlySomeReasons'           => array(
+                                                    'constant' => 3,
+                                                    'optional' => true,
+                                                    'implicit' => true
+                                                ) + $ReasonFlags,
+                'indirectCRL'               => array(
+                                                    'type'     => FILE_ASN1_TYPE_BOOLEAN,
+                                                    'constant' => 4,
+                                                    'optional' => true,
+                                                    'default'  => false,
+                                                    'implicit' => true
+                                                ),
+                'onlyContainsAttributeCerts' => array(
+                                                    'type'     => FILE_ASN1_TYPE_BOOLEAN,
+                                                    'constant' => 5,
+                                                    'optional' => true,
+                                                    'default'  => false,
+                                                    'implicit' => true
+                                                )
+                          )
+        );
+
+        $this->InvalidityDate = array('type' => FILE_ASN1_TYPE_GENERALIZED_TIME);
+
+        $this->CertificateIssuer = $GeneralNames;
+
+        $this->HoldInstructionCode = array('type' => FILE_ASN1_TYPE_OBJECT_IDENTIFIER);
+
+        $PublicKeyAndChallenge = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'spki'      => $SubjectPublicKeyInfo,
+                'challenge' => array('type' => FILE_ASN1_TYPE_IA5_STRING)
+            )
+        );
+
+        $this->SignedPublicKeyAndChallenge = array(
+            'type'     => FILE_ASN1_TYPE_SEQUENCE,
+            'children' => array(
+                'publicKeyAndChallenge' => $PublicKeyAndChallenge,
+                'signatureAlgorithm'    => $AlgorithmIdentifier,
+                'signature'             => array('type' => FILE_ASN1_TYPE_BIT_STRING)
+            )
+        );
+
+        // OIDs from RFC5280 and those RFCs mentioned in RFC5280#section-4.1.1.2
+        $this->oids = array(
+            '1.3.6.1.5.5.7' => 'id-pkix',
+            '1.3.6.1.5.5.7.1' => 'id-pe',
+            '1.3.6.1.5.5.7.2' => 'id-qt',
+            '1.3.6.1.5.5.7.3' => 'id-kp',
+            '1.3.6.1.5.5.7.48' => 'id-ad',
+            '1.3.6.1.5.5.7.2.1' => 'id-qt-cps',
+            '1.3.6.1.5.5.7.2.2' => 'id-qt-unotice',
+            '1.3.6.1.5.5.7.48.1' =>'id-ad-ocsp',
+            '1.3.6.1.5.5.7.48.2' => 'id-ad-caIssuers',
+            '1.3.6.1.5.5.7.48.3' => 'id-ad-timeStamping',
+            '1.3.6.1.5.5.7.48.5' => 'id-ad-caRepository',
+            '2.5.4' => 'id-at',
+            '2.5.4.41' => 'id-at-name',
+            '2.5.4.4' => 'id-at-surname',
+            '2.5.4.42' => 'id-at-givenName',
+            '2.5.4.43' => 'id-at-initials',
+            '2.5.4.44' => 'id-at-generationQualifier',
+            '2.5.4.3' => 'id-at-commonName',
+            '2.5.4.7' => 'id-at-localityName',
+            '2.5.4.8' => 'id-at-stateOrProvinceName',
+            '2.5.4.10' => 'id-at-organizationName',
+            '2.5.4.11' => 'id-at-organizationalUnitName',
+            '2.5.4.12' => 'id-at-title',
+            '2.5.4.13' => 'id-at-description',
+            '2.5.4.46' => 'id-at-dnQualifier',
+            '2.5.4.6' => 'id-at-countryName',
+            '2.5.4.5' => 'id-at-serialNumber',
+            '2.5.4.65' => 'id-at-pseudonym',
+            '2.5.4.17' => 'id-at-postalCode',
+            '2.5.4.9' => 'id-at-streetAddress',
+            '2.5.4.45' => 'id-at-uniqueIdentifier',
+            '2.5.4.72' => 'id-at-role',
+
+            '0.9.2342.19200300.100.1.25' => 'id-domainComponent',
+            '1.2.840.113549.1.9' => 'pkcs-9',
+            '1.2.840.113549.1.9.1' => 'pkcs-9-at-emailAddress',
+            '2.5.29' => 'id-ce',
+            '2.5.29.35' => 'id-ce-authorityKeyIdentifier',
+            '2.5.29.14' => 'id-ce-subjectKeyIdentifier',
+            '2.5.29.15' => 'id-ce-keyUsage',
+            '2.5.29.16' => 'id-ce-privateKeyUsagePeriod',
+            '2.5.29.32' => 'id-ce-certificatePolicies',
+            '2.5.29.32.0' => 'anyPolicy',
+
+            '2.5.29.33' => 'id-ce-policyMappings',
+            '2.5.29.17' => 'id-ce-subjectAltName',
+            '2.5.29.18' => 'id-ce-issuerAltName',
+            '2.5.29.9' => 'id-ce-subjectDirectoryAttributes',
+            '2.5.29.19' => 'id-ce-basicConstraints',
+            '2.5.29.30' => 'id-ce-nameConstraints',
+            '2.5.29.36' => 'id-ce-policyConstraints',
+            '2.5.29.31' => 'id-ce-cRLDistributionPoints',
+            '2.5.29.37' => 'id-ce-extKeyUsage',
+            '2.5.29.37.0' => 'anyExtendedKeyUsage',
+            '1.3.6.1.5.5.7.3.1' => 'id-kp-serverAuth',
+            '1.3.6.1.5.5.7.3.2' => 'id-kp-clientAuth',
+            '1.3.6.1.5.5.7.3.3' => 'id-kp-codeSigning',
+            '1.3.6.1.5.5.7.3.4' => 'id-kp-emailProtection',
+            '1.3.6.1.5.5.7.3.8' => 'id-kp-timeStamping',
+            '1.3.6.1.5.5.7.3.9' => 'id-kp-OCSPSigning',
+            '2.5.29.54' => 'id-ce-inhibitAnyPolicy',
+            '2.5.29.46' => 'id-ce-freshestCRL',
+            '1.3.6.1.5.5.7.1.1' => 'id-pe-authorityInfoAccess',
+            '1.3.6.1.5.5.7.1.11' => 'id-pe-subjectInfoAccess',
+            '2.5.29.20' => 'id-ce-cRLNumber',
+            '2.5.29.28' => 'id-ce-issuingDistributionPoint',
+            '2.5.29.27' => 'id-ce-deltaCRLIndicator',
+            '2.5.29.21' => 'id-ce-cRLReasons',
+            '2.5.29.29' => 'id-ce-certificateIssuer',
+            '2.5.29.23' => 'id-ce-holdInstructionCode',
+            '1.2.840.10040.2' => 'holdInstruction',
+            '1.2.840.10040.2.1' => 'id-holdinstruction-none',
+            '1.2.840.10040.2.2' => 'id-holdinstruction-callissuer',
+            '1.2.840.10040.2.3' => 'id-holdinstruction-reject',
+            '2.5.29.24' => 'id-ce-invalidityDate',
+
+            '1.2.840.113549.2.2' => 'md2',
+            '1.2.840.113549.2.5' => 'md5',
+            '1.3.14.3.2.26' => 'id-sha1',
+            '1.2.840.10040.4.1' => 'id-dsa',
+            '1.2.840.10040.4.3' => 'id-dsa-with-sha1',
+            '1.2.840.113549.1.1' => 'pkcs-1',
+            '1.2.840.113549.1.1.1' => 'rsaEncryption',
+            '1.2.840.113549.1.1.2' => 'md2WithRSAEncryption',
+            '1.2.840.113549.1.1.4' => 'md5WithRSAEncryption',
+            '1.2.840.113549.1.1.5' => 'sha1WithRSAEncryption',
+            '1.2.840.10046.2.1' => 'dhpublicnumber',
+            '2.16.840.1.101.2.1.1.22' => 'id-keyExchangeAlgorithm',
+            '1.2.840.10045' => 'ansi-X9-62',
+            '1.2.840.10045.4' => 'id-ecSigType',
+            '1.2.840.10045.4.1' => 'ecdsa-with-SHA1',
+            '1.2.840.10045.1' => 'id-fieldType',
+            '1.2.840.10045.1.1' => 'prime-field',
+            '1.2.840.10045.1.2' => 'characteristic-two-field',
+            '1.2.840.10045.1.2.3' => 'id-characteristic-two-basis',
+            '1.2.840.10045.1.2.3.1' => 'gnBasis',
+            '1.2.840.10045.1.2.3.2' => 'tpBasis',
+            '1.2.840.10045.1.2.3.3' => 'ppBasis',
+            '1.2.840.10045.2' => 'id-publicKeyType',
+            '1.2.840.10045.2.1' => 'id-ecPublicKey',
+            '1.2.840.10045.3' => 'ellipticCurve',
+            '1.2.840.10045.3.0' => 'c-TwoCurve',
+            '1.2.840.10045.3.0.1' => 'c2pnb163v1',
+            '1.2.840.10045.3.0.2' => 'c2pnb163v2',
+            '1.2.840.10045.3.0.3' => 'c2pnb163v3',
+            '1.2.840.10045.3.0.4' => 'c2pnb176w1',
+            '1.2.840.10045.3.0.5' => 'c2pnb191v1',
+            '1.2.840.10045.3.0.6' => 'c2pnb191v2',
+            '1.2.840.10045.3.0.7' => 'c2pnb191v3',
+            '1.2.840.10045.3.0.8' => 'c2pnb191v4',
+            '1.2.840.10045.3.0.9' => 'c2pnb191v5',
+            '1.2.840.10045.3.0.10' => 'c2pnb208w1',
+            '1.2.840.10045.3.0.11' => 'c2pnb239v1',
+            '1.2.840.10045.3.0.12' => 'c2pnb239v2',
+            '1.2.840.10045.3.0.13' => 'c2pnb239v3',
+            '1.2.840.10045.3.0.14' => 'c2pnb239v4',
+            '1.2.840.10045.3.0.15' => 'c2pnb239v5',
+            '1.2.840.10045.3.0.16' => 'c2pnb272w1',
+            '1.2.840.10045.3.0.17' => 'c2pnb304w1',
+            '1.2.840.10045.3.0.18' => 'c2pnb359v1',
+            '1.2.840.10045.3.0.19' => 'c2pnb368w1',
+            '1.2.840.10045.3.0.20' => 'c2pnb431r1',
+            '1.2.840.10045.3.1' => 'primeCurve',
+            '1.2.840.10045.3.1.1' => 'prime192v1',
+            '1.2.840.10045.3.1.2' => 'prime192v2',
+            '1.2.840.10045.3.1.3' => 'prime192v3',
+            '1.2.840.10045.3.1.4' => 'prime239v1',
+            '1.2.840.10045.3.1.5' => 'prime239v2',
+            '1.2.840.10045.3.1.6' => 'prime239v3',
+            '1.2.840.10045.3.1.7' => 'prime256v1',
+            '1.2.840.113549.1.1.7' => 'id-RSAES-OAEP',
+            '1.2.840.113549.1.1.9' => 'id-pSpecified',
+            '1.2.840.113549.1.1.10' => 'id-RSASSA-PSS',
+            '1.2.840.113549.1.1.8' => 'id-mgf1',
+            '1.2.840.113549.1.1.14' => 'sha224WithRSAEncryption',
+            '1.2.840.113549.1.1.11' => 'sha256WithRSAEncryption',
+            '1.2.840.113549.1.1.12' => 'sha384WithRSAEncryption',
+            '1.2.840.113549.1.1.13' => 'sha512WithRSAEncryption',
+            '2.16.840.1.101.3.4.2.4' => 'id-sha224',
+            '2.16.840.1.101.3.4.2.1' => 'id-sha256',
+            '2.16.840.1.101.3.4.2.2' => 'id-sha384',
+            '2.16.840.1.101.3.4.2.3' => 'id-sha512',
+            '1.2.643.2.2.4' => 'id-GostR3411-94-with-GostR3410-94',
+            '1.2.643.2.2.3' => 'id-GostR3411-94-with-GostR3410-2001',
+            '1.2.643.2.2.20' => 'id-GostR3410-2001',
+            '1.2.643.2.2.19' => 'id-GostR3410-94',
+            // Netscape Object Identifiers from "Netscape Certificate Extensions"
+            '2.16.840.1.113730' => 'netscape',
+            '2.16.840.1.113730.1' => 'netscape-cert-extension',
+            '2.16.840.1.113730.1.1' => 'netscape-cert-type',
+            '2.16.840.1.113730.1.13' => 'netscape-comment',
+            '2.16.840.1.113730.1.8' => 'netscape-ca-policy-url',
+            // the following are X.509 extensions not supported by phpseclib
+            '1.3.6.1.5.5.7.1.12' => 'id-pe-logotype',
+            '1.2.840.113533.7.65.0' => 'entrustVersInfo',
+            '2.16.840.1.113733.1.6.9' => 'verisignPrivate',
+            // for Certificate Signing Requests
+            // see http://tools.ietf.org/html/rfc2985
+            '1.2.840.113549.1.9.2' => 'pkcs-9-at-unstructuredName', // PKCS #9 unstructured name
+            '1.2.840.113549.1.9.7' => 'pkcs-9-at-challengePassword', // Challenge password for certificate revocations
+            '1.2.840.113549.1.9.14' => 'pkcs-9-at-extensionRequest' // Certificate extension request
+        );
+    }
+
+    /**
+     * Load X.509 certificate
+     *
+     * Returns an associative array describing the X.509 cert or a false if the cert failed to load
+     *
+     * @param String $cert
+     * @access public
+     * @return Mixed
+     */
+    function loadX509($cert)
+    {
+        if (is_array($cert) && isset($cert['tbsCertificate'])) {
+            unset($this->currentCert);
+            unset($this->currentKeyIdentifier);
+            $this->dn = $cert['tbsCertificate']['subject'];
+            if (!isset($this->dn)) {
+                return false;
+            }
+            $this->currentCert = $cert;
+
+            $currentKeyIdentifier = $this->getExtension('id-ce-subjectKeyIdentifier');
+            $this->currentKeyIdentifier = is_string($currentKeyIdentifier) ? $currentKeyIdentifier : NULL;
+
+            unset($this->signatureSubject);
+
+            return $cert;
+        }
+
+        $asn1 = new File_ASN1();
+
+        /*
+            X.509 certs are assumed to be base64 encoded but sometimes they'll have additional things in them above and beyond the ceritificate. ie.
+            some may have the following preceeding the -----BEGIN CERTIFICATE----- line:
+
+            subject=/O=organization/OU=org unit/CN=common name
+            issuer=/O=organization/CN=common name
+        */
+        $temp = preg_replace('#^(?:[^-].+[\r\n]+)+|-.+-|[\r\n]| #', '', $cert);
+        $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false;
+        if ($temp != false) {
+            $cert = $temp;
+        }
+
+        if ($cert === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $asn1->loadOIDs($this->oids);
+        $decoded = $asn1->decodeBER($cert);
+
+        if (!empty($decoded)) {
+            $x509 = $asn1->asn1map($decoded[0], $this->Certificate);
+        }
+        if (!isset($x509) || $x509 === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $this->signatureSubject = substr($cert, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);
+
+        $this->_mapInExtensions($x509, 'tbsCertificate/extensions', $asn1);
+
+        $key = &$x509['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'];
+        $key = $this->_reformatKey($x509['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'], $key);
+
+        $this->currentCert = $x509;
+        $this->dn = $x509['tbsCertificate']['subject'];
+
+        $currentKeyIdentifier = $this->getExtension('id-ce-subjectKeyIdentifier');
+        $this->currentKeyIdentifier = is_string($currentKeyIdentifier) ? $currentKeyIdentifier : NULL;
+
+        return $x509;
+    }
+
+    /**
+     * Save X.509 certificate
+     *
+     * @param Array $cert
+     * @param Integer $format optional
+     * @access public
+     * @return String
+     */
+    function saveX509($cert, $format = FILE_X509_FORMAT_PEM)
+    {
+        if (!is_array($cert) || !isset($cert['tbsCertificate'])) {
+            return false;
+        }
+
+        switch (true) {
+            // "case !$a: case !$b: break; default: whatever();" is the same thing as "if ($a && $b) whatever()"
+            case !($algorithm = $this->_subArray($cert, 'tbsCertificate/subjectPublicKeyInfo/algorithm/algorithm')):
+            case is_object($cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']):
+                break;
+            default:
+                switch ($algorithm) {
+                    case 'rsaEncryption':
+                        $cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'] = 
+                            base64_encode("\0" . base64_decode(preg_replace('#-.+-|[\r\n]#', '', $cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'])));
+                }
+        }
+
+        $asn1 = new File_ASN1();
+
+        $asn1->loadOIDs($this->oids);
+
+        $filters = array();
+        $filters['tbsCertificate']['signature']['parameters'] = 
+        $filters['tbsCertificate']['signature']['issuer']['rdnSequence']['value'] = 
+        $filters['tbsCertificate']['issuer']['rdnSequence']['value'] = 
+        $filters['tbsCertificate']['subject']['rdnSequence']['value'] = 
+        $filters['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['parameters'] = 
+        $filters['signatureAlgorithm']['parameters'] = 
+        $filters['authorityCertIssuer']['directoryName']['rdnSequence']['value'] = 
+        //$filters['policyQualifiers']['qualifier'] = 
+        $filters['distributionPoint']['fullName']['directoryName']['rdnSequence']['value'] = 
+        $filters['directoryName']['rdnSequence']['value'] = 
+            array('type' => FILE_ASN1_TYPE_UTF8_STRING);
+        /* in the case of policyQualifiers/qualifier, the type has to be FILE_ASN1_TYPE_IA5_STRING.
+           FILE_ASN1_TYPE_PRINTABLE_STRING will cause OpenSSL's X.509 parser to spit out random
+           characters.
+         */
+        $filters['policyQualifiers']['qualifier'] = 
+            array('type' => FILE_ASN1_TYPE_IA5_STRING);
+
+        $asn1->loadFilters($filters);
+
+        $this->_mapOutExtensions($cert, 'tbsCertificate/extensions', $asn1);
+
+        $cert = $asn1->encodeDER($cert, $this->Certificate);
+
+        switch ($format) {
+            case FILE_X509_FORMAT_DER:
+                return $cert;
+            // case FILE_X509_FORMAT_PEM:
+            default:
+                return "-----BEGIN CERTIFICATE-----\r\n" . chunk_split(base64_encode($cert), 64) . '-----END CERTIFICATE-----';
+        }
+    }
+
+    /**
+     * Map extension values from octet string to extension-specific internal
+     *   format.
+     *
+     * @param Array ref $root
+     * @param String $path
+     * @param Object $asn1
+     * @access private
+     */
+    function _mapInExtensions(&$root, $path, $asn1)
+    {
+        $extensions = &$this->_subArray($root, $path);
+
+        if (is_array($extensions)) {
+            for ($i = 0; $i < count($extensions); $i++) {
+                $id = $extensions[$i]['extnId'];
+                $value = &$extensions[$i]['extnValue'];
+                $value = base64_decode($value);
+                $decoded = $asn1->decodeBER($value);
+                /* [extnValue] contains the DER encoding of an ASN.1 value
+                   corresponding to the extension type identified by extnID */
+                $map = $this->_getMapping($id);
+                if (!is_bool($map)) {
+                    $mapped = $asn1->asn1map($decoded[0], $map);
+                    $value = $mapped === false ? $decoded[0] : $mapped;
+
+                    if ($id == 'id-ce-certificatePolicies') {
+                        for ($j = 0; $j < count($value); $j++) {
+                            if (!isset($value[$j]['policyQualifiers'])) {
+                                continue;
+                            }
+                            for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) {
+                                $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId'];
+                                $map = $this->_getMapping($subid);
+                                $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier'];
+                                if ($map !== false) {
+                                    $decoded = $asn1->decodeBER($subvalue);
+                                    $mapped = $asn1->asn1map($decoded[0], $map);
+                                    $subvalue = $mapped === false ? $decoded[0] : $mapped;
+                                }
+                            }
+                        }
+                    }
+                } elseif ($map) {
+                    $value = base64_encode($value);
+                }
+            }
+        }
+    }
+
+    /**
+     * Map extension values from extension-specific internal format to
+     *   octet string.
+     *
+     * @param Array ref $root
+     * @param String $path
+     * @param Object $asn1
+     * @access private
+     */
+    function _mapOutExtensions(&$root, $path, $asn1)
+    {
+        $extensions = &$this->_subArray($root, $path);
+
+        if (is_array($extensions)) {
+            $size = count($extensions);
+            for ($i = 0; $i < $size; $i++) {
+                $id = $extensions[$i]['extnId'];
+                $value = &$extensions[$i]['extnValue'];
+
+                switch ($id) {
+                    case 'id-ce-certificatePolicies':
+                        for ($j = 0; $j < count($value); $j++) {
+                            if (!isset($value[$j]['policyQualifiers'])) {
+                                continue;
+                            }
+                            for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) {
+                                $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId'];
+                                $map = $this->_getMapping($subid);
+                                $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier'];
+                                if ($map !== false) {
+                                    // by default File_ASN1 will try to render qualifier as a FILE_ASN1_TYPE_IA5_STRING since it's
+                                    // actual type is FILE_ASN1_TYPE_ANY
+                                    $subvalue = new File_ASN1_Element($asn1->encodeDER($subvalue, $map));
+                                }
+                            }
+                        }
+                        break;
+                    case 'id-ce-authorityKeyIdentifier': // use 00 as the serial number instead of an empty string
+                        if (isset($value['authorityCertSerialNumber'])) {
+                            if ($value['authorityCertSerialNumber']->toBytes() == '') {
+                                $temp = chr((FILE_ASN1_CLASS_CONTEXT_SPECIFIC << 6) | 2) . "\1\0";
+                                $value['authorityCertSerialNumber'] = new File_ASN1_Element($temp);
+                            }
+                        }
+                }
+
+                /* [extnValue] contains the DER encoding of an ASN.1 value
+                   corresponding to the extension type identified by extnID */
+                $map = $this->_getMapping($id);
+                if (is_bool($map)) {
+                    if (!$map) {
+                        user_error($id . ' is not a currently supported extension');
+                        unset($extensions[$i]);
+                    }
+                } else {
+                    $temp = $asn1->encodeDER($value, $map);
+                    $value = base64_encode($temp);
+                }
+            }
+        }
+    }
+
+    /**
+     * Map attribute values from ANY type to attribute-specific internal
+     *   format.
+     *
+     * @param Array ref $root
+     * @param String $path
+     * @param Object $asn1
+     * @access private
+     */
+    function _mapInAttributes(&$root, $path, $asn1)
+    {
+        $attributes = &$this->_subArray($root, $path);
+
+        if (is_array($attributes)) {
+            for ($i = 0; $i < count($attributes); $i++) {
+                $id = $attributes[$i]['type'];
+                /* $value contains the DER encoding of an ASN.1 value
+                   corresponding to the attribute type identified by type */
+                $map = $this->_getMapping($id);
+                if (is_array($attributes[$i]['value'])) {
+                    $values = &$attributes[$i]['value'];
+                    for ($j = 0; $j < count($values); $j++) {
+                        $value = $asn1->encodeDER($values[$j], $this->AttributeValue);
+                        $decoded = $asn1->decodeBER($value);
+                        if (!is_bool($map)) {
+                            $mapped = $asn1->asn1map($decoded[0], $map);
+                            if ($mapped !== false) {
+                                $values[$j] = $mapped;
+                            }
+                            if ($id == 'pkcs-9-at-extensionRequest') {
+                                $this->_mapInExtensions($values, $j, $asn1);
+                            }
+                        } elseif ($map) {
+                            $values[$j] = base64_encode($value);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Map attribute values from attribute-specific internal format to
+     *   ANY type.
+     *
+     * @param Array ref $root
+     * @param String $path
+     * @param Object $asn1
+     * @access private
+     */
+    function _mapOutAttributes(&$root, $path, $asn1)
+    {
+        $attributes = &$this->_subArray($root, $path);
+
+        if (is_array($attributes)) {
+            $size = count($attributes);
+            for ($i = 0; $i < $size; $i++) {
+                /* [value] contains the DER encoding of an ASN.1 value
+                   corresponding to the attribute type identified by type */
+                $id = $attributes[$i]['type'];
+                $map = $this->_getMapping($id);
+                if ($map === false) {
+                    user_error($id . ' is not a currently supported attribute', E_USER_NOTICE);
+                    unset($attributes[$i]);
+                }
+                elseif (is_array($attributes[$i]['value'])) {
+                    $values = &$attributes[$i]['value'];
+                    for ($j = 0; $j < count($values); $j++) {
+                        switch ($id) {
+                            case 'pkcs-9-at-extensionRequest':
+                                $this->_mapOutExtensions($values, $j, $asn1);
+                                break;
+                        }
+
+                        if (!is_bool($map)) {
+                            $temp = $asn1->encodeDER($values[$j], $map);
+                            $decoded = $asn1->decodeBER($temp);
+                            $values[$j] = $asn1->asn1map($decoded[0], $this->AttributeValue);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Associate an extension ID to an extension mapping
+     *
+     * @param String $extnId
+     * @access private
+     * @return Mixed
+     */
+    function _getMapping($extnId)
+    {
+        if (!is_string($extnId)) { // eg. if it's a File_ASN1_Element object
+            return true;
+        }
+
+        switch ($extnId) {
+            case 'id-ce-keyUsage':
+                return $this->KeyUsage;
+            case 'id-ce-basicConstraints':
+                return $this->BasicConstraints;
+            case 'id-ce-subjectKeyIdentifier':
+                return $this->KeyIdentifier;
+            case 'id-ce-cRLDistributionPoints':
+                return $this->CRLDistributionPoints;
+            case 'id-ce-authorityKeyIdentifier':
+                return $this->AuthorityKeyIdentifier;
+            case 'id-ce-certificatePolicies':
+                return $this->CertificatePolicies;
+            case 'id-ce-extKeyUsage':
+                return $this->ExtKeyUsageSyntax;
+            case 'id-pe-authorityInfoAccess':
+                return $this->AuthorityInfoAccessSyntax;
+            case 'id-ce-subjectAltName':
+                return $this->SubjectAltName;
+            case 'id-ce-privateKeyUsagePeriod':
+                return $this->PrivateKeyUsagePeriod;
+            case 'id-ce-issuerAltName':
+                return $this->IssuerAltName;
+            case 'id-ce-policyMappings':
+                return $this->PolicyMappings;
+            case 'id-ce-nameConstraints':
+                return $this->NameConstraints;
+
+            case 'netscape-cert-type':
+                return $this->netscape_cert_type;
+            case 'netscape-comment':
+                return $this->netscape_comment;
+            case 'netscape-ca-policy-url':
+                return $this->netscape_ca_policy_url;
+
+            // since id-qt-cps isn't a constructed type it will have already been decoded as a string by the time it gets
+            // back around to asn1map() and we don't want it decoded again.
+            //case 'id-qt-cps':
+            //    return $this->CPSuri;
+            case 'id-qt-unotice':
+                return $this->UserNotice;
+
+            // the following OIDs are unsupported but we don't want them to give notices when calling saveX509().
+            case 'id-pe-logotype': // http://www.ietf.org/rfc/rfc3709.txt
+            case 'entrustVersInfo':
+            // http://support.microsoft.com/kb/287547
+            case '1.3.6.1.4.1.311.20.2': // szOID_ENROLL_CERTTYPE_EXTENSION
+            case '1.3.6.1.4.1.311.21.1': // szOID_CERTSRV_CA_VERSION
+            // "SET Secure Electronic Transaction Specification"
+            // http://www.maithean.com/docs/set_bk3.pdf
+            case '2.23.42.7.0': // id-set-hashedRootKey
+                return true;
+
+            // CSR attributes
+            case 'pkcs-9-at-unstructuredName':
+                return $this->PKCS9String;
+            case 'pkcs-9-at-challengePassword':
+                return $this->DirectoryString;
+            case 'pkcs-9-at-extensionRequest':
+                return $this->Extensions;
+
+            // CRL extensions.
+            case 'id-ce-cRLNumber':
+                return $this->CRLNumber;
+            case 'id-ce-deltaCRLIndicator':
+                return $this->CRLNumber;
+            case 'id-ce-issuingDistributionPoint':
+                return $this->IssuingDistributionPoint;
+            case 'id-ce-freshestCRL':
+                return $this->CRLDistributionPoints;
+            case 'id-ce-cRLReasons':
+                return $this->CRLReason;
+            case 'id-ce-invalidityDate':
+                return $this->InvalidityDate;
+            case 'id-ce-certificateIssuer':
+                return $this->CertificateIssuer;
+            case 'id-ce-holdInstructionCode':
+                return $this->HoldInstructionCode;
+        }
+
+        return false;
+    }
+
+    /**
+     * Load an X.509 certificate as a certificate authority
+     *
+     * @param String $cert
+     * @access public
+     * @return Boolean
+     */
+    function loadCA($cert)
+    {
+        $olddn = $this->dn;
+        $oldcert = $this->currentCert;
+        $oldsigsubj = $this->signatureSubject;
+        $oldkeyid = $this->currentKeyIdentifier;
+
+        $cert = $this->loadX509($cert);
+        if (!$cert) {
+            $this->dn = $olddn;
+            $this->currentCert = $oldcert;
+            $this->signatureSubject = $oldsigsubj;
+            $this->currentKeyIdentifier = $oldkeyid;
+
+            return false;
+        }
+
+        /* From RFC5280 "PKIX Certificate and CRL Profile":
+
+           If the keyUsage extension is present, then the subject public key
+           MUST NOT be used to verify signatures on certificates or CRLs unless
+           the corresponding keyCertSign or cRLSign bit is set. */
+        //$keyUsage = $this->getExtension('id-ce-keyUsage');
+        //if ($keyUsage && !in_array('keyCertSign', $keyUsage)) {
+        //    return false;
+        //}
+
+        /* From RFC5280 "PKIX Certificate and CRL Profile":
+
+           The cA boolean indicates whether the certified public key may be used
+           to verify certificate signatures.  If the cA boolean is not asserted,
+           then the keyCertSign bit in the key usage extension MUST NOT be
+           asserted.  If the basic constraints extension is not present in a
+           version 3 certificate, or the extension is present but the cA boolean
+           is not asserted, then the certified public key MUST NOT be used to
+           verify certificate signatures. */
+        //$basicConstraints = $this->getExtension('id-ce-basicConstraints');
+        //if (!$basicConstraints || !$basicConstraints['cA']) {
+        //    return false;
+        //}
+
+        $this->CAs[] = $cert;
+
+        $this->dn = $olddn;
+        $this->currentCert = $oldcert;
+        $this->signatureSubject = $oldsigsubj;
+
+        return true;
+    }
+
+    /**
+     * Validate an X.509 certificate against a URL
+     *
+     * From RFC2818 "HTTP over TLS":
+     *
+     * Matching is performed using the matching rules specified by
+     * [RFC2459].  If more than one identity of a given type is present in
+     * the certificate (e.g., more than one dNSName name, a match in any one
+     * of the set is considered acceptable.) Names may contain the wildcard
+     * character * which is considered to match any single domain name
+     * component or component fragment. E.g., *.a.com matches foo.a.com but
+     * not bar.foo.a.com. f*.com matches foo.com but not bar.com.
+     *
+     * @param String $url
+     * @access public
+     * @return Boolean
+     */
+    function validateURL($url)
+    {
+        if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) {
+            return false;
+        }
+
+        $components = parse_url($url);
+        if (!isset($components['host'])) {
+            return false;
+        }
+
+        if ($names = $this->getExtension('id-ce-subjectAltName')) {
+            foreach ($names as $key => $value) {
+                $value = str_replace(array('.', '*'), array('\.', '[^.]*'), $value);
+                switch ($key) {
+                    case 'dNSName':
+                        /* From RFC2818 "HTTP over TLS":
+
+                           If a subjectAltName extension of type dNSName is present, that MUST
+                           be used as the identity. Otherwise, the (most specific) Common Name
+                           field in the Subject field of the certificate MUST be used. Although
+                           the use of the Common Name is existing practice, it is deprecated and
+                           Certification Authorities are encouraged to use the dNSName instead. */
+                        if (preg_match('#^' . $value . '$#', $components['host'])) {
+                            return true;
+                        }
+                        break;
+                    case 'iPAddress':
+                        /* From RFC2818 "HTTP over TLS":
+
+                           In some cases, the URI is specified as an IP address rather than a
+                           hostname. In this case, the iPAddress subjectAltName must be present
+                           in the certificate and must exactly match the IP in the URI. */
+                        if (preg_match('#(?:\d{1-3}\.){4}#', $components['host'] . '.') && preg_match('#^' . $value . '$#', $components['host'])) {
+                            return true;
+                        }
+                }
+            }
+            return false;
+        }
+
+        if ($value = $this->getDNProp('id-at-commonName')) {
+            $value = str_replace(array('.', '*'), array('\.', '[^.]*'), $value[0]);
+            return preg_match('#^' . $value . '$#', $components['host']);
+        }
+
+        return false;
+    }
+
+    /**
+     * Validate a date
+     *
+     * If $date isn't defined it is assumed to be the current date.
+     *
+     * @param Integer $date optional
+     * @access public
+     */
+    function validateDate($date = NULL)
+    {
+        if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) {
+            return false;
+        }
+
+        if (!isset($date)) {
+            $date = time();
+        }
+
+        $notBefore = $this->currentCert['tbsCertificate']['validity']['notBefore'];
+        $notBefore = isset($notBefore['generalTime']) ? $notBefore['generalTime'] : $notBefore['utcTime'];
+
+        $notAfter = $this->currentCert['tbsCertificate']['validity']['notAfter'];
+        $notAfter = isset($notAfter['generalTime']) ? $notAfter['generalTime'] : $notAfter['utcTime'];
+
+        switch (true) {
+            case $date < @strtotime($notBefore):
+            case $date > @strtotime($notAfter):
+                return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Validate a signature
+     *
+     * Works on X.509 certs, CSR's and CRL's.
+     * Returns true if the signature is verified, false if it is not correct or NULL on error
+     *
+     * The behavior of this function is inspired by {@link http://php.net/openssl-verify openssl_verify}.
+     *
+     * @param Integer $options optional
+     * @access public
+     * @return Mixed
+     */
+    function validateSignature($options = 0)
+    {
+        if (!is_array($this->currentCert) || !isset($this->signatureSubject)) {
+            return 0;
+        }
+
+        /* TODO:
+           "emailAddress attribute values are not case-sensitive (e.g., "subscriber@example.com" is the same as "SUBSCRIBER@EXAMPLE.COM")."
+            -- http://tools.ietf.org/html/rfc5280#section-4.1.2.6
+
+           implement pathLenConstraint in the id-ce-basicConstraints extension */
+
+        switch (true) {
+            case isset($this->currentCert['tbsCertificate']):
+                // self-signed cert
+                if ($this->currentCert['tbsCertificate']['issuer'] === $this->currentCert['tbsCertificate']['subject']) {
+                    $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier');
+                    $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier');
+                    switch (true) {
+                        case !is_array($authorityKey):
+                        case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
+                            $signingCert = $this->currentCert; // working cert
+                    }
+                }
+
+                if (!empty($this->CAs)) {
+                    for ($i = 0; $i < count($this->CAs); $i++) {
+                        // even if the cert is a self-signed one we still want to see if it's a CA;
+                        // if not, we'll conditionally return an error
+                        $ca = $this->CAs[$i];
+                        if ($this->currentCert['tbsCertificate']['issuer'] === $ca['tbsCertificate']['subject']) {
+                            $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier');
+                            $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca);
+                            switch (true) {
+                                case !is_array($authorityKey):
+                                case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
+                                    $signingCert = $ca; // working cert
+                                    break 2;
+                            }
+                        }
+                    }
+                    if (count($this->CAs) == $i && ($options & FILE_X509_VALIDATE_SIGNATURE_BY_CA)) {
+                        return false;
+                    }
+                } elseif (!isset($signingCert) || ($options & FILE_X509_VALIDATE_SIGNATURE_BY_CA)) {
+                    return false;
+                }
+                return $this->_validateSignature(
+                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'],
+                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'],
+                    $this->currentCert['signatureAlgorithm']['algorithm'],
+                    substr(base64_decode($this->currentCert['signature']), 1),
+                    $this->signatureSubject
+                );
+            case isset($this->currentCert['certificationRequestInfo']):
+                return $this->_validateSignature(
+                    $this->currentCert['certificationRequestInfo']['subjectPKInfo']['algorithm']['algorithm'],
+                    $this->currentCert['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'],
+                    $this->currentCert['signatureAlgorithm']['algorithm'],
+                    substr(base64_decode($this->currentCert['signature']), 1),
+                    $this->signatureSubject
+                );
+            case isset($this->currentCert['publicKeyAndChallenge']):
+                return $this->_validateSignature(
+                    $this->currentCert['publicKeyAndChallenge']['spki']['algorithm']['algorithm'],
+                    $this->currentCert['publicKeyAndChallenge']['spki']['subjectPublicKey'],
+                    $this->currentCert['signatureAlgorithm']['algorithm'],
+                    substr(base64_decode($this->currentCert['signature']), 1),
+                    $this->signatureSubject
+                );
+            case isset($this->currentCert['tbsCertList']):
+                if (!empty($this->CAs)) {
+                    for ($i = 0; $i < count($this->CAs); $i++) {
+                        $ca = $this->CAs[$i];
+                        if ($this->currentCert['tbsCertList']['issuer'] === $ca['tbsCertificate']['subject']) {
+                            $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier');
+                            $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca);
+                            switch (true) {
+                                case !is_array($authorityKey):
+                                case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
+                                    $signingCert = $ca; // working cert
+                                    break 2;
+                            }
+                        }
+                    }
+                }
+                if (!isset($signingCert)) {
+                    return false;
+                }
+                return $this->_validateSignature(
+                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'],
+                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'],
+                    $this->currentCert['signatureAlgorithm']['algorithm'],
+                    substr(base64_decode($this->currentCert['signature']), 1),
+                    $this->signatureSubject
+                );
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * Validates a signature
+     *
+     * Returns true if the signature is verified, false if it is not correct or NULL on error
+     *
+     * @param String $publicKeyAlgorithm
+     * @param String $publicKey
+     * @param String $signatureAlgorithm
+     * @param String $signature
+     * @param String $signatureSubject
+     * @access private
+     * @return Integer
+     */
+    function _validateSignature($publicKeyAlgorithm, $publicKey, $signatureAlgorithm, $signature, $signatureSubject)
+    {
+        switch ($publicKeyAlgorithm) {
+            case 'rsaEncryption':
+                if (!class_exists('Crypt_RSA')) {
+                    require_once('Crypt/RSA.php');
+                }
+                $rsa = new Crypt_RSA();
+                $rsa->loadKey($publicKey);
+
+                switch ($signatureAlgorithm) {
+                    case 'md2WithRSAEncryption':
+                    case 'md5WithRSAEncryption':
+                    case 'sha1WithRSAEncryption':
+                    case 'sha224WithRSAEncryption':
+                    case 'sha256WithRSAEncryption':
+                    case 'sha384WithRSAEncryption':
+                    case 'sha512WithRSAEncryption':
+                        $rsa->setHash(preg_replace('#WithRSAEncryption$#', '', $signatureAlgorithm));
+                        $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
+                        if (!@$rsa->verify($signatureSubject, $signature)) {
+                            return false;
+                        }
+                        break;
+                    default:
+                        return NULL;
+                }
+                break;
+            default:
+                return NULL;
+        }
+
+        return true;
+    }
+
+    /**
+     * Reformat public keys
+     *
+     * Reformats a public key to a format supported by phpseclib (if applicable)
+     *
+     * @param String $algorithm
+     * @param String $key
+     * @access private
+     * @return String
+     */
+    function _reformatKey($algorithm, $key)
+    {
+        switch ($algorithm) {
+            case 'rsaEncryption':
+                return
+                    "-----BEGIN PUBLIC KEY-----\r\n" .
+                    // subjectPublicKey is stored as a bit string in X.509 certs.  the first byte of a bit string represents how many bits
+                    // in the last byte should be ignored.  the following only supports non-zero stuff but as none of the X.509 certs Firefox
+                    // uses as a cert authority actually use a non-zero bit I think it's safe to assume that none do.
+                    chunk_split(base64_encode(substr(base64_decode($key), 1)), 64) .
+                    '-----END PUBLIC KEY-----';
+            default:
+                return $key;
+        }
+    }
+
+    /**
+     * "Normalizes" a Distinguished Name property
+     *
+     * @param String $propName
+     * @access private
+     * @return Mixed
+     */
+    function _translateDNProp($propName)
+    {
+        switch (strtolower($propName)) {
+            case 'id-at-countryname':
+            case 'countryname':
+            case 'c':
+                return 'id-at-countryName';
+            case 'id-at-organizationname':
+            case 'organizationname':
+            case 'o':
+                return 'id-at-organizationName';
+            case 'id-at-dnqualifier':
+            case 'dnqualifier':
+                return 'id-at-dnQualifier';
+            case 'id-at-commonname':
+            case 'commonname':
+            case 'cn':
+                return 'id-at-commonName';
+            case 'id-at-stateorprovinceName':
+            case 'stateorprovincename':
+            case 'state':
+            case 'province':
+            case 'provincename':
+            case 'st':
+                return 'id-at-stateOrProvinceName';
+            case 'id-at-localityname':
+            case 'localityname':
+            case 'l':
+                return 'id-at-localityName';
+            case 'id-emailaddress':
+            case 'emailaddress':
+                return 'pkcs-9-at-emailAddress';
+            case 'id-at-serialnumber':
+            case 'serialnumber':
+                return 'id-at-serialNumber';
+            case 'id-at-postalcode':
+            case 'postalcode':
+                return 'id-at-postalCode';
+            case 'id-at-streetaddress':
+            case 'streetaddress':
+                return 'id-at-streetAddress';
+            case 'id-at-name':
+            case 'name':
+                return 'id-at-name';
+            case 'id-at-givenname':
+            case 'givenname':
+                return 'id-at-givenName';
+            case 'id-at-surname':
+            case 'surname':
+            case 'sn':
+                return 'id-at-surname';
+            case 'id-at-initials':
+            case 'initials':
+                return 'id-at-initials';
+            case 'id-at-generationqualifier':
+            case 'generationqualifier':
+                return 'id-at-generationQualifier';
+            case 'id-at-organizationalunitname':
+            case 'organizationalunitname':
+            case 'ou':
+                return 'id-at-organizationalUnitName';
+            case 'id-at-pseudonym':
+            case 'pseudonym':
+                return 'id-at-pseudonym';
+            case 'id-at-title':
+            case 'title':
+                return 'id-at-title';
+            case 'id-at-description':
+            case 'description':
+                return 'id-at-description';
+            case 'id-at-role':
+            case 'role':
+                return 'id-at-role';
+            case 'id-at-uniqueidentifier':
+            case 'uniqueidentifier':
+            case 'x500uniqueidentifier':
+                return 'id-at-uniqueIdentifier';
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * Set a Distinguished Name property
+     *
+     * @param String $propName
+     * @param Mixed $propValue
+     * @param String $type optional
+     * @access public
+     * @return Boolean
+     */
+    function setDNProp($propName, $propValue, $type = 'utf8String')
+    {
+        if (empty($this->dn)) {
+            $this->dn = array('rdnSequence' => array());
+        }
+
+        if (($propName = $this->_translateDNProp($propName)) === false) {
+            return false;
+        }
+
+        foreach ((array) $propValue as $v) {
+            if (!is_array($v) && isset($type)) {
+                $v = array($type => $v);
+            }
+            $this->dn['rdnSequence'][] = array(
+                array(
+                    'type' => $propName,
+                    'value'=> $v
+                )
+            );
+        }
+
+        return true;
+    }
+
+    /**
+     * Remove Distinguished Name properties
+     *
+     * @param String $propName
+     * @access public
+     */
+    function removeDNProp($propName)
+    {
+        if (empty($this->dn)) {
+            return;
+        }
+
+        if (($propName = $this->_translateDNProp($propName)) === false) {
+            return;
+        }
+
+        $dn = &$this->dn['rdnSequence'];
+        $size = count($dn);
+        for ($i = 0; $i < $size; $i++) {
+            if ($dn[$i][0]['type'] == $propName) {
+                unset($dn[$i]);
+            }
+        }
+
+        $dn = array_values($dn);
+    }
+
+    /**
+     * Get Distinguished Name properties
+     *
+     * @param String $propName
+     * @param Array $dn optional
+     * @param Boolean $withType optional
+     * @return Mixed
+     * @access public
+     */
+    function getDNProp($propName, $dn = NULL, $withType = false)
+    {
+        if (!isset($dn)) {
+            $dn = $this->dn;
+        }
+
+        if (empty($dn)) {
+            return false;
+        }
+
+        if (($propName = $this->_translateDNProp($propName)) === false) {
+            return false;
+        }
+
+        $dn = $dn['rdnSequence'];
+        $result = array();
+        $asn1 = new File_ASN1();
+        for ($i = 0; $i < count($dn); $i++) {
+            if ($dn[$i][0]['type'] == $propName) {
+                $v = $dn[$i][0]['value'];
+                if (!$withType && is_array($v)) {
+                    foreach ($v as $type => $s) {
+                        $type = array_search($type, $asn1->ANYmap, true);
+                        if ($type !== false && isset($asn1->stringTypeSize[$type])) {
+                            $s = $asn1->convert($s, $type);
+                            if ($s !== false) {
+                                $v = $s;
+                                break;
+                            }
+                        }
+                    }
+                    if (is_array($v)) {
+                        $v = array_pop($v); // Always strip data type.
+                    }
+                }
+                $result[] = $v;
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Set a Distinguished Name
+     *
+     * @param Mixed $dn
+     * @param Boolean $merge optional
+     * @param String $type optional
+     * @access public
+     * @return Boolean
+     */
+    function setDN($dn, $merge = false, $type = 'utf8String')
+    {
+        if (!$merge) {
+            $this->dn = NULL;
+        }
+
+        if (is_array($dn)) {
+            if (isset($dn['rdnSequence'])) {
+                $this->dn = $dn; // No merge here.
+                return true;
+            }
+
+            // handles stuff generated by openssl_x509_parse()
+            foreach ($dn as $prop => $value) {
+                if (!$this->setDNProp($prop, $value, $type)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        // handles everything else
+        $results = preg_split('#((?:^|, *|/)(?:C=|O=|OU=|CN=|L=|ST=|SN=|postalCode=|streetAddress=|emailAddress=|serialNumber=|organizationalUnitName=|title=|description=|role=|x500UniqueIdentifier=))#', $dn, -1, PREG_SPLIT_DELIM_CAPTURE);
+        for ($i = 1; $i < count($results); $i+=2) {
+            $prop = trim($results[$i], ', =/');
+            $value = $results[$i + 1];
+            if (!$this->setDNProp($prop, $value, $type)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Get the Distinguished Name for a certificates subject
+     *
+     * @param Mixed $format optional
+     * @param Array $dn optional
+     * @access public
+     * @return Boolean
+     */
+    function getDN($format = FILE_X509_DN_ARRAY, $dn = NULL)
+    {
+        if (!isset($dn)) {
+            $dn = isset($this->currentCert['tbsCertList']) ? $this->currentCert['tbsCertList']['issuer'] : $this->dn;
+        }
+
+        switch ((int) $format) {
+            case FILE_X509_DN_ARRAY:
+                return $dn;
+            case FILE_X509_DN_ASN1:
+                $asn1 = new File_ASN1();
+                $asn1->loadOIDs($this->oids);
+                $filters = array();
+                $filters['rdnSequence']['value'] = array('type' => FILE_ASN1_TYPE_UTF8_STRING);
+                $asn1->loadFilters($filters);
+                return $asn1->encodeDER($dn, $this->Name);
+            case FILE_X509_DN_OPENSSL:
+                $dn = $this->getDN(FILE_X509_DN_STRING, $dn);
+                if ($dn === false) {
+                    return false;
+                }
+                $attrs = preg_split('#((?:^|, *|/)[a-z][a-z0-9]*=)#i', $dn, -1, PREG_SPLIT_DELIM_CAPTURE);
+                $dn = array();
+                for ($i = 1; $i < count($attrs); $i += 2) {
+                    $prop = trim($attrs[$i], ', =/');
+                    $value = $attrs[$i + 1];
+                    if (!isset($dn[$prop])) {
+                        $dn[$prop] = $value;
+                    } else {
+                        $dn[$prop] = array_merge((array) $dn[$prop], array($value));
+                    }
+                }
+                return $dn;
+            case FILE_X509_DN_CANON:
+                //  No SEQUENCE around RDNs and all string values normalized as
+                // trimmed lowercase UTF-8 with all spacing  as one blank.
+                $asn1 = new File_ASN1();
+                $asn1->loadOIDs($this->oids);
+                $filters = array();
+                $filters['value'] = array('type' => FILE_ASN1_TYPE_UTF8_STRING);
+                $asn1->loadFilters($filters);
+                $result = '';
+                foreach ($dn['rdnSequence'] as $rdn) {
+                    foreach ($rdn as &$attr) {
+                        if (is_array($attr['value'])) {
+                            foreach ($attr['value'] as $type => $v) {
+                                $type = array_search($type, $asn1->ANYmap, true);
+                                if ($type !== false && isset($asn1->stringTypeSize[$type])) {
+                                    $v = $asn1->convert($v, $type);
+                                    if ($v !== false) {
+                                        $v = preg_replace('/\s+/', ' ', $v);
+                                        $attr['value'] = strtolower(trim($v));
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    $result .= $asn1->encodeDER($rdn, $this->RelativeDistinguishedName);
+                }
+                return $result;
+            case FILE_X509_DN_HASH:
+                $dn = $this->getDN(FILE_X509_DN_CANON, $dn);
+                if (!class_exists('Crypt_Hash')) {
+                    require_once('Crypt/Hash.php');
+                }
+                $hash = new Crypt_Hash('sha1');
+                $hash = $hash->hash($dn);
+                extract(unpack('Vhash', $hash));
+                return strtolower(bin2hex(pack('N', $hash)));
+        }
+
+        // Defaut is to return a string.
+        $start = true;
+        $output = '';
+        $asn1 = new File_ASN1();
+        foreach ($dn['rdnSequence'] as $field) {
+            $prop = $field[0]['type'];
+            $value = $field[0]['value'];
+
+            $delim = ', ';
+            switch ($prop) {
+                case 'id-at-countryName':
+                    $desc = 'C=';
+                    break;
+                case 'id-at-stateOrProvinceName':
+                    $desc = 'ST=';
+                    break;
+                case 'id-at-organizationName':
+                    $desc = 'O=';
+                    break;
+                case 'id-at-organizationalUnitName':
+                    $desc = 'OU=';
+                    break;
+                case 'id-at-commonName':
+                    $desc = 'CN=';
+                    break;
+                case 'id-at-localityName':
+                    $desc = 'L=';
+                    break;
+                case 'id-at-surname':
+                    $desc = 'SN=';
+                    break;
+                case 'id-at-uniqueIdentifier':
+                    $delim = '/';
+                    $desc = 'x500UniqueIdentifier=';
+                    break;
+                default:
+                    $delim = '/';
+                    $desc = preg_replace('#.+-([^-]+)$#', '$1',  $prop) . '=';
+            }
+
+            if (!$start) {
+                $output.= $delim;
+            }
+            if (is_array($value)) {
+                foreach ($value as $type => $v) {
+                    $type = array_search($type, $asn1->ANYmap, true);
+                    if ($type !== false && isset($asn1->stringTypeSize[$type])) {
+                        $v = $asn1->convert($v, $type);
+                        if ($v !== false) {
+                            $value = $v;
+                            break;
+                        }
+                    }
+                }
+                if (is_array($value)) {
+                    $value = array_pop($value); // Always strip data type.
+                }
+            }
+            $output.= $desc . $value;
+            $start = false;
+        }
+
+        return $output;
+    }
+
+    /**
+     * Get the Distinguished Name for a certificate/crl issuer
+     *
+     * @param Integer $format optional
+     * @access public
+     * @return Mixed
+     */
+    function getIssuerDN($format = FILE_X509_DN_ARRAY)
+    {
+        switch (true) {
+            case !isset($this->currentCert) || !is_array($this->currentCert):
+                break;
+            case isset($this->currentCert['tbsCertificate']):
+                return $this->getDN($format, $this->currentCert['tbsCertificate']['issuer']);
+            case isset($this->currentCert['tbsCertList']):
+                return $this->getDN($format, $this->currentCert['tbsCertList']['issuer']);
+        }
+
+        return false;
+    }
+
+    /**
+     * Get the Distinguished Name for a certificate/csr subject
+     * Alias of getDN()
+     *
+     * @param Integer $format optional
+     * @access public
+     * @return Mixed
+     */
+    function getSubjectDN($format = FILE_X509_DN_ARRAY)
+    {
+        switch (true) {
+            case !empty($this->dn):
+                return $this->getDN($format);
+            case !isset($this->currentCert) || !is_array($this->currentCert):
+                break;
+            case isset($this->currentCert['tbsCertificate']):
+                return $this->getDN($format, $this->currentCert['tbsCertificate']['subject']);
+            case isset($this->currentCert['certificationRequestInfo']):
+                return $this->getDN($format, $this->currentCert['certificationRequestInfo']['subject']);
+        }
+
+        return false;
+    }
+
+    /**
+     * Get an individual Distinguished Name property for a certificate/crl issuer
+     *
+     * @param String $propName
+     * @param Boolean $withType optional
+     * @access public
+     * @return Mixed
+     */
+    function getIssuerDNProp($propName, $withType = false)
+    {
+        switch (true) {
+            case !isset($this->currentCert) || !is_array($this->currentCert):
+                break;
+            case isset($this->currentCert['tbsCertificate']):
+                return $this->getDNProp($propname, $this->currentCert['tbsCertificate']['issuer'], $withType);
+            case isset($this->currentCert['tbsCertList']):
+                return $this->getDNProp($propname, $this->currentCert['tbsCertList']['issuer'], $withType);
+        }
+
+        return false;
+    }
+
+    /**
+     * Get an individual Distinguished Name property for a certificate/csr subject
+     *
+     * @param String $propName
+     * @param Boolean $withType optional
+     * @access public
+     * @return Mixed
+     */
+    function getSubjectDNProp($propName, $withType = false)
+    {
+        switch (true) {
+            case !empty($this->dn):
+                return $this->getDNProp($propName, NULL, $withType);
+            case !isset($this->currentCert) || !is_array($this->currentCert):
+                break;
+            case isset($this->currentCert['tbsCertificate']):
+                return $this->getDNProp($propName, $this->currentCert['tbsCertificate']['subject'], $withType);
+            case isset($this->currentCert['certificationRequestInfo']):
+                return $this->getDNProp($propname, $this->currentCert['certificationRequestInfo']['subject'], $withType);
+        }
+
+        return false;
+    }
+
+    /**
+     * Get the certificate chain for the current cert
+     *
+     * @access public
+     * @return Mixed
+     */
+    function getChain()
+    {
+        $chain = array($this->currentCert);
+
+        if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) {
+            return false;
+        }
+        if (empty($this->CAs)) {
+            return $chain;
+        }
+        while (true) {
+            $currentCert = $chain[count($chain) - 1];
+            for ($i = 0; $i < count($this->CAs); $i++) {
+                $ca = $this->CAs[$i];
+                if ($currentCert['tbsCertificate']['issuer'] === $ca['tbsCertificate']['subject']) {
+                    $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier', $currentCert);
+                    $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca);
+                    switch (true) {
+                        case !is_array($authorityKey):
+                        case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
+                            if ($currentCert === $ca) {
+                                break 3;
+                            }
+                            $chain[] = $ca;
+                            break 2;
+                    }
+                }
+            }
+            if ($i == count($this->CAs)) {
+                break;
+            }
+        }
+        foreach ($chain as $key=>$value) {
+            $chain[$key] = new File_X509();
+            $chain[$key]->loadX509($value);
+        }
+        return $chain;
+    }
+
+    /**
+     * Set public key
+     *
+     * Key needs to be a Crypt_RSA object
+     *
+     * @param Object $key
+     * @access public
+     * @return Boolean
+     */
+    function setPublicKey($key)
+    {
+        $this->publicKey = $key;
+    }
+
+    /**
+     * Set private key
+     *
+     * Key needs to be a Crypt_RSA object
+     *
+     * @param Object $key
+     * @access public
+     */
+    function setPrivateKey($key)
+    {
+        $this->privateKey = $key;
+    }
+
+    /**
+     * Gets the public key
+     *
+     * Returns a Crypt_RSA object or a false.
+     *
+     * @access public
+     * @return Mixed
+     */
+    function getPublicKey()
+    {
+        if (isset($this->publicKey)) {
+            return $this->publicKey;
+        }
+
+        if (isset($this->currentCert) && is_array($this->currentCert)) {
+            foreach (array('tbsCertificate/subjectPublicKeyInfo', 'certificationRequestInfo/subjectPKInfo') as $path) {
+                $keyinfo = $this->_subArray($this->currentCert, $path);
+                if (!empty($keyinfo)) {
+                    break;
+                }
+            }
+        }
+        if (empty($keyinfo)) {
+            return false;
+        }
+
+        $key = $keyinfo['subjectPublicKey'];
+
+        switch ($keyinfo['algorithm']['algorithm']) {
+            case 'rsaEncryption':
+                if (!class_exists('Crypt_RSA')) {
+                    require_once('Crypt/RSA.php');
+                }
+                $publicKey = new Crypt_RSA();
+                $publicKey->loadKey($key);
+                $publicKey->setPublicKey();
+                break;
+            default:
+                return false;
+        }
+
+        return $publicKey;
+    }
+
+    /**
+     * Load a Certificate Signing Request
+     *
+     * @param String $csr
+     * @access public
+     * @return Mixed
+     */
+    function loadCSR($csr)
+    {
+        if (is_array($csr) && isset($csr['certificationRequestInfo'])) {
+            unset($this->currentCert);
+            unset($this->currentKeyIdentifier);
+            unset($this->signatureSubject);
+            $this->dn = $csr['certificationRequestInfo']['subject'];
+            if (!isset($this->dn)) {
+                return false;
+            }
+
+            $this->currentCert = $csr;
+            return $csr;
+        }
+
+        // see http://tools.ietf.org/html/rfc2986
+
+        $asn1 = new File_ASN1();
+
+        $temp = preg_replace('#^(?:[^-].+[\r\n]+)+|-.+-|[\r\n]| #', '', $csr);
+        $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false;
+        if ($temp != false) {
+            $csr = $temp;
+        }
+        $orig = $csr;
+
+        if ($csr === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $asn1->loadOIDs($this->oids);
+        $decoded = $asn1->decodeBER($csr);
+
+        if (empty($decoded)) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $csr = $asn1->asn1map($decoded[0], $this->CertificationRequest);
+        if (!isset($csr) || $csr === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $this->dn = $csr['certificationRequestInfo']['subject'];
+        $this->_mapInAttributes($csr, 'certificationRequestInfo/attributes', $asn1);
+
+        $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);
+
+        $algorithm = &$csr['certificationRequestInfo']['subjectPKInfo']['algorithm']['algorithm'];
+        $key = &$csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'];
+        $key = $this->_reformatKey($algorithm, $key);
+
+        switch ($algorithm) {
+            case 'rsaEncryption':
+                if (!class_exists('Crypt_RSA')) {
+                    require_once('Crypt/RSA.php');
+                }
+                $this->publicKey = new Crypt_RSA();
+                $this->publicKey->loadKey($key);
+                $this->publicKey->setPublicKey();
+                break;
+            default:
+                $this->publicKey = NULL;
+        }
+
+        $this->currentKeyIdentifier = NULL;
+        $this->currentCert = $csr;
+
+        return $csr;
+    }
+
+    /**
+     * Save CSR request
+     *
+     * @param Array $csr
+     * @param Integer $format optional
+     * @access public
+     * @return String
+     */
+    function saveCSR($csr, $format = FILE_X509_FORMAT_PEM)
+    {
+        if (!is_array($csr) || !isset($csr['certificationRequestInfo'])) {
+            return false;
+        }
+
+        switch (true) {
+            case !($algorithm = $this->_subArray($csr, 'certificationRequestInfo/subjectPKInfo/algorithm/algorithm')):
+            case is_object($csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']);
+                break;
+            default:
+                switch ($algorithm) {
+                    case 'rsaEncryption':
+                        $csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'] = 
+                            base64_encode("\0" . base64_decode(preg_replace('#-.+-|[\r\n]#', '', $csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'])));
+                }
+        }
+
+        $asn1 = new File_ASN1();
+
+        $asn1->loadOIDs($this->oids);
+
+        $filters = array();
+        $filters['certificationRequestInfo']['subject']['rdnSequence']['value'] = 
+            array('type' => FILE_ASN1_TYPE_UTF8_STRING);
+
+        $asn1->loadFilters($filters);
+
+        $this->_mapOutAttributes($csr, 'certificationRequestInfo/attributes', $asn1);
+        $csr = $asn1->encodeDER($csr, $this->CertificationRequest);
+
+        switch ($format) {
+            case FILE_X509_FORMAT_DER:
+                return $csr;
+            // case FILE_X509_FORMAT_PEM:
+            default:
+                return "-----BEGIN CERTIFICATE REQUEST-----\r\n" . chunk_split(base64_encode($csr), 64) . '-----END CERTIFICATE REQUEST-----';
+        }
+    }
+
+    /**
+     * Load a SPKAC CSR
+     *
+     * SPKAC's are produced by the HTML5 keygen element:
+     *
+     * https://developer.mozilla.org/en-US/docs/HTML/Element/keygen
+     *
+     * @param String $csr
+     * @access public
+     * @return Mixed
+     */
+    function loadSPKAC($csr)
+    {
+        if (is_array($csr) && isset($csr['publicKeyAndChallenge'])) {
+            unset($this->currentCert);
+            unset($this->currentKeyIdentifier);
+            unset($this->signatureSubject);
+            $this->currentCert = $csr;
+            return $csr;
+        }
+
+        // see http://www.w3.org/html/wg/drafts/html/master/forms.html#signedpublickeyandchallenge
+
+        $asn1 = new File_ASN1();
+
+        $temp = preg_replace('#(?:^[^=]+=)|[\r\n\\\]#', '', $csr);
+        $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false;
+        if ($temp != false) {
+            $csr = $temp;
+        }
+        $orig = $csr;
+
+        if ($csr === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $asn1->loadOIDs($this->oids);
+        $decoded = $asn1->decodeBER($csr);
+
+        if (empty($decoded)) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $csr = $asn1->asn1map($decoded[0], $this->SignedPublicKeyAndChallenge);
+
+        if (!isset($csr) || $csr === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);
+
+        $algorithm = &$csr['publicKeyAndChallenge']['spki']['algorithm']['algorithm'];
+        $key = &$csr['publicKeyAndChallenge']['spki']['subjectPublicKey'];
+        $key = $this->_reformatKey($algorithm, $key);
+
+        switch ($algorithm) {
+            case 'rsaEncryption':
+                if (!class_exists('Crypt_RSA')) {
+                    require_once('Crypt/RSA.php');
+                }
+                $this->publicKey = new Crypt_RSA();
+                $this->publicKey->loadKey($key);
+                $this->publicKey->setPublicKey();
+                break;
+            default:
+                $this->publicKey = NULL;
+        }
+
+        $this->currentKeyIdentifier = NULL;
+        $this->currentCert = $csr;
+
+        return $csr;
+    }
+
+    /**
+     * Load a Certificate Revocation List
+     *
+     * @param String $crl
+     * @access public
+     * @return Mixed
+     */
+    function loadCRL($crl)
+    {
+        if (is_array($crl) && isset($crl['tbsCertList'])) {
+            $this->currentCert = $crl;
+            unset($this->signatureSubject);
+            return $crl;
+        }
+
+        $asn1 = new File_ASN1();
+
+        $temp = preg_replace('#^(?:[^-].+[\r\n]+)+|-.+-|[\r\n]| #', '', $crl);
+        $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false;
+        if ($temp != false) {
+            $crl = $temp;
+        }
+        $orig = $crl;
+
+        if ($crl === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $asn1->loadOIDs($this->oids);
+        $decoded = $asn1->decodeBER($crl);
+
+        if (empty($decoded)) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $crl = $asn1->asn1map($decoded[0], $this->CertificateList);
+        if (!isset($crl) || $crl === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);
+
+        $this->_mapInExtensions($crl, 'tbsCertList/crlExtensions', $asn1);
+        $rclist = &$this->_subArray($crl,'tbsCertList/revokedCertificates');
+        if (is_array($rclist)) {
+            foreach ($rclist as $i => $extension) {
+                $this->_mapInExtensions($rclist, "$i/crlEntryExtensions", $asn1);
+            }
+        }
+
+        $this->currentKeyIdentifier = NULL;
+        $this->currentCert = $crl;
+
+        return $crl;
+    }
+
+    /**
+     * Save Certificate Revocation List.
+     *
+     * @param Array $crl
+     * @param Integer $format optional
+     * @access public
+     * @return String
+     */
+    function saveCRL($crl, $format = FILE_X509_FORMAT_PEM)
+    {
+        if (!is_array($crl) || !isset($crl['tbsCertList'])) {
+            return false;
+        }
+
+        $asn1 = new File_ASN1();
+
+        $asn1->loadOIDs($this->oids);
+
+        $filters = array();
+        $filters['tbsCertList']['issuer']['rdnSequence']['value'] = 
+        $filters['tbsCertList']['signature']['parameters'] = 
+        $filters['signatureAlgorithm']['parameters'] = 
+            array('type' => FILE_ASN1_TYPE_UTF8_STRING);
+
+        if (empty($crl['tbsCertList']['signature']['parameters'])) {
+            $filters['tbsCertList']['signature']['parameters'] = 
+                array('type' => FILE_ASN1_TYPE_NULL);
+        }
+
+        if (empty($crl['signatureAlgorithm']['parameters'])) {
+            $filters['signatureAlgorithm']['parameters'] = 
+                array('type' => FILE_ASN1_TYPE_NULL);
+        }
+
+        $asn1->loadFilters($filters);
+
+        $this->_mapOutExtensions($crl, 'tbsCertList/crlExtensions', $asn1);
+        $rclist = &$this->_subArray($crl,'tbsCertList/revokedCertificates');
+        if (is_array($rclist)) {
+            foreach ($rclist as $i => $extension) {
+                $this->_mapOutExtensions($rclist, "$i/crlEntryExtensions", $asn1);
+            }
+        }
+
+        $crl = $asn1->encodeDER($crl, $this->CertificateList);
+
+        switch ($format) {
+            case FILE_X509_FORMAT_DER:
+                return $crl;
+            // case FILE_X509_FORMAT_PEM:
+            default:
+                return "-----BEGIN X509 CRL-----\r\n" . chunk_split(base64_encode($crl), 64) . '-----END X509 CRL-----';
+        }
+    }
+
+    /**
+     * Sign an X.509 certificate
+     *
+     * $issuer's private key needs to be loaded.
+     * $subject can be either an existing X.509 cert (if you want to resign it),
+     * a CSR or something with the DN and public key explicitly set.
+     *
+     * @param File_X509 $issuer
+     * @param File_X509 $subject
+     * @param String $signatureAlgorithm optional
+     * @access public
+     * @return Mixed
+     */
+    function sign($issuer, $subject, $signatureAlgorithm = 'sha1WithRSAEncryption')
+    {
+        if (!is_object($issuer->privateKey) || empty($issuer->dn)) {
+            return false;
+        }
+
+        if (isset($subject->publicKey) && !($subjectPublicKey = $subject->_formatSubjectPublicKey())) {
+            return false;
+        }
+
+        $currentCert = isset($this->currentCert) ? $this->currentCert : NULL;
+        $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject: NULL;
+
+        if (isset($subject->currentCert) && is_array($subject->currentCert) && isset($subject->currentCert['tbsCertificate'])) {
+            $this->currentCert = $subject->currentCert;
+            $this->currentCert['tbsCertificate']['signature']['algorithm'] =
+            $this->currentCert['signatureAlgorithm']['algorithm'] =
+                $signatureAlgorithm;
+            if (!empty($this->startDate)) {
+                $this->currentCert['tbsCertificate']['validity']['notBefore']['generalTime'] = $this->startDate;
+                unset($this->currentCert['tbsCertificate']['validity']['notBefore']['utcTime']);
+            }
+            if (!empty($this->endDate)) {
+                $this->currentCert['tbsCertificate']['validity']['notAfter']['generalTime'] = $this->endDate;
+                unset($this->currentCert['tbsCertificate']['validity']['notAfter']['utcTime']);
+            }
+            if (!empty($this->serialNumber)) {
+                $this->currentCert['tbsCertificate']['serialNumber'] = $this->serialNumber;
+            }
+            if (!empty($subject->dn)) {
+                $this->currentCert['tbsCertificate']['subject'] = $subject->dn;
+            }
+            if (!empty($subject->publicKey)) {
+                $this->currentCert['tbsCertificate']['subjectPublicKeyInfo'] = $subjectPublicKey;
+            }
+            $this->removeExtension('id-ce-authorityKeyIdentifier');
+            if (isset($subject->domains)) {
+                $this->removeExtension('id-ce-subjectAltName');
+            }
+        } else if (isset($subject->currentCert) && is_array($subject->currentCert) && isset($subject->currentCert['tbsCertList'])) {
+            return false;
+        } else {
+            if (!isset($subject->publicKey)) {
+                return false;
+            }
+
+            $startDate = !empty($this->startDate) ? $this->startDate : @date('D, d M y H:i:s O');
+            $endDate = !empty($this->endDate) ? $this->endDate : @date('D, d M y H:i:s O', strtotime('+1 year'));
+            $serialNumber = !empty($this->serialNumber) ? $this->serialNumber : new Math_BigInteger();
+
+            $this->currentCert = array(
+                'tbsCertificate' =>
+                    array(
+                        'version' => 'v3',
+                        'serialNumber' => $serialNumber, // $this->setserialNumber()
+                        'signature' => array('algorithm' => $signatureAlgorithm),
+                        'issuer' => false, // this is going to be overwritten later
+                        'validity' => array(
+                            'notBefore' => array('generalTime' => $startDate), // $this->setStartDate()
+                            'notAfter' => array('generalTime' => $endDate)   // $this->setEndDate()
+                        ),
+                        'subject' => $subject->dn,
+                        'subjectPublicKeyInfo' => $subjectPublicKey
+                    ),
+                'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm),
+                'signature'          => false // this is going to be overwritten later
+            );
+
+            // Copy extensions from CSR.
+            $csrexts = $subject->getAttribute('pkcs-9-at-extensionRequest', 0);
+
+            if (!empty($csrexts)) {
+                $this->currentCert['tbsCertificate']['extensions'] = $csrexts;
+            }
+        }
+
+        $this->currentCert['tbsCertificate']['issuer'] = $issuer->dn;
+
+        if (isset($issuer->currentKeyIdentifier)) {
+            $this->setExtension('id-ce-authorityKeyIdentifier', array(
+                    //'authorityCertIssuer' => array(
+                    //    array(
+                    //        'directoryName' => $issuer->dn
+                    //    )
+                    //),
+                    'keyIdentifier' => $issuer->currentKeyIdentifier
+                )
+            );
+            //$extensions = &$this->currentCert['tbsCertificate']['extensions'];
+            //if (isset($issuer->serialNumber)) {
+            //    $extensions[count($extensions) - 1]['authorityCertSerialNumber'] = $issuer->serialNumber;
+            //}
+            //unset($extensions);
+        }
+
+        if (isset($subject->currentKeyIdentifier)) {
+            $this->setExtension('id-ce-subjectKeyIdentifier', $subject->currentKeyIdentifier);
+        }
+
+        if (isset($subject->domains) && count($subject->domains) > 1) {
+            $this->setExtension('id-ce-subjectAltName',
+                array_map(array('File_X509', '_dnsName'), $subject->domains));
+        }
+
+        if ($this->caFlag) {
+            $keyUsage = $this->getExtension('id-ce-keyUsage');
+            if (!$keyUsage) {
+                $keyUsage = array();
+            }
+
+            $this->setExtension('id-ce-keyUsage',
+                array_values(array_unique(array_merge($keyUsage, array('cRLSign', 'keyCertSign'))))
+            );
+
+            $basicConstraints = $this->getExtension('id-ce-basicConstraints');
+            if (!$basicConstraints) {
+                $basicConstraints = array();
+            }
+
+            $this->setExtension('id-ce-basicConstraints',
+                array_unique(array_merge(array('cA' => true), $basicConstraints)), true);
+
+            if (!isset($subject->currentKeyIdentifier)) {
+                $this->setExtension('id-ce-subjectKeyIdentifier', base64_encode($this->computeKeyIdentifier($this->currentCert)), false, false);
+            }
+        }
+
+        // resync $this->signatureSubject
+        // save $tbsCertificate in case there are any File_ASN1_Element objects in it
+        $tbsCertificate = $this->currentCert['tbsCertificate'];
+        $this->loadX509($this->saveX509($this->currentCert));
+
+        $result = $this->_sign($issuer->privateKey, $signatureAlgorithm);
+        $result['tbsCertificate'] = $tbsCertificate;
+
+        $this->currentCert = $currentCert;
+        $this->signatureSubject = $signatureSubject;
+
+        return $result;
+    }
+
+    /**
+     * Sign a CSR
+     *
+     * @access public
+     * @return Mixed
+     */
+    function signCSR($signatureAlgorithm = 'sha1WithRSAEncryption')
+    {
+        if (!is_object($this->privateKey) || empty($this->dn)) {
+            return false;
+        }
+
+        $origPublicKey = $this->publicKey;
+        $class = get_class($this->privateKey);
+        $this->publicKey = new $class();
+        $this->publicKey->loadKey($this->privateKey->getPublicKey());
+        $this->publicKey->setPublicKey();
+        if (!($publicKey = $this->_formatSubjectPublicKey())) {
+            return false;
+        }
+        $this->publicKey = $origPublicKey;
+
+        $currentCert = isset($this->currentCert) ? $this->currentCert : NULL;
+        $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject: NULL;
+
+        if (isset($this->currentCert) && is_array($this->currentCert) && isset($this->currentCert['certificationRequestInfo'])) {
+            $this->currentCert['signatureAlgorithm']['algorithm'] =
+                $signatureAlgorithm;
+            if (!empty($this->dn)) {
+                $this->currentCert['certificationRequestInfo']['subject'] = $this->dn;
+            }
+            $this->currentCert['certificationRequestInfo']['subjectPKInfo'] = $publicKey;
+        } else {
+            $this->currentCert = array(
+                'certificationRequestInfo' =>
+                    array(
+                        'version' => 'v1',
+                        'subject' => $this->dn,
+                        'subjectPKInfo' => $publicKey
+                    ),
+                'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm),
+                'signature'          => false // this is going to be overwritten later
+            );
+        }
+
+        // resync $this->signatureSubject
+        // save $certificationRequestInfo in case there are any File_ASN1_Element objects in it
+        $certificationRequestInfo = $this->currentCert['certificationRequestInfo'];
+        $this->loadCSR($this->saveCSR($this->currentCert));
+
+        $result = $this->_sign($this->privateKey, $signatureAlgorithm);
+        $result['certificationRequestInfo'] = $certificationRequestInfo;
+
+        $this->currentCert = $currentCert;
+        $this->signatureSubject = $signatureSubject;
+
+        return $result;
+    }
+
+    /**
+     * Sign a CRL
+     *
+     * $issuer's private key needs to be loaded.
+     *
+     * @param File_X509 $issuer
+     * @param File_X509 $crl
+     * @param String $signatureAlgorithm optional
+     * @access public
+     * @return Mixed
+     */
+    function signCRL($issuer, $crl, $signatureAlgorithm = 'sha1WithRSAEncryption')
+    {
+        if (!is_object($issuer->privateKey) || empty($issuer->dn)) {
+            return false;
+        }
+
+        $currentCert = isset($this->currentCert) ? $this->currentCert : NULL;
+        $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject : NULL;
+        $thisUpdate = !empty($this->startDate) ? $this->startDate : @date('D, d M y H:i:s O');
+
+        if (isset($crl->currentCert) && is_array($crl->currentCert) && isset($crl->currentCert['tbsCertList'])) {
+            $this->currentCert = $crl->currentCert;
+            $this->currentCert['tbsCertList']['signature']['algorithm'] = $signatureAlgorithm;
+            $this->currentCert['signatureAlgorithm']['algorithm'] = $signatureAlgorithm;
+        } else {
+            $this->currentCert = array(
+                'tbsCertList' =>
+                    array(
+                        'version' => 'v2',
+                        'signature' => array('algorithm' => $signatureAlgorithm),
+                        'issuer' => false, // this is going to be overwritten later
+                        'thisUpdate' => array('generalTime' => $thisUpdate) // $this->setStartDate()
+                    ),
+                'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm),
+                'signature'          => false // this is going to be overwritten later
+            );
+        }
+
+        $tbsCertList = &$this->currentCert['tbsCertList'];
+        $tbsCertList['issuer'] = $issuer->dn;
+        $tbsCertList['thisUpdate'] = array('generalTime' => $thisUpdate);
+
+        if (!empty($this->endDate)) {
+            $tbsCertList['nextUpdate'] = array('generalTime' => $this->endDate); // $this->setEndDate()
+        } else {
+            unset($tbsCertList['nextUpdate']);
+        }
+
+        if (!empty($this->serialNumber)) {
+            $crlNumber = $this->serialNumber;
+        }
+        else {
+            $crlNumber = $this->getExtension('id-ce-cRLNumber');
+            $crlNumber = $crlNumber !== false ? $crlNumber->add(new Math_BigInteger(1)) : NULL;
+        }
+
+        $this->removeExtension('id-ce-authorityKeyIdentifier');
+        $this->removeExtension('id-ce-issuerAltName');
+
+        // Be sure version >= v2 if some extension found.
+        $version = isset($tbsCertList['version']) ? $tbsCertList['version'] : 0;
+        if (!$version) {
+            if (!empty($tbsCertList['crlExtensions'])) {
+                $version = 1; // v2.
+            }
+            elseif (!empty($tbsCertList['revokedCertificates'])) {
+                foreach ($tbsCertList['revokedCertificates'] as $cert) {
+                    if (!empty($cert['crlEntryExtensions'])) {
+                        $version = 1; // v2.
+                    }
+                }
+            }
+
+            if ($version) {
+                $tbsCertList['version'] = $version;
+            }
+        }
+
+        // Store additional extensions.
+        if (!empty($tbsCertList['version'])) { // At least v2.
+            if (!empty($crlNumber)) {
+                $this->setExtension('id-ce-cRLNumber', $crlNumber);
+            }
+
+            if (isset($issuer->currentKeyIdentifier)) {
+                $this->setExtension('id-ce-authorityKeyIdentifier', array(
+                        //'authorityCertIssuer' => array(
+                        //    array(
+                        //        'directoryName' => $issuer->dn
+                        //    )
+                        //),
+                        'keyIdentifier' => $issuer->currentKeyIdentifier
+                    )
+                );
+                //$extensions = &$tbsCertList['crlExtensions'];
+                //if (isset($issuer->serialNumber)) {
+                //    $extensions[count($extensions) - 1]['authorityCertSerialNumber'] = $issuer->serialNumber;
+                //}
+                //unset($extensions);
+            }
+
+            $issuerAltName = $this->getExtension('id-ce-subjectAltName', $issuer->currentCert);
+
+            if ($issuerAltName !== false) {
+                $this->setExtension('id-ce-issuerAltName', $issuerAltName);
+            }
+        }
+
+        if (empty($tbsCertList['revokedCertificates'])) {
+            unset($tbsCertList['revokedCertificates']);
+        }
+
+        unset($tbsCertList);
+
+        // resync $this->signatureSubject
+        // save $tbsCertList in case there are any File_ASN1_Element objects in it
+        $tbsCertList = $this->currentCert['tbsCertList'];
+        $this->loadCRL($this->saveCRL($this->currentCert));
+
+        $result = $this->_sign($issuer->privateKey, $signatureAlgorithm);
+        $result['tbsCertList'] = $tbsCertList;
+
+        $this->currentCert = $currentCert;
+        $this->signatureSubject = $signatureSubject;
+
+        return $result;
+    }
+
+    /**
+     * X.509 certificate signing helper function.
+     *
+     * @param Object $key
+     * @param File_X509 $subject
+     * @param String $signatureAlgorithm
+     * @access public
+     * @return Mixed
+     */
+    function _sign($key, $signatureAlgorithm)
+    {
+        switch (strtolower(get_class($key))) {
+            case 'crypt_rsa':
+                switch ($signatureAlgorithm) {
+                    case 'md2WithRSAEncryption':
+                    case 'md5WithRSAEncryption':
+                    case 'sha1WithRSAEncryption':
+                    case 'sha224WithRSAEncryption':
+                    case 'sha256WithRSAEncryption':
+                    case 'sha384WithRSAEncryption':
+                    case 'sha512WithRSAEncryption':
+                        $key->setHash(preg_replace('#WithRSAEncryption$#', '', $signatureAlgorithm));
+                        $key->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
+
+                        $this->currentCert['signature'] = base64_encode("\0" . $key->sign($this->signatureSubject));
+                        return $this->currentCert;
+                }
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * Set certificate start date
+     *
+     * @param String $date
+     * @access public
+     */
+    function setStartDate($date)
+    {
+        $this->startDate = @date('D, d M y H:i:s O', @strtotime($date));
+    }
+
+    /**
+     * Set certificate end date
+     *
+     * @param String $date
+     * @access public
+     */
+    function setEndDate($date)
+    {
+        /*
+          To indicate that a certificate has no well-defined expiration date,
+          the notAfter SHOULD be assigned the GeneralizedTime value of
+          99991231235959Z.
+
+          -- http://tools.ietf.org/html/rfc5280#section-4.1.2.5
+        */
+        if (strtolower($date) == 'lifetime') {
+            $temp = '99991231235959Z';
+            $asn1 = new File_ASN1();
+            $temp = chr(FILE_ASN1_TYPE_GENERALIZED_TIME) . $asn1->_encodeLength(strlen($temp)) . $temp;
+            $this->endDate = new File_ASN1_Element($temp);
+        } else {
+            $this->endDate = @date('D, d M y H:i:s O', @strtotime($date));
+        }
+    }
+
+    /**
+     * Set Serial Number
+     *
+     * @param String $serial
+     * @param $base optional
+     * @access public
+     */
+    function setSerialNumber($serial, $base = -256)
+    {
+        $this->serialNumber = new Math_BigInteger($serial, $base);
+    }
+
+    /**
+     * Turns the certificate into a certificate authority
+     *
+     * @access public
+     */
+    function makeCA()
+    {
+        $this->caFlag = true;
+    }
+
+    /**
+     * Get a reference to a subarray
+     *
+     * @param array $root
+     * @param String $path  absolute path with / as component separator
+     * @param Boolean $create optional
+     * @access private
+     * @return array item ref or false
+     */
+    function &_subArray(&$root, $path, $create = false)
+    {
+        $false = false;
+
+        if (!is_array($root)) {
+            return $false;
+        }
+
+        foreach (explode('/', $path) as $i) {
+            if (!is_array($root)) {
+                return $false;
+            }
+
+            if (!isset($root[$i])) {
+                if (!$create) {
+                    return $false;
+                }
+
+                $root[$i] = array();
+            }
+
+            $root = &$root[$i];
+        }
+
+        return $root;
+    }
+
+    /**
+     * Get a reference to an extension subarray
+     *
+     * @param array $root
+     * @param String $path optional absolute path with / as component separator
+     * @param Boolean $create optional
+     * @access private
+     * @return array ref or false
+     */
+    function &_extensions(&$root, $path = NULL, $create = false)
+    {
+        if (!isset($root)) {
+            $root = $this->currentCert;
+        }
+
+        switch (true) {
+            case !empty($path):
+            case !is_array($root):
+                break;
+            case isset($root['tbsCertificate']):
+                $path = 'tbsCertificate/extensions';
+                break;
+            case isset($root['tbsCertList']):
+                $path = 'tbsCertList/crlExtensions';
+                break;
+            case isset($root['certificationRequestInfo']):
+                $pth = 'certificationRequestInfo/attributes';
+                $attributes = &$this->_subArray($root, $pth, $create);
+
+                if (is_array($attributes)) {
+                    foreach ($attributes as $key => $value) {
+                        if ($value['type'] == 'pkcs-9-at-extensionRequest') {
+                            $path = "$pth/$key/value/0";
+                            break 2;
+                        }
+                    }
+                    if ($create) {
+                        $key = count($attributes);
+                        $attributes[] = array('type' => 'pkcs-9-at-extensionRequest', 'value' => array());
+                        $path = "$pth/$key/value/0";
+                    }
+                }
+                break;
+        }
+
+        $extensions = &$this->_subArray($root, $path, $create);
+
+        if (!is_array($extensions)) {
+            $false = false;
+            return $false;
+        }
+
+        return $extensions;
+    }
+
+    /**
+     * Remove an Extension
+     *
+     * @param String $id
+     * @param String $path optional
+     * @access private
+     * @return Boolean
+     */
+    function _removeExtension($id, $path = NULL)
+    {
+        $extensions = &$this->_extensions($this->currentCert, $path);
+
+        if (!is_array($extensions)) {
+            return false;
+        }
+
+        $result = false;
+        foreach ($extensions as $key => $value) {
+            if ($value['extnId'] == $id) {
+                unset($extensions[$key]);
+                $result = true;
+            }
+        }
+
+        $extensions = array_values($extensions);
+        return $result;
+    }
+
+    /**
+     * Get an Extension
+     *
+     * Returns the extension if it exists and false if not
+     *
+     * @param String $id
+     * @param Array $cert optional
+     * @param String $path optional
+     * @access private
+     * @return Mixed
+     */
+    function _getExtension($id, $cert = NULL, $path = NULL)
+    {
+        $extensions = $this->_extensions($cert, $path);
+
+        if (!is_array($extensions)) {
+            return false;
+        }
+
+        foreach ($extensions as $key => $value) {
+            if ($value['extnId'] == $id) {
+                return $value['extnValue'];
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns a list of all extensions in use
+     *
+     * @param array $cert optional
+     * @param String $path optional
+     * @access private
+     * @return Array
+     */
+    function _getExtensions($cert = NULL, $path = NULL)
+    {
+        $exts = $this->_extensions($cert, $path);
+        $extensions = array();
+
+        if (is_array($exts)) {
+            foreach ($exts as $extension) {
+                $extensions[] = $extension['extnId'];
+            }
+        }
+
+        return $extensions;
+    }
+
+    /**
+     * Set an Extension
+     *
+     * @param String $id
+     * @param Mixed $value
+     * @param Boolean $critical optional
+     * @param Boolean $replace optional
+     * @param String $path optional
+     * @access private
+     * @return Boolean
+     */
+    function _setExtension($id, $value, $critical = false, $replace = true, $path = NULL)
+    {
+        $extensions = &$this->_extensions($this->currentCert, $path, true);
+
+        if (!is_array($extensions)) {
+            return false;
+        }
+
+        $newext = array('extnId'  => $id, 'critical' => $critical, 'extnValue' => $value);
+
+        foreach ($extensions as $key => $value) {
+            if ($value['extnId'] == $id) {
+                if (!$replace) {
+                    return false;
+                }
+
+                $extensions[$key] = $newext;
+                return true;
+            }
+        }
+
+        $extensions[] = $newext;
+        return true;
+    }
+
+    /**
+     * Remove a certificate, CSR or CRL Extension
+     *
+     * @param String $id
+     * @access public
+     * @return Boolean
+     */
+    function removeExtension($id)
+    {
+        return $this->_removeExtension($id);
+    }
+
+    /**
+     * Get a certificate, CSR or CRL Extension
+     *
+     * Returns the extension if it exists and false if not
+     *
+     * @param String $id
+     * @param Array $cert optional
+     * @access public
+     * @return Mixed
+     */
+    function getExtension($id, $cert = NULL)
+    {
+        return $this->_getExtension($id, $cert);
+    }
+
+    /**
+     * Returns a list of all extensions in use in certificate, CSR or CRL
+     *
+     * @param array $cert optional
+     * @access public
+     * @return Array
+     */
+    function getExtensions($cert = NULL)
+    {
+        return $this->_getExtensions($cert);
+    }
+
+    /**
+     * Set a certificate, CSR or CRL Extension
+     *
+     * @param String $id
+     * @param Mixed $value
+     * @param Boolean $critical optional
+     * @param Boolean $replace optional
+     * @access public
+     * @return Boolean
+     */
+    function setExtension($id, $value, $critical = false, $replace = true)
+    {
+        return $this->_setExtension($id, $value, $critical, $replace);
+    }
+
+    /**
+     * Remove a CSR attribute.
+     *
+     * @param String $id
+     * @param Integer $disposition optional
+     * @access public
+     * @return Boolean
+     */
+    function removeAttribute($id, $disposition = FILE_X509_ATTR_ALL)
+    {
+        $attributes = &$this->_subArray($this->currentCert, 'certificationRequestInfo/attributes');
+
+        if (!is_array($attributes)) {
+            return false;
+        }
+
+        $result = false;
+        foreach ($attributes as $key => $attribute) {
+            if ($attribute['type'] == $id) {
+                $n = count($attribute['value']);
+                switch (true) {
+                    case $disposition == FILE_X509_ATTR_APPEND:
+                    case $disposition == FILE_X509_ATTR_REPLACE:
+                        return false;
+                    case $disposition >= $n:
+                        $disposition -= $n;
+                        break;
+                    case $disposition == FILE_X509_ATTR_ALL:
+                    case $n == 1:
+                        unset($attributes[$key]);
+                        $result = true;
+                        break;
+                    default:
+                        unset($attributes[$key]['value'][$disposition]);
+                        $attributes[$key]['value'] = array_values($attributes[$key]['value']);
+                        $result = true;
+                        break;
+                }
+                if ($result && $disposition != FILE_X509_ATTR_ALL) {
+                    break;
+                }
+            }
+        }
+
+        $attributes = array_values($attributes);
+        return $result;
+    }
+
+    /**
+     * Get a CSR attribute
+     *
+     * Returns the attribute if it exists and false if not
+     *
+     * @param String $id
+     * @param Integer $disposition optional
+     * @param Array $csr optional
+     * @access public
+     * @return Mixed
+     */
+    function getAttribute($id, $disposition = FILE_X509_ATTR_ALL, $csr = NULL)
+    {
+        if (empty($csr)) {
+            $csr = $this->currentCert;
+        }
+
+        $attributes = $this->_subArray($csr, 'certificationRequestInfo/attributes');
+
+        if (!is_array($attributes)) {
+            return false;
+        }
+
+        foreach ($attributes as $key => $attribute) {
+            if ($attribute['type'] == $id) {
+                $n = count($attribute['value']);
+                switch (true) {
+                    case $disposition == FILE_X509_ATTR_APPEND:
+                    case $disposition == FILE_X509_ATTR_REPLACE:
+                        return false;
+                    case $disposition == FILE_X509_ATTR_ALL:
+                        return $attribute['value'];
+                    case $disposition >= $n:
+                        $disposition -= $n;
+                        break;
+                    default:
+                        return $attribute['value'][$disposition];
+                }
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns a list of all CSR attributes in use
+     *
+     * @param array $csr optional
+     * @access public
+     * @return Array
+     */
+    function getAttributes($csr = NULL)
+    {
+        if (empty($csr)) {
+            $csr = $this->currentCert;
+        }
+
+        $attributes = $this->_subArray($csr, 'certificationRequestInfo/attributes');
+        $attrs = array();
+
+        if (is_array($attributes)) {
+            foreach ($attributes as $attribute) {
+                $attrs[] = $attribute['type'];
+            }
+        }
+
+        return $attrs;
+    }
+
+    /**
+     * Set a CSR attribute
+     *
+     * @param String $id
+     * @param Mixed $value
+     * @param Boolean $disposition optional
+     * @access public
+     * @return Boolean
+     */
+    function setAttribute($id, $value, $disposition = FILE_X509_ATTR_ALL)
+    {
+        $attributes = &$this->_subArray($this->currentCert, 'certificationRequestInfo/attributes', true);
+
+        if (!is_array($attributes)) {
+            return false;
+        }
+
+        switch ($disposition) {
+            case FILE_X509_ATTR_REPLACE:
+                $disposition = FILE_X509_ATTR_APPEND;
+            case FILE_X509_ATTR_ALL:
+                $this->removeAttribute($id);
+                break;
+        }
+
+        foreach ($attributes as $key => $attribute) {
+            if ($attribute['type'] == $id) {
+                $n = count($attribute['value']);
+                switch (true) {
+                    case $disposition == FILE_X509_ATTR_APPEND:
+                        $last = $key;
+                        break;
+                    case $disposition >= $n;
+                        $disposition -= $n;
+                        break;
+                    default:
+                        $attributes[$key]['value'][$disposition] = $value;
+                        return true;
+                }
+            }
+        }
+
+        switch (true) {
+            case $disposition >= 0:
+                return false;
+            case isset($last):
+                $attributes[$last]['value'][] = $value;
+                break;
+            default:
+                $attributes[] = array('type' => $id, 'value' => $disposition == FILE_X509_ATTR_ALL ? $value: array($value));
+                break;
+        }
+
+        return true;
+    }
+
+    /**
+     * Sets the subject key identifier
+     *
+     * This is used by the id-ce-authorityKeyIdentifier and the id-ce-subjectKeyIdentifier extensions.
+     *
+     * @param String $value
+     * @access public
+     */
+    function setKeyIdentifier($value)
+    {
+        if (empty($value)) {
+            unset($this->currentKeyIdentifier);
+        } else {
+            $this->currentKeyIdentifier = base64_encode($value);
+        }
+    }
+
+    /**
+     * Compute a public key identifier.
+     *
+     * Although key identifiers may be set to any unique value, this function
+     * computes key identifiers from public key according to the two
+     * recommended methods (4.2.1.2 RFC 3280).
+     * Highly polymorphic: try to accept all possible forms of key:
+     * - Key object
+     * - File_X509 object with public or private key defined
+     * - Certificate or CSR array
+     * - File_ASN1_Element object
+     * - PEM or DER string
+     *
+     * @param Mixed $key optional
+     * @param Integer $method optional
+     * @access public
+     * @return String binary key identifier
+     */
+    function computeKeyIdentifier($key = NULL, $method = 1)
+    {
+        if (is_null($key)) {
+            $key = $this;
+        }
+
+        switch (true) {
+            case is_string($key):
+                break;
+            case is_array($key) && isset($key['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']):
+                return $this->computeKeyIdentifier($key['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'], $method);
+            case is_array($key) && isset($key['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']):
+                return $this->computeKeyIdentifier($key['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'], $method);
+            case !is_object($key):
+                return false;
+            case strtolower(get_class($key)) == 'file_asn1_element':
+                $asn1 = new File_ASN1();
+                $decoded = $asn1->decodeBER($cert);
+                if (empty($decoded)) {
+                    return false;
+                }
+                $key = $asn1->asn1map($decoded[0], array('type' => FILE_ASN1_TYPE_BIT_STRING));
+                break;
+            case strtolower(get_class($key)) == 'file_x509':
+                if (isset($key->publicKey)) {
+                    return $this->computeKeyIdentifier($key->publicKey, $method);
+                }
+                if (isset($key->privateKey)) {
+                    return $this->computeKeyIdentifier($key->privateKey, $method);
+                }
+                if (isset($key->currentCert['tbsCertificate']) || isset($key->currentCert['certificationRequestInfo'])) {
+                    return $this->computeKeyIdentifier($key->currentCert, $method);
+                }
+                return false;
+            default: // Should be a key object (i.e.: Crypt_RSA).
+                $key = $key->getPublicKey(CRYPT_RSA_PUBLIC_FORMAT_PKCS1_RAW);
+                break;
+        }
+
+        // If in PEM format, convert to binary.
+        if (preg_match('#^-----BEGIN #', $key)) {
+            $key = base64_decode(preg_replace('#-.+-|[\r\n]#', '', $key));
+        }
+
+        // Now we have the key string: compute its sha-1 sum.
+        if (!class_exists('Crypt_Hash')) {
+            require_once('Crypt/Hash.php');
+        }
+        $hash = new Crypt_Hash('sha1');
+        $hash = $hash->hash($key);
+
+        if ($method == 2) {
+            $hash = substr($hash, -8);
+            $hash[0] = chr((ord($hash[0]) & 0x0F) | 0x40);
+        }
+
+        return $hash;
+    }
+
+    /**
+     * Format a public key as appropriate
+     *
+     * @access private
+     * @return Array
+     */
+    function _formatSubjectPublicKey()
+    {
+        if (!isset($this->publicKey) || !is_object($this->publicKey)) {
+            return false;
+        }
+
+        switch (strtolower(get_class($this->publicKey))) {
+            case 'crypt_rsa':
+                // the following two return statements do the same thing. i dunno.. i just prefer the later for some reason.
+                // the former is a good example of how to do fuzzing on the public key
+                //return new File_ASN1_Element(base64_decode(preg_replace('#-.+-|[\r\n]#', '', $this->publicKey->getPublicKey())));
+                return array(
+                    'algorithm' => array('algorithm' => 'rsaEncryption'),
+                    'subjectPublicKey' => $this->publicKey->getPublicKey(CRYPT_RSA_PUBLIC_FORMAT_PKCS1_RAW)
+                );
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * Set the domain name's which the cert is to be valid for
+     *
+     * @access public
+     * @return Array
+     */
+    function setDomain()
+    {
+        $this->domains = func_get_args();
+        $this->removeDNProp('id-at-commonName');
+        $this->setDNProp('id-at-commonName', $this->domains[0]);
+    }
+
+    /**
+     * Helper function to build domain array
+     *
+     * @access private
+     * @param String $domain
+     * @return Array
+     */
+    function _dnsName($domain)
+    {
+        return array('dNSName' => $domain);
+    }
+
+    /**
+     * Get the index of a revoked certificate.
+     *
+     * @param array $rclist
+     * @param String $serial
+     * @param Boolean $create optional
+     * @access private
+     * @return Integer or false
+     */
+    function _revokedCertificate(&$rclist, $serial, $create = false)
+    {
+        $serial = new Math_BigInteger($serial);
+
+        foreach ($rclist as $i => $rc) {
+            if (!($serial->compare($rc['userCertificate']))) {
+                return $i;
+            }
+        }
+
+        if (!$create) {
+            return false;
+        }
+
+        $i = count($rclist);
+        $rclist[] = array('userCertificate' => $serial,
+                          'revocationDate'  => array('generalTime' => @date('D, d M y H:i:s O')));
+        return $i;
+    }
+
+    /**
+     * Revoke a certificate.
+     *
+     * @param String $serial
+     * @param String $date optional
+     * @access public
+     * @return Boolean
+     */
+    function revoke($serial, $date = NULL)
+    {
+        if (isset($this->currentCert['tbsCertList'])) {
+            if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates', true))) {
+                if ($this->_revokedCertificate($rclist, $serial) === false) { // If not yet revoked
+                    if (($i = $this->_revokedCertificate($rclist, $serial, true)) !== false) {
+
+                        if (!empty($date)) {
+                            $rclist[$i]['revocationDate'] = array('generalTime' => $date);
+                        }
+
+                        return true;
+                    }
+                }
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Unrevoke a certificate.
+     *
+     * @param String $serial
+     * @access public
+     * @return Boolean
+     */
+    function unrevoke($serial)
+    {
+        if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) {
+            if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) {
+                unset($rclist[$i]);
+                $rclist = array_values($rclist);
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Get a revoked certificate.
+     *
+     * @param String $serial
+     * @access public
+     * @return Mixed
+     */
+    function getRevoked($serial)
+    {
+        if (is_array($rclist = $this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) {
+            if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) {
+                return $rclist[$i];
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * List revoked certificates
+     *
+     * @param array $crl optional
+     * @access public
+     * @return array
+     */
+    function listRevoked($crl = NULL)
+    {
+        if (!isset($crl)) {
+            $crl = $this->currentCert;
+        }
+
+        if (!isset($crl['tbsCertList'])) {
+            return false;
+        }
+
+        $result = array();
+
+        if (is_array($rclist = $this->_subArray($crl, 'tbsCertList/revokedCertificates'))) {
+            foreach ($rclist as $rc) {
+                $result[] = $rc['userCertificate']->toString();
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Remove a Revoked Certificate Extension
+     *
+     * @param String $serial
+     * @param String $id
+     * @access public
+     * @return Boolean
+     */
+    function removeRevokedCertificateExtension($serial, $id)
+    {
+        if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) {
+            if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) {
+                return $this->_removeExtension($id, "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Get a Revoked Certificate Extension
+     *
+     * Returns the extension if it exists and false if not
+     *
+     * @param String $serial
+     * @param String $id
+     * @param Array $crl optional
+     * @access public
+     * @return Mixed
+     */
+    function getRevokedCertificateExtension($serial, $id, $crl = NULL)
+    {
+        if (!isset($crl)) {
+            $crl = $this->currentCert;
+        }
+
+        if (is_array($rclist = $this->_subArray($crl, 'tbsCertList/revokedCertificates'))) {
+            if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) {
+                return $this->_getExtension($id, $crl,  "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns a list of all extensions in use for a given revoked certificate
+     *
+     * @param String $serial
+     * @param array $crl optional
+     * @access public
+     * @return Array
+     */
+    function getRevokedCertificateExtensions($serial, $crl = NULL)
+    {
+        if (!isset($crl)) {
+            $crl = $this->currentCert;
+        }
+
+        if (is_array($rclist = $this->_subArray($crl, 'tbsCertList/revokedCertificates'))) {
+            if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) {
+                return $this->_getExtensions($crl, "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Set a Revoked Certificate Extension
+     *
+     * @param String $serial
+     * @param String $id
+     * @param Mixed $value
+     * @param Boolean $critical optional
+     * @param Boolean $replace optional
+     * @access public
+     * @return Boolean
+     */
+    function setRevokedCertificateExtension($serial, $id, $value, $critical = false, $replace = true)
+    {
+        if (isset($this->currentCert['tbsCertList'])) {
+            if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates', true))) {
+                if (($i = $this->_revokedCertificate($rclist, $serial, true)) !== false) {
+                    return $this->_setExtension($id, $value, $critical, $replace, "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
+                }
+            }
+        }
+
+        return false;
+    }
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Math/BigInteger.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Math/BigInteger.php
new file mode 100644
index 0000000000000000000000000000000000000000..d048cb032c5974e0c4fe9048d9a52de7bd46d3ea
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Math/BigInteger.php
@@ -0,0 +1,3633 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP arbitrary precision integer arithmetic library.
+ *
+ * Supports base-2, base-10, base-16, and base-256 numbers.  Uses the GMP or BCMath extensions, if available,
+ * and an internal implementation, otherwise.
+ *
+ * PHP versions 4 and 5
+ *
+ * {@internal (all DocBlock comments regarding implementation - such as the one that follows - refer to the 
+ * {@link MATH_BIGINTEGER_MODE_INTERNAL MATH_BIGINTEGER_MODE_INTERNAL} mode)
+ *
+ * Math_BigInteger uses base-2**26 to perform operations such as multiplication and division and
+ * base-2**52 (ie. two base 2**26 digits) to perform addition and subtraction.  Because the largest possible
+ * value when multiplying two base-2**26 numbers together is a base-2**52 number, double precision floating
+ * point numbers - numbers that should be supported on most hardware and whose significand is 53 bits - are
+ * used.  As a consequence, bitwise operators such as >> and << cannot be used, nor can the modulo operator %,
+ * which only supports integers.  Although this fact will slow this library down, the fact that such a high
+ * base is being used should more than compensate.
+ *
+ * When PHP version 6 is officially released, we'll be able to use 64-bit integers.  This should, once again,
+ * allow bitwise operators, and will increase the maximum possible base to 2**31 (or 2**62 for addition /
+ * subtraction).
+ *
+ * Numbers are stored in {@link http://en.wikipedia.org/wiki/Endianness little endian} format.  ie.
+ * (new Math_BigInteger(pow(2, 26)))->value = array(0, 1)
+ *
+ * Useful resources are as follows:
+ *
+ *  - {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf Handbook of Applied Cryptography (HAC)}
+ *  - {@link http://math.libtomcrypt.com/files/tommath.pdf Multi-Precision Math (MPM)}
+ *  - Java's BigInteger classes.  See /j2se/src/share/classes/java/math in jdk-1_5_0-src-jrl.zip
+ *
+ * Here's an example of how to use this library:
+ * <code>
+ * <?php
+ *    include('Math/BigInteger.php');
+ *
+ *    $a = new Math_BigInteger(2);
+ *    $b = new Math_BigInteger(3);
+ *
+ *    $c = $a->add($b);
+ *
+ *    echo $c->toString(); // outputs 5
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category   Math
+ * @package    Math_BigInteger
+ * @author     Jim Wigginton <terrafrost@php.net>
+ * @copyright  MMVI Jim Wigginton
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @version    $Id: BigInteger.php,v 1.33 2010/03/22 22:32:03 terrafrost Exp $
+ * @link       http://pear.php.net/package/Math_BigInteger
+ */
+
+/**#@+
+ * Reduction constants
+ *
+ * @access private
+ * @see Math_BigInteger::_reduce()
+ */
+/**
+ * @see Math_BigInteger::_montgomery()
+ * @see Math_BigInteger::_prepMontgomery()
+ */
+define('MATH_BIGINTEGER_MONTGOMERY', 0);
+/**
+ * @see Math_BigInteger::_barrett()
+ */
+define('MATH_BIGINTEGER_BARRETT', 1);
+/**
+ * @see Math_BigInteger::_mod2()
+ */
+define('MATH_BIGINTEGER_POWEROF2', 2);
+/**
+ * @see Math_BigInteger::_remainder()
+ */
+define('MATH_BIGINTEGER_CLASSIC', 3);
+/**
+ * @see Math_BigInteger::__clone()
+ */
+define('MATH_BIGINTEGER_NONE', 4);
+/**#@-*/
+
+/**#@+
+ * Array constants
+ *
+ * Rather than create a thousands and thousands of new Math_BigInteger objects in repeated function calls to add() and
+ * multiply() or whatever, we'll just work directly on arrays, taking them in as parameters and returning them.
+ *
+ * @access private
+ */
+/**
+ * $result[MATH_BIGINTEGER_VALUE] contains the value.
+ */
+define('MATH_BIGINTEGER_VALUE', 0);
+/**
+ * $result[MATH_BIGINTEGER_SIGN] contains the sign.
+ */
+define('MATH_BIGINTEGER_SIGN', 1);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Math_BigInteger::_montgomery()
+ * @see Math_BigInteger::_barrett()
+ */
+/**
+ * Cache constants
+ *
+ * $cache[MATH_BIGINTEGER_VARIABLE] tells us whether or not the cached data is still valid.
+ */
+define('MATH_BIGINTEGER_VARIABLE', 0);
+/**
+ * $cache[MATH_BIGINTEGER_DATA] contains the cached data.
+ */
+define('MATH_BIGINTEGER_DATA', 1);
+/**#@-*/
+
+/**#@+
+ * Mode constants.
+ *
+ * @access private
+ * @see Math_BigInteger::Math_BigInteger()
+ */
+/**
+ * To use the pure-PHP implementation
+ */
+define('MATH_BIGINTEGER_MODE_INTERNAL', 1);
+/**
+ * To use the BCMath library
+ *
+ * (if enabled; otherwise, the internal implementation will be used)
+ */
+define('MATH_BIGINTEGER_MODE_BCMATH', 2);
+/**
+ * To use the GMP library
+ *
+ * (if present; otherwise, either the BCMath or the internal implementation will be used)
+ */
+define('MATH_BIGINTEGER_MODE_GMP', 3);
+/**#@-*/
+
+/**
+ * The largest digit that may be used in addition / subtraction
+ *
+ * (we do pow(2, 52) instead of using 4503599627370496, directly, because some PHP installations
+ *  will truncate 4503599627370496)
+ *
+ * @access private
+ */
+define('MATH_BIGINTEGER_MAX_DIGIT52', pow(2, 52));
+
+/**
+ * Karatsuba Cutoff
+ *
+ * At what point do we switch between Karatsuba multiplication and schoolbook long multiplication?
+ *
+ * @access private
+ */
+define('MATH_BIGINTEGER_KARATSUBA_CUTOFF', 25);
+
+/**
+ * Pure-PHP arbitrary precision integer arithmetic library. Supports base-2, base-10, base-16, and base-256
+ * numbers.
+ *
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @version 1.0.0RC4
+ * @access  public
+ * @package Math_BigInteger
+ */
+class Math_BigInteger {
+    /**
+     * Holds the BigInteger's value.
+     *
+     * @var Array
+     * @access private
+     */
+    var $value;
+
+    /**
+     * Holds the BigInteger's magnitude.
+     *
+     * @var Boolean
+     * @access private
+     */
+    var $is_negative = false;
+
+    /**
+     * Random number generator function
+     *
+     * @see setRandomGenerator()
+     * @access private
+     */
+    var $generator = 'mt_rand';
+
+    /**
+     * Precision
+     *
+     * @see setPrecision()
+     * @access private
+     */
+    var $precision = -1;
+
+    /**
+     * Precision Bitmask
+     *
+     * @see setPrecision()
+     * @access private
+     */
+    var $bitmask = false;
+
+    /**
+     * Mode independant value used for serialization.
+     *
+     * If the bcmath or gmp extensions are installed $this->value will be a non-serializable resource, hence the need for 
+     * a variable that'll be serializable regardless of whether or not extensions are being used.  Unlike $this->value,
+     * however, $this->hex is only calculated when $this->__sleep() is called.
+     *
+     * @see __sleep()
+     * @see __wakeup()
+     * @var String
+     * @access private
+     */
+    var $hex;
+
+    /**
+     * Converts base-2, base-10, base-16, and binary strings (eg. base-256) to BigIntegers.
+     *
+     * If the second parameter - $base - is negative, then it will be assumed that the number's are encoded using
+     * two's compliment.  The sole exception to this is -10, which is treated the same as 10 is.
+     *
+     * Here's an example:
+     * <code>
+     * <?php
+     *    include('Math/BigInteger.php');
+     *
+     *    $a = new Math_BigInteger('0x32', 16); // 50 in base-16
+     *
+     *    echo $a->toString(); // outputs 50
+     * ?>
+     * </code>
+     *
+     * @param optional $x base-10 number or base-$base number if $base set.
+     * @param optional integer $base
+     * @return Math_BigInteger
+     * @access public
+     */
+    function Math_BigInteger($x = 0, $base = 10)
+    {
+        if ( !defined('MATH_BIGINTEGER_MODE') ) {
+            switch (true) {
+                case extension_loaded('gmp'):
+                    define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_GMP);
+                    break;
+                case extension_loaded('bcmath'):
+                    define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_BCMATH);
+                    break;
+                default:
+                    define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_INTERNAL);
+            }
+        }
+
+        if (function_exists('openssl_public_encrypt') && !defined('MATH_BIGINTEGER_OPENSSL_DISABLE') && !defined('MATH_BIGINTEGER_OPENSSL_ENABLED')) {
+            define('MATH_BIGINTEGER_OPENSSL_ENABLED', true);
+        }
+
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                if (is_resource($x) && get_resource_type($x) == 'GMP integer') {
+                    $this->value = $x;
+                    return;
+                }
+                $this->value = gmp_init(0);
+                break;
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                $this->value = '0';
+                break;
+            default:
+                $this->value = array();
+        }
+
+        // '0' counts as empty() but when the base is 256 '0' is equal to ord('0') or 48
+        // '0' is the only value like this per http://php.net/empty
+        if (empty($x) && (abs($base) != 256 || $x !== '0')) {
+            return;
+        }
+
+        switch ($base) {
+            case -256:
+                if (ord($x[0]) & 0x80) {
+                    $x = ~$x;
+                    $this->is_negative = true;
+                }
+            case  256:
+                switch ( MATH_BIGINTEGER_MODE ) {
+                    case MATH_BIGINTEGER_MODE_GMP:
+                        $sign = $this->is_negative ? '-' : '';
+                        $this->value = gmp_init($sign . '0x' . bin2hex($x));
+                        break;
+                    case MATH_BIGINTEGER_MODE_BCMATH:
+                        // round $len to the nearest 4 (thanks, DavidMJ!)
+                        $len = (strlen($x) + 3) & 0xFFFFFFFC;
+
+                        $x = str_pad($x, $len, chr(0), STR_PAD_LEFT);
+
+                        for ($i = 0; $i < $len; $i+= 4) {
+                            $this->value = bcmul($this->value, '4294967296', 0); // 4294967296 == 2**32
+                            $this->value = bcadd($this->value, 0x1000000 * ord($x[$i]) + ((ord($x[$i + 1]) << 16) | (ord($x[$i + 2]) << 8) | ord($x[$i + 3])), 0);
+                        }
+
+                        if ($this->is_negative) {
+                            $this->value = '-' . $this->value;
+                        }
+
+                        break;
+                    // converts a base-2**8 (big endian / msb) number to base-2**26 (little endian / lsb)
+                    default:
+                        while (strlen($x)) {
+                            $this->value[] = $this->_bytes2int($this->_base256_rshift($x, 26));
+                        }
+                }
+
+                if ($this->is_negative) {
+                    if (MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL) {
+                        $this->is_negative = false;
+                    }
+                    $temp = $this->add(new Math_BigInteger('-1'));
+                    $this->value = $temp->value;
+                }
+                break;
+            case  16:
+            case -16:
+                if ($base > 0 && $x[0] == '-') {
+                    $this->is_negative = true;
+                    $x = substr($x, 1);
+                }
+
+                $x = preg_replace('#^(?:0x)?([A-Fa-f0-9]*).*#', '$1', $x);
+
+                $is_negative = false;
+                if ($base < 0 && hexdec($x[0]) >= 8) {
+                    $this->is_negative = $is_negative = true;
+                    $x = bin2hex(~pack('H*', $x));
+                }
+
+                switch ( MATH_BIGINTEGER_MODE ) {
+                    case MATH_BIGINTEGER_MODE_GMP:
+                        $temp = $this->is_negative ? '-0x' . $x : '0x' . $x;
+                        $this->value = gmp_init($temp);
+                        $this->is_negative = false;
+                        break;
+                    case MATH_BIGINTEGER_MODE_BCMATH:
+                        $x = ( strlen($x) & 1 ) ? '0' . $x : $x;
+                        $temp = new Math_BigInteger(pack('H*', $x), 256);
+                        $this->value = $this->is_negative ? '-' . $temp->value : $temp->value;
+                        $this->is_negative = false;
+                        break;
+                    default:
+                        $x = ( strlen($x) & 1 ) ? '0' . $x : $x;
+                        $temp = new Math_BigInteger(pack('H*', $x), 256);
+                        $this->value = $temp->value;
+                }
+
+                if ($is_negative) {
+                    $temp = $this->add(new Math_BigInteger('-1'));
+                    $this->value = $temp->value;
+                }
+                break;
+            case  10:
+            case -10:
+                $x = preg_replace('#^(-?[0-9]*).*#', '$1', $x);
+
+                switch ( MATH_BIGINTEGER_MODE ) {
+                    case MATH_BIGINTEGER_MODE_GMP:
+                        $this->value = gmp_init($x);
+                        break;
+                    case MATH_BIGINTEGER_MODE_BCMATH:
+                        // explicitly casting $x to a string is necessary, here, since doing $x[0] on -1 yields different
+                        // results then doing it on '-1' does (modInverse does $x[0])
+                        $this->value = (string) $x;
+                        break;
+                    default:
+                        $temp = new Math_BigInteger();
+
+                        // array(10000000) is 10**7 in base-2**26.  10**7 is the closest to 2**26 we can get without passing it.
+                        $multiplier = new Math_BigInteger();
+                        $multiplier->value = array(10000000);
+
+                        if ($x[0] == '-') {
+                            $this->is_negative = true;
+                            $x = substr($x, 1);
+                        }
+
+                        $x = str_pad($x, strlen($x) + (6 * strlen($x)) % 7, 0, STR_PAD_LEFT);
+
+                        while (strlen($x)) {
+                            $temp = $temp->multiply($multiplier);
+                            $temp = $temp->add(new Math_BigInteger($this->_int2bytes(substr($x, 0, 7)), 256));
+                            $x = substr($x, 7);
+                        }
+
+                        $this->value = $temp->value;
+                }
+                break;
+            case  2: // base-2 support originally implemented by Lluis Pamies - thanks!
+            case -2:
+                if ($base > 0 && $x[0] == '-') {
+                    $this->is_negative = true;
+                    $x = substr($x, 1);
+                }
+
+                $x = preg_replace('#^([01]*).*#', '$1', $x);
+                $x = str_pad($x, strlen($x) + (3 * strlen($x)) % 4, 0, STR_PAD_LEFT);
+
+                $str = '0x';
+                while (strlen($x)) {
+                    $part = substr($x, 0, 4);
+                    $str.= dechex(bindec($part));
+                    $x = substr($x, 4);
+                }
+
+                if ($this->is_negative) {
+                    $str = '-' . $str;
+                }
+
+                $temp = new Math_BigInteger($str, 8 * $base); // ie. either -16 or +16
+                $this->value = $temp->value;
+                $this->is_negative = $temp->is_negative;
+
+                break;
+            default:
+                // base not supported, so we'll let $this == 0
+        }
+    }
+
+    /**
+     * Converts a BigInteger to a byte string (eg. base-256).
+     *
+     * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're
+     * saved as two's compliment.
+     *
+     * Here's an example:
+     * <code>
+     * <?php
+     *    include('Math/BigInteger.php');
+     *
+     *    $a = new Math_BigInteger('65');
+     *
+     *    echo $a->toBytes(); // outputs chr(65)
+     * ?>
+     * </code>
+     *
+     * @param Boolean $twos_compliment
+     * @return String
+     * @access public
+     * @internal Converts a base-2**26 number to base-2**8
+     */
+    function toBytes($twos_compliment = false)
+    {
+        if ($twos_compliment) {
+            $comparison = $this->compare(new Math_BigInteger());
+            if ($comparison == 0) {
+                return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
+            }
+
+            $temp = $comparison < 0 ? $this->add(new Math_BigInteger(1)) : $this->copy();
+            $bytes = $temp->toBytes();
+
+            if (empty($bytes)) { // eg. if the number we're trying to convert is -1
+                $bytes = chr(0);
+            }
+
+            if (ord($bytes[0]) & 0x80) {
+                $bytes = chr(0) . $bytes;
+            }
+
+            return $comparison < 0 ? ~$bytes : $bytes;
+        }
+
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                if (gmp_cmp($this->value, gmp_init(0)) == 0) {
+                    return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
+                }
+
+                $temp = gmp_strval(gmp_abs($this->value), 16);
+                $temp = ( strlen($temp) & 1 ) ? '0' . $temp : $temp;
+                $temp = pack('H*', $temp);
+
+                return $this->precision > 0 ?
+                    substr(str_pad($temp, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) :
+                    ltrim($temp, chr(0));
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                if ($this->value === '0') {
+                    return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
+                }
+
+                $value = '';
+                $current = $this->value;
+
+                if ($current[0] == '-') {
+                    $current = substr($current, 1);
+                }
+
+                while (bccomp($current, '0', 0) > 0) {
+                    $temp = bcmod($current, '16777216');
+                    $value = chr($temp >> 16) . chr($temp >> 8) . chr($temp) . $value;
+                    $current = bcdiv($current, '16777216', 0);
+                }
+
+                return $this->precision > 0 ?
+                    substr(str_pad($value, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) :
+                    ltrim($value, chr(0));
+        }
+
+        if (!count($this->value)) {
+            return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
+        }
+        $result = $this->_int2bytes($this->value[count($this->value) - 1]);
+
+        $temp = $this->copy();
+
+        for ($i = count($temp->value) - 2; $i >= 0; --$i) {
+            $temp->_base256_lshift($result, 26);
+            $result = $result | str_pad($temp->_int2bytes($temp->value[$i]), strlen($result), chr(0), STR_PAD_LEFT);
+        }
+
+        return $this->precision > 0 ?
+            str_pad(substr($result, -(($this->precision + 7) >> 3)), ($this->precision + 7) >> 3, chr(0), STR_PAD_LEFT) :
+            $result;
+    }
+
+    /**
+     * Converts a BigInteger to a hex string (eg. base-16)).
+     *
+     * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're
+     * saved as two's compliment.
+     *
+     * Here's an example:
+     * <code>
+     * <?php
+     *    include('Math/BigInteger.php');
+     *
+     *    $a = new Math_BigInteger('65');
+     *
+     *    echo $a->toHex(); // outputs '41'
+     * ?>
+     * </code>
+     *
+     * @param Boolean $twos_compliment
+     * @return String
+     * @access public
+     * @internal Converts a base-2**26 number to base-2**8
+     */
+    function toHex($twos_compliment = false)
+    {
+        return bin2hex($this->toBytes($twos_compliment));
+    }
+
+    /**
+     * Converts a BigInteger to a bit string (eg. base-2).
+     *
+     * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're
+     * saved as two's compliment.
+     *
+     * Here's an example:
+     * <code>
+     * <?php
+     *    include('Math/BigInteger.php');
+     *
+     *    $a = new Math_BigInteger('65');
+     *
+     *    echo $a->toBits(); // outputs '1000001'
+     * ?>
+     * </code>
+     *
+     * @param Boolean $twos_compliment
+     * @return String
+     * @access public
+     * @internal Converts a base-2**26 number to base-2**2
+     */
+    function toBits($twos_compliment = false)
+    {
+        $hex = $this->toHex($twos_compliment);
+        $bits = '';
+        for ($i = strlen($hex) - 8, $start = strlen($hex) & 7; $i >= $start; $i-=8) {
+            $bits = str_pad(decbin(hexdec(substr($hex, $i, 8))), 32, '0', STR_PAD_LEFT) . $bits;
+        }
+        if ($start) { // hexdec('') == 0
+            $bits = str_pad(decbin(hexdec(substr($hex, 0, $start))), 8, '0', STR_PAD_LEFT) . $bits;
+        }
+        $result = $this->precision > 0 ? substr($bits, -$this->precision) : ltrim($bits, '0');
+
+        if ($twos_compliment && $this->compare(new Math_BigInteger()) > 0 && $this->precision <= 0) {
+            return '0' . $result;
+        }
+
+        return $result;
+    }
+
+    /**
+     * Converts a BigInteger to a base-10 number.
+     *
+     * Here's an example:
+     * <code>
+     * <?php
+     *    include('Math/BigInteger.php');
+     *
+     *    $a = new Math_BigInteger('50');
+     *
+     *    echo $a->toString(); // outputs 50
+     * ?>
+     * </code>
+     *
+     * @return String
+     * @access public
+     * @internal Converts a base-2**26 number to base-10**7 (which is pretty much base-10)
+     */
+    function toString()
+    {
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                return gmp_strval($this->value);
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                if ($this->value === '0') {
+                    return '0';
+                }
+
+                return ltrim($this->value, '0');
+        }
+
+        if (!count($this->value)) {
+            return '0';
+        }
+
+        $temp = $this->copy();
+        $temp->is_negative = false;
+
+        $divisor = new Math_BigInteger();
+        $divisor->value = array(10000000); // eg. 10**7
+        $result = '';
+        while (count($temp->value)) {
+            list($temp, $mod) = $temp->divide($divisor);
+            $result = str_pad(isset($mod->value[0]) ? $mod->value[0] : '', 7, '0', STR_PAD_LEFT) . $result;
+        }
+        $result = ltrim($result, '0');
+        if (empty($result)) {
+            $result = '0';
+        }
+
+        if ($this->is_negative) {
+            $result = '-' . $result;
+        }
+
+        return $result;
+    }
+
+    /**
+     * Copy an object
+     *
+     * PHP5 passes objects by reference while PHP4 passes by value.  As such, we need a function to guarantee
+     * that all objects are passed by value, when appropriate.  More information can be found here:
+     *
+     * {@link http://php.net/language.oop5.basic#51624}
+     *
+     * @access public
+     * @see __clone()
+     * @return Math_BigInteger
+     */
+    function copy()
+    {
+        $temp = new Math_BigInteger();
+        $temp->value = $this->value;
+        $temp->is_negative = $this->is_negative;
+        $temp->generator = $this->generator;
+        $temp->precision = $this->precision;
+        $temp->bitmask = $this->bitmask;
+        return $temp;
+    }
+
+    /**
+     *  __toString() magic method
+     *
+     * Will be called, automatically, if you're supporting just PHP5.  If you're supporting PHP4, you'll need to call
+     * toString().
+     *
+     * @access public
+     * @internal Implemented per a suggestion by Techie-Michael - thanks!
+     */
+    function __toString()
+    {
+        return $this->toString();
+    }
+
+    /**
+     * __clone() magic method
+     *
+     * Although you can call Math_BigInteger::__toString() directly in PHP5, you cannot call Math_BigInteger::__clone()
+     * directly in PHP5.  You can in PHP4 since it's not a magic method, but in PHP5, you have to call it by using the PHP5
+     * only syntax of $y = clone $x.  As such, if you're trying to write an application that works on both PHP4 and PHP5,
+     * call Math_BigInteger::copy(), instead.
+     *
+     * @access public
+     * @see copy()
+     * @return Math_BigInteger
+     */
+    function __clone()
+    {
+        return $this->copy();
+    }
+
+    /**
+     *  __sleep() magic method
+     *
+     * Will be called, automatically, when serialize() is called on a Math_BigInteger object.
+     *
+     * @see __wakeup()
+     * @access public
+     */
+    function __sleep()
+    {
+        $this->hex = $this->toHex(true);
+        $vars = array('hex');
+        if ($this->generator != 'mt_rand') {
+            $vars[] = 'generator';
+        }
+        if ($this->precision > 0) {
+            $vars[] = 'precision';
+        }
+        return $vars;
+        
+    }
+
+    /**
+     *  __wakeup() magic method
+     *
+     * Will be called, automatically, when unserialize() is called on a Math_BigInteger object.
+     *
+     * @see __sleep()
+     * @access public
+     */
+    function __wakeup()
+    {
+        $temp = new Math_BigInteger($this->hex, -16);
+        $this->value = $temp->value;
+        $this->is_negative = $temp->is_negative;
+        $this->setRandomGenerator($this->generator);
+        if ($this->precision > 0) {
+            // recalculate $this->bitmask
+            $this->setPrecision($this->precision);
+        }
+    }
+
+    /**
+     * Adds two BigIntegers.
+     *
+     * Here's an example:
+     * <code>
+     * <?php
+     *    include('Math/BigInteger.php');
+     *
+     *    $a = new Math_BigInteger('10');
+     *    $b = new Math_BigInteger('20');
+     *
+     *    $c = $a->add($b);
+     *
+     *    echo $c->toString(); // outputs 30
+     * ?>
+     * </code>
+     *
+     * @param Math_BigInteger $y
+     * @return Math_BigInteger
+     * @access public
+     * @internal Performs base-2**52 addition
+     */
+    function add($y)
+    {
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                $temp = new Math_BigInteger();
+                $temp->value = gmp_add($this->value, $y->value);
+
+                return $this->_normalize($temp);
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                $temp = new Math_BigInteger();
+                $temp->value = bcadd($this->value, $y->value, 0);
+
+                return $this->_normalize($temp);
+        }
+
+        $temp = $this->_add($this->value, $this->is_negative, $y->value, $y->is_negative);
+
+        $result = new Math_BigInteger();
+        $result->value = $temp[MATH_BIGINTEGER_VALUE];
+        $result->is_negative = $temp[MATH_BIGINTEGER_SIGN];
+
+        return $this->_normalize($result);
+    }
+
+    /**
+     * Performs addition.
+     *
+     * @param Array $x_value
+     * @param Boolean $x_negative
+     * @param Array $y_value
+     * @param Boolean $y_negative
+     * @return Array
+     * @access private
+     */
+    function _add($x_value, $x_negative, $y_value, $y_negative)
+    {
+        $x_size = count($x_value);
+        $y_size = count($y_value);
+
+        if ($x_size == 0) {
+            return array(
+                MATH_BIGINTEGER_VALUE => $y_value,
+                MATH_BIGINTEGER_SIGN => $y_negative
+            );
+        } else if ($y_size == 0) {
+            return array(
+                MATH_BIGINTEGER_VALUE => $x_value,
+                MATH_BIGINTEGER_SIGN => $x_negative
+            );
+        }
+
+        // subtract, if appropriate
+        if ( $x_negative != $y_negative ) {
+            if ( $x_value == $y_value ) {
+                return array(
+                    MATH_BIGINTEGER_VALUE => array(),
+                    MATH_BIGINTEGER_SIGN => false
+                );
+            }
+
+            $temp = $this->_subtract($x_value, false, $y_value, false);
+            $temp[MATH_BIGINTEGER_SIGN] = $this->_compare($x_value, false, $y_value, false) > 0 ?
+                                          $x_negative : $y_negative;
+
+            return $temp;
+        }
+
+        if ($x_size < $y_size) {
+            $size = $x_size;
+            $value = $y_value;
+        } else {
+            $size = $y_size;
+            $value = $x_value;
+        }
+
+        $value[] = 0; // just in case the carry adds an extra digit
+
+        $carry = 0;
+        for ($i = 0, $j = 1; $j < $size; $i+=2, $j+=2) {
+            $sum = $x_value[$j] * 0x4000000 + $x_value[$i] + $y_value[$j] * 0x4000000 + $y_value[$i] + $carry;
+            $carry = $sum >= MATH_BIGINTEGER_MAX_DIGIT52; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1
+            $sum = $carry ? $sum - MATH_BIGINTEGER_MAX_DIGIT52 : $sum;
+
+            $temp = (int) ($sum / 0x4000000);
+
+            $value[$i] = (int) ($sum - 0x4000000 * $temp); // eg. a faster alternative to fmod($sum, 0x4000000)
+            $value[$j] = $temp;
+        }
+
+        if ($j == $size) { // ie. if $y_size is odd
+            $sum = $x_value[$i] + $y_value[$i] + $carry;
+            $carry = $sum >= 0x4000000;
+            $value[$i] = $carry ? $sum - 0x4000000 : $sum;
+            ++$i; // ie. let $i = $j since we've just done $value[$i]
+        }
+
+        if ($carry) {
+            for (; $value[$i] == 0x3FFFFFF; ++$i) {
+                $value[$i] = 0;
+            }
+            ++$value[$i];
+        }
+
+        return array(
+            MATH_BIGINTEGER_VALUE => $this->_trim($value),
+            MATH_BIGINTEGER_SIGN => $x_negative
+        );
+    }
+
+    /**
+     * Subtracts two BigIntegers.
+     *
+     * Here's an example:
+     * <code>
+     * <?php
+     *    include('Math/BigInteger.php');
+     *
+     *    $a = new Math_BigInteger('10');
+     *    $b = new Math_BigInteger('20');
+     *
+     *    $c = $a->subtract($b);
+     *
+     *    echo $c->toString(); // outputs -10
+     * ?>
+     * </code>
+     *
+     * @param Math_BigInteger $y
+     * @return Math_BigInteger
+     * @access public
+     * @internal Performs base-2**52 subtraction
+     */
+    function subtract($y)
+    {
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                $temp = new Math_BigInteger();
+                $temp->value = gmp_sub($this->value, $y->value);
+
+                return $this->_normalize($temp);
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                $temp = new Math_BigInteger();
+                $temp->value = bcsub($this->value, $y->value, 0);
+
+                return $this->_normalize($temp);
+        }
+
+        $temp = $this->_subtract($this->value, $this->is_negative, $y->value, $y->is_negative);
+
+        $result = new Math_BigInteger();
+        $result->value = $temp[MATH_BIGINTEGER_VALUE];
+        $result->is_negative = $temp[MATH_BIGINTEGER_SIGN];
+
+        return $this->_normalize($result);
+    }
+
+    /**
+     * Performs subtraction.
+     *
+     * @param Array $x_value
+     * @param Boolean $x_negative
+     * @param Array $y_value
+     * @param Boolean $y_negative
+     * @return Array
+     * @access private
+     */
+    function _subtract($x_value, $x_negative, $y_value, $y_negative)
+    {
+        $x_size = count($x_value);
+        $y_size = count($y_value);
+
+        if ($x_size == 0) {
+            return array(
+                MATH_BIGINTEGER_VALUE => $y_value,
+                MATH_BIGINTEGER_SIGN => !$y_negative
+            );
+        } else if ($y_size == 0) {
+            return array(
+                MATH_BIGINTEGER_VALUE => $x_value,
+                MATH_BIGINTEGER_SIGN => $x_negative
+            );
+        }
+
+        // add, if appropriate (ie. -$x - +$y or +$x - -$y)
+        if ( $x_negative != $y_negative ) {
+            $temp = $this->_add($x_value, false, $y_value, false);
+            $temp[MATH_BIGINTEGER_SIGN] = $x_negative;
+
+            return $temp;
+        }
+
+        $diff = $this->_compare($x_value, $x_negative, $y_value, $y_negative);
+
+        if ( !$diff ) {
+            return array(
+                MATH_BIGINTEGER_VALUE => array(),
+                MATH_BIGINTEGER_SIGN => false
+            );
+        }
+
+        // switch $x and $y around, if appropriate.
+        if ( (!$x_negative && $diff < 0) || ($x_negative && $diff > 0) ) {
+            $temp = $x_value;
+            $x_value = $y_value;
+            $y_value = $temp;
+
+            $x_negative = !$x_negative;
+
+            $x_size = count($x_value);
+            $y_size = count($y_value);
+        }
+
+        // at this point, $x_value should be at least as big as - if not bigger than - $y_value
+
+        $carry = 0;
+        for ($i = 0, $j = 1; $j < $y_size; $i+=2, $j+=2) {
+            $sum = $x_value[$j] * 0x4000000 + $x_value[$i] - $y_value[$j] * 0x4000000 - $y_value[$i] - $carry;
+            $carry = $sum < 0; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1
+            $sum = $carry ? $sum + MATH_BIGINTEGER_MAX_DIGIT52 : $sum;
+
+            $temp = (int) ($sum / 0x4000000);
+
+            $x_value[$i] = (int) ($sum - 0x4000000 * $temp);
+            $x_value[$j] = $temp;
+        }
+
+        if ($j == $y_size) { // ie. if $y_size is odd
+            $sum = $x_value[$i] - $y_value[$i] - $carry;
+            $carry = $sum < 0;
+            $x_value[$i] = $carry ? $sum + 0x4000000 : $sum;
+            ++$i;
+        }
+
+        if ($carry) {
+            for (; !$x_value[$i]; ++$i) {
+                $x_value[$i] = 0x3FFFFFF;
+            }
+            --$x_value[$i];
+        }
+
+        return array(
+            MATH_BIGINTEGER_VALUE => $this->_trim($x_value),
+            MATH_BIGINTEGER_SIGN => $x_negative
+        );
+    }
+
+    /**
+     * Multiplies two BigIntegers
+     *
+     * Here's an example:
+     * <code>
+     * <?php
+     *    include('Math/BigInteger.php');
+     *
+     *    $a = new Math_BigInteger('10');
+     *    $b = new Math_BigInteger('20');
+     *
+     *    $c = $a->multiply($b);
+     *
+     *    echo $c->toString(); // outputs 200
+     * ?>
+     * </code>
+     *
+     * @param Math_BigInteger $x
+     * @return Math_BigInteger
+     * @access public
+     */
+    function multiply($x)
+    {
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                $temp = new Math_BigInteger();
+                $temp->value = gmp_mul($this->value, $x->value);
+
+                return $this->_normalize($temp);
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                $temp = new Math_BigInteger();
+                $temp->value = bcmul($this->value, $x->value, 0);
+
+                return $this->_normalize($temp);
+        }
+
+        $temp = $this->_multiply($this->value, $this->is_negative, $x->value, $x->is_negative);
+
+        $product = new Math_BigInteger();
+        $product->value = $temp[MATH_BIGINTEGER_VALUE];
+        $product->is_negative = $temp[MATH_BIGINTEGER_SIGN];
+
+        return $this->_normalize($product);
+    }
+
+    /**
+     * Performs multiplication.
+     *
+     * @param Array $x_value
+     * @param Boolean $x_negative
+     * @param Array $y_value
+     * @param Boolean $y_negative
+     * @return Array
+     * @access private
+     */
+    function _multiply($x_value, $x_negative, $y_value, $y_negative)
+    {
+        //if ( $x_value == $y_value ) {
+        //    return array(
+        //        MATH_BIGINTEGER_VALUE => $this->_square($x_value),
+        //        MATH_BIGINTEGER_SIGN => $x_sign != $y_value
+        //    );
+        //}
+
+        $x_length = count($x_value);
+        $y_length = count($y_value);
+
+        if ( !$x_length || !$y_length ) { // a 0 is being multiplied
+            return array(
+                MATH_BIGINTEGER_VALUE => array(),
+                MATH_BIGINTEGER_SIGN => false
+            );
+        }
+
+        return array(
+            MATH_BIGINTEGER_VALUE => min($x_length, $y_length) < 2 * MATH_BIGINTEGER_KARATSUBA_CUTOFF ?
+                $this->_trim($this->_regularMultiply($x_value, $y_value)) :
+                $this->_trim($this->_karatsuba($x_value, $y_value)),
+            MATH_BIGINTEGER_SIGN => $x_negative != $y_negative
+        );
+    }
+
+    /**
+     * Performs long multiplication on two BigIntegers
+     *
+     * Modeled after 'multiply' in MutableBigInteger.java.
+     *
+     * @param Array $x_value
+     * @param Array $y_value
+     * @return Array
+     * @access private
+     */
+    function _regularMultiply($x_value, $y_value)
+    {
+        $x_length = count($x_value);
+        $y_length = count($y_value);
+
+        if ( !$x_length || !$y_length ) { // a 0 is being multiplied
+            return array();
+        }
+
+        if ( $x_length < $y_length ) {
+            $temp = $x_value;
+            $x_value = $y_value;
+            $y_value = $temp;
+
+            $x_length = count($x_value);
+            $y_length = count($y_value);
+        }
+
+        $product_value = $this->_array_repeat(0, $x_length + $y_length);
+
+        // the following for loop could be removed if the for loop following it
+        // (the one with nested for loops) initially set $i to 0, but
+        // doing so would also make the result in one set of unnecessary adds,
+        // since on the outermost loops first pass, $product->value[$k] is going
+        // to always be 0
+
+        $carry = 0;
+
+        for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0
+            $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0
+            $carry = (int) ($temp / 0x4000000);
+            $product_value[$j] = (int) ($temp - 0x4000000 * $carry);
+        }
+
+        $product_value[$j] = $carry;
+
+        // the above for loop is what the previous comment was talking about.  the
+        // following for loop is the "one with nested for loops"
+        for ($i = 1; $i < $y_length; ++$i) {
+            $carry = 0;
+
+            for ($j = 0, $k = $i; $j < $x_length; ++$j, ++$k) {
+                $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry;
+                $carry = (int) ($temp / 0x4000000);
+                $product_value[$k] = (int) ($temp - 0x4000000 * $carry);
+            }
+
+            $product_value[$k] = $carry;
+        }
+
+        return $product_value;
+    }
+
+    /**
+     * Performs Karatsuba multiplication on two BigIntegers
+     *
+     * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and
+     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=120 MPM 5.2.3}.
+     *
+     * @param Array $x_value
+     * @param Array $y_value
+     * @return Array
+     * @access private
+     */
+    function _karatsuba($x_value, $y_value)
+    {
+        $m = min(count($x_value) >> 1, count($y_value) >> 1);
+
+        if ($m < MATH_BIGINTEGER_KARATSUBA_CUTOFF) {
+            return $this->_regularMultiply($x_value, $y_value);
+        }
+
+        $x1 = array_slice($x_value, $m);
+        $x0 = array_slice($x_value, 0, $m);
+        $y1 = array_slice($y_value, $m);
+        $y0 = array_slice($y_value, 0, $m);
+
+        $z2 = $this->_karatsuba($x1, $y1);
+        $z0 = $this->_karatsuba($x0, $y0);
+
+        $z1 = $this->_add($x1, false, $x0, false);
+        $temp = $this->_add($y1, false, $y0, false);
+        $z1 = $this->_karatsuba($z1[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_VALUE]);
+        $temp = $this->_add($z2, false, $z0, false);
+        $z1 = $this->_subtract($z1, false, $temp[MATH_BIGINTEGER_VALUE], false);
+
+        $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2);
+        $z1[MATH_BIGINTEGER_VALUE] = array_merge(array_fill(0, $m, 0), $z1[MATH_BIGINTEGER_VALUE]);
+
+        $xy = $this->_add($z2, false, $z1[MATH_BIGINTEGER_VALUE], $z1[MATH_BIGINTEGER_SIGN]);
+        $xy = $this->_add($xy[MATH_BIGINTEGER_VALUE], $xy[MATH_BIGINTEGER_SIGN], $z0, false);
+
+        return $xy[MATH_BIGINTEGER_VALUE];
+    }
+
+    /**
+     * Performs squaring
+     *
+     * @param Array $x
+     * @return Array
+     * @access private
+     */
+    function _square($x = false)
+    {
+        return count($x) < 2 * MATH_BIGINTEGER_KARATSUBA_CUTOFF ?
+            $this->_trim($this->_baseSquare($x)) :
+            $this->_trim($this->_karatsubaSquare($x));
+    }
+
+    /**
+     * Performs traditional squaring on two BigIntegers
+     *
+     * Squaring can be done faster than multiplying a number by itself can be.  See
+     * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=7 HAC 14.2.4} /
+     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=141 MPM 5.3} for more information.
+     *
+     * @param Array $value
+     * @return Array
+     * @access private
+     */
+    function _baseSquare($value)
+    {
+        if ( empty($value) ) {
+            return array();
+        }
+        $square_value = $this->_array_repeat(0, 2 * count($value));
+
+        for ($i = 0, $max_index = count($value) - 1; $i <= $max_index; ++$i) {
+            $i2 = $i << 1;
+
+            $temp = $square_value[$i2] + $value[$i] * $value[$i];
+            $carry = (int) ($temp / 0x4000000);
+            $square_value[$i2] = (int) ($temp - 0x4000000 * $carry);
+
+            // note how we start from $i+1 instead of 0 as we do in multiplication.
+            for ($j = $i + 1, $k = $i2 + 1; $j <= $max_index; ++$j, ++$k) {
+                $temp = $square_value[$k] + 2 * $value[$j] * $value[$i] + $carry;
+                $carry = (int) ($temp / 0x4000000);
+                $square_value[$k] = (int) ($temp - 0x4000000 * $carry);
+            }
+
+            // the following line can yield values larger 2**15.  at this point, PHP should switch
+            // over to floats.
+            $square_value[$i + $max_index + 1] = $carry;
+        }
+
+        return $square_value;
+    }
+
+    /**
+     * Performs Karatsuba "squaring" on two BigIntegers
+     *
+     * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and
+     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=151 MPM 5.3.4}.
+     *
+     * @param Array $value
+     * @return Array
+     * @access private
+     */
+    function _karatsubaSquare($value)
+    {
+        $m = count($value) >> 1;
+
+        if ($m < MATH_BIGINTEGER_KARATSUBA_CUTOFF) {
+            return $this->_baseSquare($value);
+        }
+
+        $x1 = array_slice($value, $m);
+        $x0 = array_slice($value, 0, $m);
+
+        $z2 = $this->_karatsubaSquare($x1);
+        $z0 = $this->_karatsubaSquare($x0);
+
+        $z1 = $this->_add($x1, false, $x0, false);
+        $z1 = $this->_karatsubaSquare($z1[MATH_BIGINTEGER_VALUE]);
+        $temp = $this->_add($z2, false, $z0, false);
+        $z1 = $this->_subtract($z1, false, $temp[MATH_BIGINTEGER_VALUE], false);
+
+        $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2);
+        $z1[MATH_BIGINTEGER_VALUE] = array_merge(array_fill(0, $m, 0), $z1[MATH_BIGINTEGER_VALUE]);
+
+        $xx = $this->_add($z2, false, $z1[MATH_BIGINTEGER_VALUE], $z1[MATH_BIGINTEGER_SIGN]);
+        $xx = $this->_add($xx[MATH_BIGINTEGER_VALUE], $xx[MATH_BIGINTEGER_SIGN], $z0, false);
+
+        return $xx[MATH_BIGINTEGER_VALUE];
+    }
+
+    /**
+     * Divides two BigIntegers.
+     *
+     * Returns an array whose first element contains the quotient and whose second element contains the
+     * "common residue".  If the remainder would be positive, the "common residue" and the remainder are the
+     * same.  If the remainder would be negative, the "common residue" is equal to the sum of the remainder
+     * and the divisor (basically, the "common residue" is the first positive modulo).
+     *
+     * Here's an example:
+     * <code>
+     * <?php
+     *    include('Math/BigInteger.php');
+     *
+     *    $a = new Math_BigInteger('10');
+     *    $b = new Math_BigInteger('20');
+     *
+     *    list($quotient, $remainder) = $a->divide($b);
+     *
+     *    echo $quotient->toString(); // outputs 0
+     *    echo "\r\n";
+     *    echo $remainder->toString(); // outputs 10
+     * ?>
+     * </code>
+     *
+     * @param Math_BigInteger $y
+     * @return Array
+     * @access public
+     * @internal This function is based off of {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=9 HAC 14.20}.
+     */
+    function divide($y)
+    {
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                $quotient = new Math_BigInteger();
+                $remainder = new Math_BigInteger();
+
+                list($quotient->value, $remainder->value) = gmp_div_qr($this->value, $y->value);
+
+                if (gmp_sign($remainder->value) < 0) {
+                    $remainder->value = gmp_add($remainder->value, gmp_abs($y->value));
+                }
+
+                return array($this->_normalize($quotient), $this->_normalize($remainder));
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                $quotient = new Math_BigInteger();
+                $remainder = new Math_BigInteger();
+
+                $quotient->value = bcdiv($this->value, $y->value, 0);
+                $remainder->value = bcmod($this->value, $y->value);
+
+                if ($remainder->value[0] == '-') {
+                    $remainder->value = bcadd($remainder->value, $y->value[0] == '-' ? substr($y->value, 1) : $y->value, 0);
+                }
+
+                return array($this->_normalize($quotient), $this->_normalize($remainder));
+        }
+
+        if (count($y->value) == 1) {
+            list($q, $r) = $this->_divide_digit($this->value, $y->value[0]);
+            $quotient = new Math_BigInteger();
+            $remainder = new Math_BigInteger();
+            $quotient->value = $q;
+            $remainder->value = array($r);
+            $quotient->is_negative = $this->is_negative != $y->is_negative;
+            return array($this->_normalize($quotient), $this->_normalize($remainder));
+        }
+
+        static $zero;
+        if ( !isset($zero) ) {
+            $zero = new Math_BigInteger();
+        }
+
+        $x = $this->copy();
+        $y = $y->copy();
+
+        $x_sign = $x->is_negative;
+        $y_sign = $y->is_negative;
+
+        $x->is_negative = $y->is_negative = false;
+
+        $diff = $x->compare($y);
+
+        if ( !$diff ) {
+            $temp = new Math_BigInteger();
+            $temp->value = array(1);
+            $temp->is_negative = $x_sign != $y_sign;
+            return array($this->_normalize($temp), $this->_normalize(new Math_BigInteger()));
+        }
+
+        if ( $diff < 0 ) {
+            // if $x is negative, "add" $y.
+            if ( $x_sign ) {
+                $x = $y->subtract($x);
+            }
+            return array($this->_normalize(new Math_BigInteger()), $this->_normalize($x));
+        }
+
+        // normalize $x and $y as described in HAC 14.23 / 14.24
+        $msb = $y->value[count($y->value) - 1];
+        for ($shift = 0; !($msb & 0x2000000); ++$shift) {
+            $msb <<= 1;
+        }
+        $x->_lshift($shift);
+        $y->_lshift($shift);
+        $y_value = &$y->value;
+
+        $x_max = count($x->value) - 1;
+        $y_max = count($y->value) - 1;
+
+        $quotient = new Math_BigInteger();
+        $quotient_value = &$quotient->value;
+        $quotient_value = $this->_array_repeat(0, $x_max - $y_max + 1);
+
+        static $temp, $lhs, $rhs;
+        if (!isset($temp)) {
+            $temp = new Math_BigInteger();
+            $lhs =  new Math_BigInteger();
+            $rhs =  new Math_BigInteger();
+        }
+        $temp_value = &$temp->value;
+        $rhs_value =  &$rhs->value;
+
+        // $temp = $y << ($x_max - $y_max-1) in base 2**26
+        $temp_value = array_merge($this->_array_repeat(0, $x_max - $y_max), $y_value);
+
+        while ( $x->compare($temp) >= 0 ) {
+            // calculate the "common residue"
+            ++$quotient_value[$x_max - $y_max];
+            $x = $x->subtract($temp);
+            $x_max = count($x->value) - 1;
+        }
+
+        for ($i = $x_max; $i >= $y_max + 1; --$i) {
+            $x_value = &$x->value;
+            $x_window = array(
+                isset($x_value[$i]) ? $x_value[$i] : 0,
+                isset($x_value[$i - 1]) ? $x_value[$i - 1] : 0,
+                isset($x_value[$i - 2]) ? $x_value[$i - 2] : 0
+            );
+            $y_window = array(
+                $y_value[$y_max],
+                ( $y_max > 0 ) ? $y_value[$y_max - 1] : 0
+            );
+
+            $q_index = $i - $y_max - 1;
+            if ($x_window[0] == $y_window[0]) {
+                $quotient_value[$q_index] = 0x3FFFFFF;
+            } else {
+                $quotient_value[$q_index] = (int) (
+                    ($x_window[0] * 0x4000000 + $x_window[1])
+                    /
+                    $y_window[0]
+                );
+            }
+
+            $temp_value = array($y_window[1], $y_window[0]);
+
+            $lhs->value = array($quotient_value[$q_index]);
+            $lhs = $lhs->multiply($temp);
+
+            $rhs_value = array($x_window[2], $x_window[1], $x_window[0]);
+
+            while ( $lhs->compare($rhs) > 0 ) {
+                --$quotient_value[$q_index];
+
+                $lhs->value = array($quotient_value[$q_index]);
+                $lhs = $lhs->multiply($temp);
+            }
+
+            $adjust = $this->_array_repeat(0, $q_index);
+            $temp_value = array($quotient_value[$q_index]);
+            $temp = $temp->multiply($y);
+            $temp_value = &$temp->value;
+            $temp_value = array_merge($adjust, $temp_value);
+
+            $x = $x->subtract($temp);
+
+            if ($x->compare($zero) < 0) {
+                $temp_value = array_merge($adjust, $y_value);
+                $x = $x->add($temp);
+
+                --$quotient_value[$q_index];
+            }
+
+            $x_max = count($x_value) - 1;
+        }
+
+        // unnormalize the remainder
+        $x->_rshift($shift);
+
+        $quotient->is_negative = $x_sign != $y_sign;
+
+        // calculate the "common residue", if appropriate
+        if ( $x_sign ) {
+            $y->_rshift($shift);
+            $x = $y->subtract($x);
+        }
+
+        return array($this->_normalize($quotient), $this->_normalize($x));
+    }
+
+    /**
+     * Divides a BigInteger by a regular integer
+     *
+     * abc / x = a00 / x + b0 / x + c / x
+     *
+     * @param Array $dividend
+     * @param Array $divisor
+     * @return Array
+     * @access private
+     */
+    function _divide_digit($dividend, $divisor)
+    {
+        $carry = 0;
+        $result = array();
+
+        for ($i = count($dividend) - 1; $i >= 0; --$i) {
+            $temp = 0x4000000 * $carry + $dividend[$i];
+            $result[$i] = (int) ($temp / $divisor);
+            $carry = (int) ($temp - $divisor * $result[$i]);
+        }
+
+        return array($result, $carry);
+    }
+
+    /**
+     * Performs modular exponentiation.
+     *
+     * Here's an example:
+     * <code>
+     * <?php
+     *    include('Math/BigInteger.php');
+     *
+     *    $a = new Math_BigInteger('10');
+     *    $b = new Math_BigInteger('20');
+     *    $c = new Math_BigInteger('30');
+     *
+     *    $c = $a->modPow($b, $c);
+     *
+     *    echo $c->toString(); // outputs 10
+     * ?>
+     * </code>
+     *
+     * @param Math_BigInteger $e
+     * @param Math_BigInteger $n
+     * @return Math_BigInteger
+     * @access public
+     * @internal The most naive approach to modular exponentiation has very unreasonable requirements, and
+     *    and although the approach involving repeated squaring does vastly better, it, too, is impractical
+     *    for our purposes.  The reason being that division - by far the most complicated and time-consuming
+     *    of the basic operations (eg. +,-,*,/) - occurs multiple times within it.
+     *
+     *    Modular reductions resolve this issue.  Although an individual modular reduction takes more time
+     *    then an individual division, when performed in succession (with the same modulo), they're a lot faster.
+     *
+     *    The two most commonly used modular reductions are Barrett and Montgomery reduction.  Montgomery reduction,
+     *    although faster, only works when the gcd of the modulo and of the base being used is 1.  In RSA, when the
+     *    base is a power of two, the modulo - a product of two primes - is always going to have a gcd of 1 (because
+     *    the product of two odd numbers is odd), but what about when RSA isn't used?
+     *
+     *    In contrast, Barrett reduction has no such constraint.  As such, some bigint implementations perform a
+     *    Barrett reduction after every operation in the modpow function.  Others perform Barrett reductions when the
+     *    modulo is even and Montgomery reductions when the modulo is odd.  BigInteger.java's modPow method, however,
+     *    uses a trick involving the Chinese Remainder Theorem to factor the even modulo into two numbers - one odd and
+     *    the other, a power of two - and recombine them, later.  This is the method that this modPow function uses.
+     *    {@link http://islab.oregonstate.edu/papers/j34monex.pdf Montgomery Reduction with Even Modulus} elaborates.
+     */
+    function modPow($e, $n)
+    {
+        $n = $this->bitmask !== false && $this->bitmask->compare($n) < 0 ? $this->bitmask : $n->abs();
+
+        if ($e->compare(new Math_BigInteger()) < 0) {
+            $e = $e->abs();
+
+            $temp = $this->modInverse($n);
+            if ($temp === false) {
+                return false;
+            }
+
+            return $this->_normalize($temp->modPow($e, $n));
+        }
+
+        if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_GMP ) {
+            $temp = new Math_BigInteger();
+            $temp->value = gmp_powm($this->value, $e->value, $n->value);
+
+            return $this->_normalize($temp);
+        }
+
+        if ($this->compare(new Math_BigInteger()) < 0 || $this->compare($n) > 0) {
+            list(, $temp) = $this->divide($n);
+            return $temp->modPow($e, $n);
+        }
+
+        if (defined('MATH_BIGINTEGER_OPENSSL_ENABLED')) {
+            $components = array(
+                'modulus' => $n->toBytes(true),
+                'publicExponent' => $e->toBytes(true)
+            );
+
+            $components = array(
+                'modulus' => pack('Ca*a*', 2, $this->_encodeASN1Length(strlen($components['modulus'])), $components['modulus']),
+                'publicExponent' => pack('Ca*a*', 2, $this->_encodeASN1Length(strlen($components['publicExponent'])), $components['publicExponent'])
+            );
+
+            $RSAPublicKey = pack('Ca*a*a*',
+                48, $this->_encodeASN1Length(strlen($components['modulus']) + strlen($components['publicExponent'])),
+                $components['modulus'], $components['publicExponent']
+            );
+
+            $rsaOID = pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA
+            $RSAPublicKey = chr(0) . $RSAPublicKey;
+            $RSAPublicKey = chr(3) . $this->_encodeASN1Length(strlen($RSAPublicKey)) . $RSAPublicKey;
+
+            $encapsulated = pack('Ca*a*',
+                48, $this->_encodeASN1Length(strlen($rsaOID . $RSAPublicKey)), $rsaOID . $RSAPublicKey
+            );
+
+            $RSAPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" .
+                             chunk_split(base64_encode($encapsulated)) .
+                             '-----END PUBLIC KEY-----';
+
+            $plaintext = str_pad($this->toBytes(), strlen($n->toBytes(true)) - 1, "\0", STR_PAD_LEFT);
+
+            if (openssl_public_encrypt($plaintext, $result, $RSAPublicKey, OPENSSL_NO_PADDING)) {
+                return new Math_BigInteger($result, 256);
+            }
+        }
+
+        if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_BCMATH ) {
+                $temp = new Math_BigInteger();
+                $temp->value = bcpowmod($this->value, $e->value, $n->value, 0);
+
+                return $this->_normalize($temp);
+        }
+
+        if ( empty($e->value) ) {
+            $temp = new Math_BigInteger();
+            $temp->value = array(1);
+            return $this->_normalize($temp);
+        }
+
+        if ( $e->value == array(1) ) {
+            list(, $temp) = $this->divide($n);
+            return $this->_normalize($temp);
+        }
+
+        if ( $e->value == array(2) ) {
+            $temp = new Math_BigInteger();
+            $temp->value = $this->_square($this->value);
+            list(, $temp) = $temp->divide($n);
+            return $this->_normalize($temp);
+        }
+
+        return $this->_normalize($this->_slidingWindow($e, $n, MATH_BIGINTEGER_BARRETT));
+
+        // is the modulo odd?
+        if ( $n->value[0] & 1 ) {
+            return $this->_normalize($this->_slidingWindow($e, $n, MATH_BIGINTEGER_MONTGOMERY));
+        }
+        // if it's not, it's even
+
+        // find the lowest set bit (eg. the max pow of 2 that divides $n)
+        for ($i = 0; $i < count($n->value); ++$i) {
+            if ( $n->value[$i] ) {
+                $temp = decbin($n->value[$i]);
+                $j = strlen($temp) - strrpos($temp, '1') - 1;
+                $j+= 26 * $i;
+                break;
+            }
+        }
+        // at this point, 2^$j * $n/(2^$j) == $n
+
+        $mod1 = $n->copy();
+        $mod1->_rshift($j);
+        $mod2 = new Math_BigInteger();
+        $mod2->value = array(1);
+        $mod2->_lshift($j);
+
+        $part1 = ( $mod1->value != array(1) ) ? $this->_slidingWindow($e, $mod1, MATH_BIGINTEGER_MONTGOMERY) : new Math_BigInteger();
+        $part2 = $this->_slidingWindow($e, $mod2, MATH_BIGINTEGER_POWEROF2);
+
+        $y1 = $mod2->modInverse($mod1);
+        $y2 = $mod1->modInverse($mod2);
+
+        $result = $part1->multiply($mod2);
+        $result = $result->multiply($y1);
+
+        $temp = $part2->multiply($mod1);
+        $temp = $temp->multiply($y2);
+
+        $result = $result->add($temp);
+        list(, $result) = $result->divide($n);
+
+        return $this->_normalize($result);
+    }
+
+    /**
+     * Performs modular exponentiation.
+     *
+     * Alias for Math_BigInteger::modPow()
+     *
+     * @param Math_BigInteger $e
+     * @param Math_BigInteger $n
+     * @return Math_BigInteger
+     * @access public
+     */
+    function powMod($e, $n)
+    {
+        return $this->modPow($e, $n);
+    }
+
+    /**
+     * Sliding Window k-ary Modular Exponentiation
+     *
+     * Based on {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=27 HAC 14.85} /
+     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=210 MPM 7.7}.  In a departure from those algorithims,
+     * however, this function performs a modular reduction after every multiplication and squaring operation.
+     * As such, this function has the same preconditions that the reductions being used do.
+     *
+     * @param Math_BigInteger $e
+     * @param Math_BigInteger $n
+     * @param Integer $mode
+     * @return Math_BigInteger
+     * @access private
+     */
+    function _slidingWindow($e, $n, $mode)
+    {
+        static $window_ranges = array(7, 25, 81, 241, 673, 1793); // from BigInteger.java's oddModPow function
+        //static $window_ranges = array(0, 7, 36, 140, 450, 1303, 3529); // from MPM 7.3.1
+
+        $e_value = $e->value;
+        $e_length = count($e_value) - 1;
+        $e_bits = decbin($e_value[$e_length]);
+        for ($i = $e_length - 1; $i >= 0; --$i) {
+            $e_bits.= str_pad(decbin($e_value[$i]), 26, '0', STR_PAD_LEFT);
+        }
+
+        $e_length = strlen($e_bits);
+
+        // calculate the appropriate window size.
+        // $window_size == 3 if $window_ranges is between 25 and 81, for example.
+        for ($i = 0, $window_size = 1; $e_length > $window_ranges[$i] && $i < count($window_ranges); ++$window_size, ++$i);
+
+        $n_value = $n->value;
+
+        // precompute $this^0 through $this^$window_size
+        $powers = array();
+        $powers[1] = $this->_prepareReduce($this->value, $n_value, $mode);
+        $powers[2] = $this->_squareReduce($powers[1], $n_value, $mode);
+
+        // we do every other number since substr($e_bits, $i, $j+1) (see below) is supposed to end
+        // in a 1.  ie. it's supposed to be odd.
+        $temp = 1 << ($window_size - 1);
+        for ($i = 1; $i < $temp; ++$i) {
+            $i2 = $i << 1;
+            $powers[$i2 + 1] = $this->_multiplyReduce($powers[$i2 - 1], $powers[2], $n_value, $mode);
+        }
+
+        $result = array(1);
+        $result = $this->_prepareReduce($result, $n_value, $mode);
+
+        for ($i = 0; $i < $e_length; ) {
+            if ( !$e_bits[$i] ) {
+                $result = $this->_squareReduce($result, $n_value, $mode);
+                ++$i;
+            } else {
+                for ($j = $window_size - 1; $j > 0; --$j) {
+                    if ( !empty($e_bits[$i + $j]) ) {
+                        break;
+                    }
+                }
+
+                for ($k = 0; $k <= $j; ++$k) {// eg. the length of substr($e_bits, $i, $j+1)
+                    $result = $this->_squareReduce($result, $n_value, $mode);
+                }
+
+                $result = $this->_multiplyReduce($result, $powers[bindec(substr($e_bits, $i, $j + 1))], $n_value, $mode);
+
+                $i+=$j + 1;
+            }
+        }
+
+        $temp = new Math_BigInteger();
+        $temp->value = $this->_reduce($result, $n_value, $mode);
+
+        return $temp;
+    }
+
+    /**
+     * Modular reduction
+     *
+     * For most $modes this will return the remainder.
+     *
+     * @see _slidingWindow()
+     * @access private
+     * @param Array $x
+     * @param Array $n
+     * @param Integer $mode
+     * @return Array
+     */
+    function _reduce($x, $n, $mode)
+    {
+        switch ($mode) {
+            case MATH_BIGINTEGER_MONTGOMERY:
+                return $this->_montgomery($x, $n);
+            case MATH_BIGINTEGER_BARRETT:
+                return $this->_barrett($x, $n);
+            case MATH_BIGINTEGER_POWEROF2:
+                $lhs = new Math_BigInteger();
+                $lhs->value = $x;
+                $rhs = new Math_BigInteger();
+                $rhs->value = $n;
+                return $x->_mod2($n);
+            case MATH_BIGINTEGER_CLASSIC:
+                $lhs = new Math_BigInteger();
+                $lhs->value = $x;
+                $rhs = new Math_BigInteger();
+                $rhs->value = $n;
+                list(, $temp) = $lhs->divide($rhs);
+                return $temp->value;
+            case MATH_BIGINTEGER_NONE:
+                return $x;
+            default:
+                // an invalid $mode was provided
+        }
+    }
+
+    /**
+     * Modular reduction preperation
+     *
+     * @see _slidingWindow()
+     * @access private
+     * @param Array $x
+     * @param Array $n
+     * @param Integer $mode
+     * @return Array
+     */
+    function _prepareReduce($x, $n, $mode)
+    {
+        if ($mode == MATH_BIGINTEGER_MONTGOMERY) {
+            return $this->_prepMontgomery($x, $n);
+        }
+        return $this->_reduce($x, $n, $mode);
+    }
+
+    /**
+     * Modular multiply
+     *
+     * @see _slidingWindow()
+     * @access private
+     * @param Array $x
+     * @param Array $y
+     * @param Array $n
+     * @param Integer $mode
+     * @return Array
+     */
+    function _multiplyReduce($x, $y, $n, $mode)
+    {
+        if ($mode == MATH_BIGINTEGER_MONTGOMERY) {
+            return $this->_montgomeryMultiply($x, $y, $n);
+        }
+        $temp = $this->_multiply($x, false, $y, false);
+        return $this->_reduce($temp[MATH_BIGINTEGER_VALUE], $n, $mode);
+    }
+
+    /**
+     * Modular square
+     *
+     * @see _slidingWindow()
+     * @access private
+     * @param Array $x
+     * @param Array $n
+     * @param Integer $mode
+     * @return Array
+     */
+    function _squareReduce($x, $n, $mode)
+    {
+        if ($mode == MATH_BIGINTEGER_MONTGOMERY) {
+            return $this->_montgomeryMultiply($x, $x, $n);
+        }
+        return $this->_reduce($this->_square($x), $n, $mode);
+    }
+
+    /**
+     * Modulos for Powers of Two
+     *
+     * Calculates $x%$n, where $n = 2**$e, for some $e.  Since this is basically the same as doing $x & ($n-1),
+     * we'll just use this function as a wrapper for doing that.
+     *
+     * @see _slidingWindow()
+     * @access private
+     * @param Math_BigInteger
+     * @return Math_BigInteger
+     */
+    function _mod2($n)
+    {
+        $temp = new Math_BigInteger();
+        $temp->value = array(1);
+        return $this->bitwise_and($n->subtract($temp));
+    }
+
+    /**
+     * Barrett Modular Reduction
+     *
+     * See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=14 HAC 14.3.3} /
+     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=165 MPM 6.2.5} for more information.  Modified slightly,
+     * so as not to require negative numbers (initially, this script didn't support negative numbers).
+     *
+     * Employs "folding", as described at
+     * {@link http://www.cosic.esat.kuleuven.be/publications/thesis-149.pdf#page=66 thesis-149.pdf#page=66}.  To quote from
+     * it, "the idea [behind folding] is to find a value x' such that x (mod m) = x' (mod m), with x' being smaller than x."
+     *
+     * Unfortunately, the "Barrett Reduction with Folding" algorithm described in thesis-149.pdf is not, as written, all that
+     * usable on account of (1) its not using reasonable radix points as discussed in
+     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=162 MPM 6.2.2} and (2) the fact that, even with reasonable
+     * radix points, it only works when there are an even number of digits in the denominator.  The reason for (2) is that
+     * (x >> 1) + (x >> 1) != x / 2 + x / 2.  If x is even, they're the same, but if x is odd, they're not.  See the in-line
+     * comments for details.
+     *
+     * @see _slidingWindow()
+     * @access private
+     * @param Array $n
+     * @param Array $m
+     * @return Array
+     */
+    function _barrett($n, $m)
+    {
+        static $cache = array(
+            MATH_BIGINTEGER_VARIABLE => array(),
+            MATH_BIGINTEGER_DATA => array()
+        );
+
+        $m_length = count($m);
+
+        // if ($this->_compare($n, $this->_square($m)) >= 0) {
+        if (count($n) > 2 * $m_length) {
+            $lhs = new Math_BigInteger();
+            $rhs = new Math_BigInteger();
+            $lhs->value = $n;
+            $rhs->value = $m;
+            list(, $temp) = $lhs->divide($rhs);
+            return $temp->value;
+        }
+
+        // if (m.length >> 1) + 2 <= m.length then m is too small and n can't be reduced
+        if ($m_length < 5) {
+            return $this->_regularBarrett($n, $m);
+        }
+
+        // n = 2 * m.length
+
+        if ( ($key = array_search($m, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
+            $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
+            $cache[MATH_BIGINTEGER_VARIABLE][] = $m;
+
+            $lhs = new Math_BigInteger();
+            $lhs_value = &$lhs->value;
+            $lhs_value = $this->_array_repeat(0, $m_length + ($m_length >> 1));
+            $lhs_value[] = 1;
+            $rhs = new Math_BigInteger();
+            $rhs->value = $m;
+
+            list($u, $m1) = $lhs->divide($rhs);
+            $u = $u->value;
+            $m1 = $m1->value;
+
+            $cache[MATH_BIGINTEGER_DATA][] = array(
+                'u' => $u, // m.length >> 1 (technically (m.length >> 1) + 1)
+                'm1'=> $m1 // m.length
+            );
+        } else {
+            extract($cache[MATH_BIGINTEGER_DATA][$key]);
+        }
+
+        $cutoff = $m_length + ($m_length >> 1);
+        $lsd = array_slice($n, 0, $cutoff); // m.length + (m.length >> 1)
+        $msd = array_slice($n, $cutoff);    // m.length >> 1
+        $lsd = $this->_trim($lsd);
+        $temp = $this->_multiply($msd, false, $m1, false);
+        $n = $this->_add($lsd, false, $temp[MATH_BIGINTEGER_VALUE], false); // m.length + (m.length >> 1) + 1
+
+        if ($m_length & 1) {
+            return $this->_regularBarrett($n[MATH_BIGINTEGER_VALUE], $m);
+        }
+
+        // (m.length + (m.length >> 1) + 1) - (m.length - 1) == (m.length >> 1) + 2
+        $temp = array_slice($n[MATH_BIGINTEGER_VALUE], $m_length - 1);
+        // if even: ((m.length >> 1) + 2) + (m.length >> 1) == m.length + 2
+        // if odd:  ((m.length >> 1) + 2) + (m.length >> 1) == (m.length - 1) + 2 == m.length + 1
+        $temp = $this->_multiply($temp, false, $u, false);
+        // if even: (m.length + 2) - ((m.length >> 1) + 1) = m.length - (m.length >> 1) + 1
+        // if odd:  (m.length + 1) - ((m.length >> 1) + 1) = m.length - (m.length >> 1)
+        $temp = array_slice($temp[MATH_BIGINTEGER_VALUE], ($m_length >> 1) + 1);
+        // if even: (m.length - (m.length >> 1) + 1) + m.length = 2 * m.length - (m.length >> 1) + 1
+        // if odd:  (m.length - (m.length >> 1)) + m.length     = 2 * m.length - (m.length >> 1)
+        $temp = $this->_multiply($temp, false, $m, false);
+
+        // at this point, if m had an odd number of digits, we'd be subtracting a 2 * m.length - (m.length >> 1) digit
+        // number from a m.length + (m.length >> 1) + 1 digit number.  ie. there'd be an extra digit and the while loop
+        // following this comment would loop a lot (hence our calling _regularBarrett() in that situation).
+
+        $result = $this->_subtract($n[MATH_BIGINTEGER_VALUE], false, $temp[MATH_BIGINTEGER_VALUE], false);
+
+        while ($this->_compare($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $m, false) >= 0) {
+            $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $m, false);
+        }
+
+        return $result[MATH_BIGINTEGER_VALUE];
+    }
+
+    /**
+     * (Regular) Barrett Modular Reduction
+     *
+     * For numbers with more than four digits Math_BigInteger::_barrett() is faster.  The difference between that and this
+     * is that this function does not fold the denominator into a smaller form.
+     *
+     * @see _slidingWindow()
+     * @access private
+     * @param Array $x
+     * @param Array $n
+     * @return Array
+     */
+    function _regularBarrett($x, $n)
+    {
+        static $cache = array(
+            MATH_BIGINTEGER_VARIABLE => array(),
+            MATH_BIGINTEGER_DATA => array()
+        );
+
+        $n_length = count($n);
+
+        if (count($x) > 2 * $n_length) {
+            $lhs = new Math_BigInteger();
+            $rhs = new Math_BigInteger();
+            $lhs->value = $x;
+            $rhs->value = $n;
+            list(, $temp) = $lhs->divide($rhs);
+            return $temp->value;
+        }
+
+        if ( ($key = array_search($n, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
+            $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
+            $cache[MATH_BIGINTEGER_VARIABLE][] = $n;
+            $lhs = new Math_BigInteger();
+            $lhs_value = &$lhs->value;
+            $lhs_value = $this->_array_repeat(0, 2 * $n_length);
+            $lhs_value[] = 1;
+            $rhs = new Math_BigInteger();
+            $rhs->value = $n;
+            list($temp, ) = $lhs->divide($rhs); // m.length
+            $cache[MATH_BIGINTEGER_DATA][] = $temp->value;
+        }
+
+        // 2 * m.length - (m.length - 1) = m.length + 1
+        $temp = array_slice($x, $n_length - 1);
+        // (m.length + 1) + m.length = 2 * m.length + 1
+        $temp = $this->_multiply($temp, false, $cache[MATH_BIGINTEGER_DATA][$key], false);
+        // (2 * m.length + 1) - (m.length - 1) = m.length + 2
+        $temp = array_slice($temp[MATH_BIGINTEGER_VALUE], $n_length + 1);
+
+        // m.length + 1
+        $result = array_slice($x, 0, $n_length + 1);
+        // m.length + 1
+        $temp = $this->_multiplyLower($temp, false, $n, false, $n_length + 1);
+        // $temp == array_slice($temp->_multiply($temp, false, $n, false)->value, 0, $n_length + 1)
+
+        if ($this->_compare($result, false, $temp[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_SIGN]) < 0) {
+            $corrector_value = $this->_array_repeat(0, $n_length + 1);
+            $corrector_value[] = 1;
+            $result = $this->_add($result, false, $corrector, false);
+            $result = $result[MATH_BIGINTEGER_VALUE];
+        }
+
+        // at this point, we're subtracting a number with m.length + 1 digits from another number with m.length + 1 digits
+        $result = $this->_subtract($result, false, $temp[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_SIGN]);
+        while ($this->_compare($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $n, false) > 0) {
+            $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $n, false);
+        }
+
+        return $result[MATH_BIGINTEGER_VALUE];
+    }
+
+    /**
+     * Performs long multiplication up to $stop digits
+     *
+     * If you're going to be doing array_slice($product->value, 0, $stop), some cycles can be saved.
+     *
+     * @see _regularBarrett()
+     * @param Array $x_value
+     * @param Boolean $x_negative
+     * @param Array $y_value
+     * @param Boolean $y_negative
+     * @return Array
+     * @access private
+     */
+    function _multiplyLower($x_value, $x_negative, $y_value, $y_negative, $stop)
+    {
+        $x_length = count($x_value);
+        $y_length = count($y_value);
+
+        if ( !$x_length || !$y_length ) { // a 0 is being multiplied
+            return array(
+                MATH_BIGINTEGER_VALUE => array(),
+                MATH_BIGINTEGER_SIGN => false
+            );
+        }
+
+        if ( $x_length < $y_length ) {
+            $temp = $x_value;
+            $x_value = $y_value;
+            $y_value = $temp;
+
+            $x_length = count($x_value);
+            $y_length = count($y_value);
+        }
+
+        $product_value = $this->_array_repeat(0, $x_length + $y_length);
+
+        // the following for loop could be removed if the for loop following it
+        // (the one with nested for loops) initially set $i to 0, but
+        // doing so would also make the result in one set of unnecessary adds,
+        // since on the outermost loops first pass, $product->value[$k] is going
+        // to always be 0
+
+        $carry = 0;
+
+        for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0, $k = $i
+            $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0
+            $carry = (int) ($temp / 0x4000000);
+            $product_value[$j] = (int) ($temp - 0x4000000 * $carry);
+        }
+
+        if ($j < $stop) {
+            $product_value[$j] = $carry;
+        }
+
+        // the above for loop is what the previous comment was talking about.  the
+        // following for loop is the "one with nested for loops"
+
+        for ($i = 1; $i < $y_length; ++$i) {
+            $carry = 0;
+
+            for ($j = 0, $k = $i; $j < $x_length && $k < $stop; ++$j, ++$k) {
+                $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry;
+                $carry = (int) ($temp / 0x4000000);
+                $product_value[$k] = (int) ($temp - 0x4000000 * $carry);
+            }
+
+            if ($k < $stop) {
+                $product_value[$k] = $carry;
+            }
+        }
+
+        return array(
+            MATH_BIGINTEGER_VALUE => $this->_trim($product_value),
+            MATH_BIGINTEGER_SIGN => $x_negative != $y_negative
+        );
+    }
+
+    /**
+     * Montgomery Modular Reduction
+     *
+     * ($x->_prepMontgomery($n))->_montgomery($n) yields $x % $n.
+     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=170 MPM 6.3} provides insights on how this can be
+     * improved upon (basically, by using the comba method).  gcd($n, 2) must be equal to one for this function
+     * to work correctly.
+     *
+     * @see _prepMontgomery()
+     * @see _slidingWindow()
+     * @access private
+     * @param Array $x
+     * @param Array $n
+     * @return Array
+     */
+    function _montgomery($x, $n)
+    {
+        static $cache = array(
+            MATH_BIGINTEGER_VARIABLE => array(),
+            MATH_BIGINTEGER_DATA => array()
+        );
+
+        if ( ($key = array_search($n, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
+            $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
+            $cache[MATH_BIGINTEGER_VARIABLE][] = $x;
+            $cache[MATH_BIGINTEGER_DATA][] = $this->_modInverse67108864($n);
+        }
+
+        $k = count($n);
+
+        $result = array(MATH_BIGINTEGER_VALUE => $x);
+
+        for ($i = 0; $i < $k; ++$i) {
+            $temp = $result[MATH_BIGINTEGER_VALUE][$i] * $cache[MATH_BIGINTEGER_DATA][$key];
+            $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000)));
+            $temp = $this->_regularMultiply(array($temp), $n);
+            $temp = array_merge($this->_array_repeat(0, $i), $temp);
+            $result = $this->_add($result[MATH_BIGINTEGER_VALUE], false, $temp, false);
+        }
+
+        $result[MATH_BIGINTEGER_VALUE] = array_slice($result[MATH_BIGINTEGER_VALUE], $k);
+
+        if ($this->_compare($result, false, $n, false) >= 0) {
+            $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], false, $n, false);
+        }
+
+        return $result[MATH_BIGINTEGER_VALUE];
+    }
+
+    /**
+     * Montgomery Multiply
+     *
+     * Interleaves the montgomery reduction and long multiplication algorithms together as described in 
+     * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=13 HAC 14.36}
+     *
+     * @see _prepMontgomery()
+     * @see _montgomery()
+     * @access private
+     * @param Array $x
+     * @param Array $y
+     * @param Array $m
+     * @return Array
+     */
+    function _montgomeryMultiply($x, $y, $m)
+    {
+        $temp = $this->_multiply($x, false, $y, false);
+        return $this->_montgomery($temp[MATH_BIGINTEGER_VALUE], $m);
+
+        static $cache = array(
+            MATH_BIGINTEGER_VARIABLE => array(),
+            MATH_BIGINTEGER_DATA => array()
+        );
+
+        if ( ($key = array_search($m, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
+            $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
+            $cache[MATH_BIGINTEGER_VARIABLE][] = $m;
+            $cache[MATH_BIGINTEGER_DATA][] = $this->_modInverse67108864($m);
+        }
+
+        $n = max(count($x), count($y), count($m));
+        $x = array_pad($x, $n, 0);
+        $y = array_pad($y, $n, 0);
+        $m = array_pad($m, $n, 0);
+        $a = array(MATH_BIGINTEGER_VALUE => $this->_array_repeat(0, $n + 1));
+        for ($i = 0; $i < $n; ++$i) {
+            $temp = $a[MATH_BIGINTEGER_VALUE][0] + $x[$i] * $y[0];
+            $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000)));
+            $temp = $temp * $cache[MATH_BIGINTEGER_DATA][$key];
+            $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000)));
+            $temp = $this->_add($this->_regularMultiply(array($x[$i]), $y), false, $this->_regularMultiply(array($temp), $m), false);
+            $a = $this->_add($a[MATH_BIGINTEGER_VALUE], false, $temp[MATH_BIGINTEGER_VALUE], false);
+            $a[MATH_BIGINTEGER_VALUE] = array_slice($a[MATH_BIGINTEGER_VALUE], 1);
+        }
+        if ($this->_compare($a[MATH_BIGINTEGER_VALUE], false, $m, false) >= 0) {
+            $a = $this->_subtract($a[MATH_BIGINTEGER_VALUE], false, $m, false);
+        }
+        return $a[MATH_BIGINTEGER_VALUE];
+    }
+
+    /**
+     * Prepare a number for use in Montgomery Modular Reductions
+     *
+     * @see _montgomery()
+     * @see _slidingWindow()
+     * @access private
+     * @param Array $x
+     * @param Array $n
+     * @return Array
+     */
+    function _prepMontgomery($x, $n)
+    {
+        $lhs = new Math_BigInteger();
+        $lhs->value = array_merge($this->_array_repeat(0, count($n)), $x);
+        $rhs = new Math_BigInteger();
+        $rhs->value = $n;
+
+        list(, $temp) = $lhs->divide($rhs);
+        return $temp->value;
+    }
+
+    /**
+     * Modular Inverse of a number mod 2**26 (eg. 67108864)
+     *
+     * Based off of the bnpInvDigit function implemented and justified in the following URL:
+     *
+     * {@link http://www-cs-students.stanford.edu/~tjw/jsbn/jsbn.js}
+     *
+     * The following URL provides more info:
+     *
+     * {@link http://groups.google.com/group/sci.crypt/msg/7a137205c1be7d85}
+     *
+     * As for why we do all the bitmasking...  strange things can happen when converting from floats to ints. For
+     * instance, on some computers, var_dump((int) -4294967297) yields int(-1) and on others, it yields 
+     * int(-2147483648).  To avoid problems stemming from this, we use bitmasks to guarantee that ints aren't
+     * auto-converted to floats.  The outermost bitmask is present because without it, there's no guarantee that
+     * the "residue" returned would be the so-called "common residue".  We use fmod, in the last step, because the
+     * maximum possible $x is 26 bits and the maximum $result is 16 bits.  Thus, we have to be able to handle up to
+     * 40 bits, which only 64-bit floating points will support.
+     *
+     * Thanks to Pedro Gimeno Fortea for input!
+     *
+     * @see _montgomery()
+     * @access private
+     * @param Array $x
+     * @return Integer
+     */
+    function _modInverse67108864($x) // 2**26 == 67108864
+    {
+        $x = -$x[0];
+        $result = $x & 0x3; // x**-1 mod 2**2
+        $result = ($result * (2 - $x * $result)) & 0xF; // x**-1 mod 2**4
+        $result = ($result * (2 - ($x & 0xFF) * $result))  & 0xFF; // x**-1 mod 2**8
+        $result = ($result * ((2 - ($x & 0xFFFF) * $result) & 0xFFFF)) & 0xFFFF; // x**-1 mod 2**16
+        $result = fmod($result * (2 - fmod($x * $result, 0x4000000)), 0x4000000); // x**-1 mod 2**26
+        return $result & 0x3FFFFFF;
+    }
+
+    /**
+     * Calculates modular inverses.
+     *
+     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.
+     *
+     * Here's an example:
+     * <code>
+     * <?php
+     *    include('Math/BigInteger.php');
+     *
+     *    $a = new Math_BigInteger(30);
+     *    $b = new Math_BigInteger(17);
+     *
+     *    $c = $a->modInverse($b);
+     *    echo $c->toString(); // outputs 4
+     *
+     *    echo "\r\n";
+     *
+     *    $d = $a->multiply($c);
+     *    list(, $d) = $d->divide($b);
+     *    echo $d; // outputs 1 (as per the definition of modular inverse)
+     * ?>
+     * </code>
+     *
+     * @param Math_BigInteger $n
+     * @return mixed false, if no modular inverse exists, Math_BigInteger, otherwise.
+     * @access public
+     * @internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=21 HAC 14.64} for more information.
+     */
+    function modInverse($n)
+    {
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                $temp = new Math_BigInteger();
+                $temp->value = gmp_invert($this->value, $n->value);
+
+                return ( $temp->value === false ) ? false : $this->_normalize($temp);
+        }
+
+        static $zero, $one;
+        if (!isset($zero)) {
+            $zero = new Math_BigInteger();
+            $one = new Math_BigInteger(1);
+        }
+
+        // $x mod -$n == $x mod $n.
+        $n = $n->abs();
+
+        if ($this->compare($zero) < 0) {
+            $temp = $this->abs();
+            $temp = $temp->modInverse($n);
+            return $this->_normalize($n->subtract($temp));
+        }
+
+        extract($this->extendedGCD($n));
+
+        if (!$gcd->equals($one)) {
+            return false;
+        }
+
+        $x = $x->compare($zero) < 0 ? $x->add($n) : $x;
+
+        return $this->compare($zero) < 0 ? $this->_normalize($n->subtract($x)) : $this->_normalize($x);
+    }
+
+    /**
+     * Calculates the greatest common divisor and B�zout's identity.
+     *
+     * Say you have 693 and 609.  The GCD is 21.  B�zout's identity states that there exist integers x and y such that
+     * 693*x + 609*y == 21.  In point of fact, there are actually an infinite number of x and y combinations and which
+     * combination is returned is dependant upon which mode is in use.  See
+     * {@link http://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity B�zout's identity - Wikipedia} for more information.
+     *
+     * Here's an example:
+     * <code>
+     * <?php
+     *    include('Math/BigInteger.php');
+     *
+     *    $a = new Math_BigInteger(693);
+     *    $b = new Math_BigInteger(609);
+     *
+     *    extract($a->extendedGCD($b));
+     *
+     *    echo $gcd->toString() . "\r\n"; // outputs 21
+     *    echo $a->toString() * $x->toString() + $b->toString() * $y->toString(); // outputs 21
+     * ?>
+     * </code>
+     *
+     * @param Math_BigInteger $n
+     * @return Math_BigInteger
+     * @access public
+     * @internal Calculates the GCD using the binary xGCD algorithim described in
+     *    {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=19 HAC 14.61}.  As the text above 14.61 notes,
+     *    the more traditional algorithim requires "relatively costly multiple-precision divisions".
+     */
+    function extendedGCD($n)
+    {
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                extract(gmp_gcdext($this->value, $n->value));
+
+                return array(
+                    'gcd' => $this->_normalize(new Math_BigInteger($g)),
+                    'x'   => $this->_normalize(new Math_BigInteger($s)),
+                    'y'   => $this->_normalize(new Math_BigInteger($t))
+                );
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                // it might be faster to use the binary xGCD algorithim here, as well, but (1) that algorithim works
+                // best when the base is a power of 2 and (2) i don't think it'd make much difference, anyway.  as is,
+                // the basic extended euclidean algorithim is what we're using.
+
+                $u = $this->value;
+                $v = $n->value;
+
+                $a = '1';
+                $b = '0';
+                $c = '0';
+                $d = '1';
+
+                while (bccomp($v, '0', 0) != 0) {
+                    $q = bcdiv($u, $v, 0);
+
+                    $temp = $u;
+                    $u = $v;
+                    $v = bcsub($temp, bcmul($v, $q, 0), 0);
+
+                    $temp = $a;
+                    $a = $c;
+                    $c = bcsub($temp, bcmul($a, $q, 0), 0);
+
+                    $temp = $b;
+                    $b = $d;
+                    $d = bcsub($temp, bcmul($b, $q, 0), 0);
+                }
+
+                return array(
+                    'gcd' => $this->_normalize(new Math_BigInteger($u)),
+                    'x'   => $this->_normalize(new Math_BigInteger($a)),
+                    'y'   => $this->_normalize(new Math_BigInteger($b))
+                );
+        }
+
+        $y = $n->copy();
+        $x = $this->copy();
+        $g = new Math_BigInteger();
+        $g->value = array(1);
+
+        while ( !(($x->value[0] & 1)|| ($y->value[0] & 1)) ) {
+            $x->_rshift(1);
+            $y->_rshift(1);
+            $g->_lshift(1);
+        }
+
+        $u = $x->copy();
+        $v = $y->copy();
+
+        $a = new Math_BigInteger();
+        $b = new Math_BigInteger();
+        $c = new Math_BigInteger();
+        $d = new Math_BigInteger();
+
+        $a->value = $d->value = $g->value = array(1);
+        $b->value = $c->value = array();
+
+        while ( !empty($u->value) ) {
+            while ( !($u->value[0] & 1) ) {
+                $u->_rshift(1);
+                if ( (!empty($a->value) && ($a->value[0] & 1)) || (!empty($b->value) && ($b->value[0] & 1)) ) {
+                    $a = $a->add($y);
+                    $b = $b->subtract($x);
+                }
+                $a->_rshift(1);
+                $b->_rshift(1);
+            }
+
+            while ( !($v->value[0] & 1) ) {
+                $v->_rshift(1);
+                if ( (!empty($d->value) && ($d->value[0] & 1)) || (!empty($c->value) && ($c->value[0] & 1)) ) {
+                    $c = $c->add($y);
+                    $d = $d->subtract($x);
+                }
+                $c->_rshift(1);
+                $d->_rshift(1);
+            }
+
+            if ($u->compare($v) >= 0) {
+                $u = $u->subtract($v);
+                $a = $a->subtract($c);
+                $b = $b->subtract($d);
+            } else {
+                $v = $v->subtract($u);
+                $c = $c->subtract($a);
+                $d = $d->subtract($b);
+            }
+        }
+
+        return array(
+            'gcd' => $this->_normalize($g->multiply($v)),
+            'x'   => $this->_normalize($c),
+            'y'   => $this->_normalize($d)
+        );
+    }
+
+    /**
+     * Calculates the greatest common divisor
+     *
+     * Say you have 693 and 609.  The GCD is 21.
+     *
+     * Here's an example:
+     * <code>
+     * <?php
+     *    include('Math/BigInteger.php');
+     *
+     *    $a = new Math_BigInteger(693);
+     *    $b = new Math_BigInteger(609);
+     *
+     *    $gcd = a->extendedGCD($b);
+     *
+     *    echo $gcd->toString() . "\r\n"; // outputs 21
+     * ?>
+     * </code>
+     *
+     * @param Math_BigInteger $n
+     * @return Math_BigInteger
+     * @access public
+     */
+    function gcd($n)
+    {
+        extract($this->extendedGCD($n));
+        return $gcd;
+    }
+
+    /**
+     * Absolute value.
+     *
+     * @return Math_BigInteger
+     * @access public
+     */
+    function abs()
+    {
+        $temp = new Math_BigInteger();
+
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                $temp->value = gmp_abs($this->value);
+                break;
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                $temp->value = (bccomp($this->value, '0', 0) < 0) ? substr($this->value, 1) : $this->value;
+                break;
+            default:
+                $temp->value = $this->value;
+        }
+
+        return $temp;
+    }
+
+    /**
+     * Compares two numbers.
+     *
+     * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite.  The reason for this is
+     * demonstrated thusly:
+     *
+     * $x  > $y: $x->compare($y)  > 0
+     * $x  < $y: $x->compare($y)  < 0
+     * $x == $y: $x->compare($y) == 0
+     *
+     * Note how the same comparison operator is used.  If you want to test for equality, use $x->equals($y).
+     *
+     * @param Math_BigInteger $x
+     * @return Integer < 0 if $this is less than $x; > 0 if $this is greater than $x, and 0 if they are equal.
+     * @access public
+     * @see equals()
+     * @internal Could return $this->subtract($x), but that's not as fast as what we do do.
+     */
+    function compare($y)
+    {
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                return gmp_cmp($this->value, $y->value);
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                return bccomp($this->value, $y->value, 0);
+        }
+
+        return $this->_compare($this->value, $this->is_negative, $y->value, $y->is_negative);
+    }
+
+    /**
+     * Compares two numbers.
+     *
+     * @param Array $x_value
+     * @param Boolean $x_negative
+     * @param Array $y_value
+     * @param Boolean $y_negative
+     * @return Integer
+     * @see compare()
+     * @access private
+     */
+    function _compare($x_value, $x_negative, $y_value, $y_negative)
+    {
+        if ( $x_negative != $y_negative ) {
+            return ( !$x_negative && $y_negative ) ? 1 : -1;
+        }
+
+        $result = $x_negative ? -1 : 1;
+
+        if ( count($x_value) != count($y_value) ) {
+            return ( count($x_value) > count($y_value) ) ? $result : -$result;
+        }
+        $size = max(count($x_value), count($y_value));
+
+        $x_value = array_pad($x_value, $size, 0);
+        $y_value = array_pad($y_value, $size, 0);
+
+        for ($i = count($x_value) - 1; $i >= 0; --$i) {
+            if ($x_value[$i] != $y_value[$i]) {
+                return ( $x_value[$i] > $y_value[$i] ) ? $result : -$result;
+            }
+        }
+
+        return 0;
+    }
+
+    /**
+     * Tests the equality of two numbers.
+     *
+     * If you need to see if one number is greater than or less than another number, use Math_BigInteger::compare()
+     *
+     * @param Math_BigInteger $x
+     * @return Boolean
+     * @access public
+     * @see compare()
+     */
+    function equals($x)
+    {
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                return gmp_cmp($this->value, $x->value) == 0;
+            default:
+                return $this->value === $x->value && $this->is_negative == $x->is_negative;
+        }
+    }
+
+    /**
+     * Set Precision
+     *
+     * Some bitwise operations give different results depending on the precision being used.  Examples include left
+     * shift, not, and rotates.
+     *
+     * @param Math_BigInteger $x
+     * @access public
+     * @return Math_BigInteger
+     */
+    function setPrecision($bits)
+    {
+        $this->precision = $bits;
+        if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_BCMATH ) {
+            $this->bitmask = new Math_BigInteger(chr((1 << ($bits & 0x7)) - 1) . str_repeat(chr(0xFF), $bits >> 3), 256);
+        } else {
+            $this->bitmask = new Math_BigInteger(bcpow('2', $bits, 0));
+        }
+
+        $temp = $this->_normalize($this);
+        $this->value = $temp->value;
+    }
+
+    /**
+     * Logical And
+     *
+     * @param Math_BigInteger $x
+     * @access public
+     * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
+     * @return Math_BigInteger
+     */
+    function bitwise_and($x)
+    {
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                $temp = new Math_BigInteger();
+                $temp->value = gmp_and($this->value, $x->value);
+
+                return $this->_normalize($temp);
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                $left = $this->toBytes();
+                $right = $x->toBytes();
+
+                $length = max(strlen($left), strlen($right));
+
+                $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);
+                $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);
+
+                return $this->_normalize(new Math_BigInteger($left & $right, 256));
+        }
+
+        $result = $this->copy();
+
+        $length = min(count($x->value), count($this->value));
+
+        $result->value = array_slice($result->value, 0, $length);
+
+        for ($i = 0; $i < $length; ++$i) {
+            $result->value[$i] = $result->value[$i] & $x->value[$i];
+        }
+
+        return $this->_normalize($result);
+    }
+
+    /**
+     * Logical Or
+     *
+     * @param Math_BigInteger $x
+     * @access public
+     * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
+     * @return Math_BigInteger
+     */
+    function bitwise_or($x)
+    {
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                $temp = new Math_BigInteger();
+                $temp->value = gmp_or($this->value, $x->value);
+
+                return $this->_normalize($temp);
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                $left = $this->toBytes();
+                $right = $x->toBytes();
+
+                $length = max(strlen($left), strlen($right));
+
+                $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);
+                $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);
+
+                return $this->_normalize(new Math_BigInteger($left | $right, 256));
+        }
+
+        $length = max(count($this->value), count($x->value));
+        $result = $this->copy();
+        $result->value = array_pad($result->value, 0, $length);
+        $x->value = array_pad($x->value, 0, $length);
+
+        for ($i = 0; $i < $length; ++$i) {
+            $result->value[$i] = $this->value[$i] | $x->value[$i];
+        }
+
+        return $this->_normalize($result);
+    }
+
+    /**
+     * Logical Exclusive-Or
+     *
+     * @param Math_BigInteger $x
+     * @access public
+     * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
+     * @return Math_BigInteger
+     */
+    function bitwise_xor($x)
+    {
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                $temp = new Math_BigInteger();
+                $temp->value = gmp_xor($this->value, $x->value);
+
+                return $this->_normalize($temp);
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                $left = $this->toBytes();
+                $right = $x->toBytes();
+
+                $length = max(strlen($left), strlen($right));
+
+                $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);
+                $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);
+
+                return $this->_normalize(new Math_BigInteger($left ^ $right, 256));
+        }
+
+        $length = max(count($this->value), count($x->value));
+        $result = $this->copy();
+        $result->value = array_pad($result->value, 0, $length);
+        $x->value = array_pad($x->value, 0, $length);
+
+        for ($i = 0; $i < $length; ++$i) {
+            $result->value[$i] = $this->value[$i] ^ $x->value[$i];
+        }
+
+        return $this->_normalize($result);
+    }
+
+    /**
+     * Logical Not
+     *
+     * @access public
+     * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
+     * @return Math_BigInteger
+     */
+    function bitwise_not()
+    {
+        // calculuate "not" without regard to $this->precision
+        // (will always result in a smaller number.  ie. ~1 isn't 1111 1110 - it's 0)
+        $temp = $this->toBytes();
+        $pre_msb = decbin(ord($temp[0]));
+        $temp = ~$temp;
+        $msb = decbin(ord($temp[0]));
+        if (strlen($msb) == 8) {
+            $msb = substr($msb, strpos($msb, '0'));
+        }
+        $temp[0] = chr(bindec($msb));
+
+        // see if we need to add extra leading 1's
+        $current_bits = strlen($pre_msb) + 8 * strlen($temp) - 8;
+        $new_bits = $this->precision - $current_bits;
+        if ($new_bits <= 0) {
+            return $this->_normalize(new Math_BigInteger($temp, 256));
+        }
+
+        // generate as many leading 1's as we need to.
+        $leading_ones = chr((1 << ($new_bits & 0x7)) - 1) . str_repeat(chr(0xFF), $new_bits >> 3);
+        $this->_base256_lshift($leading_ones, $current_bits);
+
+        $temp = str_pad($temp, ceil($this->bits / 8), chr(0), STR_PAD_LEFT);
+
+        return $this->_normalize(new Math_BigInteger($leading_ones | $temp, 256));
+    }
+
+    /**
+     * Logical Right Shift
+     *
+     * Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift.
+     *
+     * @param Integer $shift
+     * @return Math_BigInteger
+     * @access public
+     * @internal The only version that yields any speed increases is the internal version.
+     */
+    function bitwise_rightShift($shift)
+    {
+        $temp = new Math_BigInteger();
+
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                static $two;
+
+                if (!isset($two)) {
+                    $two = gmp_init('2');
+                }
+
+                $temp->value = gmp_div_q($this->value, gmp_pow($two, $shift));
+
+                break;
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                $temp->value = bcdiv($this->value, bcpow('2', $shift, 0), 0);
+
+                break;
+            default: // could just replace _lshift with this, but then all _lshift() calls would need to be rewritten
+                     // and I don't want to do that...
+                $temp->value = $this->value;
+                $temp->_rshift($shift);
+        }
+
+        return $this->_normalize($temp);
+    }
+
+    /**
+     * Logical Left Shift
+     *
+     * Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift.
+     *
+     * @param Integer $shift
+     * @return Math_BigInteger
+     * @access public
+     * @internal The only version that yields any speed increases is the internal version.
+     */
+    function bitwise_leftShift($shift)
+    {
+        $temp = new Math_BigInteger();
+
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                static $two;
+
+                if (!isset($two)) {
+                    $two = gmp_init('2');
+                }
+
+                $temp->value = gmp_mul($this->value, gmp_pow($two, $shift));
+
+                break;
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                $temp->value = bcmul($this->value, bcpow('2', $shift, 0), 0);
+
+                break;
+            default: // could just replace _rshift with this, but then all _lshift() calls would need to be rewritten
+                     // and I don't want to do that...
+                $temp->value = $this->value;
+                $temp->_lshift($shift);
+        }
+
+        return $this->_normalize($temp);
+    }
+
+    /**
+     * Logical Left Rotate
+     *
+     * Instead of the top x bits being dropped they're appended to the shifted bit string.
+     *
+     * @param Integer $shift
+     * @return Math_BigInteger
+     * @access public
+     */
+    function bitwise_leftRotate($shift)
+    {
+        $bits = $this->toBytes();
+
+        if ($this->precision > 0) {
+            $precision = $this->precision;
+            if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_BCMATH ) {
+                $mask = $this->bitmask->subtract(new Math_BigInteger(1));
+                $mask = $mask->toBytes();
+            } else {
+                $mask = $this->bitmask->toBytes();
+            }
+        } else {
+            $temp = ord($bits[0]);
+            for ($i = 0; $temp >> $i; ++$i);
+            $precision = 8 * strlen($bits) - 8 + $i;
+            $mask = chr((1 << ($precision & 0x7)) - 1) . str_repeat(chr(0xFF), $precision >> 3);
+        }
+
+        if ($shift < 0) {
+            $shift+= $precision;
+        }
+        $shift%= $precision;
+
+        if (!$shift) {
+            return $this->copy();
+        }
+
+        $left = $this->bitwise_leftShift($shift);
+        $left = $left->bitwise_and(new Math_BigInteger($mask, 256));
+        $right = $this->bitwise_rightShift($precision - $shift);
+        $result = MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_BCMATH ? $left->bitwise_or($right) : $left->add($right);
+        return $this->_normalize($result);
+    }
+
+    /**
+     * Logical Right Rotate
+     *
+     * Instead of the bottom x bits being dropped they're prepended to the shifted bit string.
+     *
+     * @param Integer $shift
+     * @return Math_BigInteger
+     * @access public
+     */
+    function bitwise_rightRotate($shift)
+    {
+        return $this->bitwise_leftRotate(-$shift);
+    }
+
+    /**
+     * Set random number generator function
+     *
+     * This function is deprecated.
+     *
+     * @param String $generator
+     * @access public
+     */
+    function setRandomGenerator($generator)
+    {
+    }
+
+    /**
+     * Generate a random number
+     *
+     * @param optional Integer $min
+     * @param optional Integer $max
+     * @return Math_BigInteger
+     * @access public
+     */
+    function random($min = false, $max = false)
+    {
+        if ($min === false) {
+            $min = new Math_BigInteger(0);
+        }
+
+        if ($max === false) {
+            $max = new Math_BigInteger(0x7FFFFFFF);
+        }
+
+        $compare = $max->compare($min);
+
+        if (!$compare) {
+            return $this->_normalize($min);
+        } else if ($compare < 0) {
+            // if $min is bigger then $max, swap $min and $max
+            $temp = $max;
+            $max = $min;
+            $min = $temp;
+        }
+
+        $generator = $this->generator;
+
+        $max = $max->subtract($min);
+        $max = ltrim($max->toBytes(), chr(0));
+        $size = strlen($max) - 1;
+
+        $crypt_random = function_exists('crypt_random_string') || (!class_exists('Crypt_Random') && function_exists('crypt_random_string'));
+        if ($crypt_random) {
+            $random = crypt_random_string($size);
+        } else {
+            $random = '';
+
+            if ($size & 1) {
+                $random.= chr(mt_rand(0, 255));
+            }
+
+            $blocks = $size >> 1;
+            for ($i = 0; $i < $blocks; ++$i) {
+                // mt_rand(-2147483648, 0x7FFFFFFF) always produces -2147483648 on some systems
+                $random.= pack('n', mt_rand(0, 0xFFFF));
+            }
+        }
+
+        $fragment = new Math_BigInteger($random, 256);
+        $leading = $fragment->compare(new Math_BigInteger(substr($max, 1), 256)) > 0 ?
+            ord($max[0]) - 1 : ord($max[0]);
+
+        if (!$crypt_random) {
+            $msb = chr(mt_rand(0, $leading));
+        } else {
+            $cutoff = floor(0xFF / $leading) * $leading;
+            while (true) {
+                $msb = ord(crypt_random_string(1));
+                if ($msb <= $cutoff) {
+                    $msb%= $leading;
+                    break;
+                }
+            }
+            $msb = chr($msb);
+        }
+
+        $random = new Math_BigInteger($msb . $random, 256);
+
+        return $this->_normalize($random->add($min));
+    }
+
+    /**
+     * Generate a random prime number.
+     *
+     * If there's not a prime within the given range, false will be returned.  If more than $timeout seconds have elapsed,
+     * give up and return false.
+     *
+     * @param optional Integer $min
+     * @param optional Integer $max
+     * @param optional Integer $timeout
+     * @return Math_BigInteger
+     * @access public
+     * @internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=15 HAC 4.44}.
+     */
+    function randomPrime($min = false, $max = false, $timeout = false)
+    {
+        $compare = $max->compare($min);
+
+        if (!$compare) {
+            return $min;
+        } else if ($compare < 0) {
+            // if $min is bigger then $max, swap $min and $max
+            $temp = $max;
+            $max = $min;
+            $min = $temp;
+        }
+
+        // gmp_nextprime() requires PHP 5 >= 5.2.0 per <http://php.net/gmp-nextprime>.
+        if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_GMP && function_exists('gmp_nextprime') ) {
+            // we don't rely on Math_BigInteger::random()'s min / max when gmp_nextprime() is being used since this function
+            // does its own checks on $max / $min when gmp_nextprime() is used.  When gmp_nextprime() is not used, however,
+            // the same $max / $min checks are not performed.
+            if ($min === false) {
+                $min = new Math_BigInteger(0);
+            }
+
+            if ($max === false) {
+                $max = new Math_BigInteger(0x7FFFFFFF);
+            }
+
+            $x = $this->random($min, $max);
+
+            $x->value = gmp_nextprime($x->value);
+
+            if ($x->compare($max) <= 0) {
+                return $x;
+            }
+
+            $x->value = gmp_nextprime($min->value);
+
+            if ($x->compare($max) <= 0) {
+                return $x;
+            }
+
+            return false;
+        }
+
+        static $one, $two;
+        if (!isset($one)) {
+            $one = new Math_BigInteger(1);
+            $two = new Math_BigInteger(2);
+        }
+
+        $start = time();
+
+        $x = $this->random($min, $max);
+        if ($x->equals($two)) {
+            return $x;
+        }
+
+        $x->_make_odd();
+        if ($x->compare($max) > 0) {
+            // if $x > $max then $max is even and if $min == $max then no prime number exists between the specified range
+            if ($min->equals($max)) {
+                return false;
+            }
+            $x = $min->copy();
+            $x->_make_odd();
+        }
+
+        $initial_x = $x->copy();
+
+        while (true) {
+            if ($timeout !== false && time() - $start > $timeout) {
+                return false;
+            }
+
+            if ($x->isPrime()) {
+                return $x;
+            }
+
+            $x = $x->add($two);
+
+            if ($x->compare($max) > 0) {
+                $x = $min->copy();
+                if ($x->equals($two)) {
+                    return $x;
+                }
+                $x->_make_odd();
+            }
+
+            if ($x->equals($initial_x)) {
+                return false;
+            }
+        }
+    }
+
+    /**
+     * Make the current number odd
+     *
+     * If the current number is odd it'll be unchanged.  If it's even, one will be added to it.
+     *
+     * @see randomPrime()
+     * @access private
+     */
+    function _make_odd()
+    {
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                gmp_setbit($this->value, 0);
+                break;
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                if ($this->value[strlen($this->value) - 1] % 2 == 0) {
+                    $this->value = bcadd($this->value, '1');
+                }
+                break;
+            default:
+                $this->value[0] |= 1;
+        }
+    }
+
+    /**
+     * Checks a numer to see if it's prime
+     *
+     * Assuming the $t parameter is not set, this function has an error rate of 2**-80.  The main motivation for the
+     * $t parameter is distributability.  Math_BigInteger::randomPrime() can be distributed accross multiple pageloads
+     * on a website instead of just one.
+     *
+     * @param optional Integer $t
+     * @return Boolean
+     * @access public
+     * @internal Uses the
+     *     {@link http://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test Miller-Rabin primality test}.  See 
+     *     {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=8 HAC 4.24}.
+     */
+    function isPrime($t = false)
+    {
+        $length = strlen($this->toBytes());
+
+        if (!$t) {
+            // see HAC 4.49 "Note (controlling the error probability)"
+                 if ($length >= 163) { $t =  2; } // floor(1300 / 8)
+            else if ($length >= 106) { $t =  3; } // floor( 850 / 8)
+            else if ($length >= 81 ) { $t =  4; } // floor( 650 / 8)
+            else if ($length >= 68 ) { $t =  5; } // floor( 550 / 8)
+            else if ($length >= 56 ) { $t =  6; } // floor( 450 / 8)
+            else if ($length >= 50 ) { $t =  7; } // floor( 400 / 8)
+            else if ($length >= 43 ) { $t =  8; } // floor( 350 / 8)
+            else if ($length >= 37 ) { $t =  9; } // floor( 300 / 8)
+            else if ($length >= 31 ) { $t = 12; } // floor( 250 / 8)
+            else if ($length >= 25 ) { $t = 15; } // floor( 200 / 8)
+            else if ($length >= 18 ) { $t = 18; } // floor( 150 / 8)
+            else                     { $t = 27; }
+        }
+
+        // ie. gmp_testbit($this, 0)
+        // ie. isEven() or !isOdd()
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                return gmp_prob_prime($this->value, $t) != 0;
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                if ($this->value === '2') {
+                    return true;
+                }
+                if ($this->value[strlen($this->value) - 1] % 2 == 0) {
+                    return false;
+                }
+                break;
+            default:
+                if ($this->value == array(2)) {
+                    return true;
+                }
+                if (~$this->value[0] & 1) {
+                    return false;
+                }
+        }
+
+        static $primes, $zero, $one, $two;
+
+        if (!isset($primes)) {
+            $primes = array(
+                3,    5,    7,    11,   13,   17,   19,   23,   29,   31,   37,   41,   43,   47,   53,   59,   
+                61,   67,   71,   73,   79,   83,   89,   97,   101,  103,  107,  109,  113,  127,  131,  137,  
+                139,  149,  151,  157,  163,  167,  173,  179,  181,  191,  193,  197,  199,  211,  223,  227,  
+                229,  233,  239,  241,  251,  257,  263,  269,  271,  277,  281,  283,  293,  307,  311,  313,  
+                317,  331,  337,  347,  349,  353,  359,  367,  373,  379,  383,  389,  397,  401,  409,  419,  
+                421,  431,  433,  439,  443,  449,  457,  461,  463,  467,  479,  487,  491,  499,  503,  509,  
+                521,  523,  541,  547,  557,  563,  569,  571,  577,  587,  593,  599,  601,  607,  613,  617,  
+                619,  631,  641,  643,  647,  653,  659,  661,  673,  677,  683,  691,  701,  709,  719,  727,  
+                733,  739,  743,  751,  757,  761,  769,  773,  787,  797,  809,  811,  821,  823,  827,  829,  
+                839,  853,  857,  859,  863,  877,  881,  883,  887,  907,  911,  919,  929,  937,  941,  947,  
+                953,  967,  971,  977,  983,  991,  997
+            );
+
+            if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL ) {
+                for ($i = 0; $i < count($primes); ++$i) {
+                    $primes[$i] = new Math_BigInteger($primes[$i]);
+                }
+            }
+
+            $zero = new Math_BigInteger();
+            $one = new Math_BigInteger(1);
+            $two = new Math_BigInteger(2);
+        }
+
+        if ($this->equals($one)) {
+            return false;
+        }
+
+        // see HAC 4.4.1 "Random search for probable primes"
+        if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL ) {
+            foreach ($primes as $prime) {
+                list(, $r) = $this->divide($prime);
+                if ($r->equals($zero)) {
+                    return $this->equals($prime);
+                }
+            }
+        } else {
+            $value = $this->value;
+            foreach ($primes as $prime) {
+                list(, $r) = $this->_divide_digit($value, $prime);
+                if (!$r) {
+                    return count($value) == 1 && $value[0] == $prime;
+                }
+            }
+        }
+
+        $n   = $this->copy();
+        $n_1 = $n->subtract($one);
+        $n_2 = $n->subtract($two);
+
+        $r = $n_1->copy();
+        $r_value = $r->value;
+        // ie. $s = gmp_scan1($n, 0) and $r = gmp_div_q($n, gmp_pow(gmp_init('2'), $s));
+        if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_BCMATH ) {
+            $s = 0;
+            // if $n was 1, $r would be 0 and this would be an infinite loop, hence our $this->equals($one) check earlier
+            while ($r->value[strlen($r->value) - 1] % 2 == 0) {
+                $r->value = bcdiv($r->value, '2', 0);
+                ++$s;
+            }
+        } else {
+            for ($i = 0, $r_length = count($r_value); $i < $r_length; ++$i) {
+                $temp = ~$r_value[$i] & 0xFFFFFF;
+                for ($j = 1; ($temp >> $j) & 1; ++$j);
+                if ($j != 25) {
+                    break;
+                }
+            }
+            $s = 26 * $i + $j - 1;
+            $r->_rshift($s);
+        }
+
+        for ($i = 0; $i < $t; ++$i) {
+            $a = $this->random($two, $n_2);
+            $y = $a->modPow($r, $n);
+
+            if (!$y->equals($one) && !$y->equals($n_1)) {
+                for ($j = 1; $j < $s && !$y->equals($n_1); ++$j) {
+                    $y = $y->modPow($two, $n);
+                    if ($y->equals($one)) {
+                        return false;
+                    }
+                }
+
+                if (!$y->equals($n_1)) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Logical Left Shift
+     *
+     * Shifts BigInteger's by $shift bits.
+     *
+     * @param Integer $shift
+     * @access private
+     */
+    function _lshift($shift)
+    {
+        if ( $shift == 0 ) {
+            return;
+        }
+
+        $num_digits = (int) ($shift / 26);
+        $shift %= 26;
+        $shift = 1 << $shift;
+
+        $carry = 0;
+
+        for ($i = 0; $i < count($this->value); ++$i) {
+            $temp = $this->value[$i] * $shift + $carry;
+            $carry = (int) ($temp / 0x4000000);
+            $this->value[$i] = (int) ($temp - $carry * 0x4000000);
+        }
+
+        if ( $carry ) {
+            $this->value[] = $carry;
+        }
+
+        while ($num_digits--) {
+            array_unshift($this->value, 0);
+        }
+    }
+
+    /**
+     * Logical Right Shift
+     *
+     * Shifts BigInteger's by $shift bits.
+     *
+     * @param Integer $shift
+     * @access private
+     */
+    function _rshift($shift)
+    {
+        if ($shift == 0) {
+            return;
+        }
+
+        $num_digits = (int) ($shift / 26);
+        $shift %= 26;
+        $carry_shift = 26 - $shift;
+        $carry_mask = (1 << $shift) - 1;
+
+        if ( $num_digits ) {
+            $this->value = array_slice($this->value, $num_digits);
+        }
+
+        $carry = 0;
+
+        for ($i = count($this->value) - 1; $i >= 0; --$i) {
+            $temp = $this->value[$i] >> $shift | $carry;
+            $carry = ($this->value[$i] & $carry_mask) << $carry_shift;
+            $this->value[$i] = $temp;
+        }
+
+        $this->value = $this->_trim($this->value);
+    }
+
+    /**
+     * Normalize
+     *
+     * Removes leading zeros and truncates (if necessary) to maintain the appropriate precision
+     *
+     * @param Math_BigInteger
+     * @return Math_BigInteger
+     * @see _trim()
+     * @access private
+     */
+    function _normalize($result)
+    {
+        $result->precision = $this->precision;
+        $result->bitmask = $this->bitmask;
+
+        switch ( MATH_BIGINTEGER_MODE ) {
+            case MATH_BIGINTEGER_MODE_GMP:
+                if (!empty($result->bitmask->value)) {
+                    $result->value = gmp_and($result->value, $result->bitmask->value);
+                }
+
+                return $result;
+            case MATH_BIGINTEGER_MODE_BCMATH:
+                if (!empty($result->bitmask->value)) {
+                    $result->value = bcmod($result->value, $result->bitmask->value);
+                }
+
+                return $result;
+        }
+
+        $value = &$result->value;
+
+        if ( !count($value) ) {
+            return $result;
+        }
+
+        $value = $this->_trim($value);
+
+        if (!empty($result->bitmask->value)) {
+            $length = min(count($value), count($this->bitmask->value));
+            $value = array_slice($value, 0, $length);
+
+            for ($i = 0; $i < $length; ++$i) {
+                $value[$i] = $value[$i] & $this->bitmask->value[$i];
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Trim
+     *
+     * Removes leading zeros
+     *
+     * @return Math_BigInteger
+     * @access private
+     */
+    function _trim($value)
+    {
+        for ($i = count($value) - 1; $i >= 0; --$i) {
+            if ( $value[$i] ) {
+                break;
+            }
+            unset($value[$i]);
+        }
+
+        return $value;
+    }
+
+    /**
+     * Array Repeat
+     *
+     * @param $input Array
+     * @param $multiplier mixed
+     * @return Array
+     * @access private
+     */
+    function _array_repeat($input, $multiplier)
+    {
+        return ($multiplier) ? array_fill(0, $multiplier, $input) : array();
+    }
+
+    /**
+     * Logical Left Shift
+     *
+     * Shifts binary strings $shift bits, essentially multiplying by 2**$shift.
+     *
+     * @param $x String
+     * @param $shift Integer
+     * @return String
+     * @access private
+     */
+    function _base256_lshift(&$x, $shift)
+    {
+        if ($shift == 0) {
+            return;
+        }
+
+        $num_bytes = $shift >> 3; // eg. floor($shift/8)
+        $shift &= 7; // eg. $shift % 8
+
+        $carry = 0;
+        for ($i = strlen($x) - 1; $i >= 0; --$i) {
+            $temp = ord($x[$i]) << $shift | $carry;
+            $x[$i] = chr($temp);
+            $carry = $temp >> 8;
+        }
+        $carry = ($carry != 0) ? chr($carry) : '';
+        $x = $carry . $x . str_repeat(chr(0), $num_bytes);
+    }
+
+    /**
+     * Logical Right Shift
+     *
+     * Shifts binary strings $shift bits, essentially dividing by 2**$shift and returning the remainder.
+     *
+     * @param $x String
+     * @param $shift Integer
+     * @return String
+     * @access private
+     */
+    function _base256_rshift(&$x, $shift)
+    {
+        if ($shift == 0) {
+            $x = ltrim($x, chr(0));
+            return '';
+        }
+
+        $num_bytes = $shift >> 3; // eg. floor($shift/8)
+        $shift &= 7; // eg. $shift % 8
+
+        $remainder = '';
+        if ($num_bytes) {
+            $start = $num_bytes > strlen($x) ? -strlen($x) : -$num_bytes;
+            $remainder = substr($x, $start);
+            $x = substr($x, 0, -$num_bytes);
+        }
+
+        $carry = 0;
+        $carry_shift = 8 - $shift;
+        for ($i = 0; $i < strlen($x); ++$i) {
+            $temp = (ord($x[$i]) >> $shift) | $carry;
+            $carry = (ord($x[$i]) << $carry_shift) & 0xFF;
+            $x[$i] = chr($temp);
+        }
+        $x = ltrim($x, chr(0));
+
+        $remainder = chr($carry >> $carry_shift) . $remainder;
+
+        return ltrim($remainder, chr(0));
+    }
+
+    // one quirk about how the following functions are implemented is that PHP defines N to be an unsigned long
+    // at 32-bits, while java's longs are 64-bits.
+
+    /**
+     * Converts 32-bit integers to bytes.
+     *
+     * @param Integer $x
+     * @return String
+     * @access private
+     */
+    function _int2bytes($x)
+    {
+        return ltrim(pack('N', $x), chr(0));
+    }
+
+    /**
+     * Converts bytes to 32-bit integers
+     *
+     * @param String $x
+     * @return Integer
+     * @access private
+     */
+    function _bytes2int($x)
+    {
+        $temp = unpack('Nint', str_pad($x, 4, chr(0), STR_PAD_LEFT));
+        return $temp['int'];
+    }
+
+    /**
+     * DER-encode an integer
+     *
+     * The ability to DER-encode integers is needed to create RSA public keys for use with OpenSSL
+     *
+     * @see modPow()
+     * @access private
+     * @param Integer $length
+     * @return String
+     */
+    function _encodeASN1Length($length)
+    {
+        if ($length <= 0x7F) {
+            return chr($length);
+        }
+
+        $temp = ltrim(pack('N', $length), chr(0));
+        return pack('Ca*', 0x80 | strlen($temp), $temp);
+    }
+}
\ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP.php
new file mode 100644
index 0000000000000000000000000000000000000000..8db087d3d99c695fe6b701ce720d6e9c3f9431a7
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SFTP.php
@@ -0,0 +1,2029 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of SFTP.
+ *
+ * PHP versions 4 and 5
+ *
+ * Currently only supports SFTPv2 and v3, which, according to wikipedia.org, "is the most widely used version,
+ * implemented by the popular OpenSSH SFTP server".  If you want SFTPv4/5/6 support, provide me with access
+ * to an SFTPv4/5/6 server.
+ *
+ * The API for this library is modeled after the API from PHP's {@link http://php.net/book.ftp FTP extension}.
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ *    include('Net/SFTP.php');
+ *
+ *    $sftp = new Net_SFTP('www.domain.tld');
+ *    if (!$sftp->login('username', 'password')) {
+ *        exit('Login Failed');
+ *    }
+ *
+ *    echo $sftp->pwd() . "\r\n";
+ *    $sftp->put('filename.ext', 'hello, world!');
+ *    print_r($sftp->nlist());
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category   Net
+ * @package    Net_SFTP
+ * @author     Jim Wigginton <terrafrost@php.net>
+ * @copyright  MMIX Jim Wigginton
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link       http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Net_SSH2
+ */
+if (!class_exists('Net_SSH2')) {
+    require_once('Net/SSH2.php');
+}
+
+/**#@+
+ * @access public
+ * @see Net_SFTP::getLog()
+ */
+/**
+ * Returns the message numbers
+ */
+define('NET_SFTP_LOG_SIMPLE',  NET_SSH2_LOG_SIMPLE);
+/**
+ * Returns the message content
+ */
+define('NET_SFTP_LOG_COMPLEX', NET_SSH2_LOG_COMPLEX);
+/**
+ * Outputs the message content in real-time.
+ */
+define('NET_SFTP_LOG_REALTIME', 3);
+/**#@-*/
+
+/**
+ * SFTP channel constant
+ *
+ * Net_SSH2::exec() uses 0 and Net_SSH2::read() / Net_SSH2::write() use 1.
+ *
+ * @see Net_SSH2::_send_channel_packet()
+ * @see Net_SSH2::_get_channel_packet()
+ * @access private
+ */
+define('NET_SFTP_CHANNEL', 2);
+
+/**#@+
+ * @access public
+ * @see Net_SFTP::put()
+ */
+/**
+ * Reads data from a local file.
+ */
+define('NET_SFTP_LOCAL_FILE', 1);
+/**
+ * Reads data from a string.
+ */
+// this value isn't really used anymore but i'm keeping it reserved for historical reasons
+define('NET_SFTP_STRING',  2);
+/**
+ * Resumes an upload
+ */
+define('NET_SFTP_RESUME',  4);
+/**#@-*/
+
+/**
+ * Pure-PHP implementations of SFTP.
+ *
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access  public
+ * @package Net_SFTP
+ */
+class Net_SFTP extends Net_SSH2 {
+    /**
+     * Packet Types
+     *
+     * @see Net_SFTP::Net_SFTP()
+     * @var Array
+     * @access private
+     */
+    var $packet_types = array();
+
+    /**
+     * Status Codes
+     *
+     * @see Net_SFTP::Net_SFTP()
+     * @var Array
+     * @access private
+     */
+    var $status_codes = array();
+
+    /**
+     * The Request ID
+     *
+     * The request ID exists in the off chance that a packet is sent out-of-order.  Of course, this library doesn't support
+     * concurrent actions, so it's somewhat academic, here.
+     *
+     * @var Integer
+     * @see Net_SFTP::_send_sftp_packet()
+     * @access private
+     */
+    var $request_id = false;
+
+    /**
+     * The Packet Type
+     *
+     * The request ID exists in the off chance that a packet is sent out-of-order.  Of course, this library doesn't support
+     * concurrent actions, so it's somewhat academic, here.
+     *
+     * @var Integer
+     * @see Net_SFTP::_get_sftp_packet()
+     * @access private
+     */
+    var $packet_type = -1;
+
+    /**
+     * Packet Buffer
+     *
+     * @var String
+     * @see Net_SFTP::_get_sftp_packet()
+     * @access private
+     */
+    var $packet_buffer = '';
+
+    /**
+     * Extensions supported by the server
+     *
+     * @var Array
+     * @see Net_SFTP::_initChannel()
+     * @access private
+     */
+    var $extensions = array();
+
+    /**
+     * Server SFTP version
+     *
+     * @var Integer
+     * @see Net_SFTP::_initChannel()
+     * @access private
+     */
+    var $version;
+
+    /**
+     * Current working directory
+     *
+     * @var String
+     * @see Net_SFTP::_realpath()
+     * @see Net_SFTP::chdir()
+     * @access private
+     */
+    var $pwd = false;
+
+    /**
+     * Packet Type Log
+     *
+     * @see Net_SFTP::getLog()
+     * @var Array
+     * @access private
+     */
+    var $packet_type_log = array();
+
+    /**
+     * Packet Log
+     *
+     * @see Net_SFTP::getLog()
+     * @var Array
+     * @access private
+     */
+    var $packet_log = array();
+
+    /**
+     * Error information
+     *
+     * @see Net_SFTP::getSFTPErrors()
+     * @see Net_SFTP::getLastSFTPError()
+     * @var String
+     * @access private
+     */
+    var $sftp_errors = array();
+
+    /**
+     * File Type
+     *
+     * @see Net_SFTP::_parseLongname()
+     * @var Integer
+     * @access private
+     */
+    var $fileType = 0;
+
+    /**
+     * Directory Cache
+     *
+     * Rather than always having to open a directory and close it immediately there after to see if a file is a directory or
+     * rather than always 
+     *
+     * @see Net_SFTP::_save_dir()
+     * @see Net_SFTP::_remove_dir()
+     * @see Net_SFTP::_is_dir()
+     * @var Array
+     * @access private
+     */
+    var $dirs = array();
+
+    /**
+     * Default Constructor.
+     *
+     * Connects to an SFTP server
+     *
+     * @param String $host
+     * @param optional Integer $port
+     * @param optional Integer $timeout
+     * @return Net_SFTP
+     * @access public
+     */
+    function Net_SFTP($host, $port = 22, $timeout = 10)
+    {
+        parent::Net_SSH2($host, $port, $timeout);
+        $this->packet_types = array(
+            1  => 'NET_SFTP_INIT',
+            2  => 'NET_SFTP_VERSION',
+            /* the format of SSH_FXP_OPEN changed between SFTPv4 and SFTPv5+:
+                   SFTPv5+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.1
+               pre-SFTPv5 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3 */
+            3  => 'NET_SFTP_OPEN',
+            4  => 'NET_SFTP_CLOSE',
+            5  => 'NET_SFTP_READ',
+            6  => 'NET_SFTP_WRITE',
+            7  => 'NET_SFTP_LSTAT',
+            9  => 'NET_SFTP_SETSTAT',
+            11 => 'NET_SFTP_OPENDIR',
+            12 => 'NET_SFTP_READDIR',
+            13 => 'NET_SFTP_REMOVE',
+            14 => 'NET_SFTP_MKDIR',
+            15 => 'NET_SFTP_RMDIR',
+            16 => 'NET_SFTP_REALPATH',
+            17 => 'NET_SFTP_STAT',
+            /* the format of SSH_FXP_RENAME changed between SFTPv4 and SFTPv5+:
+                   SFTPv5+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3
+               pre-SFTPv5 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.5 */
+            18 => 'NET_SFTP_RENAME',
+
+            101=> 'NET_SFTP_STATUS',
+            102=> 'NET_SFTP_HANDLE',
+            /* the format of SSH_FXP_NAME changed between SFTPv3 and SFTPv4+:
+                   SFTPv4+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.4
+               pre-SFTPv4 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-02#section-7 */
+            103=> 'NET_SFTP_DATA',
+            104=> 'NET_SFTP_NAME',
+            105=> 'NET_SFTP_ATTRS',
+
+            200=> 'NET_SFTP_EXTENDED'
+        );
+        $this->status_codes = array(
+            0 => 'NET_SFTP_STATUS_OK',
+            1 => 'NET_SFTP_STATUS_EOF',
+            2 => 'NET_SFTP_STATUS_NO_SUCH_FILE',
+            3 => 'NET_SFTP_STATUS_PERMISSION_DENIED',
+            4 => 'NET_SFTP_STATUS_FAILURE',
+            5 => 'NET_SFTP_STATUS_BAD_MESSAGE',
+            6 => 'NET_SFTP_STATUS_NO_CONNECTION',
+            7 => 'NET_SFTP_STATUS_CONNECTION_LOST',
+            8 => 'NET_SFTP_STATUS_OP_UNSUPPORTED'
+        );
+        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-7.1
+        // the order, in this case, matters quite a lot - see Net_SFTP::_parseAttributes() to understand why
+        $this->attributes = array(
+            0x00000001 => 'NET_SFTP_ATTR_SIZE',
+            0x00000002 => 'NET_SFTP_ATTR_UIDGID', // defined in SFTPv3, removed in SFTPv4+
+            0x00000004 => 'NET_SFTP_ATTR_PERMISSIONS',
+            0x00000008 => 'NET_SFTP_ATTR_ACCESSTIME',
+            // 0x80000000 will yield a floating point on 32-bit systems and converting floating points to integers
+            // yields inconsistent behavior depending on how php is compiled.  so we left shift -1 (which, in 
+            // two's compliment, consists of all 1 bits) by 31.  on 64-bit systems this'll yield 0xFFFFFFFF80000000.
+            // that's not a problem, however, and 'anded' and a 32-bit number, as all the leading 1 bits are ignored.
+              -1 << 31 => 'NET_SFTP_ATTR_EXTENDED'
+        );
+        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3
+        // the flag definitions change somewhat in SFTPv5+.  if SFTPv5+ support is added to this library, maybe name
+        // the array for that $this->open5_flags and similarily alter the constant names.
+        $this->open_flags = array(
+            0x00000001 => 'NET_SFTP_OPEN_READ',
+            0x00000002 => 'NET_SFTP_OPEN_WRITE',
+            0x00000004 => 'NET_SFTP_OPEN_APPEND',
+            0x00000008 => 'NET_SFTP_OPEN_CREATE',
+            0x00000010 => 'NET_SFTP_OPEN_TRUNCATE'
+        );
+        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2
+        // see Net_SFTP::_parseLongname() for an explanation
+        $this->file_types = array(
+            1 => 'NET_SFTP_TYPE_REGULAR',
+            2 => 'NET_SFTP_TYPE_DIRECTORY',
+            3 => 'NET_SFTP_TYPE_SYMLINK',
+            4 => 'NET_SFTP_TYPE_SPECIAL'
+        );
+        $this->_define_array(
+            $this->packet_types,
+            $this->status_codes,
+            $this->attributes,
+            $this->open_flags,
+            $this->file_types
+        );
+    }
+
+    /**
+     * Login
+     *
+     * @param String $username
+     * @param optional String $password
+     * @return Boolean
+     * @access public
+     */
+    function login($username, $password = '')
+    {
+        if (!parent::login($username, $password)) {
+            return false;
+        }
+
+        $this->window_size_client_to_server[NET_SFTP_CHANNEL] = $this->window_size;
+
+        $packet = pack('CNa*N3',
+            NET_SSH2_MSG_CHANNEL_OPEN, strlen('session'), 'session', NET_SFTP_CHANNEL, $this->window_size, 0x4000);
+
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
+        }
+
+        $this->channel_status[NET_SFTP_CHANNEL] = NET_SSH2_MSG_CHANNEL_OPEN;
+
+        $response = $this->_get_channel_packet(NET_SFTP_CHANNEL);
+        if ($response === false) {
+            return false;
+        }
+
+        $packet = pack('CNNa*CNa*',
+            NET_SSH2_MSG_CHANNEL_REQUEST, $this->server_channels[NET_SFTP_CHANNEL], strlen('subsystem'), 'subsystem', 1, strlen('sftp'), 'sftp');
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
+        }
+
+        $this->channel_status[NET_SFTP_CHANNEL] = NET_SSH2_MSG_CHANNEL_REQUEST;
+
+        $response = $this->_get_channel_packet(NET_SFTP_CHANNEL);
+        if ($response === false) {
+            return false;
+        }
+
+        $this->channel_status[NET_SFTP_CHANNEL] = NET_SSH2_MSG_CHANNEL_DATA;
+
+        if (!$this->_send_sftp_packet(NET_SFTP_INIT, "\0\0\0\3")) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        if ($this->packet_type != NET_SFTP_VERSION) {
+            user_error('Expected SSH_FXP_VERSION');
+            return false;
+        }
+
+        extract(unpack('Nversion', $this->_string_shift($response, 4)));
+        $this->version = $version;
+        while (!empty($response)) {
+            extract(unpack('Nlength', $this->_string_shift($response, 4)));
+            $key = $this->_string_shift($response, $length);
+            extract(unpack('Nlength', $this->_string_shift($response, 4)));
+            $value = $this->_string_shift($response, $length);
+            $this->extensions[$key] = $value;
+        }
+
+        /*
+         SFTPv4+ defines a 'newline' extension.  SFTPv3 seems to have unofficial support for it via 'newline@vandyke.com',
+         however, I'm not sure what 'newline@vandyke.com' is supposed to do (the fact that it's unofficial means that it's
+         not in the official SFTPv3 specs) and 'newline@vandyke.com' / 'newline' are likely not drop-in substitutes for
+         one another due to the fact that 'newline' comes with a SSH_FXF_TEXT bitmask whereas it seems unlikely that
+         'newline@vandyke.com' would.
+        */
+        /*
+        if (isset($this->extensions['newline@vandyke.com'])) {
+            $this->extensions['newline'] = $this->extensions['newline@vandyke.com'];
+            unset($this->extensions['newline@vandyke.com']);
+        }
+        */
+
+        $this->request_id = 1;
+
+        /*
+         A Note on SFTPv4/5/6 support:
+         <http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-5.1> states the following:
+
+         "If the client wishes to interoperate with servers that support noncontiguous version
+          numbers it SHOULD send '3'"
+
+         Given that the server only sends its version number after the client has already done so, the above
+         seems to be suggesting that v3 should be the default version.  This makes sense given that v3 is the
+         most popular.
+
+         <http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-5.5> states the following;
+
+         "If the server did not send the "versions" extension, or the version-from-list was not included, the
+          server MAY send a status response describing the failure, but MUST then close the channel without
+          processing any further requests."
+
+         So what do you do if you have a client whose initial SSH_FXP_INIT packet says it implements v3 and
+         a server whose initial SSH_FXP_VERSION reply says it implements v4 and only v4?  If it only implements
+         v4, the "versions" extension is likely not going to have been sent so version re-negotiation as discussed
+         in draft-ietf-secsh-filexfer-13 would be quite impossible.  As such, what Net_SFTP would do is close the
+         channel and reopen it with a new and updated SSH_FXP_INIT packet.
+        */
+        switch ($this->version) {
+            case 2:
+            case 3:
+                break;
+            default:
+                return false;
+        }
+
+        $this->pwd = $this->_realpath('.', false);
+
+        $this->_save_dir($this->pwd);
+
+        return true;
+    }
+
+    /**
+     * Returns the current directory name
+     *
+     * @return Mixed
+     * @access public
+     */
+    function pwd()
+    {
+        return $this->pwd;
+    }
+
+    /**
+     * Logs errors
+     *
+     * @param String $response
+     * @param optional Integer $status
+     * @access public
+     */
+    function _logError($response, $status = -1) {
+        if ($status == -1) {
+            extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        }
+
+        $error = $this->status_codes[$status];
+
+        if ($this->version > 2) {
+            extract(unpack('Nlength', $this->_string_shift($response, 4)));
+            $this->sftp_errors[] = $error . ': ' . $this->_string_shift($response, $length);
+        } else {
+            $this->sftp_errors[] = $error;
+        }
+    }
+
+    /**
+     * Canonicalize the Server-Side Path Name
+     *
+     * SFTP doesn't provide a mechanism by which the current working directory can be changed, so we'll emulate it.  Returns
+     * the absolute (canonicalized) path.
+     *
+     * @see Net_SFTP::chdir()
+     * @param String $dir
+     * @return Mixed
+     * @access private
+     */
+    function _realpath($dir, $check_dir = true)
+    {
+        if ($check_dir && $this->_is_dir($dir)) {
+            return true;
+        }
+
+        /*
+        "This protocol represents file names as strings.  File names are
+         assumed to use the slash ('/') character as a directory separator.
+
+         File names starting with a slash are "absolute", and are relative to
+         the root of the file system.  Names starting with any other character
+         are relative to the user's default directory (home directory).  Note
+         that identifying the user is assumed to take place outside of this
+         protocol."
+
+         -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-6
+        */
+        $file = '';
+        if ($this->pwd !== false) {
+            // if the SFTP server returned the canonicalized path even for non-existant files this wouldn't be necessary
+            // on OpenSSH it isn't necessary but on other SFTP servers it is.  that and since the specs say nothing on
+            // the subject, we'll go ahead and work around it with the following.
+            if (empty($dir) || $dir[strlen($dir) - 1] != '/') {
+                $file = basename($dir);
+                $dir = dirname($dir);
+            }
+
+            $dir = $dir[0] == '/' ? '/' . rtrim(substr($dir, 1), '/') : rtrim($dir, '/');
+
+            if ($dir == '.' || $dir == $this->pwd) {
+                $temp = $this->pwd;
+                if (!empty($file)) {
+                    $temp.= '/' . $file;
+                }
+                return $temp;
+            }
+
+            if ($dir[0] != '/') {
+                $dir = $this->pwd . '/' . $dir;
+            }
+            // on the surface it seems like maybe resolving a path beginning with / is unnecessary, but such paths
+            // can contain .'s and ..'s just like any other.  we could parse those out as appropriate or we can let
+            // the server do it.  we'll do the latter.
+        }
+
+        /*
+         that SSH_FXP_REALPATH returns SSH_FXP_NAME does not necessarily mean that anything actually exists at the
+         specified path.  generally speaking, no attributes are returned with this particular SSH_FXP_NAME packet
+         regardless of whether or not a file actually exists.  and in SFTPv3, the longname field and the filename
+         field match for this particular SSH_FXP_NAME packet.  for other SSH_FXP_NAME packets, this will likely
+         not be the case, but for this one, it is.
+        */
+        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.9
+        if (!$this->_send_sftp_packet(NET_SFTP_REALPATH, pack('Na*', strlen($dir), $dir))) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        switch ($this->packet_type) {
+            case NET_SFTP_NAME:
+                // although SSH_FXP_NAME is implemented differently in SFTPv3 than it is in SFTPv4+, the following
+                // should work on all SFTP versions since the only part of the SSH_FXP_NAME packet the following looks
+                // at is the first part and that part is defined the same in SFTP versions 3 through 6.
+                $this->_string_shift($response, 4); // skip over the count - it should be 1, anyway
+                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                $realpath = $this->_string_shift($response, $length);
+                // the following is SFTPv3 only code.  see Net_SFTP::_parseLongname() for more information.
+                // per the above comment, this is a shot in the dark that, on most servers, won't help us in determining
+                // the file type for Net_SFTP::stat() and Net_SFTP::lstat() but it's worth a shot.
+                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                $this->fileType = $this->_parseLongname($this->_string_shift($response, $length));
+                break;
+            case NET_SFTP_STATUS:
+                $this->_logError($response);
+                return false;
+            default:
+                user_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS');
+                return false;
+        }
+
+        // if $this->pwd isn't set than the only thing $realpath could be is for '.', which is pretty much guaranteed to
+        // be a bonafide directory
+        if (!empty($file)) {
+            $realpath.= '/' . $file;
+        }
+
+        return $realpath;
+    }
+
+    /**
+     * Changes the current directory
+     *
+     * @param String $dir
+     * @return Boolean
+     * @access public
+     */
+    function chdir($dir)
+    {
+        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            return false;
+        }
+
+        if ($dir[strlen($dir) - 1] != '/') {
+            $dir.= '/';
+        }
+
+        // confirm that $dir is, in fact, a valid directory
+        if ($this->_is_dir($dir)) {
+            $this->pwd = $dir;
+            return true;
+        }
+
+        $dir = $this->_realpath($dir, false);
+
+        if ($this->_is_dir($dir)) {
+            $this->pwd = $dir;
+            return true;
+        }
+
+        if (!$this->_send_sftp_packet(NET_SFTP_OPENDIR, pack('Na*', strlen($dir), $dir))) {
+            return false;
+        }
+
+        // see Net_SFTP::nlist() for a more thorough explanation of the following
+        $response = $this->_get_sftp_packet();
+        switch ($this->packet_type) {
+            case NET_SFTP_HANDLE:
+                $handle = substr($response, 4);
+                break;
+            case NET_SFTP_STATUS:
+                $this->_logError($response);
+                return false;
+            default:
+                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
+                return false;
+        }
+
+        if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        if ($this->packet_type != NET_SFTP_STATUS) {
+            user_error('Expected SSH_FXP_STATUS');
+            return false;
+        }
+
+        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        if ($status != NET_SFTP_STATUS_OK) {
+            $this->_logError($response, $status);
+            return false;
+        }
+
+        $this->_save_dir($dir);
+
+        $this->pwd = $dir;
+        return true;
+    }
+
+    /**
+     * Returns a list of files in the given directory
+     *
+     * @param optional String $dir
+     * @return Mixed
+     * @access public
+     */
+    function nlist($dir = '.')
+    {
+        return $this->_list($dir, false);
+    }
+
+    /**
+     * Returns a detailed list of files in the given directory
+     *
+     * @param optional String $dir
+     * @return Mixed
+     * @access public
+     */
+    function rawlist($dir = '.')
+    {
+        return $this->_list($dir, true);
+    }
+
+    /**
+     * Reads a list, be it detailed or not, of files in the given directory
+     *
+     * $realpath exists because, in the case of the recursive deletes and recursive chmod's $realpath has already
+     * been calculated.
+     *
+     * @param String $dir
+     * @param optional Boolean $raw
+     * @param optional Boolean $realpath
+     * @return Mixed
+     * @access private
+     */
+    function _list($dir, $raw = true, $realpath = true)
+    {
+        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            return false;
+        }
+
+        $dir = $this->_realpath($dir . '/');
+        if ($dir === false) {
+            return false;
+        }
+
+        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.2
+        if (!$this->_send_sftp_packet(NET_SFTP_OPENDIR, pack('Na*', strlen($dir), $dir))) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        switch ($this->packet_type) {
+            case NET_SFTP_HANDLE:
+                // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.2
+                // since 'handle' is the last field in the SSH_FXP_HANDLE packet, we'll just remove the first four bytes that
+                // represent the length of the string and leave it at that
+                $handle = substr($response, 4);
+                break;
+            case NET_SFTP_STATUS:
+                // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
+                $this->_logError($response);
+                return false;
+            default:
+                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
+                return false;
+        }
+
+        $this->_save_dir($dir);
+
+        $contents = array();
+        while (true) {
+            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.2.2
+            // why multiple SSH_FXP_READDIR packets would be sent when the response to a single one can span arbitrarily many
+            // SSH_MSG_CHANNEL_DATA messages is not known to me.
+            if (!$this->_send_sftp_packet(NET_SFTP_READDIR, pack('Na*', strlen($handle), $handle))) {
+                return false;
+            }
+
+            $response = $this->_get_sftp_packet();
+            switch ($this->packet_type) {
+                case NET_SFTP_NAME:
+                    extract(unpack('Ncount', $this->_string_shift($response, 4)));
+                    for ($i = 0; $i < $count; $i++) {
+                        extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                        $shortname = $this->_string_shift($response, $length);
+                        extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                        $longname = $this->_string_shift($response, $length);
+                        $attributes = $this->_parseAttributes($response); // we also don't care about the attributes
+                        if (!$raw) {
+                            $contents[] = $shortname;
+                        } else {
+                            $contents[$shortname] = $attributes;
+                            $fileType = $this->_parseLongname($longname);
+                            if ($fileType) {
+                                if ($fileType == NET_SFTP_TYPE_DIRECTORY && ($shortname != '.' && $shortname != '..')) {
+                                    $this->_save_dir($dir . '/' . $shortname);
+                                }
+                                $contents[$shortname]['type'] = $fileType;
+                            }
+                        }
+                        // SFTPv6 has an optional boolean end-of-list field, but we'll ignore that, since the
+                        // final SSH_FXP_STATUS packet should tell us that, already.
+                    }
+                    break;
+                case NET_SFTP_STATUS:
+                    extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+                    if ($status != NET_SFTP_STATUS_EOF) {
+                        $this->_logError($response, $status);
+                        return false;
+                    }
+                    break 2;
+                default:
+                    user_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS');
+                    return false;
+            }
+        }
+
+        if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) {
+            return false;
+        }
+
+        // "The client MUST release all resources associated with the handle regardless of the status."
+        //  -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.3
+        $response = $this->_get_sftp_packet();
+        if ($this->packet_type != NET_SFTP_STATUS) {
+            user_error('Expected SSH_FXP_STATUS');
+            return false;
+        }
+
+        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        if ($status != NET_SFTP_STATUS_OK) {
+            $this->_logError($response, $status);
+            return false;
+        }
+
+        return $contents;
+    }
+
+    /**
+     * Returns the file size, in bytes, or false, on failure
+     *
+     * Files larger than 4GB will show up as being exactly 4GB.
+     *
+     * @param String $filename
+     * @return Mixed
+     * @access public
+     */
+    function size($filename)
+    {
+        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            return false;
+        }
+
+        $filename = $this->_realpath($filename);
+        if ($filename === false) {
+            return false;
+        }
+
+        return $this->_size($filename);
+    }
+
+    /**
+     * Save directories to cache
+     *
+     * @param String $dir
+     * @access private
+     */
+    function _save_dir($dir)
+    {
+        // preg_replace('#^/|/(?=/)|/$#', '', $dir) == str_replace('//', '/', trim($dir, '/'))
+        $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $dir));
+
+        $temp = &$this->dirs;
+        foreach ($dirs as $dir) {
+            if (!isset($temp[$dir])) {
+                $temp[$dir] = array();
+            }
+            $temp = &$temp[$dir];
+        }
+    }
+
+    /**
+     * Remove directories from cache
+     *
+     * @param String $dir
+     * @access private
+     */
+    function _remove_dir($dir)
+    {
+        $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $dir));
+
+        $temp = &$this->dirs;
+        foreach ($dirs as $dir) {
+            if ($dir == end($dirs)) {
+                unset($temp[$dir]);
+                return true;
+            }
+            if (!isset($temp[$dir])) {
+                return false;
+            }
+            $temp = &$temp[$dir];
+        }
+    }
+
+    /**
+     * Checks cache for directory
+     *
+     * @param String $dir
+     * @access private
+     */
+    function _is_dir($dir)
+    {
+        $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $dir));
+
+        $temp = &$this->dirs;
+        foreach ($dirs as $dir) {
+            if (!isset($temp[$dir])) {
+                return false;
+            }
+            $temp = &$temp[$dir];
+        }
+    }
+
+    /**
+     * Returns general information about a file.
+     *
+     * Returns an array on success and false otherwise.
+     *
+     * @param String $filename
+     * @return Mixed
+     * @access public
+     */
+    function stat($filename)
+    {
+        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            return false;
+        }
+
+        $filename = $this->_realpath($filename);
+        if ($filename === false) {
+            return false;
+        }
+
+        $stat = $this->_stat($filename, NET_SFTP_STAT);
+        if ($stat === false) {
+            return false;
+        }
+
+        $pwd = $this->pwd;
+        $stat['type'] = $this->chdir($filename) ?
+            NET_SFTP_TYPE_DIRECTORY :
+            NET_SFTP_TYPE_REGULAR;
+        $this->pwd = $pwd;
+
+        return $stat;
+    }
+
+    /**
+     * Returns general information about a file or symbolic link.
+     *
+     * Returns an array on success and false otherwise.
+     *
+     * @param String $filename
+     * @return Mixed
+     * @access public
+     */
+    function lstat($filename)
+    {
+        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            return false;
+        }
+
+        $filename = $this->_realpath($filename);
+        if ($filename === false) {
+            return false;
+        }
+
+        $lstat = $this->_stat($filename, NET_SFTP_LSTAT);
+        $stat = $this->_stat($filename, NET_SFTP_STAT);
+        if ($stat === false) {
+            return false;
+        }
+
+        if ($lstat != $stat) {
+            return array_merge($lstat, array('type' => NET_SFTP_TYPE_SYMLINK));
+        }
+
+        $pwd = $this->pwd;
+        $lstat['type'] = $this->chdir($filename) ?
+            NET_SFTP_TYPE_DIRECTORY :
+            NET_SFTP_TYPE_REGULAR;
+        $this->pwd = $pwd;
+
+        return $lstat;
+    }
+
+    /**
+     * Returns general information about a file or symbolic link
+     *
+     * Determines information without calling Net_SFTP::_realpath().
+     * The second parameter can be either NET_SFTP_STAT or NET_SFTP_LSTAT.
+     *
+     * @param String $filename
+     * @param Integer $type
+     * @return Mixed
+     * @access private
+     */
+    function _stat($filename, $type)
+    {
+        // SFTPv4+ adds an additional 32-bit integer field - flags - to the following:
+        $packet = pack('Na*', strlen($filename), $filename);
+        if (!$this->_send_sftp_packet($type, $packet)) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        switch ($this->packet_type) {
+            case NET_SFTP_ATTRS:
+                $attributes = $this->_parseAttributes($response);
+                if ($this->fileType) {
+                    $attributes['type'] = $this->fileType;
+                }
+                return $attributes;
+            case NET_SFTP_STATUS:
+                $this->_logError($response);
+                return false;
+        }
+
+        user_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS');
+        return false;
+    }
+
+    /**
+     * Attempt to identify the file type
+     *
+     * @param String $path
+     * @param Array $stat
+     * @param Array $lstat
+     * @return Integer
+     * @access private
+     */
+    function _identify_type($path, $stat1, $stat2)
+    {
+        $stat1 = $this->_stat($path, $stat1);
+        $stat2 = $this->_stat($path, $stat2);
+
+        if ($stat1 != $stat2) {
+            return array_merge($stat1, array('type' => NET_SFTP_TYPE_SYMLINK));
+        }
+
+        $pwd = $this->pwd;
+        $stat1['type'] = $this->chdir($path) ?
+            NET_SFTP_TYPE_DIRECTORY :
+            NET_SFTP_TYPE_REGULAR;
+        $this->pwd = $pwd;
+
+        return $stat1;
+    }
+
+    /**
+     * Returns the file size, in bytes, or false, on failure
+     *
+     * Determines the size without calling Net_SFTP::_realpath()
+     *
+     * @param String $filename
+     * @return Mixed
+     * @access private
+     */
+    function _size($filename)
+    {
+        $result = $this->_stat($filename, NET_SFTP_LSTAT);
+        if ($result === false) {
+            return false;
+        }
+        return isset($result['size']) ? $result['size'] : -1;
+    }
+
+    /**
+     * Set permissions on a file.
+     *
+     * Returns the new file permissions on success or FALSE on error.
+     *
+     * @param Integer $mode
+     * @param String $filename
+     * @return Mixed
+     * @access public
+     */
+    function chmod($mode, $filename, $recursive = false)
+    {
+        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            return false;
+        }
+
+        $filename = $this->_realpath($filename);
+        if ($filename === false) {
+            return false;
+        }
+
+        if ($recursive) {
+            $i = 0;
+            $result = $this->_chmod_recursive($mode, $filename, $i);
+            $this->_read_put_responses($i);
+            return $result;
+        }
+
+        // SFTPv4+ has an additional byte field - type - that would need to be sent, as well. setting it to
+        // SSH_FILEXFER_TYPE_UNKNOWN might work. if not, we'd have to do an SSH_FXP_STAT before doing an SSH_FXP_SETSTAT.
+        $attr = pack('N2', NET_SFTP_ATTR_PERMISSIONS, $mode & 07777);
+        if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($filename), $filename, $attr))) {
+            return false;
+        }
+
+        /*
+         "Because some systems must use separate system calls to set various attributes, it is possible that a failure 
+          response will be returned, but yet some of the attributes may be have been successfully modified.  If possible,
+          servers SHOULD avoid this situation; however, clients MUST be aware that this is possible."
+
+          -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.6
+        */
+        $response = $this->_get_sftp_packet();
+        if ($this->packet_type != NET_SFTP_STATUS) {
+            user_error('Expected SSH_FXP_STATUS');
+            return false;
+        }
+
+        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        if ($status != NET_SFTP_STATUS_OK) {
+            $this->_logError($response, $status);
+        }
+
+        // rather than return what the permissions *should* be, we'll return what they actually are.  this will also
+        // tell us if the file actually exists.
+        // incidentally, SFTPv4+ adds an additional 32-bit integer field - flags - to the following:
+        $packet = pack('Na*', strlen($filename), $filename);
+        if (!$this->_send_sftp_packet(NET_SFTP_STAT, $packet)) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        switch ($this->packet_type) {
+            case NET_SFTP_ATTRS:
+                $attrs = $this->_parseAttributes($response);
+                return $attrs['permissions'];
+            case NET_SFTP_STATUS:
+                $this->_logError($response);
+                return false;
+        }
+
+        user_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS');
+        return false;
+    }
+
+    /**
+     * Recursively chmods directories on the SFTP server
+     *
+     * Minimizes directory lookups and SSH_FXP_STATUS requests for speed.
+     *
+     * @param Integer $mode
+     * @param String $filename
+     * @return Boolean
+     * @access private
+     */
+    function _chmod_recursive($mode, $path, &$i)
+    {
+        if (!$this->_read_put_responses($i)) {
+            return false;
+        }
+        $i = 0;
+        $entries = $this->_list($path, true, false);
+
+        if ($entries === false) {
+            return $this->chmod($mode, $path);
+        }
+
+        // normally $entries would have at least . and .. but it might not if the directories
+        // permissions didn't allow reading
+        if (empty($entries)) {
+            return false;
+        }
+
+        foreach ($entries as $filename=>$props) {
+            if ($filename == '.' || $filename == '..') {
+                continue;
+            }
+
+            if (!isset($props['type'])) {
+                return false;
+            }
+
+            $temp = $path . '/' . $filename;
+            if ($props['type'] == NET_SFTP_TYPE_DIRECTORY) {
+                if (!$this->_chmod_recursive($mode, $temp, $i)) {
+                    return false;
+                }
+            } else {
+                $attr = pack('N2', NET_SFTP_ATTR_PERMISSIONS, $mode & 07777);
+                if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($temp), $temp, $attr))) {
+                    return false;
+                }
+
+                $i++;
+
+                if ($i >= 50) {
+                    if (!$this->_read_put_responses($i)) {
+                        return false;
+                    }
+                    $i = 0;
+                }
+            }
+        }
+
+        $attr = pack('N2', NET_SFTP_ATTR_PERMISSIONS, $mode & 07777);
+        if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($path), $path, $attr))) {
+            return false;
+        }
+
+        $i++;
+
+        if ($i >= 50) {
+            if (!$this->_read_put_responses($i)) {
+                return false;
+            }
+            $i = 0;
+        }
+
+        return true;
+    }
+
+    /**
+     * Creates a directory.
+     *
+     * @param String $dir
+     * @return Boolean
+     * @access public
+     */
+    function mkdir($dir)
+    {
+        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            return false;
+        }
+
+        if ($dir[0] != '/') {
+            $dir = $this->_realpath(rtrim($dir, '/'));
+            if ($dir === false) {
+                return false;
+            }
+            if (!$this->_mkdir_helper($dir)) {
+                return false;
+            }
+        } else {
+            $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $dir));
+            $temp = '';
+            foreach ($dirs as $dir) {
+                $temp.= '/' . $dir;
+                $result = $this->_mkdir_helper($temp);
+            }
+            if (!$result) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Helper function for directory creation
+     *
+     * @param String $dir
+     * @return Boolean
+     * @access private
+     */
+    function _mkdir_helper($dir)
+    {
+        // by not providing any permissions, hopefully the server will use the logged in users umask - their 
+        // default permissions.
+        if (!$this->_send_sftp_packet(NET_SFTP_MKDIR, pack('Na*N', strlen($dir), $dir, 0))) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        if ($this->packet_type != NET_SFTP_STATUS) {
+            user_error('Expected SSH_FXP_STATUS');
+            return false;
+        }
+
+        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        if ($status != NET_SFTP_STATUS_OK) {
+            $this->_logError($response, $status);
+            return false;
+        }
+
+        $this->_save_dir($dir);
+
+        return true;
+    }
+
+    /**
+     * Removes a directory.
+     *
+     * @param String $dir
+     * @return Boolean
+     * @access public
+     */
+    function rmdir($dir)
+    {
+        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            return false;
+        }
+
+        $dir = $this->_realpath($dir);
+        if ($dir === false) {
+            return false;
+        }
+
+        if (!$this->_send_sftp_packet(NET_SFTP_RMDIR, pack('Na*', strlen($dir), $dir))) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        if ($this->packet_type != NET_SFTP_STATUS) {
+            user_error('Expected SSH_FXP_STATUS');
+            return false;
+        }
+
+        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        if ($status != NET_SFTP_STATUS_OK) {
+            // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED?
+            $this->_logError($response, $status);
+            return false;
+        }
+
+        $this->_remove_dir($dir);
+
+        return true;
+    }
+
+    /**
+     * Uploads a file to the SFTP server.
+     *
+     * By default, Net_SFTP::put() does not read from the local filesystem.  $data is dumped directly into $remote_file.
+     * So, for example, if you set $data to 'filename.ext' and then do Net_SFTP::get(), you will get a file, twelve bytes
+     * long, containing 'filename.ext' as its contents.
+     *
+     * Setting $mode to NET_SFTP_LOCAL_FILE will change the above behavior.  With NET_SFTP_LOCAL_FILE, $remote_file will 
+     * contain as many bytes as filename.ext does on your local filesystem.  If your filename.ext is 1MB then that is how
+     * large $remote_file will be, as well.
+     *
+     * Currently, only binary mode is supported.  As such, if the line endings need to be adjusted, you will need to take
+     * care of that, yourself.
+     *
+     * @param String $remote_file
+     * @param String $data
+     * @param optional Integer $mode
+     * @return Boolean
+     * @access public
+     * @internal ASCII mode for SFTPv4/5/6 can be supported by adding a new function - Net_SFTP::setMode().
+     */
+    function put($remote_file, $data, $mode = NET_SFTP_STRING)
+    {
+        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            return false;
+        }
+
+        $remote_file = $this->_realpath($remote_file);
+        if ($remote_file === false) {
+            return false;
+        }
+
+        $flags = NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE;
+        // according to the SFTP specs, NET_SFTP_OPEN_APPEND should "force all writes to append data at the end of the file."
+        // in practice, it doesn't seem to do that.
+        //$flags|= ($mode & NET_SFTP_RESUME) ? NET_SFTP_OPEN_APPEND : NET_SFTP_OPEN_TRUNCATE;
+
+        // if NET_SFTP_OPEN_APPEND worked as it should the following (up until the -----------) wouldn't be necessary
+        $offset = 0;
+        if ($mode & NET_SFTP_RESUME) {
+            $size = $this->_size($remote_file);
+            $offset = $size !== false ? $size : 0;
+        } else {
+            $flags|= NET_SFTP_OPEN_TRUNCATE;
+        }
+        // --------------
+
+        $packet = pack('Na*N2', strlen($remote_file), $remote_file, $flags, 0);
+        if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        switch ($this->packet_type) {
+            case NET_SFTP_HANDLE:
+                $handle = substr($response, 4);
+                break;
+            case NET_SFTP_STATUS:
+                $this->_logError($response);
+                return false;
+            default:
+                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
+                return false;
+        }
+
+        $initialize = true;
+
+        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.2.3
+        if ($mode & NET_SFTP_LOCAL_FILE) {
+            if (!is_file($data)) {
+                user_error("$data is not a valid file");
+                return false;
+            }
+            $fp = @fopen($data, 'rb');
+            if (!$fp) {
+                return false;
+            }
+            $size = filesize($data);
+        } else {
+            $size = strlen($data);
+        }
+
+        $sent = 0;
+        $size = $size < 0 ? ($size & 0x7FFFFFFF) + 0x80000000 : $size;
+
+        $sftp_packet_size = 4096; // PuTTY uses 4096
+        $i = 0;
+        while ($sent < $size) {
+            $temp = $mode & NET_SFTP_LOCAL_FILE ? fread($fp, $sftp_packet_size) : $this->_string_shift($data, $sftp_packet_size);
+            $packet = pack('Na*N3a*', strlen($handle), $handle, 0, $offset + $sent, strlen($temp), $temp);
+            if (!$this->_send_sftp_packet(NET_SFTP_WRITE, $packet)) {
+                fclose($fp);
+                return false;
+            }
+            $sent+= strlen($temp);
+
+            $i++;
+
+            if ($i == 50) {
+                if (!$this->_read_put_responses($i)) {
+                    $i = 0;
+                    break;
+                }
+                $i = 0;
+            }
+        }
+
+        if (!$this->_read_put_responses($i)) {
+            return false;
+        }
+
+        if ($mode & NET_SFTP_LOCAL_FILE) {
+            fclose($fp);
+        }
+
+        if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        if ($this->packet_type != NET_SFTP_STATUS) {
+            user_error('Expected SSH_FXP_STATUS');
+            return false;
+        }
+
+        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        if ($status != NET_SFTP_STATUS_OK) {
+            $this->_logError($response, $status);
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Reads multiple successive SSH_FXP_WRITE responses
+     *
+     * Sending an SSH_FXP_WRITE packet and immediately reading its response isn't as efficient as blindly sending out $i
+     * SSH_FXP_WRITEs, in succession, and then reading $i responses.
+     *
+     * @param Integer $i
+     * @return Boolean
+     * @access private
+     */
+    function _read_put_responses($i)
+    {
+        while ($i--) {
+            $response = $this->_get_sftp_packet();
+            if ($this->packet_type != NET_SFTP_STATUS) {
+                user_error('Expected SSH_FXP_STATUS');
+                return false;
+            }
+
+            extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+            if ($status != NET_SFTP_STATUS_OK) {
+                $this->_logError($response, $status);
+                break;
+            }
+        }
+
+        return $i < 0;
+    }
+
+    /**
+     * Downloads a file from the SFTP server.
+     *
+     * Returns a string containing the contents of $remote_file if $local_file is left undefined or a boolean false if
+     * the operation was unsuccessful.  If $local_file is defined, returns true or false depending on the success of the
+     * operation
+     *
+     * @param String $remote_file
+     * @param optional String $local_file
+     * @return Mixed
+     * @access public
+     */
+    function get($remote_file, $local_file = false, $offset = 0, $length = -1)
+    {
+        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            return false;
+        }
+
+        $remote_file = $this->_realpath($remote_file);
+        if ($remote_file === false) {
+            return false;
+        }
+
+        $packet = pack('Na*N2', strlen($remote_file), $remote_file, NET_SFTP_OPEN_READ, 0);
+        if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        switch ($this->packet_type) {
+            case NET_SFTP_HANDLE:
+                $handle = substr($response, 4);
+                break;
+            case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
+                $this->_logError($response);
+                return false;
+            default:
+                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
+                return false;
+        }
+
+        if ($local_file !== false) {
+            $fp = fopen($local_file, 'wb');
+            if (!$fp) {
+                return false;
+            }
+        } else {
+            $content = '';
+        }
+
+        $size = (1 << 20) < $length || $length < 0 ? 1 << 20 : $length;
+        $start = $offset;
+        while (true) {
+            $packet = pack('Na*N3', strlen($handle), $handle, 0, $offset, $size);
+            if (!$this->_send_sftp_packet(NET_SFTP_READ, $packet)) {
+                if ($local_file !== false) {
+                    fclose($fp);
+                }
+                return false;
+            }
+
+            $response = $this->_get_sftp_packet();
+            switch ($this->packet_type) {
+                case NET_SFTP_DATA:
+                    $temp = substr($response, 4);
+                    $offset+= strlen($temp);
+                    if ($local_file === false) {
+                        $content.= $temp;
+                    } else {
+                        fputs($fp, $temp);
+                    }
+                    break;
+                case NET_SFTP_STATUS:
+                    $this->_logError($response);
+                    break 2;
+                default:
+                    user_error('Expected SSH_FXP_DATA or SSH_FXP_STATUS');
+                    if ($local_file !== false) {
+                        fclose($fp);
+                    }
+                    return false;
+            }
+
+            if ($length > 0 && $length <= $offset - $size) {
+                if ($local_file === false) {
+                    $content = substr($content, 0, $length);
+                } else {
+                    ftruncate($fp, $length);
+                }
+                break;
+            }
+        }
+
+        if ($local_file !== false) {
+            fclose($fp);
+        }
+
+        if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        if ($this->packet_type != NET_SFTP_STATUS) {
+            user_error('Expected SSH_FXP_STATUS');
+            return false;
+        }
+
+        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        if ($status != NET_SFTP_STATUS_OK) {
+            $this->_logError($response, $status);
+            return false;
+        }
+
+        if (isset($content)) {
+            return $content;
+        }
+
+        return true;
+    }
+
+    /**
+     * Deletes a file on the SFTP server.
+     *
+     * @param String $path
+     * @param Boolean $recursive
+     * @return Boolean
+     * @access public
+     */
+    function delete($path, $recursive = true)
+    {
+        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            return false;
+        }
+
+        $path = $this->_realpath($path);
+        if ($path === false) {
+            return false;
+        }
+
+        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3
+        if (!$this->_send_sftp_packet(NET_SFTP_REMOVE, pack('Na*', strlen($path), $path))) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        if ($this->packet_type != NET_SFTP_STATUS) {
+            user_error('Expected SSH_FXP_STATUS');
+            return false;
+        }
+
+        // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
+        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        if ($status != NET_SFTP_STATUS_OK) {
+            $this->_logError($response, $status);
+            if (!$recursive) {
+                return false;
+            }
+            $i = 0;
+            $result = $this->_delete_recursive($path, $i);
+            $this->_read_put_responses($i);
+            return $result;
+        }
+
+        return true;
+    }
+
+    /**
+     * Recursively deletes directories on the SFTP server
+     *
+     * Minimizes directory lookups and SSH_FXP_STATUS requests for speed.
+     *
+     * @param String $path
+     * @param Integer $i
+     * @return Boolean
+     * @access private
+     */
+    function _delete_recursive($path, &$i)
+    {
+        if (!$this->_read_put_responses($i)) {
+            return false;
+        }
+        $i = 0;
+        $entries = $this->_list($path, true, false);
+
+        // normally $entries would have at least . and .. but it might not if the directories
+        // permissions didn't allow reading
+        if (empty($entries)) {
+            return false;
+        }
+
+        foreach ($entries as $filename=>$props) {
+            if ($filename == '.' || $filename == '..') {
+                continue;
+            }
+
+            if (!isset($props['type'])) {
+                return false;
+            }
+
+            $temp = $path . '/' . $filename;
+            if ($props['type'] == NET_SFTP_TYPE_DIRECTORY) {
+                if (!$this->_delete_recursive($temp, $i)) {
+                    return false;
+                }
+            } else {
+                if (!$this->_send_sftp_packet(NET_SFTP_REMOVE, pack('Na*', strlen($temp), $temp))) {
+                    return false;
+                }
+
+                $i++;
+
+                if ($i >= 50) {
+                    if (!$this->_read_put_responses($i)) {
+                        return false;
+                    }
+                    $i = 0;
+                }
+            }
+        }
+
+        if (!$this->_send_sftp_packet(NET_SFTP_RMDIR, pack('Na*', strlen($path), $path))) {
+            return false;
+        }
+        $this->_remove_dir($path);
+
+        $i++;
+
+        if ($i >= 50) {
+            if (!$this->_read_put_responses($i)) {
+                return false;
+            }
+            $i = 0;
+        }
+
+        return true;
+    }
+
+    /**
+     * Renames a file or a directory on the SFTP server
+     *
+     * @param String $oldname
+     * @param String $newname
+     * @return Boolean
+     * @access public
+     */
+    function rename($oldname, $newname)
+    {
+        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            return false;
+        }
+
+        $oldname = $this->_realpath($oldname);
+        $newname = $this->_realpath($newname);
+        if ($oldname === false || $newname === false) {
+            return false;
+        }
+
+        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3
+        $packet = pack('Na*Na*', strlen($oldname), $oldname, strlen($newname), $newname);
+        if (!$this->_send_sftp_packet(NET_SFTP_RENAME, $packet)) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        if ($this->packet_type != NET_SFTP_STATUS) {
+            user_error('Expected SSH_FXP_STATUS');
+            return false;
+        }
+
+        // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
+        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        if ($status != NET_SFTP_STATUS_OK) {
+            $this->_logError($response, $status);
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Parse Attributes
+     *
+     * See '7.  File Attributes' of draft-ietf-secsh-filexfer-13 for more info.
+     *
+     * @param String $response
+     * @return Array
+     * @access private
+     */
+    function _parseAttributes(&$response)
+    {
+        $attr = array();
+        extract(unpack('Nflags', $this->_string_shift($response, 4)));
+        // SFTPv4+ have a type field (a byte) that follows the above flag field
+        foreach ($this->attributes as $key => $value) {
+            switch ($flags & $key) {
+                case NET_SFTP_ATTR_SIZE: // 0x00000001
+                    // size is represented by a 64-bit integer, so we perhaps ought to be doing the following:
+                    // $attr['size'] = new Math_BigInteger($this->_string_shift($response, 8), 256);
+                    // of course, you shouldn't be using Net_SFTP to transfer files that are in excess of 4GB
+                    // (0xFFFFFFFF bytes), anyway.  as such, we'll just represent all file sizes that are bigger than
+                    // 4GB as being 4GB.
+                    extract(unpack('Nupper/Nsize', $this->_string_shift($response, 8)));
+                    if ($upper) {
+                        $attr['size'] = 0xFFFFFFFF;
+                    } else {
+                        $attr['size'] = $size < 0 ? ($size & 0x7FFFFFFF) + 0x80000000 : $size;
+                    }
+                    break;
+                case NET_SFTP_ATTR_UIDGID: // 0x00000002 (SFTPv3 only)
+                    $attr+= unpack('Nuid/Ngid', $this->_string_shift($response, 8));
+                    break;
+                case NET_SFTP_ATTR_PERMISSIONS: // 0x00000004
+                    $attr+= unpack('Npermissions', $this->_string_shift($response, 4));
+                    break;
+                case NET_SFTP_ATTR_ACCESSTIME: // 0x00000008
+                    $attr+= unpack('Natime/Nmtime', $this->_string_shift($response, 8));
+                    break;
+                case NET_SFTP_ATTR_EXTENDED: // 0x80000000
+                    extract(unpack('Ncount', $this->_string_shift($response, 4)));
+                    for ($i = 0; $i < $count; $i++) {
+                        extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                        $key = $this->_string_shift($response, $length);
+                        extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                        $attr[$key] = $this->_string_shift($response, $length);
+                    }
+            }
+        }
+        return $attr;
+    }
+
+    /**
+     * Parse Longname
+     *
+     * SFTPv3 doesn't provide any easy way of identifying a file type.  You could try to open
+     * a file as a directory and see if an error is returned or you could try to parse the
+     * SFTPv3-specific longname field of the SSH_FXP_NAME packet.  That's what this function does.
+     * The result is returned using the
+     * {@link http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2 SFTPv4 type constants}.
+     *
+     * If the longname is in an unrecognized format bool(false) is returned.
+     *
+     * @param String $longname
+     * @return Mixed
+     * @access private
+     */
+    function _parseLongname($longname)
+    {
+        // http://en.wikipedia.org/wiki/Unix_file_types
+        // http://en.wikipedia.org/wiki/Filesystem_permissions#Notation_of_traditional_Unix_permissions
+        if (preg_match('#^[^/]([r-][w-][xstST-]){3}#', $longname)) {
+            switch ($longname[0]) {
+                case '-':
+                    return NET_SFTP_TYPE_REGULAR;
+                case 'd':
+                    return NET_SFTP_TYPE_DIRECTORY;
+                case 'l':
+                    return NET_SFTP_TYPE_SYMLINK;
+                default:
+                    return NET_SFTP_TYPE_SPECIAL;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Sends SFTP Packets
+     *
+     * See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info.
+     *
+     * @param Integer $type
+     * @param String $data
+     * @see Net_SFTP::_get_sftp_packet()
+     * @see Net_SSH2::_send_channel_packet()
+     * @return Boolean
+     * @access private
+     */
+    function _send_sftp_packet($type, $data)
+    {
+        $packet = $this->request_id !== false ?
+            pack('NCNa*', strlen($data) + 5, $type, $this->request_id, $data) :
+            pack('NCa*',  strlen($data) + 1, $type, $data);
+
+        $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+        $result = $this->_send_channel_packet(NET_SFTP_CHANNEL, $packet);
+        $stop = strtok(microtime(), ' ') + strtok('');
+
+        if (defined('NET_SFTP_LOGGING')) {
+            $packet_type = '-> ' . $this->packet_types[$type] . 
+                           ' (' . round($stop - $start, 4) . 's)';
+            if (NET_SFTP_LOGGING == NET_SFTP_LOG_REALTIME) {
+                echo "<pre>\r\n" . $this->_format_log(array($data), array($packet_type)) . "\r\n</pre>\r\n";
+                flush();
+                ob_flush();
+            } else {
+                $this->packet_type_log[] = $packet_type;
+                if (NET_SFTP_LOGGING == NET_SFTP_LOG_COMPLEX) {
+                    $this->packet_log[] = $data;
+                }
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Receives SFTP Packets
+     *
+     * See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info.
+     *
+     * Incidentally, the number of SSH_MSG_CHANNEL_DATA messages has no bearing on the number of SFTP packets present.
+     * There can be one SSH_MSG_CHANNEL_DATA messages containing two SFTP packets or there can be two SSH_MSG_CHANNEL_DATA
+     * messages containing one SFTP packet.
+     *
+     * @see Net_SFTP::_send_sftp_packet()
+     * @return String
+     * @access private
+     */
+    function _get_sftp_packet()
+    {
+        $this->curTimeout = false;
+
+        $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+
+        // SFTP packet length
+        while (strlen($this->packet_buffer) < 4) {
+            $temp = $this->_get_channel_packet(NET_SFTP_CHANNEL);
+            if (is_bool($temp)) {
+                $this->packet_type = false;
+                $this->packet_buffer = '';
+                return false;
+            }
+            $this->packet_buffer.= $temp;
+        }
+        extract(unpack('Nlength', $this->_string_shift($this->packet_buffer, 4)));
+        $tempLength = $length;
+        $tempLength-= strlen($this->packet_buffer);
+
+        // SFTP packet type and data payload
+        while ($tempLength > 0) {
+            $temp = $this->_get_channel_packet(NET_SFTP_CHANNEL);
+            if (is_bool($temp)) {
+                $this->packet_type = false;
+                $this->packet_buffer = '';
+                return false;
+            }
+            $this->packet_buffer.= $temp;
+            $tempLength-= strlen($temp);
+        }
+
+        $stop = strtok(microtime(), ' ') + strtok('');
+
+        $this->packet_type = ord($this->_string_shift($this->packet_buffer));
+
+        if ($this->request_id !== false) {
+            $this->_string_shift($this->packet_buffer, 4); // remove the request id
+            $length-= 5; // account for the request id and the packet type
+        } else {
+            $length-= 1; // account for the packet type
+        }
+
+        $packet = $this->_string_shift($this->packet_buffer, $length);
+
+        if (defined('NET_SFTP_LOGGING')) {
+            $packet_type = '<- ' . $this->packet_types[$this->packet_type] . 
+                           ' (' . round($stop - $start, 4) . 's)';
+            if (NET_SFTP_LOGGING == NET_SFTP_LOG_REALTIME) {
+                echo "<pre>\r\n" . $this->_format_log(array($packet), array($packet_type)) . "\r\n</pre>\r\n";
+                flush();
+                ob_flush();
+            } else {
+                $this->packet_type_log[] = $packet_type;
+                if (NET_SFTP_LOGGING == NET_SFTP_LOG_COMPLEX) {
+                    $this->packet_log[] = $packet;
+                }
+            }
+        }
+
+        return $packet;
+    }
+
+    /**
+     * Returns a log of the packets that have been sent and received.
+     *
+     * Returns a string if NET_SFTP_LOGGING == NET_SFTP_LOG_COMPLEX, an array if NET_SFTP_LOGGING == NET_SFTP_LOG_SIMPLE and false if !defined('NET_SFTP_LOGGING')
+     *
+     * @access public
+     * @return String or Array
+     */
+    function getSFTPLog()
+    {
+        if (!defined('NET_SFTP_LOGGING')) {
+            return false;
+        }
+
+        switch (NET_SFTP_LOGGING) {
+            case NET_SFTP_LOG_COMPLEX:
+                return $this->_format_log($this->packet_log, $this->packet_type_log);
+                break;
+            //case NET_SFTP_LOG_SIMPLE:
+            default:
+                return $this->packet_type_log;
+        }
+    }
+
+    /**
+     * Returns all errors
+     *
+     * @return String
+     * @access public
+     */
+    function getSFTPErrors()
+    {
+        return $this->sftp_errors;
+    }
+
+    /**
+     * Returns the last error
+     *
+     * @return String
+     * @access public
+     */
+    function getLastSFTPError()
+    {
+        return count($this->sftp_errors) ? $this->sftp_errors[count($this->sftp_errors) - 1] : '';
+    }
+
+    /**
+     * Get supported SFTP versions
+     *
+     * @return Array
+     * @access public
+     */
+    function getSupportedVersions()
+    {
+        $temp = array('version' => $this->version);
+        if (isset($this->extensions['versions'])) {
+            $temp['extensions'] = $this->extensions['versions'];
+        }
+        return $temp;
+    }
+
+    /**
+     * Disconnect
+     *
+     * @param Integer $reason
+     * @return Boolean
+     * @access private
+     */
+    function _disconnect($reason)
+    {
+        $this->pwd = false;
+        parent::_disconnect($reason);
+    }
+}
\ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php
new file mode 100644
index 0000000000000000000000000000000000000000..8f5c79938e49f21d223fae387b72911107a3489f
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH1.php
@@ -0,0 +1,1577 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of SSHv1.
+ *
+ * PHP versions 4 and 5
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ *    include('Net/SSH1.php');
+ *
+ *    $ssh = new Net_SSH1('www.domain.tld');
+ *    if (!$ssh->login('username', 'password')) {
+ *        exit('Login Failed');
+ *    }
+ *
+ *    echo $ssh->exec('ls -la');
+ * ?>
+ * </code>
+ *
+ * Here's another short example:
+ * <code>
+ * <?php
+ *    include('Net/SSH1.php');
+ *
+ *    $ssh = new Net_SSH1('www.domain.tld');
+ *    if (!$ssh->login('username', 'password')) {
+ *        exit('Login Failed');
+ *    }
+ *
+ *    echo $ssh->read('username@username:~$');
+ *    $ssh->write("ls -la\n");
+ *    echo $ssh->read('username@username:~$');
+ * ?>
+ * </code>
+ *
+ * More information on the SSHv1 specification can be found by reading 
+ * {@link http://www.snailbook.com/docs/protocol-1.5.txt protocol-1.5.txt}.
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category   Net
+ * @package    Net_SSH1
+ * @author     Jim Wigginton <terrafrost@php.net>
+ * @copyright  MMVII Jim Wigginton
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @version    $Id: SSH1.php,v 1.15 2010/03/22 22:01:38 terrafrost Exp $
+ * @link       http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Math_BigInteger
+ *
+ * Used to do RSA encryption.
+ */
+if (!class_exists('Math_BigInteger')) {
+    require_once('Math/BigInteger.php');
+}
+
+/**
+ * Include Crypt_Null
+ */
+//require_once('Crypt/Null.php');
+
+/**
+ * Include Crypt_DES
+ */
+if (!class_exists('Crypt_DES')) {
+    require_once('Crypt/DES.php');
+}
+
+/**
+ * Include Crypt_TripleDES
+ */
+if (!class_exists('Crypt_TripleDES')) {
+    require_once('Crypt/TripleDES.php');
+}
+
+/**
+ * Include Crypt_RC4
+ */
+if (!class_exists('Crypt_RC4')) {
+    require_once('Crypt/RC4.php');
+}
+
+/**
+ * Include Crypt_Random
+ */
+// the class_exists() will only be called if the crypt_random_string function hasn't been defined and
+// will trigger a call to __autoload() if you're wanting to auto-load classes
+// call function_exists() a second time to stop the require_once from being called outside
+// of the auto loader
+if (!function_exists('crypt_random_string') && !class_exists('Crypt_Random') && !function_exists('crypt_random_string')) {
+    require_once('Crypt/Random.php');
+}
+
+/**#@+
+ * Encryption Methods
+ *
+ * @see Net_SSH1::getSupportedCiphers()
+ * @access public
+ */
+/**
+ * No encryption
+ *
+ * Not supported.
+ */
+define('NET_SSH1_CIPHER_NONE',       0);
+/**
+ * IDEA in CFB mode
+ *
+ * Not supported.
+ */
+define('NET_SSH1_CIPHER_IDEA',       1);
+/**
+ * DES in CBC mode
+ */
+define('NET_SSH1_CIPHER_DES',        2);
+/**
+ * Triple-DES in CBC mode
+ *
+ * All implementations are required to support this
+ */
+define('NET_SSH1_CIPHER_3DES',       3);
+/**
+ * TRI's Simple Stream encryption CBC
+ *
+ * Not supported nor is it defined in the official SSH1 specs.  OpenSSH, however, does define it (see cipher.h),
+ * although it doesn't use it (see cipher.c)
+ */
+define('NET_SSH1_CIPHER_BROKEN_TSS', 4);
+/**
+ * RC4
+ *
+ * Not supported.
+ *
+ * @internal According to the SSH1 specs:
+ *
+ *        "The first 16 bytes of the session key are used as the key for
+ *         the server to client direction.  The remaining 16 bytes are used
+ *         as the key for the client to server direction.  This gives
+ *         independent 128-bit keys for each direction."
+ *
+ *     This library currently only supports encryption when the same key is being used for both directions.  This is
+ *     because there's only one $crypto object.  Two could be added ($encrypt and $decrypt, perhaps).
+ */
+define('NET_SSH1_CIPHER_RC4',        5);
+/**
+ * Blowfish
+ *
+ * Not supported nor is it defined in the official SSH1 specs.  OpenSSH, however, defines it (see cipher.h) and
+ * uses it (see cipher.c)
+ */
+define('NET_SSH1_CIPHER_BLOWFISH',   6);
+/**#@-*/
+
+/**#@+
+ * Authentication Methods
+ *
+ * @see Net_SSH1::getSupportedAuthentications()
+ * @access public
+ */
+/**
+ * .rhosts or /etc/hosts.equiv
+ */
+define('NET_SSH1_AUTH_RHOSTS',     1);
+/**
+ * pure RSA authentication
+ */
+define('NET_SSH1_AUTH_RSA',        2);
+/**
+ * password authentication
+ *
+ * This is the only method that is supported by this library.
+ */
+define('NET_SSH1_AUTH_PASSWORD',   3);
+/**
+ * .rhosts with RSA host authentication
+ */
+define('NET_SSH1_AUTH_RHOSTS_RSA', 4);
+/**#@-*/
+
+/**#@+
+ * Terminal Modes
+ *
+ * @link http://3sp.com/content/developer/maverick-net/docs/Maverick.SSH.PseudoTerminalModesMembers.html
+ * @access private
+ */
+define('NET_SSH1_TTY_OP_END',  0);
+/**#@-*/
+
+/**
+ * The Response Type
+ *
+ * @see Net_SSH1::_get_binary_packet()
+ * @access private
+ */
+define('NET_SSH1_RESPONSE_TYPE', 1);
+
+/**
+ * The Response Data
+ *
+ * @see Net_SSH1::_get_binary_packet()
+ * @access private
+ */
+define('NET_SSH1_RESPONSE_DATA', 2);
+
+/**#@+
+ * Execution Bitmap Masks
+ *
+ * @see Net_SSH1::bitmap
+ * @access private
+ */
+define('NET_SSH1_MASK_CONSTRUCTOR', 0x00000001);
+define('NET_SSH1_MASK_LOGIN',       0x00000002);
+define('NET_SSH1_MASK_SHELL',       0x00000004);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Net_SSH1::getLog()
+ */
+/**
+ * Returns the message numbers
+ */
+define('NET_SSH1_LOG_SIMPLE',  1);
+/**
+ * Returns the message content
+ */
+define('NET_SSH1_LOG_COMPLEX', 2);
+/**
+ * Outputs the content real-time
+ */
+define('NET_SSH2_LOG_REALTIME', 3);
+/**
+ * Dumps the content real-time to a file
+ */
+define('NET_SSH2_LOG_REALTIME_FILE', 4);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Net_SSH1::read()
+ */
+/**
+ * Returns when a string matching $expect exactly is found
+ */
+define('NET_SSH1_READ_SIMPLE',  1);
+/**
+ * Returns when a string matching the regular expression $expect is found
+ */
+define('NET_SSH1_READ_REGEX', 2);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of SSHv1.
+ *
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access  public
+ * @package Net_SSH1
+ */
+class Net_SSH1 {
+    /**
+     * The SSH identifier
+     *
+     * @var String
+     * @access private
+     */
+    var $identifier = 'SSH-1.5-phpseclib';
+
+    /**
+     * The Socket Object
+     *
+     * @var Object
+     * @access private
+     */
+    var $fsock;
+
+    /**
+     * The cryptography object
+     *
+     * @var Object
+     * @access private
+     */
+    var $crypto = false;
+
+    /**
+     * Execution Bitmap
+     *
+     * The bits that are set represent functions that have been called already.  This is used to determine
+     * if a requisite function has been successfully executed.  If not, an error should be thrown.
+     *
+     * @var Integer
+     * @access private
+     */
+    var $bitmap = 0;
+
+    /**
+     * The Server Key Public Exponent
+     *
+     * Logged for debug purposes
+     *
+     * @see Net_SSH1::getServerKeyPublicExponent()
+     * @var String
+     * @access private
+     */
+    var $server_key_public_exponent;
+
+    /**
+     * The Server Key Public Modulus
+     *
+     * Logged for debug purposes
+     *
+     * @see Net_SSH1::getServerKeyPublicModulus()
+     * @var String
+     * @access private
+     */
+    var $server_key_public_modulus;
+
+    /**
+     * The Host Key Public Exponent
+     *
+     * Logged for debug purposes
+     *
+     * @see Net_SSH1::getHostKeyPublicExponent()
+     * @var String
+     * @access private
+     */
+    var $host_key_public_exponent;
+
+    /**
+     * The Host Key Public Modulus
+     *
+     * Logged for debug purposes
+     *
+     * @see Net_SSH1::getHostKeyPublicModulus()
+     * @var String
+     * @access private
+     */
+    var $host_key_public_modulus;
+
+    /**
+     * Supported Ciphers
+     *
+     * Logged for debug purposes
+     *
+     * @see Net_SSH1::getSupportedCiphers()
+     * @var Array
+     * @access private
+     */
+    var $supported_ciphers = array(
+        NET_SSH1_CIPHER_NONE       => 'No encryption',
+        NET_SSH1_CIPHER_IDEA       => 'IDEA in CFB mode',
+        NET_SSH1_CIPHER_DES        => 'DES in CBC mode',
+        NET_SSH1_CIPHER_3DES       => 'Triple-DES in CBC mode',
+        NET_SSH1_CIPHER_BROKEN_TSS => 'TRI\'s Simple Stream encryption CBC',
+        NET_SSH1_CIPHER_RC4        => 'RC4',
+        NET_SSH1_CIPHER_BLOWFISH   => 'Blowfish'
+    );
+
+    /**
+     * Supported Authentications
+     *
+     * Logged for debug purposes
+     *
+     * @see Net_SSH1::getSupportedAuthentications()
+     * @var Array
+     * @access private
+     */
+    var $supported_authentications = array(
+        NET_SSH1_AUTH_RHOSTS     => '.rhosts or /etc/hosts.equiv',
+        NET_SSH1_AUTH_RSA        => 'pure RSA authentication',
+        NET_SSH1_AUTH_PASSWORD   => 'password authentication',
+        NET_SSH1_AUTH_RHOSTS_RSA => '.rhosts with RSA host authentication'
+    );
+
+    /**
+     * Server Identification
+     *
+     * @see Net_SSH1::getServerIdentification()
+     * @var String
+     * @access private
+     */
+    var $server_identification = '';
+
+    /**
+     * Protocol Flags
+     *
+     * @see Net_SSH1::Net_SSH1()
+     * @var Array
+     * @access private
+     */
+    var $protocol_flags = array();
+
+    /**
+     * Protocol Flag Log
+     *
+     * @see Net_SSH1::getLog()
+     * @var Array
+     * @access private
+     */
+    var $protocol_flag_log = array();
+
+    /**
+     * Message Log
+     *
+     * @see Net_SSH1::getLog()
+     * @var Array
+     * @access private
+     */
+    var $message_log = array();
+
+    /**
+     * Real-time log file pointer
+     *
+     * @see Net_SSH1::_append_log()
+     * @var Resource
+     * @access private
+     */
+    var $realtime_log_file;
+
+    /**
+     * Real-time log file size
+     *
+     * @see Net_SSH1::_append_log()
+     * @var Integer
+     * @access private
+     */
+    var $realtime_log_size;
+
+    /**
+     * Real-time log file wrap boolean
+     *
+     * @see Net_SSH1::_append_log()
+     * @var Boolean
+     * @access private
+     */
+    var $realtime_log_wrap;
+
+    /**
+     * Interactive Buffer
+     *
+     * @see Net_SSH1::read()
+     * @var Array
+     * @access private
+     */
+    var $interactiveBuffer = '';
+
+    /**
+     * Timeout
+     *
+     * @see Net_SSH1::setTimeout()
+     * @access private
+     */
+    var $timeout;
+
+    /**
+     * Current Timeout
+     *
+     * @see Net_SSH2::_get_channel_packet()
+     * @access private
+     */
+    var $curTimeout;
+
+    /**
+     * Default Constructor.
+     *
+     * Connects to an SSHv1 server
+     *
+     * @param String $host
+     * @param optional Integer $port
+     * @param optional Integer $timeout
+     * @param optional Integer $cipher
+     * @return Net_SSH1
+     * @access public
+     */
+    function Net_SSH1($host, $port = 22, $timeout = 10, $cipher = NET_SSH1_CIPHER_3DES)
+    {
+        $this->protocol_flags = array(
+            1  => 'NET_SSH1_MSG_DISCONNECT',
+            2  => 'NET_SSH1_SMSG_PUBLIC_KEY',
+            3  => 'NET_SSH1_CMSG_SESSION_KEY',
+            4  => 'NET_SSH1_CMSG_USER',
+            9  => 'NET_SSH1_CMSG_AUTH_PASSWORD',
+            10 => 'NET_SSH1_CMSG_REQUEST_PTY',
+            12 => 'NET_SSH1_CMSG_EXEC_SHELL',
+            13 => 'NET_SSH1_CMSG_EXEC_CMD',
+            14 => 'NET_SSH1_SMSG_SUCCESS',
+            15 => 'NET_SSH1_SMSG_FAILURE',
+            16 => 'NET_SSH1_CMSG_STDIN_DATA',
+            17 => 'NET_SSH1_SMSG_STDOUT_DATA',
+            18 => 'NET_SSH1_SMSG_STDERR_DATA',
+            19 => 'NET_SSH1_CMSG_EOF',
+            20 => 'NET_SSH1_SMSG_EXITSTATUS',
+            33 => 'NET_SSH1_CMSG_EXIT_CONFIRMATION'
+        );
+
+        $this->_define_array($this->protocol_flags);
+
+        $this->fsock = @fsockopen($host, $port, $errno, $errstr, $timeout);
+        if (!$this->fsock) {
+            user_error(rtrim("Cannot connect to $host. Error $errno. $errstr"));
+            return;
+        }
+
+        $this->server_identification = $init_line = fgets($this->fsock, 255);
+
+        if (defined('NET_SSH1_LOGGING')) {
+            $this->_append_log('<-', $this->server_identification);
+            $this->_append_log('->', $this->identifier . "\r\n");
+        }
+
+        if (!preg_match('#SSH-([0-9\.]+)-(.+)#', $init_line, $parts)) {
+            user_error('Can only connect to SSH servers');
+            return;
+        }
+        if ($parts[1][0] != 1) {
+            user_error("Cannot connect to SSH $parts[1] servers");
+            return;
+        }
+
+        fputs($this->fsock, $this->identifier."\r\n");
+
+        $response = $this->_get_binary_packet();
+        if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_PUBLIC_KEY) {
+            user_error('Expected SSH_SMSG_PUBLIC_KEY');
+            return;
+        }
+
+        $anti_spoofing_cookie = $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 8);
+
+        $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4);
+
+        $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2));
+        $server_key_public_exponent = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
+        $this->server_key_public_exponent = $server_key_public_exponent;
+
+        $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2));
+        $server_key_public_modulus = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
+        $this->server_key_public_modulus = $server_key_public_modulus;
+
+        $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4);
+
+        $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2));
+        $host_key_public_exponent = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
+        $this->host_key_public_exponent = $host_key_public_exponent;
+
+        $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2));
+        $host_key_public_modulus = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
+        $this->host_key_public_modulus = $host_key_public_modulus;
+
+        $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4);
+
+        // get a list of the supported ciphers
+        extract(unpack('Nsupported_ciphers_mask', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4)));
+        foreach ($this->supported_ciphers as $mask=>$name) {
+            if (($supported_ciphers_mask & (1 << $mask)) == 0) {
+                unset($this->supported_ciphers[$mask]);
+            }
+        }
+
+        // get a list of the supported authentications
+        extract(unpack('Nsupported_authentications_mask', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4)));
+        foreach ($this->supported_authentications as $mask=>$name) {
+            if (($supported_authentications_mask & (1 << $mask)) == 0) {
+                unset($this->supported_authentications[$mask]);
+            }
+        }
+
+        $session_id = pack('H*', md5($host_key_public_modulus->toBytes() . $server_key_public_modulus->toBytes() . $anti_spoofing_cookie));
+
+        $session_key = crypt_random_string(32);
+        $double_encrypted_session_key = $session_key ^ str_pad($session_id, 32, chr(0));
+
+        if ($server_key_public_modulus->compare($host_key_public_modulus) < 0) {
+            $double_encrypted_session_key = $this->_rsa_crypt(
+                $double_encrypted_session_key,
+                array(
+                    $server_key_public_exponent,
+                    $server_key_public_modulus
+                )
+            );
+            $double_encrypted_session_key = $this->_rsa_crypt(
+                $double_encrypted_session_key,
+                array(
+                    $host_key_public_exponent,
+                    $host_key_public_modulus
+                )
+            );
+        } else {
+            $double_encrypted_session_key = $this->_rsa_crypt(
+                $double_encrypted_session_key,
+                array(
+                    $host_key_public_exponent,
+                    $host_key_public_modulus
+                )
+            );
+            $double_encrypted_session_key = $this->_rsa_crypt(
+                $double_encrypted_session_key,
+                array(
+                    $server_key_public_exponent,
+                    $server_key_public_modulus
+                )
+            );
+        }
+
+        $cipher = isset($this->supported_ciphers[$cipher]) ? $cipher : NET_SSH1_CIPHER_3DES;
+        $data = pack('C2a*na*N', NET_SSH1_CMSG_SESSION_KEY, $cipher, $anti_spoofing_cookie, 8 * strlen($double_encrypted_session_key), $double_encrypted_session_key, 0);
+
+        if (!$this->_send_binary_packet($data)) {
+            user_error('Error sending SSH_CMSG_SESSION_KEY');
+            return;
+        }
+
+        switch ($cipher) {
+            //case NET_SSH1_CIPHER_NONE:
+            //    $this->crypto = new Crypt_Null();
+            //    break;
+            case NET_SSH1_CIPHER_DES:
+                $this->crypto = new Crypt_DES();
+                $this->crypto->disablePadding();
+                $this->crypto->enableContinuousBuffer();
+                $this->crypto->setKey(substr($session_key, 0,  8));
+                break;
+            case NET_SSH1_CIPHER_3DES:
+                $this->crypto = new Crypt_TripleDES(CRYPT_DES_MODE_3CBC);
+                $this->crypto->disablePadding();
+                $this->crypto->enableContinuousBuffer();
+                $this->crypto->setKey(substr($session_key, 0, 24));
+                break;
+            //case NET_SSH1_CIPHER_RC4:
+            //    $this->crypto = new Crypt_RC4();
+            //    $this->crypto->enableContinuousBuffer();
+            //    $this->crypto->setKey(substr($session_key, 0,  16));
+            //    break;
+        }
+
+        $response = $this->_get_binary_packet();
+
+        if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_SUCCESS) {
+            user_error('Expected SSH_SMSG_SUCCESS');
+            return;
+        }
+
+        $this->bitmap = NET_SSH1_MASK_CONSTRUCTOR;
+    }
+
+    /**
+     * Login
+     *
+     * @param String $username
+     * @param optional String $password
+     * @return Boolean
+     * @access public
+     */
+    function login($username, $password = '')
+    {
+        if (!($this->bitmap & NET_SSH1_MASK_CONSTRUCTOR)) {
+            return false;
+        }
+
+        $data = pack('CNa*', NET_SSH1_CMSG_USER, strlen($username), $username);
+
+        if (!$this->_send_binary_packet($data)) {
+            user_error('Error sending SSH_CMSG_USER');
+            return false;
+        }
+
+        $response = $this->_get_binary_packet();
+
+        if ($response === true) {
+            return false;
+        }
+        if ($response[NET_SSH1_RESPONSE_TYPE] == NET_SSH1_SMSG_SUCCESS) {
+            $this->bitmap |= NET_SSH1_MASK_LOGIN;
+            return true;
+        } else if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_FAILURE) {
+            user_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE');
+            return false;
+        }
+
+        $data = pack('CNa*', NET_SSH1_CMSG_AUTH_PASSWORD, strlen($password), $password);
+
+        if (!$this->_send_binary_packet($data)) {
+            user_error('Error sending SSH_CMSG_AUTH_PASSWORD');
+            return false;
+        }
+
+        // remove the username and password from the last logged packet
+        if (defined('NET_SSH1_LOGGING') && NET_SSH1_LOGGING == NET_SSH1_LOG_COMPLEX) {
+            $data = pack('CNa*', NET_SSH1_CMSG_AUTH_PASSWORD, strlen('password'), 'password');
+            $this->message_log[count($this->message_log) - 1] = $data;
+        }
+
+        $response = $this->_get_binary_packet();
+
+        if ($response === true) {
+            return false;
+        }
+        if ($response[NET_SSH1_RESPONSE_TYPE] == NET_SSH1_SMSG_SUCCESS) {
+            $this->bitmap |= NET_SSH1_MASK_LOGIN;
+            return true;
+        } else if ($response[NET_SSH1_RESPONSE_TYPE] == NET_SSH1_SMSG_FAILURE) {
+            return false;
+        } else {
+            user_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE');
+            return false;
+        }
+    }
+
+    /**
+     * Set Timeout
+     *
+     * $ssh->exec('ping 127.0.0.1'); on a Linux host will never return and will run indefinitely.  setTimeout() makes it so it'll timeout.
+     * Setting $timeout to false or 0 will mean there is no timeout.
+     *
+     * @param Mixed $timeout
+     */
+    function setTimeout($timeout)
+    {
+        $this->timeout = $this->curTimeout = $timeout;
+    }
+
+    /**
+     * Executes a command on a non-interactive shell, returns the output, and quits.
+     *
+     * An SSH1 server will close the connection after a command has been executed on a non-interactive shell.  SSH2
+     * servers don't, however, this isn't an SSH2 client.  The way this works, on the server, is by initiating a
+     * shell with the -s option, as discussed in the following links:
+     *
+     * {@link http://www.faqs.org/docs/bashman/bashref_65.html http://www.faqs.org/docs/bashman/bashref_65.html}
+     * {@link http://www.faqs.org/docs/bashman/bashref_62.html http://www.faqs.org/docs/bashman/bashref_62.html}
+     *
+     * To execute further commands, a new Net_SSH1 object will need to be created.
+     *
+     * Returns false on failure and the output, otherwise.
+     *
+     * @see Net_SSH1::interactiveRead()
+     * @see Net_SSH1::interactiveWrite()
+     * @param String $cmd
+     * @return mixed
+     * @access public
+     */
+    function exec($cmd, $block = true)
+    {
+        if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) {
+            user_error('Operation disallowed prior to login()');
+            return false;
+        }
+
+        $data = pack('CNa*', NET_SSH1_CMSG_EXEC_CMD, strlen($cmd), $cmd);
+
+        if (!$this->_send_binary_packet($data)) {
+            user_error('Error sending SSH_CMSG_EXEC_CMD');
+            return false;
+        }
+
+        if (!$block) {
+            return true;
+        }
+
+        $output = '';
+        $response = $this->_get_binary_packet();
+
+        if ($response !== false) {
+            do {
+                $output.= substr($response[NET_SSH1_RESPONSE_DATA], 4);
+                $response = $this->_get_binary_packet();
+            } while (is_array($response) && $response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_EXITSTATUS);
+        }
+
+        $data = pack('C', NET_SSH1_CMSG_EXIT_CONFIRMATION);
+
+        // i don't think it's really all that important if this packet gets sent or not.
+        $this->_send_binary_packet($data);
+
+        fclose($this->fsock);
+
+        // reset the execution bitmap - a new Net_SSH1 object needs to be created.
+        $this->bitmap = 0;
+
+        return $output;
+    }
+
+    /**
+     * Creates an interactive shell
+     *
+     * @see Net_SSH1::interactiveRead()
+     * @see Net_SSH1::interactiveWrite()
+     * @return Boolean
+     * @access private
+     */
+    function _initShell()
+    {
+        // connect using the sample parameters in protocol-1.5.txt.
+        // according to wikipedia.org's entry on text terminals, "the fundamental type of application running on a text
+        // terminal is a command line interpreter or shell".  thus, opening a terminal session to run the shell.
+        $data = pack('CNa*N4C', NET_SSH1_CMSG_REQUEST_PTY, strlen('vt100'), 'vt100', 24, 80, 0, 0, NET_SSH1_TTY_OP_END);
+
+        if (!$this->_send_binary_packet($data)) {
+            user_error('Error sending SSH_CMSG_REQUEST_PTY');
+            return false;
+        }
+
+        $response = $this->_get_binary_packet();
+
+        if ($response === true) {
+            return false;
+        }
+        if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_SUCCESS) {
+            user_error('Expected SSH_SMSG_SUCCESS');
+            return false;
+        }
+
+        $data = pack('C', NET_SSH1_CMSG_EXEC_SHELL);
+
+        if (!$this->_send_binary_packet($data)) {
+            user_error('Error sending SSH_CMSG_EXEC_SHELL');
+            return false;
+        }
+
+        $this->bitmap |= NET_SSH1_MASK_SHELL;
+
+        //stream_set_blocking($this->fsock, 0);
+
+        return true;
+    }
+
+    /**
+     * Inputs a command into an interactive shell.
+     *
+     * @see Net_SSH1::interactiveWrite()
+     * @param String $cmd
+     * @return Boolean
+     * @access public
+     */
+    function write($cmd)
+    {
+        return $this->interactiveWrite($cmd);
+    }
+
+    /**
+     * Returns the output of an interactive shell when there's a match for $expect
+     *
+     * $expect can take the form of a string literal or, if $mode == NET_SSH1_READ_REGEX,
+     * a regular expression.
+     *
+     * @see Net_SSH1::write()
+     * @param String $expect
+     * @param Integer $mode
+     * @return Boolean
+     * @access public
+     */
+    function read($expect, $mode = NET_SSH1_READ_SIMPLE)
+    {
+        if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) {
+            user_error('Operation disallowed prior to login()');
+            return false;
+        }
+
+        if (!($this->bitmap & NET_SSH1_MASK_SHELL) && !$this->_initShell()) {
+            user_error('Unable to initiate an interactive shell session');
+            return false;
+        }
+
+        $match = $expect;
+        while (true) {
+            if ($mode == NET_SSH1_READ_REGEX) {
+                preg_match($expect, $this->interactiveBuffer, $matches);
+                $match = isset($matches[0]) ? $matches[0] : '';
+            }
+            $pos = strlen($match) ? strpos($this->interactiveBuffer, $match) : false;
+            if ($pos !== false) {
+                return $this->_string_shift($this->interactiveBuffer, $pos + strlen($match));
+            }
+            $response = $this->_get_binary_packet();
+
+            if ($response === true) {
+                return $this->_string_shift($this->interactiveBuffer, strlen($this->interactiveBuffer));
+            }
+            $this->interactiveBuffer.= substr($response[NET_SSH1_RESPONSE_DATA], 4);
+        }
+    }
+
+    /**
+     * Inputs a command into an interactive shell.
+     *
+     * @see Net_SSH1::interactiveRead()
+     * @param String $cmd
+     * @return Boolean
+     * @access public
+     */
+    function interactiveWrite($cmd)
+    {
+        if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) {
+            user_error('Operation disallowed prior to login()');
+            return false;
+        }
+
+        if (!($this->bitmap & NET_SSH1_MASK_SHELL) && !$this->_initShell()) {
+            user_error('Unable to initiate an interactive shell session');
+            return false;
+        }
+
+        $data = pack('CNa*', NET_SSH1_CMSG_STDIN_DATA, strlen($cmd), $cmd);
+
+        if (!$this->_send_binary_packet($data)) {
+            user_error('Error sending SSH_CMSG_STDIN');
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns the output of an interactive shell when no more output is available.
+     *
+     * Requires PHP 4.3.0 or later due to the use of the stream_select() function.  If you see stuff like
+     * "", you're seeing ANSI escape codes.  According to
+     * {@link http://support.microsoft.com/kb/101875 How to Enable ANSI.SYS in a Command Window}, "Windows NT
+     * does not support ANSI escape sequences in Win32 Console applications", so if you're a Windows user,
+     * there's not going to be much recourse.
+     *
+     * @see Net_SSH1::interactiveRead()
+     * @return String
+     * @access public
+     */
+    function interactiveRead()
+    {
+        if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) {
+            user_error('Operation disallowed prior to login()');
+            return false;
+        }
+
+        if (!($this->bitmap & NET_SSH1_MASK_SHELL) && !$this->_initShell()) {
+            user_error('Unable to initiate an interactive shell session');
+            return false;
+        }
+
+        $read = array($this->fsock);
+        $write = $except = null;
+        if (stream_select($read, $write, $except, 0)) {
+            $response = $this->_get_binary_packet();
+            return substr($response[NET_SSH1_RESPONSE_DATA], 4);
+        } else {
+            return '';
+        }
+    }
+
+    /**
+     * Disconnect
+     *
+     * @access public
+     */
+    function disconnect()
+    {
+        $this->_disconnect();
+    }
+
+    /**
+     * Destructor.
+     *
+     * Will be called, automatically, if you're supporting just PHP5.  If you're supporting PHP4, you'll need to call
+     * disconnect().
+     *
+     * @access public
+     */
+    function __destruct()
+    {
+        $this->_disconnect();
+    }
+
+    /**
+     * Disconnect
+     *
+     * @param String $msg
+     * @access private
+     */
+    function _disconnect($msg = 'Client Quit')
+    {
+        if ($this->bitmap) {
+            $data = pack('C', NET_SSH1_CMSG_EOF);
+            $this->_send_binary_packet($data);
+            /*
+            $response = $this->_get_binary_packet();
+            if ($response === true) {
+                $response = array(NET_SSH1_RESPONSE_TYPE => -1);
+            }
+            switch ($response[NET_SSH1_RESPONSE_TYPE]) {
+                case NET_SSH1_SMSG_EXITSTATUS:
+                    $data = pack('C', NET_SSH1_CMSG_EXIT_CONFIRMATION);
+                    break;
+                default:
+                    $data = pack('CNa*', NET_SSH1_MSG_DISCONNECT, strlen($msg), $msg);
+            }
+            */
+            $data = pack('CNa*', NET_SSH1_MSG_DISCONNECT, strlen($msg), $msg);
+
+            $this->_send_binary_packet($data);
+            fclose($this->fsock);
+            $this->bitmap = 0;
+        }
+    }
+
+    /**
+     * Gets Binary Packets
+     *
+     * See 'The Binary Packet Protocol' of protocol-1.5.txt for more info.
+     *
+     * Also, this function could be improved upon by adding detection for the following exploit:
+     * http://www.securiteam.com/securitynews/5LP042K3FY.html
+     *
+     * @see Net_SSH1::_send_binary_packet()
+     * @return Array
+     * @access private
+     */
+    function _get_binary_packet()
+    {
+        if (feof($this->fsock)) {
+            //user_error('connection closed prematurely');
+            return false;
+        }
+
+        if ($this->curTimeout) {
+            $read = array($this->fsock);
+            $write = $except = NULL;
+
+            $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+            $sec = floor($this->curTimeout);
+            $usec = 1000000 * ($this->curTimeout - $sec);
+            // on windows this returns a "Warning: Invalid CRT parameters detected" error
+            if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) {
+                //$this->_disconnect('Timeout');
+                return true;
+            }
+            $elapsed = strtok(microtime(), ' ') + strtok('') - $start;
+            $this->curTimeout-= $elapsed;
+        }
+
+        $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+        $temp = unpack('Nlength', fread($this->fsock, 4));
+
+        $padding_length = 8 - ($temp['length'] & 7);
+        $length = $temp['length'] + $padding_length;
+
+        while ($length > 0) {
+            $temp = fread($this->fsock, $length);
+            $raw.= $temp;
+            $length-= strlen($temp);
+        }
+        $stop = strtok(microtime(), ' ') + strtok('');
+
+        if (strlen($raw) && $this->crypto !== false) {
+            $raw = $this->crypto->decrypt($raw);
+        }
+
+        $padding = substr($raw, 0, $padding_length);
+        $type = $raw[$padding_length];
+        $data = substr($raw, $padding_length + 1, -4);
+
+        $temp = unpack('Ncrc', substr($raw, -4));
+
+        //if ( $temp['crc'] != $this->_crc($padding . $type . $data) ) {
+        //    user_error('Bad CRC in packet from server');
+        //    return false;
+        //}
+
+        $type = ord($type);
+
+        if (defined('NET_SSH1_LOGGING')) {
+            $temp = isset($this->protocol_flags[$type]) ? $this->protocol_flags[$type] : 'UNKNOWN';
+            $temp = '<- ' . $temp .
+                    ' (' . round($stop - $start, 4) . 's)';
+            $this->_append_log($temp, $data);
+        }
+
+        return array(
+            NET_SSH1_RESPONSE_TYPE => $type,
+            NET_SSH1_RESPONSE_DATA => $data
+        );
+    }
+
+    /**
+     * Sends Binary Packets
+     *
+     * Returns true on success, false on failure.
+     *
+     * @see Net_SSH1::_get_binary_packet()
+     * @param String $data
+     * @return Boolean
+     * @access private
+     */
+    function _send_binary_packet($data)
+    {
+        if (feof($this->fsock)) {
+            //user_error('connection closed prematurely');
+            return false;
+        }
+
+        $length = strlen($data) + 4;
+
+        $padding = crypt_random_string(8 - ($length & 7));
+
+        $orig = $data;
+        $data = $padding . $data;
+        $data.= pack('N', $this->_crc($data));
+
+        if ($this->crypto !== false) {
+            $data = $this->crypto->encrypt($data);
+        }
+
+        $packet = pack('Na*', $length, $data);
+
+        $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+        $result = strlen($packet) == fputs($this->fsock, $packet);
+        $stop = strtok(microtime(), ' ') + strtok('');
+
+        if (defined('NET_SSH1_LOGGING')) {
+            $temp = isset($this->protocol_flags[ord($orig[0])]) ? $this->protocol_flags[ord($orig[0])] : 'UNKNOWN';
+            $temp = '-> ' . $temp .
+                    ' (' . round($stop - $start, 4) . 's)';
+            $this->_append_log($temp, $orig);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Cyclic Redundancy Check (CRC)
+     *
+     * PHP's crc32 function is implemented slightly differently than the one that SSH v1 uses, so
+     * we've reimplemented it. A more detailed discussion of the differences can be found after
+     * $crc_lookup_table's initialization.
+     *
+     * @see Net_SSH1::_get_binary_packet()
+     * @see Net_SSH1::_send_binary_packet()
+     * @param String $data
+     * @return Integer
+     * @access private
+     */
+    function _crc($data)
+    {
+        static $crc_lookup_table = array(
+            0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
+            0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
+            0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
+            0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
+            0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
+            0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
+            0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
+            0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
+            0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
+            0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
+            0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
+            0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
+            0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
+            0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
+            0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
+            0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
+            0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
+            0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
+            0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
+            0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
+            0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
+            0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
+            0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
+            0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
+            0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
+            0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
+            0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
+            0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
+            0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
+            0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
+            0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
+            0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
+            0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
+            0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
+            0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
+            0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
+            0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
+            0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
+            0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
+            0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
+            0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
+            0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
+            0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
+            0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
+            0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
+            0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
+            0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
+            0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
+            0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
+            0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
+            0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
+            0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
+            0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
+            0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
+            0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
+            0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
+            0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
+            0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
+            0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
+            0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
+            0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
+            0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
+            0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
+            0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
+        );
+
+        // For this function to yield the same output as PHP's crc32 function, $crc would have to be
+        // set to 0xFFFFFFFF, initially - not 0x00000000 as it currently is.
+        $crc = 0x00000000;
+        $length = strlen($data);
+
+        for ($i=0;$i<$length;$i++) {
+            // We AND $crc >> 8 with 0x00FFFFFF because we want the eight newly added bits to all
+            // be zero.  PHP, unfortunately, doesn't always do this.  0x80000000 >> 8, as an example,
+            // yields 0xFF800000 - not 0x00800000.  The following link elaborates:
+            // http://www.php.net/manual/en/language.operators.bitwise.php#57281
+            $crc = (($crc >> 8) & 0x00FFFFFF) ^ $crc_lookup_table[($crc & 0xFF) ^ ord($data[$i])];
+        }
+
+        // In addition to having to set $crc to 0xFFFFFFFF, initially, the return value must be XOR'd with
+        // 0xFFFFFFFF for this function to return the same thing that PHP's crc32 function would.
+        return $crc;
+    }
+
+    /**
+     * String Shift
+     *
+     * Inspired by array_shift
+     *
+     * @param String $string
+     * @param optional Integer $index
+     * @return String
+     * @access private
+     */
+    function _string_shift(&$string, $index = 1)
+    {
+        $substr = substr($string, 0, $index);
+        $string = substr($string, $index);
+        return $substr;
+    }
+
+    /**
+     * RSA Encrypt
+     *
+     * Returns mod(pow($m, $e), $n), where $n should be the product of two (large) primes $p and $q and where $e
+     * should be a number with the property that gcd($e, ($p - 1) * ($q - 1)) == 1.  Could just make anything that
+     * calls this call modexp, instead, but I think this makes things clearer, maybe...
+     *
+     * @see Net_SSH1::Net_SSH1()
+     * @param Math_BigInteger $m
+     * @param Array $key
+     * @return Math_BigInteger
+     * @access private
+     */
+    function _rsa_crypt($m, $key)
+    {
+        /*
+        if (!class_exists('Crypt_RSA')) {
+            require_once('Crypt/RSA.php');
+        }
+
+        $rsa = new Crypt_RSA();
+        $rsa->loadKey($key, CRYPT_RSA_PUBLIC_FORMAT_RAW);
+        $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
+        return $rsa->encrypt($m);
+        */
+
+        // To quote from protocol-1.5.txt:
+        // The most significant byte (which is only partial as the value must be
+        // less than the public modulus, which is never a power of two) is zero.
+        //
+        // The next byte contains the value 2 (which stands for public-key
+        // encrypted data in the PKCS standard [PKCS#1]).  Then, there are non-
+        // zero random bytes to fill any unused space, a zero byte, and the data
+        // to be encrypted in the least significant bytes, the last byte of the
+        // data in the least significant byte.
+
+        // Presumably the part of PKCS#1 they're refering to is "Section 7.2.1 Encryption Operation",
+        // under "7.2 RSAES-PKCS1-v1.5" and "7 Encryption schemes" of the following URL:
+        // ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf
+        $modulus = $key[1]->toBytes();
+        $length = strlen($modulus) - strlen($m) - 3;
+        $random = '';
+        while (strlen($random) != $length) {
+            $block = crypt_random_string($length - strlen($random));
+            $block = str_replace("\x00", '', $block);
+            $random.= $block;
+        }
+        $temp = chr(0) . chr(2) . $random . chr(0) . $m;
+
+        $m = new Math_BigInteger($temp, 256);
+        $m = $m->modPow($key[0], $key[1]);
+
+        return $m->toBytes();
+    }
+
+    /**
+     * Define Array
+     *
+     * Takes any number of arrays whose indices are integers and whose values are strings and defines a bunch of
+     * named constants from it, using the value as the name of the constant and the index as the value of the constant.
+     * If any of the constants that would be defined already exists, none of the constants will be defined.
+     *
+     * @param Array $array
+     * @access private
+     */
+    function _define_array()
+    {
+        $args = func_get_args();
+        foreach ($args as $arg) {
+            foreach ($arg as $key=>$value) {
+                if (!defined($value)) {
+                    define($value, $key);
+                } else {
+                    break 2;
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns a log of the packets that have been sent and received.
+     *
+     * Returns a string if NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX, an array if NET_SSH2_LOGGING == NET_SSH2_LOG_SIMPLE and false if !defined('NET_SSH2_LOGGING')
+     *
+     * @access public
+     * @return String or Array
+     */
+    function getLog()
+    {
+        if (!defined('NET_SSH1_LOGGING')) {
+            return false;
+        }
+
+        switch (NET_SSH1_LOGGING) {
+            case NET_SSH1_LOG_SIMPLE:
+                return $this->message_number_log;
+                break;
+            case NET_SSH1_LOG_COMPLEX:
+                return $this->_format_log($this->message_log, $this->protocol_flags_log);
+                break;
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * Formats a log for printing
+     *
+     * @param Array $message_log
+     * @param Array $message_number_log
+     * @access private
+     * @return String
+     */
+    function _format_log($message_log, $message_number_log)
+    {
+        static $boundary = ':', $long_width = 65, $short_width = 16;
+
+        $output = '';
+        for ($i = 0; $i < count($message_log); $i++) {
+            $output.= $message_number_log[$i] . "\r\n";
+            $current_log = $message_log[$i];
+            $j = 0;
+            do {
+                if (strlen($current_log)) {
+                    $output.= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0  ';
+                }
+                $fragment = $this->_string_shift($current_log, $short_width);
+                $hex = substr(
+                           preg_replace(
+                               '#(.)#es',
+                               '"' . $boundary . '" . str_pad(dechex(ord(substr("\\1", -1))), 2, "0", STR_PAD_LEFT)',
+                               $fragment),
+                           strlen($boundary)
+                       );
+                // replace non ASCII printable characters with dots
+                // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
+                // also replace < with a . since < messes up the output on web browsers
+                $raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment);
+                $output.= str_pad($hex, $long_width - $short_width, ' ') . $raw . "\r\n";
+                $j++;
+            } while (strlen($current_log));
+            $output.= "\r\n";
+        }
+
+        return $output;
+    }
+
+    /**
+     * Return the server key public exponent
+     *
+     * Returns, by default, the base-10 representation.  If $raw_output is set to true, returns, instead,
+     * the raw bytes.  This behavior is similar to PHP's md5() function.
+     *
+     * @param optional Boolean $raw_output
+     * @return String
+     * @access public
+     */
+    function getServerKeyPublicExponent($raw_output = false)
+    {
+        return $raw_output ? $this->server_key_public_exponent->toBytes() : $this->server_key_public_exponent->toString();
+    }
+
+    /**
+     * Return the server key public modulus
+     *
+     * Returns, by default, the base-10 representation.  If $raw_output is set to true, returns, instead,
+     * the raw bytes.  This behavior is similar to PHP's md5() function.
+     *
+     * @param optional Boolean $raw_output
+     * @return String
+     * @access public
+     */
+    function getServerKeyPublicModulus($raw_output = false)
+    {
+        return $raw_output ? $this->server_key_public_modulus->toBytes() : $this->server_key_public_modulus->toString();
+    }
+
+    /**
+     * Return the host key public exponent
+     *
+     * Returns, by default, the base-10 representation.  If $raw_output is set to true, returns, instead,
+     * the raw bytes.  This behavior is similar to PHP's md5() function.
+     *
+     * @param optional Boolean $raw_output
+     * @return String
+     * @access public
+     */
+    function getHostKeyPublicExponent($raw_output = false)
+    {
+        return $raw_output ? $this->host_key_public_exponent->toBytes() : $this->host_key_public_exponent->toString();
+    }
+
+    /**
+     * Return the host key public modulus
+     *
+     * Returns, by default, the base-10 representation.  If $raw_output is set to true, returns, instead,
+     * the raw bytes.  This behavior is similar to PHP's md5() function.
+     *
+     * @param optional Boolean $raw_output
+     * @return String
+     * @access public
+     */
+    function getHostKeyPublicModulus($raw_output = false)
+    {
+        return $raw_output ? $this->host_key_public_modulus->toBytes() : $this->host_key_public_modulus->toString();
+    }
+
+    /**
+     * Return a list of ciphers supported by SSH1 server.
+     *
+     * Just because a cipher is supported by an SSH1 server doesn't mean it's supported by this library. If $raw_output
+     * is set to true, returns, instead, an array of constants.  ie. instead of array('Triple-DES in CBC mode'), you'll
+     * get array(NET_SSH1_CIPHER_3DES).
+     *
+     * @param optional Boolean $raw_output
+     * @return Array
+     * @access public
+     */
+    function getSupportedCiphers($raw_output = false)
+    {
+        return $raw_output ? array_keys($this->supported_ciphers) : array_values($this->supported_ciphers);
+    }
+
+    /**
+     * Return a list of authentications supported by SSH1 server.
+     *
+     * Just because a cipher is supported by an SSH1 server doesn't mean it's supported by this library. If $raw_output
+     * is set to true, returns, instead, an array of constants.  ie. instead of array('password authentication'), you'll
+     * get array(NET_SSH1_AUTH_PASSWORD).
+     *
+     * @param optional Boolean $raw_output
+     * @return Array
+     * @access public
+     */
+    function getSupportedAuthentications($raw_output = false)
+    {
+        return $raw_output ? array_keys($this->supported_authentications) : array_values($this->supported_authentications);
+    }
+
+    /**
+     * Return the server identification.
+     *
+     * @return String
+     * @access public
+     */
+    function getServerIdentification()
+    {
+        return rtrim($this->server_identification);
+    }
+
+    /**
+     * Logs data packets
+     *
+     * Makes sure that only the last 1MB worth of packets will be logged
+     *
+     * @param String $data
+     * @access private
+     */
+    function _append_log($protocol_flags, $message)
+    {
+            switch (NET_SSH1_LOGGING) {
+                // useful for benchmarks
+                case NET_SSH1_LOG_SIMPLE:
+                    $this->protocol_flags_log[] = $protocol_flags;
+                    break;
+                // the most useful log for SSH1
+                case NET_SSH1_LOG_COMPLEX:
+                    $this->protocol_flags_log[] = $protocol_flags;
+                    $this->_string_shift($message);
+                    $this->log_size+= strlen($message);
+                    $this->message_log[] = $message;
+                    while ($this->log_size > NET_SSH2_LOG_MAX_SIZE) {
+                        $this->log_size-= strlen(array_shift($this->message_log));
+                        array_shift($this->protocol_flags_log);
+                    }
+                    break;
+                // dump the output out realtime; packets may be interspersed with non packets,
+                // passwords won't be filtered out and select other packets may not be correctly
+                // identified
+                case NET_SSH1_LOG_REALTIME:
+                    echo "<pre>\r\n" . $this->_format_log(array($message), array($protocol_flags)) . "\r\n</pre>\r\n";
+                    @flush();
+                    @ob_flush();
+                    break;
+                // basically the same thing as NET_SSH1_LOG_REALTIME with the caveat that NET_SSH1_LOG_REALTIME_FILE
+                // needs to be defined and that the resultant log file will be capped out at NET_SSH1_LOG_MAX_SIZE. 
+                // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily
+                // at the beginning of the file
+                case NET_SSH1_LOG_REALTIME_FILE:
+                    if (!isset($this->realtime_log_file)) {
+                        // PHP doesn't seem to like using constants in fopen()
+                        $filename = NET_SSH2_LOG_REALTIME_FILE;
+                        $fp = fopen($filename, 'w');
+                        $this->realtime_log_file = $fp;
+                    }
+                    if (!is_resource($this->realtime_log_file)) {
+                        break;
+                    }
+                    $entry = $this->_format_log(array($message), array($protocol_flags));
+                    if ($this->realtime_log_wrap) {
+                        $temp = "<<< START >>>\r\n";
+                        $entry.= $temp;
+                        fseek($this->realtime_log_file, ftell($this->realtime_log_file) - strlen($temp));
+                    }
+                    $this->realtime_log_size+= strlen($entry);
+                    if ($this->realtime_log_size > NET_SSH1_LOG_MAX_SIZE) {
+                        fseek($this->realtime_log_file, 0);
+                        $this->realtime_log_size = strlen($entry);
+                        $this->realtime_log_wrap = true;
+                    }
+                    fputs($this->realtime_log_file, $entry);
+            }
+    }
+}
\ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php
new file mode 100644
index 0000000000000000000000000000000000000000..43bfbca2dbe17abbd111da70af3a6b61399acb71
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/Net/SSH2.php
@@ -0,0 +1,3009 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of SSHv2.
+ *
+ * PHP versions 4 and 5
+ *
+ * Here are some examples of how to use this library:
+ * <code>
+ * <?php
+ *    include('Net/SSH2.php');
+ *
+ *    $ssh = new Net_SSH2('www.domain.tld');
+ *    if (!$ssh->login('username', 'password')) {
+ *        exit('Login Failed');
+ *    }
+ *
+ *    echo $ssh->exec('pwd');
+ *    echo $ssh->exec('ls -la');
+ * ?>
+ * </code>
+ *
+ * <code>
+ * <?php
+ *    include('Crypt/RSA.php');
+ *    include('Net/SSH2.php');
+ *
+ *    $key = new Crypt_RSA();
+ *    //$key->setPassword('whatever');
+ *    $key->loadKey(file_get_contents('privatekey'));
+ *
+ *    $ssh = new Net_SSH2('www.domain.tld');
+ *    if (!$ssh->login('username', $key)) {
+ *        exit('Login Failed');
+ *    }
+ *
+ *    echo $ssh->read('username@username:~$');
+ *    $ssh->write("ls -la\n");
+ *    echo $ssh->read('username@username:~$');
+ * ?>
+ * </code>
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @category   Net
+ * @package    Net_SSH2
+ * @author     Jim Wigginton <terrafrost@php.net>
+ * @copyright  MMVII Jim Wigginton
+ * @license    http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @version    $Id: SSH2.php,v 1.53 2010-10-24 01:24:30 terrafrost Exp $
+ * @link       http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Math_BigInteger
+ *
+ * Used to do Diffie-Hellman key exchange and DSA/RSA signature verification.
+ */
+if (!class_exists('Math_BigInteger')) {
+    require_once('Math/BigInteger.php');
+}
+
+/**
+ * Include Crypt_Random
+ */
+// the class_exists() will only be called if the crypt_random_string function hasn't been defined and
+// will trigger a call to __autoload() if you're wanting to auto-load classes
+// call function_exists() a second time to stop the require_once from being called outside
+// of the auto loader
+if (!function_exists('crypt_random_string') && !class_exists('Crypt_Random') && !function_exists('crypt_random_string')) {
+    require_once('Crypt/Random.php');
+}
+
+/**
+ * Include Crypt_Hash
+ */
+if (!class_exists('Crypt_Hash')) {
+    require_once('Crypt/Hash.php');
+}
+
+/**
+ * Include Crypt_TripleDES
+ */
+if (!class_exists('Crypt_TripleDES')) {
+    require_once('Crypt/TripleDES.php');
+}
+
+/**
+ * Include Crypt_RC4
+ */
+if (!class_exists('Crypt_RC4')) {
+    require_once('Crypt/RC4.php');
+}
+
+/**
+ * Include Crypt_AES
+ */
+if (!class_exists('Crypt_AES')) {
+    require_once('Crypt/AES.php');
+}
+
+/**#@+
+ * Execution Bitmap Masks
+ *
+ * @see Net_SSH2::bitmap
+ * @access private
+ */
+define('NET_SSH2_MASK_CONSTRUCTOR', 0x00000001);
+define('NET_SSH2_MASK_LOGIN',       0x00000002);
+define('NET_SSH2_MASK_SHELL',       0x00000004);
+/**#@-*/
+
+/**#@+
+ * Channel constants
+ *
+ * RFC4254 refers not to client and server channels but rather to sender and recipient channels.  we don't refer
+ * to them in that way because RFC4254 toggles the meaning. the client sends a SSH_MSG_CHANNEL_OPEN message with
+ * a sender channel and the server sends a SSH_MSG_CHANNEL_OPEN_CONFIRMATION in response, with a sender and a
+ * recepient channel.  at first glance, you might conclude that SSH_MSG_CHANNEL_OPEN_CONFIRMATION's sender channel
+ * would be the same thing as SSH_MSG_CHANNEL_OPEN's sender channel, but it's not, per this snipet:
+ *     The 'recipient channel' is the channel number given in the original
+ *     open request, and 'sender channel' is the channel number allocated by
+ *     the other side.
+ *
+ * @see Net_SSH2::_send_channel_packet()
+ * @see Net_SSH2::_get_channel_packet()
+ * @access private
+ */
+define('NET_SSH2_CHANNEL_EXEC', 0); // PuTTy uses 0x100
+define('NET_SSH2_CHANNEL_SHELL',1);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Net_SSH2::getLog()
+ */
+/**
+ * Returns the message numbers
+ */
+define('NET_SSH2_LOG_SIMPLE',  1);
+/**
+ * Returns the message content
+ */
+define('NET_SSH2_LOG_COMPLEX', 2);
+/**
+ * Outputs the content real-time
+ */
+define('NET_SSH2_LOG_REALTIME', 3);
+/**
+ * Dumps the content real-time to a file
+ */
+define('NET_SSH2_LOG_REALTIME_FILE', 4);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Net_SSH2::read()
+ */
+/**
+ * Returns when a string matching $expect exactly is found
+ */
+define('NET_SSH2_READ_SIMPLE',  1);
+/**
+ * Returns when a string matching the regular expression $expect is found
+ */
+define('NET_SSH2_READ_REGEX', 2);
+/**
+ * Make sure that the log never gets larger than this
+ */
+define('NET_SSH2_LOG_MAX_SIZE', 1024 * 1024);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of SSHv2.
+ *
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access  public
+ * @package Net_SSH2
+ */
+class Net_SSH2 {
+    /**
+     * The SSH identifier
+     *
+     * @var String
+     * @access private
+     */
+    var $identifier = 'SSH-2.0-phpseclib_0.3';
+
+    /**
+     * The Socket Object
+     *
+     * @var Object
+     * @access private
+     */
+    var $fsock;
+
+    /**
+     * Execution Bitmap
+     *
+     * The bits that are set represent functions that have been called already.  This is used to determine
+     * if a requisite function has been successfully executed.  If not, an error should be thrown.
+     *
+     * @var Integer
+     * @access private
+     */
+    var $bitmap = 0;
+
+    /**
+     * Error information
+     *
+     * @see Net_SSH2::getErrors()
+     * @see Net_SSH2::getLastError()
+     * @var String
+     * @access private
+     */
+    var $errors = array();
+
+    /**
+     * Server Identifier
+     *
+     * @see Net_SSH2::getServerIdentification()
+     * @var String
+     * @access private
+     */
+    var $server_identifier = '';
+
+    /**
+     * Key Exchange Algorithms
+     *
+     * @see Net_SSH2::getKexAlgorithims()
+     * @var Array
+     * @access private
+     */
+    var $kex_algorithms;
+
+    /**
+     * Server Host Key Algorithms
+     *
+     * @see Net_SSH2::getServerHostKeyAlgorithms()
+     * @var Array
+     * @access private
+     */
+    var $server_host_key_algorithms;
+
+    /**
+     * Encryption Algorithms: Client to Server
+     *
+     * @see Net_SSH2::getEncryptionAlgorithmsClient2Server()
+     * @var Array
+     * @access private
+     */
+    var $encryption_algorithms_client_to_server;
+
+    /**
+     * Encryption Algorithms: Server to Client
+     *
+     * @see Net_SSH2::getEncryptionAlgorithmsServer2Client()
+     * @var Array
+     * @access private
+     */
+    var $encryption_algorithms_server_to_client;
+
+    /**
+     * MAC Algorithms: Client to Server
+     *
+     * @see Net_SSH2::getMACAlgorithmsClient2Server()
+     * @var Array
+     * @access private
+     */
+    var $mac_algorithms_client_to_server;
+
+    /**
+     * MAC Algorithms: Server to Client
+     *
+     * @see Net_SSH2::getMACAlgorithmsServer2Client()
+     * @var Array
+     * @access private
+     */
+    var $mac_algorithms_server_to_client;
+
+    /**
+     * Compression Algorithms: Client to Server
+     *
+     * @see Net_SSH2::getCompressionAlgorithmsClient2Server()
+     * @var Array
+     * @access private
+     */
+    var $compression_algorithms_client_to_server;
+
+    /**
+     * Compression Algorithms: Server to Client
+     *
+     * @see Net_SSH2::getCompressionAlgorithmsServer2Client()
+     * @var Array
+     * @access private
+     */
+    var $compression_algorithms_server_to_client;
+
+    /**
+     * Languages: Server to Client
+     *
+     * @see Net_SSH2::getLanguagesServer2Client()
+     * @var Array
+     * @access private
+     */
+    var $languages_server_to_client;
+
+    /**
+     * Languages: Client to Server
+     *
+     * @see Net_SSH2::getLanguagesClient2Server()
+     * @var Array
+     * @access private
+     */
+    var $languages_client_to_server;
+
+    /**
+     * Block Size for Server to Client Encryption
+     *
+     * "Note that the length of the concatenation of 'packet_length',
+     *  'padding_length', 'payload', and 'random padding' MUST be a multiple
+     *  of the cipher block size or 8, whichever is larger.  This constraint
+     *  MUST be enforced, even when using stream ciphers."
+     *
+     *  -- http://tools.ietf.org/html/rfc4253#section-6
+     *
+     * @see Net_SSH2::Net_SSH2()
+     * @see Net_SSH2::_send_binary_packet()
+     * @var Integer
+     * @access private
+     */
+    var $encrypt_block_size = 8;
+
+    /**
+     * Block Size for Client to Server Encryption
+     *
+     * @see Net_SSH2::Net_SSH2()
+     * @see Net_SSH2::_get_binary_packet()
+     * @var Integer
+     * @access private
+     */
+    var $decrypt_block_size = 8;
+
+    /**
+     * Server to Client Encryption Object
+     *
+     * @see Net_SSH2::_get_binary_packet()
+     * @var Object
+     * @access private
+     */
+    var $decrypt = false;
+
+    /**
+     * Client to Server Encryption Object
+     *
+     * @see Net_SSH2::_send_binary_packet()
+     * @var Object
+     * @access private
+     */
+    var $encrypt = false;
+
+    /**
+     * Client to Server HMAC Object
+     *
+     * @see Net_SSH2::_send_binary_packet()
+     * @var Object
+     * @access private
+     */
+    var $hmac_create = false;
+
+    /**
+     * Server to Client HMAC Object
+     *
+     * @see Net_SSH2::_get_binary_packet()
+     * @var Object
+     * @access private
+     */
+    var $hmac_check = false;
+
+    /**
+     * Size of server to client HMAC
+     *
+     * We need to know how big the HMAC will be for the server to client direction so that we know how many bytes to read.
+     * For the client to server side, the HMAC object will make the HMAC as long as it needs to be.  All we need to do is
+     * append it.
+     *
+     * @see Net_SSH2::_get_binary_packet()
+     * @var Integer
+     * @access private
+     */
+    var $hmac_size = false;
+
+    /**
+     * Server Public Host Key
+     *
+     * @see Net_SSH2::getServerPublicHostKey()
+     * @var String
+     * @access private
+     */
+    var $server_public_host_key;
+
+    /**
+     * Session identifer
+     *
+     * "The exchange hash H from the first key exchange is additionally
+     *  used as the session identifier, which is a unique identifier for
+     *  this connection."
+     *
+     *  -- http://tools.ietf.org/html/rfc4253#section-7.2
+     *
+     * @see Net_SSH2::_key_exchange()
+     * @var String
+     * @access private
+     */
+    var $session_id = false;
+
+    /**
+     * Exchange hash
+     *
+     * The current exchange hash
+     *
+     * @see Net_SSH2::_key_exchange()
+     * @var String
+     * @access private
+     */
+    var $exchange_hash = false;
+
+    /**
+     * Message Numbers
+     *
+     * @see Net_SSH2::Net_SSH2()
+     * @var Array
+     * @access private
+     */
+    var $message_numbers = array();
+
+    /**
+     * Disconnection Message 'reason codes' defined in RFC4253
+     *
+     * @see Net_SSH2::Net_SSH2()
+     * @var Array
+     * @access private
+     */
+    var $disconnect_reasons = array();
+
+    /**
+     * SSH_MSG_CHANNEL_OPEN_FAILURE 'reason codes', defined in RFC4254
+     *
+     * @see Net_SSH2::Net_SSH2()
+     * @var Array
+     * @access private
+     */
+    var $channel_open_failure_reasons = array();
+
+    /**
+     * Terminal Modes
+     *
+     * @link http://tools.ietf.org/html/rfc4254#section-8
+     * @see Net_SSH2::Net_SSH2()
+     * @var Array
+     * @access private
+     */
+    var $terminal_modes = array();
+
+    /**
+     * SSH_MSG_CHANNEL_EXTENDED_DATA's data_type_codes
+     *
+     * @link http://tools.ietf.org/html/rfc4254#section-5.2
+     * @see Net_SSH2::Net_SSH2()
+     * @var Array
+     * @access private
+     */
+    var $channel_extended_data_type_codes = array();
+
+    /**
+     * Send Sequence Number
+     *
+     * See 'Section 6.4.  Data Integrity' of rfc4253 for more info.
+     *
+     * @see Net_SSH2::_send_binary_packet()
+     * @var Integer
+     * @access private
+     */
+    var $send_seq_no = 0;
+
+    /**
+     * Get Sequence Number
+     *
+     * See 'Section 6.4.  Data Integrity' of rfc4253 for more info.
+     *
+     * @see Net_SSH2::_get_binary_packet()
+     * @var Integer
+     * @access private
+     */
+    var $get_seq_no = 0;
+
+    /**
+     * Server Channels
+     *
+     * Maps client channels to server channels
+     *
+     * @see Net_SSH2::_get_channel_packet()
+     * @see Net_SSH2::exec()
+     * @var Array
+     * @access private
+     */
+    var $server_channels = array();
+
+    /**
+     * Channel Buffers
+     *
+     * If a client requests a packet from one channel but receives two packets from another those packets should
+     * be placed in a buffer
+     *
+     * @see Net_SSH2::_get_channel_packet()
+     * @see Net_SSH2::exec()
+     * @var Array
+     * @access private
+     */
+    var $channel_buffers = array();
+
+    /**
+     * Channel Status
+     *
+     * Contains the type of the last sent message
+     *
+     * @see Net_SSH2::_get_channel_packet()
+     * @var Array
+     * @access private
+     */
+    var $channel_status = array();
+
+    /**
+     * Packet Size
+     *
+     * Maximum packet size indexed by channel
+     *
+     * @see Net_SSH2::_send_channel_packet()
+     * @var Array
+     * @access private
+     */
+    var $packet_size_client_to_server = array();
+
+    /**
+     * Message Number Log
+     *
+     * @see Net_SSH2::getLog()
+     * @var Array
+     * @access private
+     */
+    var $message_number_log = array();
+
+    /**
+     * Message Log
+     *
+     * @see Net_SSH2::getLog()
+     * @var Array
+     * @access private
+     */
+    var $message_log = array();
+
+    /**
+     * The Window Size
+     *
+     * Bytes the other party can send before it must wait for the window to be adjusted (0x7FFFFFFF = 4GB)
+     *
+     * @var Integer
+     * @see Net_SSH2::_send_channel_packet()
+     * @see Net_SSH2::exec()
+     * @access private
+     */
+    var $window_size = 0x7FFFFFFF;
+
+    /**
+     * Window size
+     *
+     * Window size indexed by channel
+     *
+     * @see Net_SSH2::_send_channel_packet()
+     * @var Array
+     * @access private
+     */
+    var $window_size_client_to_server = array();
+
+    /**
+     * Server signature
+     *
+     * Verified against $this->session_id
+     *
+     * @see Net_SSH2::getServerPublicHostKey()
+     * @var String
+     * @access private
+     */
+    var $signature = '';
+
+    /**
+     * Server signature format
+     *
+     * ssh-rsa or ssh-dss.
+     *
+     * @see Net_SSH2::getServerPublicHostKey()
+     * @var String
+     * @access private
+     */
+    var $signature_format = '';
+
+    /**
+     * Interactive Buffer
+     *
+     * @see Net_SSH2::read()
+     * @var Array
+     * @access private
+     */
+    var $interactiveBuffer = '';
+
+    /**
+     * Current log size
+     *
+     * Should never exceed NET_SSH2_LOG_MAX_SIZE
+     *
+     * @see Net_SSH2::_send_binary_packet()
+     * @see Net_SSH2::_get_binary_packet()
+     * @var Integer
+     * @access private
+     */
+    var $log_size;
+
+    /**
+     * Timeout
+     *
+     * @see Net_SSH2::setTimeout()
+     * @access private
+     */
+    var $timeout;
+
+    /**
+     * Current Timeout
+     *
+     * @see Net_SSH2::_get_channel_packet()
+     * @access private
+     */
+    var $curTimeout;
+
+    /**
+     * Real-time log file pointer
+     *
+     * @see Net_SSH2::_append_log()
+     * @var Resource
+     * @access private
+     */
+    var $realtime_log_file;
+
+    /**
+     * Real-time log file size
+     *
+     * @see Net_SSH2::_append_log()
+     * @var Integer
+     * @access private
+     */
+    var $realtime_log_size;
+
+    /**
+     * Has the signature been validated?
+     *
+     * @see Net_SSH2::getServerPublicHostKey()
+     * @var Boolean
+     * @access private
+     */
+    var $signature_validated = false;
+
+    /**
+     * Real-time log file wrap boolean
+     *
+     * @see Net_SSH2::_append_log()
+     * @access private
+     */
+    var $realtime_log_wrap;
+
+    /**
+     * Flag to suppress stderr from output
+     *
+     * @see Net_SSH2::enableQuietMode()
+     * @access private
+     */
+    var $quiet_mode = false;
+
+    /**
+     * Time of first network activity
+     *
+     * @access private
+     */
+    var $last_packet;
+
+    /**
+     * Exit status returned from ssh if any
+     *
+     * @var Integer
+     * @access private
+     */
+    var $exit_status;
+
+    /**
+     * Default Constructor.
+     *
+     * Connects to an SSHv2 server
+     *
+     * @param String $host
+     * @param optional Integer $port
+     * @param optional Integer $timeout
+     * @return Net_SSH2
+     * @access public
+     */
+    function Net_SSH2($host, $port = 22, $timeout = 10)
+    {
+        $this->last_packet = strtok(microtime(), ' ') + strtok(''); // == microtime(true) in PHP5
+        $this->message_numbers = array(
+            1 => 'NET_SSH2_MSG_DISCONNECT',
+            2 => 'NET_SSH2_MSG_IGNORE',
+            3 => 'NET_SSH2_MSG_UNIMPLEMENTED',
+            4 => 'NET_SSH2_MSG_DEBUG',
+            5 => 'NET_SSH2_MSG_SERVICE_REQUEST',
+            6 => 'NET_SSH2_MSG_SERVICE_ACCEPT',
+            20 => 'NET_SSH2_MSG_KEXINIT',
+            21 => 'NET_SSH2_MSG_NEWKEYS',
+            30 => 'NET_SSH2_MSG_KEXDH_INIT',
+            31 => 'NET_SSH2_MSG_KEXDH_REPLY',
+            50 => 'NET_SSH2_MSG_USERAUTH_REQUEST',
+            51 => 'NET_SSH2_MSG_USERAUTH_FAILURE',
+            52 => 'NET_SSH2_MSG_USERAUTH_SUCCESS',
+            53 => 'NET_SSH2_MSG_USERAUTH_BANNER',
+
+            80 => 'NET_SSH2_MSG_GLOBAL_REQUEST',
+            81 => 'NET_SSH2_MSG_REQUEST_SUCCESS',
+            82 => 'NET_SSH2_MSG_REQUEST_FAILURE',
+            90 => 'NET_SSH2_MSG_CHANNEL_OPEN',
+            91 => 'NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION',
+            92 => 'NET_SSH2_MSG_CHANNEL_OPEN_FAILURE',
+            93 => 'NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST',
+            94 => 'NET_SSH2_MSG_CHANNEL_DATA',
+            95 => 'NET_SSH2_MSG_CHANNEL_EXTENDED_DATA',
+            96 => 'NET_SSH2_MSG_CHANNEL_EOF',
+            97 => 'NET_SSH2_MSG_CHANNEL_CLOSE',
+            98 => 'NET_SSH2_MSG_CHANNEL_REQUEST',
+            99 => 'NET_SSH2_MSG_CHANNEL_SUCCESS',
+            100 => 'NET_SSH2_MSG_CHANNEL_FAILURE'
+        );
+        $this->disconnect_reasons = array(
+            1 => 'NET_SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT',
+            2 => 'NET_SSH2_DISCONNECT_PROTOCOL_ERROR',
+            3 => 'NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED',
+            4 => 'NET_SSH2_DISCONNECT_RESERVED',
+            5 => 'NET_SSH2_DISCONNECT_MAC_ERROR',
+            6 => 'NET_SSH2_DISCONNECT_COMPRESSION_ERROR',
+            7 => 'NET_SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE',
+            8 => 'NET_SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED',
+            9 => 'NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE',
+            10 => 'NET_SSH2_DISCONNECT_CONNECTION_LOST',
+            11 => 'NET_SSH2_DISCONNECT_BY_APPLICATION',
+            12 => 'NET_SSH2_DISCONNECT_TOO_MANY_CONNECTIONS',
+            13 => 'NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER',
+            14 => 'NET_SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE',
+            15 => 'NET_SSH2_DISCONNECT_ILLEGAL_USER_NAME'
+        );
+        $this->channel_open_failure_reasons = array(
+            1 => 'NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED'
+        );
+        $this->terminal_modes = array(
+            0 => 'NET_SSH2_TTY_OP_END'
+        );
+        $this->channel_extended_data_type_codes = array(
+            1 => 'NET_SSH2_EXTENDED_DATA_STDERR'
+        );
+
+        $this->_define_array(
+            $this->message_numbers,
+            $this->disconnect_reasons,
+            $this->channel_open_failure_reasons,
+            $this->terminal_modes,
+            $this->channel_extended_data_type_codes,
+            array(60 => 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ'),
+            array(60 => 'NET_SSH2_MSG_USERAUTH_PK_OK'),
+            array(60 => 'NET_SSH2_MSG_USERAUTH_INFO_REQUEST',
+                  61 => 'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE')
+        );
+
+        $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+        $this->fsock = @fsockopen($host, $port, $errno, $errstr, $timeout);
+        if (!$this->fsock) {
+            user_error(rtrim("Cannot connect to $host. Error $errno. $errstr"));
+            return;
+        }
+        $elapsed = strtok(microtime(), ' ') + strtok('') - $start;
+
+        $timeout-= $elapsed;
+
+        if ($timeout <= 0) {
+            user_error(rtrim("Cannot connect to $host. Timeout error"));
+            return;
+        }
+
+        $read = array($this->fsock);
+        $write = $except = NULL;
+
+        $sec = floor($timeout);
+        $usec = 1000000 * ($timeout - $sec);
+
+        // on windows this returns a "Warning: Invalid CRT parameters detected" error
+        // the !count() is done as a workaround for <https://bugs.php.net/42682>
+        if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) {
+            user_error(rtrim("Cannot connect to $host. Banner timeout"));
+            return;
+        }
+
+        /* According to the SSH2 specs,
+
+          "The server MAY send other lines of data before sending the version
+           string.  Each line SHOULD be terminated by a Carriage Return and Line
+           Feed.  Such lines MUST NOT begin with "SSH-", and SHOULD be encoded
+           in ISO-10646 UTF-8 [RFC3629] (language is not specified).  Clients
+           MUST be able to process such lines." */
+        $temp = '';
+        $extra = '';
+        while (!feof($this->fsock) && !preg_match('#^SSH-(\d\.\d+)#', $temp, $matches)) {
+            if (substr($temp, -2) == "\r\n") {
+                $extra.= $temp;
+                $temp = '';
+            }
+            $temp.= fgets($this->fsock, 255);
+        }
+
+        if (feof($this->fsock)) {
+            user_error('Connection closed by server');
+            return false;
+        }
+
+        $ext = array();
+        if (extension_loaded('mcrypt')) {
+            $ext[] = 'mcrypt';
+        }
+        if (extension_loaded('gmp')) {
+            $ext[] = 'gmp';
+        } else if (extension_loaded('bcmath')) {
+            $ext[] = 'bcmath';
+        }
+
+        if (!empty($ext)) {
+            $this->identifier.= ' (' . implode(', ', $ext) . ')';
+        }
+
+        if (defined('NET_SSH2_LOGGING')) {
+            $this->_append_log('<-', $extra . $temp);
+            $this->_append_log('->', $this->identifier . "\r\n");
+        }
+
+        $this->server_identifier = trim($temp, "\r\n");
+        if (strlen($extra)) {
+            $this->errors[] = utf8_decode($extra);
+        }
+
+        if ($matches[1] != '1.99' && $matches[1] != '2.0') {
+            user_error("Cannot connect to SSH $matches[1] servers");
+            return;
+        }
+
+        fputs($this->fsock, $this->identifier . "\r\n");
+
+        $response = $this->_get_binary_packet();
+        if ($response === false) {
+            user_error('Connection closed by server');
+            return;
+        }
+
+        if (ord($response[0]) != NET_SSH2_MSG_KEXINIT) {
+            user_error('Expected SSH_MSG_KEXINIT');
+            return;
+        }
+
+        if (!$this->_key_exchange($response)) {
+            return;
+        }
+
+        $this->bitmap = NET_SSH2_MASK_CONSTRUCTOR;
+    }
+
+    /**
+     * Key Exchange
+     *
+     * @param String $kexinit_payload_server
+     * @access private
+     */
+    function _key_exchange($kexinit_payload_server)
+    {
+        static $kex_algorithms = array(
+            'diffie-hellman-group1-sha1', // REQUIRED
+            'diffie-hellman-group14-sha1' // REQUIRED
+        );
+
+        static $server_host_key_algorithms = array(
+            'ssh-rsa', // RECOMMENDED  sign   Raw RSA Key
+            'ssh-dss'  // REQUIRED     sign   Raw DSS Key
+        );
+
+        static $encryption_algorithms = array(
+            // from <http://tools.ietf.org/html/rfc4345#section-4>:
+            'arcfour256',
+            'arcfour128',
+
+            'arcfour',    // OPTIONAL          the ARCFOUR stream cipher with a 128-bit key
+
+            'aes128-cbc', // RECOMMENDED       AES with a 128-bit key
+            'aes192-cbc', // OPTIONAL          AES with a 192-bit key
+            'aes256-cbc', // OPTIONAL          AES in CBC mode, with a 256-bit key
+
+            // from <http://tools.ietf.org/html/rfc4344#section-4>:
+            'aes128-ctr', // RECOMMENDED       AES (Rijndael) in SDCTR mode, with 128-bit key
+            'aes192-ctr', // RECOMMENDED       AES with 192-bit key
+            'aes256-ctr', // RECOMMENDED       AES with 256-bit key
+            '3des-ctr',   // RECOMMENDED       Three-key 3DES in SDCTR mode
+
+            '3des-cbc',   // REQUIRED          three-key 3DES in CBC mode
+            'none'        // OPTIONAL          no encryption; NOT RECOMMENDED
+        );
+
+        static $mac_algorithms = array(
+            'hmac-sha1-96', // RECOMMENDED     first 96 bits of HMAC-SHA1 (digest length = 12, key length = 20)
+            'hmac-sha1',    // REQUIRED        HMAC-SHA1 (digest length = key length = 20)
+            'hmac-md5-96',  // OPTIONAL        first 96 bits of HMAC-MD5 (digest length = 12, key length = 16)
+            'hmac-md5',     // OPTIONAL        HMAC-MD5 (digest length = key length = 16)
+            'none'          // OPTIONAL        no MAC; NOT RECOMMENDED
+        );
+
+        static $compression_algorithms = array(
+            'none'   // REQUIRED        no compression
+            //'zlib' // OPTIONAL        ZLIB (LZ77) compression
+        );
+
+        // some SSH servers have buggy implementations of some of the above algorithms
+        switch ($this->server_identifier) {
+            case 'SSH-2.0-SSHD':
+                $mac_algorithms = array_values(array_diff(
+                    $mac_algorithms,
+                    array('hmac-sha1-96', 'hmac-md5-96')
+                ));
+        }
+
+        static $str_kex_algorithms, $str_server_host_key_algorithms,
+               $encryption_algorithms_server_to_client, $mac_algorithms_server_to_client, $compression_algorithms_server_to_client,
+               $encryption_algorithms_client_to_server, $mac_algorithms_client_to_server, $compression_algorithms_client_to_server;
+
+        if (empty($str_kex_algorithms)) {
+            $str_kex_algorithms = implode(',', $kex_algorithms);
+            $str_server_host_key_algorithms = implode(',', $server_host_key_algorithms);
+            $encryption_algorithms_server_to_client = $encryption_algorithms_client_to_server = implode(',', $encryption_algorithms);
+            $mac_algorithms_server_to_client = $mac_algorithms_client_to_server = implode(',', $mac_algorithms);
+            $compression_algorithms_server_to_client = $compression_algorithms_client_to_server = implode(',', $compression_algorithms);
+        }
+
+        $client_cookie = crypt_random_string(16);
+
+        $response = $kexinit_payload_server;
+        $this->_string_shift($response, 1); // skip past the message number (it should be SSH_MSG_KEXINIT)
+        $server_cookie = $this->_string_shift($response, 16);
+
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->kex_algorithms = explode(',', $this->_string_shift($response, $temp['length']));
+
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->server_host_key_algorithms = explode(',', $this->_string_shift($response, $temp['length']));
+
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->encryption_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->encryption_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->mac_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->mac_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->compression_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->compression_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->languages_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->languages_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+
+        extract(unpack('Cfirst_kex_packet_follows', $this->_string_shift($response, 1)));
+        $first_kex_packet_follows = $first_kex_packet_follows != 0;
+
+        // the sending of SSH2_MSG_KEXINIT could go in one of two places.  this is the second place.
+        $kexinit_payload_client = pack('Ca*Na*Na*Na*Na*Na*Na*Na*Na*Na*Na*CN',
+            NET_SSH2_MSG_KEXINIT, $client_cookie, strlen($str_kex_algorithms), $str_kex_algorithms,
+            strlen($str_server_host_key_algorithms), $str_server_host_key_algorithms, strlen($encryption_algorithms_client_to_server),
+            $encryption_algorithms_client_to_server, strlen($encryption_algorithms_server_to_client), $encryption_algorithms_server_to_client,
+            strlen($mac_algorithms_client_to_server), $mac_algorithms_client_to_server, strlen($mac_algorithms_server_to_client),
+            $mac_algorithms_server_to_client, strlen($compression_algorithms_client_to_server), $compression_algorithms_client_to_server,
+            strlen($compression_algorithms_server_to_client), $compression_algorithms_server_to_client, 0, '', 0, '',
+            0, 0
+        );
+
+        if (!$this->_send_binary_packet($kexinit_payload_client)) {
+            return false;
+        }
+        // here ends the second place.
+
+        // we need to decide upon the symmetric encryption algorithms before we do the diffie-hellman key exchange
+        for ($i = 0; $i < count($encryption_algorithms) && !in_array($encryption_algorithms[$i], $this->encryption_algorithms_server_to_client); $i++);
+        if ($i == count($encryption_algorithms)) {
+            user_error('No compatible server to client encryption algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+
+        // we don't initialize any crypto-objects, yet - we do that, later. for now, we need the lengths to make the
+        // diffie-hellman key exchange as fast as possible
+        $decrypt = $encryption_algorithms[$i];
+        switch ($decrypt) {
+            case '3des-cbc':
+            case '3des-ctr':
+                $decryptKeyLength = 24; // eg. 192 / 8
+                break;
+            case 'aes256-cbc':
+            case 'aes256-ctr':
+                $decryptKeyLength = 32; // eg. 256 / 8
+                break;
+            case 'aes192-cbc':
+            case 'aes192-ctr':
+                $decryptKeyLength = 24; // eg. 192 / 8
+                break;
+            case 'aes128-cbc':
+            case 'aes128-ctr':
+                $decryptKeyLength = 16; // eg. 128 / 8
+                break;
+            case 'arcfour':
+            case 'arcfour128':
+                $decryptKeyLength = 16; // eg. 128 / 8
+                break;
+            case 'arcfour256':
+                $decryptKeyLength = 32; // eg. 128 / 8
+                break;
+            case 'none';
+                $decryptKeyLength = 0;
+        }
+
+        for ($i = 0; $i < count($encryption_algorithms) && !in_array($encryption_algorithms[$i], $this->encryption_algorithms_client_to_server); $i++);
+        if ($i == count($encryption_algorithms)) {
+            user_error('No compatible client to server encryption algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+
+        $encrypt = $encryption_algorithms[$i];
+        switch ($encrypt) {
+            case '3des-cbc':
+            case '3des-ctr':
+                $encryptKeyLength = 24;
+                break;
+            case 'aes256-cbc':
+            case 'aes256-ctr':
+                $encryptKeyLength = 32;
+                break;
+            case 'aes192-cbc':
+            case 'aes192-ctr':
+                $encryptKeyLength = 24;
+                break;
+            case 'aes128-cbc':
+            case 'aes128-ctr':
+                $encryptKeyLength = 16;
+                break;
+            case 'arcfour':
+            case 'arcfour128':
+                $encryptKeyLength = 16;
+                break;
+            case 'arcfour256':
+                $encryptKeyLength = 32;
+                break;
+            case 'none';
+                $encryptKeyLength = 0;
+        }
+
+        $keyLength = $decryptKeyLength > $encryptKeyLength ? $decryptKeyLength : $encryptKeyLength;
+
+        // through diffie-hellman key exchange a symmetric key is obtained
+        for ($i = 0; $i < count($kex_algorithms) && !in_array($kex_algorithms[$i], $this->kex_algorithms); $i++);
+        if ($i == count($kex_algorithms)) {
+            user_error('No compatible key exchange algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+
+        switch ($kex_algorithms[$i]) {
+            // see http://tools.ietf.org/html/rfc2409#section-6.2 and 
+            // http://tools.ietf.org/html/rfc2412, appendex E
+            case 'diffie-hellman-group1-sha1':
+                $p = pack('H256', 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' . 
+                                  '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' . 
+                                  '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' . 
+                                  'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF');
+                $keyLength = $keyLength < 160 ? $keyLength : 160;
+                $hash = 'sha1';
+                break;
+            // see http://tools.ietf.org/html/rfc3526#section-3
+            case 'diffie-hellman-group14-sha1':
+                $p = pack('H512', 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' . 
+                                  '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' . 
+                                  '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' . 
+                                  'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' . 
+                                  '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' . 
+                                  '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' . 
+                                  'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' . 
+                                  '3995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF');
+                $keyLength = $keyLength < 160 ? $keyLength : 160;
+                $hash = 'sha1';
+        }
+
+        $p = new Math_BigInteger($p, 256);
+        //$q = $p->bitwise_rightShift(1);
+
+        /* To increase the speed of the key exchange, both client and server may
+           reduce the size of their private exponents.  It should be at least
+           twice as long as the key material that is generated from the shared
+           secret.  For more details, see the paper by van Oorschot and Wiener
+           [VAN-OORSCHOT].
+
+           -- http://tools.ietf.org/html/rfc4419#section-6.2 */
+        $q = new Math_BigInteger(1);
+        $q = $q->bitwise_leftShift(2 * $keyLength);
+        $q = $q->subtract(new Math_BigInteger(1));
+
+        $g = new Math_BigInteger(2);
+        $x = new Math_BigInteger();
+        $x = $x->random(new Math_BigInteger(1), $q);
+        $e = $g->modPow($x, $p);
+
+        $eBytes = $e->toBytes(true);
+        $data = pack('CNa*', NET_SSH2_MSG_KEXDH_INIT, strlen($eBytes), $eBytes);
+
+        if (!$this->_send_binary_packet($data)) {
+            user_error('Connection closed by server');
+            return false;
+        }
+
+        $response = $this->_get_binary_packet();
+        if ($response === false) {
+            user_error('Connection closed by server');
+            return false;
+        }
+        extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+        if ($type != NET_SSH2_MSG_KEXDH_REPLY) {
+            user_error('Expected SSH_MSG_KEXDH_REPLY');
+            return false;
+        }
+
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->server_public_host_key = $server_public_host_key = $this->_string_shift($response, $temp['length']);
+
+        $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
+        $public_key_format = $this->_string_shift($server_public_host_key, $temp['length']);
+
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $fBytes = $this->_string_shift($response, $temp['length']);
+        $f = new Math_BigInteger($fBytes, -256);
+
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->signature = $this->_string_shift($response, $temp['length']);
+
+        $temp = unpack('Nlength', $this->_string_shift($this->signature, 4));
+        $this->signature_format = $this->_string_shift($this->signature, $temp['length']);
+
+        $key = $f->modPow($x, $p);
+        $keyBytes = $key->toBytes(true);
+
+        $this->exchange_hash = pack('Na*Na*Na*Na*Na*Na*Na*Na*',
+            strlen($this->identifier), $this->identifier, strlen($this->server_identifier), $this->server_identifier,
+            strlen($kexinit_payload_client), $kexinit_payload_client, strlen($kexinit_payload_server),
+            $kexinit_payload_server, strlen($this->server_public_host_key), $this->server_public_host_key, strlen($eBytes),
+            $eBytes, strlen($fBytes), $fBytes, strlen($keyBytes), $keyBytes
+        );
+
+        $this->exchange_hash = pack('H*', $hash($this->exchange_hash));
+
+        if ($this->session_id === false) {
+            $this->session_id = $this->exchange_hash;
+        }
+
+        for ($i = 0; $i < count($server_host_key_algorithms) && !in_array($server_host_key_algorithms[$i], $this->server_host_key_algorithms); $i++);
+        if ($i == count($server_host_key_algorithms)) {
+            user_error('No compatible server host key algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+
+        if ($public_key_format != $server_host_key_algorithms[$i] || $this->signature_format != $server_host_key_algorithms[$i]) {
+            user_error('Sever Host Key Algorithm Mismatch');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+
+        $packet = pack('C',
+            NET_SSH2_MSG_NEWKEYS
+        );
+
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
+        }
+
+        $response = $this->_get_binary_packet();
+
+        if ($response === false) {
+            user_error('Connection closed by server');
+            return false;
+        }
+
+        extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+        if ($type != NET_SSH2_MSG_NEWKEYS) {
+            user_error('Expected SSH_MSG_NEWKEYS');
+            return false;
+        }
+
+        switch ($encrypt) {
+            case '3des-cbc':
+                $this->encrypt = new Crypt_TripleDES();
+                // $this->encrypt_block_size = 64 / 8 == the default
+                break;
+            case '3des-ctr':
+                $this->encrypt = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
+                // $this->encrypt_block_size = 64 / 8 == the default
+                break;
+            case 'aes256-cbc':
+            case 'aes192-cbc':
+            case 'aes128-cbc':
+                $this->encrypt = new Crypt_AES();
+                $this->encrypt_block_size = 16; // eg. 128 / 8
+                break;
+            case 'aes256-ctr':
+            case 'aes192-ctr':
+            case 'aes128-ctr':
+                $this->encrypt = new Crypt_AES(CRYPT_AES_MODE_CTR);
+                $this->encrypt_block_size = 16; // eg. 128 / 8
+                break;
+            case 'arcfour':
+            case 'arcfour128':
+            case 'arcfour256':
+                $this->encrypt = new Crypt_RC4();
+                break;
+            case 'none';
+                //$this->encrypt = new Crypt_Null();
+        }
+
+        switch ($decrypt) {
+            case '3des-cbc':
+                $this->decrypt = new Crypt_TripleDES();
+                break;
+            case '3des-ctr':
+                $this->decrypt = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
+                break;
+            case 'aes256-cbc':
+            case 'aes192-cbc':
+            case 'aes128-cbc':
+                $this->decrypt = new Crypt_AES();
+                $this->decrypt_block_size = 16;
+                break;
+            case 'aes256-ctr':
+            case 'aes192-ctr':
+            case 'aes128-ctr':
+                $this->decrypt = new Crypt_AES(CRYPT_AES_MODE_CTR);
+                $this->decrypt_block_size = 16;
+                break;
+            case 'arcfour':
+            case 'arcfour128':
+            case 'arcfour256':
+                $this->decrypt = new Crypt_RC4();
+                break;
+            case 'none';
+                //$this->decrypt = new Crypt_Null();
+        }
+
+        $keyBytes = pack('Na*', strlen($keyBytes), $keyBytes);
+
+        if ($this->encrypt) {
+            $this->encrypt->enableContinuousBuffer();
+            $this->encrypt->disablePadding();
+
+            $iv = pack('H*', $hash($keyBytes . $this->exchange_hash . 'A' . $this->session_id));
+            while ($this->encrypt_block_size > strlen($iv)) {
+                $iv.= pack('H*', $hash($keyBytes . $this->exchange_hash . $iv));
+            }
+            $this->encrypt->setIV(substr($iv, 0, $this->encrypt_block_size));
+
+            $key = pack('H*', $hash($keyBytes . $this->exchange_hash . 'C' . $this->session_id));
+            while ($encryptKeyLength > strlen($key)) {
+                $key.= pack('H*', $hash($keyBytes . $this->exchange_hash . $key));
+            }
+            $this->encrypt->setKey(substr($key, 0, $encryptKeyLength));
+        }
+
+        if ($this->decrypt) {
+            $this->decrypt->enableContinuousBuffer();
+            $this->decrypt->disablePadding();
+
+            $iv = pack('H*', $hash($keyBytes . $this->exchange_hash . 'B' . $this->session_id));
+            while ($this->decrypt_block_size > strlen($iv)) {
+                $iv.= pack('H*', $hash($keyBytes . $this->exchange_hash . $iv));
+            }
+            $this->decrypt->setIV(substr($iv, 0, $this->decrypt_block_size));
+
+            $key = pack('H*', $hash($keyBytes . $this->exchange_hash . 'D' . $this->session_id));
+            while ($decryptKeyLength > strlen($key)) {
+                $key.= pack('H*', $hash($keyBytes . $this->exchange_hash . $key));
+            }
+            $this->decrypt->setKey(substr($key, 0, $decryptKeyLength));
+        }
+
+        /* The "arcfour128" algorithm is the RC4 cipher, as described in
+           [SCHNEIER], using a 128-bit key.  The first 1536 bytes of keystream
+           generated by the cipher MUST be discarded, and the first byte of the
+           first encrypted packet MUST be encrypted using the 1537th byte of
+           keystream.
+
+           -- http://tools.ietf.org/html/rfc4345#section-4 */
+        if ($encrypt == 'arcfour128' || $encrypt == 'arcfour256') {
+            $this->encrypt->encrypt(str_repeat("\0", 1536));
+        }
+        if ($decrypt == 'arcfour128' || $decrypt == 'arcfour256') {
+            $this->decrypt->decrypt(str_repeat("\0", 1536));
+        }
+
+        for ($i = 0; $i < count($mac_algorithms) && !in_array($mac_algorithms[$i], $this->mac_algorithms_client_to_server); $i++);
+        if ($i == count($mac_algorithms)) {
+            user_error('No compatible client to server message authentication algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+
+        $createKeyLength = 0; // ie. $mac_algorithms[$i] == 'none'
+        switch ($mac_algorithms[$i]) {
+            case 'hmac-sha1':
+                $this->hmac_create = new Crypt_Hash('sha1');
+                $createKeyLength = 20;
+                break;
+            case 'hmac-sha1-96':
+                $this->hmac_create = new Crypt_Hash('sha1-96');
+                $createKeyLength = 20;
+                break;
+            case 'hmac-md5':
+                $this->hmac_create = new Crypt_Hash('md5');
+                $createKeyLength = 16;
+                break;
+            case 'hmac-md5-96':
+                $this->hmac_create = new Crypt_Hash('md5-96');
+                $createKeyLength = 16;
+        }
+
+        for ($i = 0; $i < count($mac_algorithms) && !in_array($mac_algorithms[$i], $this->mac_algorithms_server_to_client); $i++);
+        if ($i == count($mac_algorithms)) {
+            user_error('No compatible server to client message authentication algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+
+        $checkKeyLength = 0;
+        $this->hmac_size = 0;
+        switch ($mac_algorithms[$i]) {
+            case 'hmac-sha1':
+                $this->hmac_check = new Crypt_Hash('sha1');
+                $checkKeyLength = 20;
+                $this->hmac_size = 20;
+                break;
+            case 'hmac-sha1-96':
+                $this->hmac_check = new Crypt_Hash('sha1-96');
+                $checkKeyLength = 20;
+                $this->hmac_size = 12;
+                break;
+            case 'hmac-md5':
+                $this->hmac_check = new Crypt_Hash('md5');
+                $checkKeyLength = 16;
+                $this->hmac_size = 16;
+                break;
+            case 'hmac-md5-96':
+                $this->hmac_check = new Crypt_Hash('md5-96');
+                $checkKeyLength = 16;
+                $this->hmac_size = 12;
+        }
+
+        $key = pack('H*', $hash($keyBytes . $this->exchange_hash . 'E' . $this->session_id));
+        while ($createKeyLength > strlen($key)) {
+            $key.= pack('H*', $hash($keyBytes . $this->exchange_hash . $key));
+        }
+        $this->hmac_create->setKey(substr($key, 0, $createKeyLength));
+
+        $key = pack('H*', $hash($keyBytes . $this->exchange_hash . 'F' . $this->session_id));
+        while ($checkKeyLength > strlen($key)) {
+            $key.= pack('H*', $hash($keyBytes . $this->exchange_hash . $key));
+        }
+        $this->hmac_check->setKey(substr($key, 0, $checkKeyLength));
+
+        for ($i = 0; $i < count($compression_algorithms) && !in_array($compression_algorithms[$i], $this->compression_algorithms_server_to_client); $i++);
+        if ($i == count($compression_algorithms)) {
+            user_error('No compatible server to client compression algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+        $this->decompress = $compression_algorithms[$i] == 'zlib';
+
+        for ($i = 0; $i < count($compression_algorithms) && !in_array($compression_algorithms[$i], $this->compression_algorithms_client_to_server); $i++);
+        if ($i == count($compression_algorithms)) {
+            user_error('No compatible client to server compression algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+        $this->compress = $compression_algorithms[$i] == 'zlib';
+
+        return true;
+    }
+
+    /**
+     * Login
+     *
+     * The $password parameter can be a plaintext password or a Crypt_RSA object.
+     *
+     * @param String $username
+     * @param optional String $password
+     * @return Boolean
+     * @access public
+     * @internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis}
+     *           by sending dummy SSH_MSG_IGNORE messages.
+     */
+    function login($username, $password = null)
+    {
+        if (!($this->bitmap & NET_SSH2_MASK_CONSTRUCTOR)) {
+            return false;
+        }
+
+        $packet = pack('CNa*',
+            NET_SSH2_MSG_SERVICE_REQUEST, strlen('ssh-userauth'), 'ssh-userauth'
+        );
+
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
+        }
+
+        $response = $this->_get_binary_packet();
+        if ($response === false) {
+            user_error('Connection closed by server');
+            return false;
+        }
+
+        extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+        if ($type != NET_SSH2_MSG_SERVICE_ACCEPT) {
+            user_error('Expected SSH_MSG_SERVICE_ACCEPT');
+            return false;
+        }
+
+        // although PHP5's get_class() preserves the case, PHP4's does not
+        if (is_object($password) && strtolower(get_class($password)) == 'crypt_rsa') {
+            return $this->_privatekey_login($username, $password);
+        }
+
+        if (!isset($password)) {
+            $packet = pack('CNa*Na*Na*',
+                NET_SSH2_MSG_USERAUTH_REQUEST, strlen($username), $username, strlen('ssh-connection'), 'ssh-connection',
+                strlen('none'), 'none'
+            );
+
+            if (!$this->_send_binary_packet($packet)) {
+                return false;
+            }
+
+            $response = $this->_get_binary_packet();
+            if ($response === false) {
+                user_error('Connection closed by server');
+                return false;
+            }
+
+            extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+            switch ($type) {
+                case NET_SSH2_MSG_USERAUTH_SUCCESS:
+                    $this->bitmap |= NET_SSH2_MASK_LOGIN;
+                    return true;
+                //case NET_SSH2_MSG_USERAUTH_FAILURE:
+                default:
+                    return false;
+            }
+        }
+
+        $packet = pack('CNa*Na*Na*CNa*',
+            NET_SSH2_MSG_USERAUTH_REQUEST, strlen($username), $username, strlen('ssh-connection'), 'ssh-connection',
+            strlen('password'), 'password', 0, strlen($password), $password
+        );
+
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
+        }
+
+        // remove the username and password from the last logged packet
+        if (defined('NET_SSH2_LOGGING') && NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX) {
+            $packet = pack('CNa*Na*Na*CNa*',
+                NET_SSH2_MSG_USERAUTH_REQUEST, strlen('username'), 'username', strlen('ssh-connection'), 'ssh-connection',
+                strlen('password'), 'password', 0, strlen('password'), 'password'
+            );
+            $this->message_log[count($this->message_log) - 1] = $packet;
+        }
+
+        $response = $this->_get_binary_packet();
+        if ($response === false) {
+            user_error('Connection closed by server');
+            return false;
+        }
+
+        extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+        switch ($type) {
+            case NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ: // in theory, the password can be changed
+                if (defined('NET_SSH2_LOGGING')) {
+                    $this->message_number_log[count($this->message_number_log) - 1] = 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ';
+                }
+                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                $this->errors[] = 'SSH_MSG_USERAUTH_PASSWD_CHANGEREQ: ' . utf8_decode($this->_string_shift($response, $length));
+                return $this->_disconnect(NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER);
+            case NET_SSH2_MSG_USERAUTH_FAILURE:
+                // can we use keyboard-interactive authentication?  if not then either the login is bad or the server employees
+                // multi-factor authentication
+                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                $auth_methods = explode(',', $this->_string_shift($response, $length));
+                if (in_array('keyboard-interactive', $auth_methods)) {
+                    if ($this->_keyboard_interactive_login($username, $password)) {
+                        $this->bitmap |= NET_SSH2_MASK_LOGIN;
+                        return true;
+                    }
+                    return false;
+                }
+                return false;
+            case NET_SSH2_MSG_USERAUTH_SUCCESS:
+                $this->bitmap |= NET_SSH2_MASK_LOGIN;
+                return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Login via keyboard-interactive authentication
+     *
+     * See {@link http://tools.ietf.org/html/rfc4256 RFC4256} for details.  This is not a full-featured keyboard-interactive authenticator.
+     *
+     * @param String $username
+     * @param String $password
+     * @return Boolean
+     * @access private
+     */
+    function _keyboard_interactive_login($username, $password)
+    {
+        $packet = pack('CNa*Na*Na*Na*Na*', 
+            NET_SSH2_MSG_USERAUTH_REQUEST, strlen($username), $username, strlen('ssh-connection'), 'ssh-connection',
+            strlen('keyboard-interactive'), 'keyboard-interactive', 0, '', 0, ''
+        );
+
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
+        }
+
+        return $this->_keyboard_interactive_process($password);
+    }
+
+    /**
+     * Handle the keyboard-interactive requests / responses.
+     *
+     * @param String $responses...
+     * @return Boolean
+     * @access private
+     */
+    function _keyboard_interactive_process()
+    {
+        $responses = func_get_args();
+
+        $response = $this->_get_binary_packet();
+        if ($response === false) {
+            user_error('Connection closed by server');
+            return false;
+        }
+
+        extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+        switch ($type) {
+            case NET_SSH2_MSG_USERAUTH_INFO_REQUEST:
+                // see http://tools.ietf.org/html/rfc4256#section-3.2
+                if (defined('NET_SSH2_LOGGING')) {
+                    $this->message_number_log[count($this->message_number_log) - 1] = str_replace(
+                        'UNKNOWN',
+                        'NET_SSH2_MSG_USERAUTH_INFO_REQUEST',
+                        $this->message_number_log[count($this->message_number_log) - 1]
+                    );
+                }
+
+                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                $this->_string_shift($response, $length); // name; may be empty
+                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                $this->_string_shift($response, $length); // instruction; may be empty
+                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                $this->_string_shift($response, $length); // language tag; may be empty
+                extract(unpack('Nnum_prompts', $this->_string_shift($response, 4)));
+                /*
+                for ($i = 0; $i < $num_prompts; $i++) {
+                    extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                    // prompt - ie. "Password: "; must not be empty
+                    $this->_string_shift($response, $length);
+                    $echo = $this->_string_shift($response) != chr(0);
+                }
+                */
+
+                /*
+                   After obtaining the requested information from the user, the client
+                   MUST respond with an SSH_MSG_USERAUTH_INFO_RESPONSE message.
+                */
+                // see http://tools.ietf.org/html/rfc4256#section-3.4
+                $packet = $logged = pack('CN', NET_SSH2_MSG_USERAUTH_INFO_RESPONSE, count($responses));
+                for ($i = 0; $i < count($responses); $i++) {
+                    $packet.= pack('Na*', strlen($responses[$i]), $responses[$i]);
+                    $logged.= pack('Na*', strlen('dummy-answer'), 'dummy-answer');
+                }
+
+                if (!$this->_send_binary_packet($packet)) {
+                    return false;
+                }
+
+                if (defined('NET_SSH2_LOGGING')) {
+                    $this->message_number_log[count($this->message_number_log) - 1] = str_replace(
+                        'UNKNOWN',
+                        'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE',
+                        $this->message_number_log[count($this->message_number_log) - 1]
+                    );
+                    $this->message_log[count($this->message_log) - 1] = $logged;
+                }
+
+                /*
+                   After receiving the response, the server MUST send either an
+                   SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, or another
+                   SSH_MSG_USERAUTH_INFO_REQUEST message.
+                */
+                // maybe phpseclib should force close the connection after x request / responses?  unless something like that is done
+                // there could be an infinite loop of request / responses.
+                return $this->_keyboard_interactive_process();
+            case NET_SSH2_MSG_USERAUTH_SUCCESS:
+                return true;
+            case NET_SSH2_MSG_USERAUTH_FAILURE:
+                return false;
+        }
+
+        return false;
+    }
+
+    /**
+     * Login with an RSA private key
+     *
+     * @param String $username
+     * @param Crypt_RSA $password
+     * @return Boolean
+     * @access private
+     * @internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis}
+     *           by sending dummy SSH_MSG_IGNORE messages.
+     */
+    function _privatekey_login($username, $privatekey)
+    {
+        // see http://tools.ietf.org/html/rfc4253#page-15
+        $publickey = $privatekey->getPublicKey(CRYPT_RSA_PUBLIC_FORMAT_RAW);
+        if ($publickey === false) {
+            return false;
+        }
+
+        $publickey = array(
+            'e' => $publickey['e']->toBytes(true),
+            'n' => $publickey['n']->toBytes(true)
+        );
+        $publickey = pack('Na*Na*Na*',
+            strlen('ssh-rsa'), 'ssh-rsa', strlen($publickey['e']), $publickey['e'], strlen($publickey['n']), $publickey['n']
+        );
+
+        $part1 = pack('CNa*Na*Na*',
+            NET_SSH2_MSG_USERAUTH_REQUEST, strlen($username), $username, strlen('ssh-connection'), 'ssh-connection',
+            strlen('publickey'), 'publickey'
+        );
+        $part2 = pack('Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($publickey), $publickey);
+
+        $packet = $part1 . chr(0) . $part2;
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
+        }
+
+        $response = $this->_get_binary_packet();
+        if ($response === false) {
+            user_error('Connection closed by server');
+            return false;
+        }
+
+        extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+        switch ($type) {
+            case NET_SSH2_MSG_USERAUTH_FAILURE:
+                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                $this->errors[] = 'SSH_MSG_USERAUTH_FAILURE: ' . $this->_string_shift($response, $length);
+                return $this->_disconnect(NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER);
+            case NET_SSH2_MSG_USERAUTH_PK_OK:
+                // we'll just take it on faith that the public key blob and the public key algorithm name are as
+                // they should be
+                if (defined('NET_SSH2_LOGGING')) {
+                    $this->message_number_log[count($this->message_number_log) - 1] = str_replace(
+                        'UNKNOWN',
+                        'NET_SSH2_MSG_USERAUTH_PK_OK',
+                        $this->message_number_log[count($this->message_number_log) - 1]
+                    );
+                }
+        }
+
+        $packet = $part1 . chr(1) . $part2;
+        $privatekey->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
+        $signature = $privatekey->sign(pack('Na*a*', strlen($this->session_id), $this->session_id, $packet));
+        $signature = pack('Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($signature), $signature);
+        $packet.= pack('Na*', strlen($signature), $signature);
+
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
+        }
+
+        $response = $this->_get_binary_packet();
+        if ($response === false) {
+            user_error('Connection closed by server');
+            return false;
+        }
+
+        extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+        switch ($type) {
+            case NET_SSH2_MSG_USERAUTH_FAILURE:
+                // either the login is bad or the server employs multi-factor authentication
+                return false;
+            case NET_SSH2_MSG_USERAUTH_SUCCESS:
+                $this->bitmap |= NET_SSH2_MASK_LOGIN;
+                return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Set Timeout
+     *
+     * $ssh->exec('ping 127.0.0.1'); on a Linux host will never return and will run indefinitely.  setTimeout() makes it so it'll timeout.
+     * Setting $timeout to false or 0 will mean there is no timeout.
+     *
+     * @param Mixed $timeout
+     */
+    function setTimeout($timeout)
+    {
+        $this->timeout = $this->curTimeout = $timeout;
+    }
+
+    /**
+     * Execute Command
+     *
+     * If $block is set to false then Net_SSH2::_get_channel_packet(NET_SSH2_CHANNEL_EXEC) will need to be called manually.
+     * In all likelihood, this is not a feature you want to be taking advantage of.
+     *
+     * @param String $command
+     * @param optional Boolean $block
+     * @return String
+     * @access public
+     */
+    function exec($command, $block = true)
+    {
+        $this->curTimeout = $this->timeout;
+
+        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            return false;
+        }
+
+        // RFC4254 defines the (client) window size as "bytes the other party can send before it must wait for the window to
+        // be adjusted".  0x7FFFFFFF is, at 4GB, the max size.  technically, it should probably be decremented, but, 
+        // honestly, if you're transfering more than 4GB, you probably shouldn't be using phpseclib, anyway.
+        // see http://tools.ietf.org/html/rfc4254#section-5.2 for more info
+        $this->window_size_client_to_server[NET_SSH2_CHANNEL_EXEC] = 0x7FFFFFFF;
+        // 0x8000 is the maximum max packet size, per http://tools.ietf.org/html/rfc4253#section-6.1, although since PuTTy
+        // uses 0x4000, that's what will be used here, as well.
+        $packet_size = 0x4000;
+
+        $packet = pack('CNa*N3',
+            NET_SSH2_MSG_CHANNEL_OPEN, strlen('session'), 'session', NET_SSH2_CHANNEL_EXEC, $this->window_size_client_to_server[NET_SSH2_CHANNEL_EXEC], $packet_size);
+
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
+        }
+
+        $this->channel_status[NET_SSH2_CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_OPEN;
+
+        $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_EXEC);
+        if ($response === false) {
+            return false;
+        }
+
+        // sending a pty-req SSH_MSG_CHANNEL_REQUEST message is unnecessary and, in fact, in most cases, slows things
+        // down.  the one place where it might be desirable is if you're doing something like Net_SSH2::exec('ping localhost &').
+        // with a pty-req SSH_MSG_CHANNEL_REQUEST, exec() will return immediately and the ping process will then
+        // then immediately terminate.  without such a request exec() will loop indefinitely.  the ping process won't end but
+        // neither will your script.
+
+        // although, in theory, the size of SSH_MSG_CHANNEL_REQUEST could exceed the maximum packet size established by
+        // SSH_MSG_CHANNEL_OPEN_CONFIRMATION, RFC4254#section-5.1 states that the "maximum packet size" refers to the 
+        // "maximum size of an individual data packet". ie. SSH_MSG_CHANNEL_DATA.  RFC4254#section-5.2 corroborates.
+        $packet = pack('CNNa*CNa*',
+            NET_SSH2_MSG_CHANNEL_REQUEST, $this->server_channels[NET_SSH2_CHANNEL_EXEC], strlen('exec'), 'exec', 1, strlen($command), $command);
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
+        }
+
+        $this->channel_status[NET_SSH2_CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_REQUEST;
+
+        $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_EXEC);
+        if ($response === false) {
+            return false;
+        }
+
+        $this->channel_status[NET_SSH2_CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_DATA;
+
+        if (!$block) {
+            return true;
+        }
+
+        $output = '';
+        while (true) {
+            $temp = $this->_get_channel_packet(NET_SSH2_CHANNEL_EXEC);
+            switch (true) {
+                case $temp === true:
+                    return $output;
+                case $temp === false:
+                    return false;
+                default:
+                    $output.= $temp;
+            }
+        }
+    }
+
+    /**
+     * Creates an interactive shell
+     *
+     * @see Net_SSH2::read()
+     * @see Net_SSH2::write()
+     * @return Boolean
+     * @access private
+     */
+    function _initShell()
+    {
+        $this->window_size_client_to_server[NET_SSH2_CHANNEL_SHELL] = 0x7FFFFFFF;
+        $packet_size = 0x4000;
+
+        $packet = pack('CNa*N3',
+            NET_SSH2_MSG_CHANNEL_OPEN, strlen('session'), 'session', NET_SSH2_CHANNEL_SHELL, $this->window_size_client_to_server[NET_SSH2_CHANNEL_SHELL], $packet_size);
+
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
+        }
+
+        $this->channel_status[NET_SSH2_CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_OPEN;
+
+        $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_SHELL);
+        if ($response === false) {
+            return false;
+        }
+
+        $terminal_modes = pack('C', NET_SSH2_TTY_OP_END);
+        $packet = pack('CNNa*CNa*N5a*',
+            NET_SSH2_MSG_CHANNEL_REQUEST, $this->server_channels[NET_SSH2_CHANNEL_SHELL], strlen('pty-req'), 'pty-req', 1, strlen('vt100'), 'vt100',
+            80, 24, 0, 0, strlen($terminal_modes), $terminal_modes);
+
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
+        }
+
+        $response = $this->_get_binary_packet();
+        if ($response === false) {
+            user_error('Connection closed by server');
+            return false;
+        }
+
+        list(, $type) = unpack('C', $this->_string_shift($response, 1));
+
+        switch ($type) {
+            case NET_SSH2_MSG_CHANNEL_SUCCESS:
+                break;
+            case NET_SSH2_MSG_CHANNEL_FAILURE:
+            default:
+                user_error('Unable to request pseudo-terminal');
+                return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+        }
+
+        $packet = pack('CNNa*C',
+            NET_SSH2_MSG_CHANNEL_REQUEST, $this->server_channels[NET_SSH2_CHANNEL_SHELL], strlen('shell'), 'shell', 1);
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
+        }
+
+        $this->channel_status[NET_SSH2_CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_REQUEST;
+
+        $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_SHELL);
+        if ($response === false) {
+            return false;
+        }
+
+        $this->channel_status[NET_SSH2_CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_DATA;
+
+        $this->bitmap |= NET_SSH2_MASK_SHELL;
+
+        return true;
+    }
+
+    /**
+     * Returns the output of an interactive shell
+     *
+     * Returns when there's a match for $expect, which can take the form of a string literal or,
+     * if $mode == NET_SSH2_READ_REGEX, a regular expression.
+     *
+     * @see Net_SSH2::read()
+     * @param String $expect
+     * @param Integer $mode
+     * @return String
+     * @access public
+     */
+    function read($expect = '', $mode = NET_SSH2_READ_SIMPLE)
+    {
+        $this->curTimeout = $this->timeout;
+
+        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            user_error('Operation disallowed prior to login()');
+            return false;
+        }
+
+        if (!($this->bitmap & NET_SSH2_MASK_SHELL) && !$this->_initShell()) {
+            user_error('Unable to initiate an interactive shell session');
+            return false;
+        }
+
+        $match = $expect;
+        while (true) {
+            if ($mode == NET_SSH2_READ_REGEX) {
+                preg_match($expect, $this->interactiveBuffer, $matches);
+                $match = isset($matches[0]) ? $matches[0] : '';
+            }
+            $pos = strlen($match) ? strpos($this->interactiveBuffer, $match) : false;
+            if ($pos !== false) {
+                return $this->_string_shift($this->interactiveBuffer, $pos + strlen($match));
+            }
+            $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_SHELL);
+            if (is_bool($response)) {
+                return $response ? $this->_string_shift($this->interactiveBuffer, strlen($this->interactiveBuffer)) : false;
+            }
+
+            $this->interactiveBuffer.= $response;
+        }
+    }
+
+    /**
+     * Inputs a command into an interactive shell.
+     *
+     * @see Net_SSH1::interactiveWrite()
+     * @param String $cmd
+     * @return Boolean
+     * @access public
+     */
+    function write($cmd)
+    {
+        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            user_error('Operation disallowed prior to login()');
+            return false;
+        }
+
+        if (!($this->bitmap & NET_SSH2_MASK_SHELL) && !$this->_initShell()) {
+            user_error('Unable to initiate an interactive shell session');
+            return false;
+        }
+
+        return $this->_send_channel_packet(NET_SSH2_CHANNEL_SHELL, $cmd);
+    }
+
+    /**
+     * Disconnect
+     *
+     * @access public
+     */
+    function disconnect()
+    {
+        $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+        if (isset($this->realtime_log_file) && is_resource($this->realtime_log_file)) {
+            fclose($this->realtime_log_file);
+        }
+    }
+
+    /**
+     * Destructor.
+     *
+     * Will be called, automatically, if you're supporting just PHP5.  If you're supporting PHP4, you'll need to call
+     * disconnect().
+     *
+     * @access public
+     */
+    function __destruct()
+    {
+        $this->disconnect();
+    }
+
+    /**
+     * Gets Binary Packets
+     *
+     * See '6. Binary Packet Protocol' of rfc4253 for more info.
+     *
+     * @see Net_SSH2::_send_binary_packet()
+     * @return String
+     * @access private
+     */
+    function _get_binary_packet()
+    {
+        if (!is_resource($this->fsock) || feof($this->fsock)) {
+            user_error('Connection closed prematurely');
+            $this->bitmask = 0;
+            return false;
+        }
+
+        $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+        $raw = fread($this->fsock, $this->decrypt_block_size);
+
+        if (!strlen($raw)) {
+            return '';
+        }
+
+        if ($this->decrypt !== false) {
+            $raw = $this->decrypt->decrypt($raw);
+        }
+        if ($raw === false) {
+            user_error('Unable to decrypt content');
+            return false;
+        }
+
+        extract(unpack('Npacket_length/Cpadding_length', $this->_string_shift($raw, 5)));
+
+        $remaining_length = $packet_length + 4 - $this->decrypt_block_size;
+
+        // quoting <http://tools.ietf.org/html/rfc4253#section-6.1>,
+        // "implementations SHOULD check that the packet length is reasonable"
+        // PuTTY uses 0x9000 as the actual max packet size and so to shall we
+        if ($remaining_length < -$this->decrypt_block_size || $remaining_length > 0x9000 || $remaining_length % $this->decrypt_block_size != 0) {
+            user_error('Invalid size');
+            return false;
+        }
+
+        $buffer = '';
+        while ($remaining_length > 0) {
+            $temp = fread($this->fsock, $remaining_length);
+            $buffer.= $temp;
+            $remaining_length-= strlen($temp);
+        }
+        $stop = strtok(microtime(), ' ') + strtok('');
+        if (strlen($buffer)) {
+            $raw.= $this->decrypt !== false ? $this->decrypt->decrypt($buffer) : $buffer;
+        }
+
+        $payload = $this->_string_shift($raw, $packet_length - $padding_length - 1);
+        $padding = $this->_string_shift($raw, $padding_length); // should leave $raw empty
+
+        if ($this->hmac_check !== false) {
+            $hmac = fread($this->fsock, $this->hmac_size);
+            if ($hmac != $this->hmac_check->hash(pack('NNCa*', $this->get_seq_no, $packet_length, $padding_length, $payload . $padding))) {
+                user_error('Invalid HMAC');
+                return false;
+            }
+        }
+
+        //if ($this->decompress) {
+        //    $payload = gzinflate(substr($payload, 2));
+        //}
+
+        $this->get_seq_no++;
+
+        if (defined('NET_SSH2_LOGGING')) {
+            $current = strtok(microtime(), ' ') + strtok('');
+            $message_number = isset($this->message_numbers[ord($payload[0])]) ? $this->message_numbers[ord($payload[0])] : 'UNKNOWN (' . ord($payload[0]) . ')';
+            $message_number = '<- ' . $message_number .
+                              ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($stop - $start, 4) . 's)';
+            $this->_append_log($message_number, $payload);
+            $this->last_packet = $current;
+        }
+
+        return $this->_filter($payload);
+    }
+
+    /**
+     * Filter Binary Packets
+     *
+     * Because some binary packets need to be ignored...
+     *
+     * @see Net_SSH2::_get_binary_packet()
+     * @return String
+     * @access private
+     */
+    function _filter($payload)
+    {
+        switch (ord($payload[0])) {
+            case NET_SSH2_MSG_DISCONNECT:
+                $this->_string_shift($payload, 1);
+                extract(unpack('Nreason_code/Nlength', $this->_string_shift($payload, 8)));
+                $this->errors[] = 'SSH_MSG_DISCONNECT: ' . $this->disconnect_reasons[$reason_code] . "\r\n" . utf8_decode($this->_string_shift($payload, $length));
+                $this->bitmask = 0;
+                return false;
+            case NET_SSH2_MSG_IGNORE:
+                $payload = $this->_get_binary_packet();
+                break;
+            case NET_SSH2_MSG_DEBUG:
+                $this->_string_shift($payload, 2);
+                extract(unpack('Nlength', $this->_string_shift($payload, 4)));
+                $this->errors[] = 'SSH_MSG_DEBUG: ' . utf8_decode($this->_string_shift($payload, $length));
+                $payload = $this->_get_binary_packet();
+                break;
+            case NET_SSH2_MSG_UNIMPLEMENTED:
+                return false;
+            case NET_SSH2_MSG_KEXINIT:
+                if ($this->session_id !== false) {
+                    if (!$this->_key_exchange($payload)) {
+                        $this->bitmask = 0;
+                        return false;
+                    }
+                    $payload = $this->_get_binary_packet();
+                }
+        }
+
+        // see http://tools.ietf.org/html/rfc4252#section-5.4; only called when the encryption has been activated and when we haven't already logged in
+        if (($this->bitmap & NET_SSH2_MASK_CONSTRUCTOR) && !($this->bitmap & NET_SSH2_MASK_LOGIN) && ord($payload[0]) == NET_SSH2_MSG_USERAUTH_BANNER) {
+            $this->_string_shift($payload, 1);
+            extract(unpack('Nlength', $this->_string_shift($payload, 4)));
+            $this->errors[] = 'SSH_MSG_USERAUTH_BANNER: ' . utf8_decode($this->_string_shift($payload, $length));
+            $payload = $this->_get_binary_packet();
+        }
+
+        // only called when we've already logged in
+        if (($this->bitmap & NET_SSH2_MASK_CONSTRUCTOR) && ($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+            switch (ord($payload[0])) {
+                case NET_SSH2_MSG_GLOBAL_REQUEST: // see http://tools.ietf.org/html/rfc4254#section-4
+                    $this->_string_shift($payload, 1);
+                    extract(unpack('Nlength', $this->_string_shift($payload)));
+                    $this->errors[] = 'SSH_MSG_GLOBAL_REQUEST: ' . utf8_decode($this->_string_shift($payload, $length));
+
+                    if (!$this->_send_binary_packet(pack('C', NET_SSH2_MSG_REQUEST_FAILURE))) {
+                        return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+                    }
+
+                    $payload = $this->_get_binary_packet();
+                    break;
+                case NET_SSH2_MSG_CHANNEL_OPEN: // see http://tools.ietf.org/html/rfc4254#section-5.1
+                    $this->_string_shift($payload, 1);
+                    extract(unpack('N', $this->_string_shift($payload, 4)));
+                    $this->errors[] = 'SSH_MSG_CHANNEL_OPEN: ' . utf8_decode($this->_string_shift($payload, $length));
+
+                    $this->_string_shift($payload, 4); // skip over client channel
+                    extract(unpack('Nserver_channel', $this->_string_shift($payload, 4)));
+
+                    $packet = pack('CN3a*Na*',
+                        NET_SSH2_MSG_REQUEST_FAILURE, $server_channel, NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED, 0, '', 0, '');
+
+                    if (!$this->_send_binary_packet($packet)) {
+                        return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+                    }
+
+                    $payload = $this->_get_binary_packet();
+                    break;
+                case NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST:
+                    $payload = $this->_get_binary_packet();
+            }
+        }
+
+        return $payload;
+    }
+
+    /**
+     * Enable Quiet Mode
+     *
+     * Suppress stderr from output
+     *
+     * @access public
+     */
+    function enableQuietMode()
+    {
+        $this->quiet_mode = true;
+    }
+
+    /**
+     * Disable Quiet Mode
+     *
+     * Show stderr in output
+     *
+     * @access public
+     */
+    function disableQuietMode()
+    {
+        $this->quiet_mode = false;
+    }
+
+    /**
+     * Gets channel data
+     *
+     * Returns the data as a string if it's available and false if not.
+     *
+     * @param $client_channel
+     * @return Mixed
+     * @access private
+     */
+    function _get_channel_packet($client_channel, $skip_extended = false)
+    {
+        if (!empty($this->channel_buffers[$client_channel])) {
+            return array_shift($this->channel_buffers[$client_channel]);
+        }
+
+        while (true) {
+            if ($this->curTimeout) {
+                $read = array($this->fsock);
+                $write = $except = NULL;
+
+                $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+                $sec = floor($this->curTimeout);
+                $usec = 1000000 * ($this->curTimeout - $sec);
+                // on windows this returns a "Warning: Invalid CRT parameters detected" error
+                if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) {
+                    $this->_close_channel($client_channel);
+                    return true;
+                }
+                $elapsed = strtok(microtime(), ' ') + strtok('') - $start;
+                $this->curTimeout-= $elapsed;
+            }
+
+            $response = $this->_get_binary_packet();
+            if ($response === false) {
+                user_error('Connection closed by server');
+                return false;
+            }
+
+            if (!strlen($response)) {
+                return '';
+            }
+
+            extract(unpack('Ctype/Nchannel', $this->_string_shift($response, 5)));
+
+            switch ($this->channel_status[$channel]) {
+                case NET_SSH2_MSG_CHANNEL_OPEN:
+                    switch ($type) {
+                        case NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION:
+                            extract(unpack('Nserver_channel', $this->_string_shift($response, 4)));
+                            $this->server_channels[$channel] = $server_channel;
+                            $this->_string_shift($response, 4); // skip over (server) window size
+                            $temp = unpack('Npacket_size_client_to_server', $this->_string_shift($response, 4));
+                            $this->packet_size_client_to_server[$channel] = $temp['packet_size_client_to_server'];
+                            return $client_channel == $channel ? true : $this->_get_channel_packet($client_channel, $skip_extended);
+                        //case NET_SSH2_MSG_CHANNEL_OPEN_FAILURE:
+                        default:
+                            user_error('Unable to open channel');
+                            return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+                    }
+                    break;
+                case NET_SSH2_MSG_CHANNEL_REQUEST:
+                    switch ($type) {
+                        case NET_SSH2_MSG_CHANNEL_SUCCESS:
+                            return true;
+                        //case NET_SSH2_MSG_CHANNEL_FAILURE:
+                        default:
+                            user_error('Unable to request pseudo-terminal');
+                            return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+                    }
+                case NET_SSH2_MSG_CHANNEL_CLOSE:
+                    return $type == NET_SSH2_MSG_CHANNEL_CLOSE ? true : $this->_get_channel_packet($client_channel, $skip_extended);
+            }
+
+            switch ($type) {
+                case NET_SSH2_MSG_CHANNEL_DATA:
+                    /*
+                    if ($client_channel == NET_SSH2_CHANNEL_EXEC) {
+                        // SCP requires null packets, such as this, be sent.  further, in the case of the ssh.com SSH server
+                        // this actually seems to make things twice as fast.  more to the point, the message right after 
+                        // SSH_MSG_CHANNEL_DATA (usually SSH_MSG_IGNORE) won't block for as long as it would have otherwise.
+                        // in OpenSSH it slows things down but only by a couple thousandths of a second.
+                        $this->_send_channel_packet($client_channel, chr(0));
+                    }
+                    */
+                    extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                    $data = $this->_string_shift($response, $length);
+                    if ($client_channel == $channel) {
+                        return $data;
+                    }
+                    if (!isset($this->channel_buffers[$client_channel])) {
+                        $this->channel_buffers[$client_channel] = array();
+                    }
+                    $this->channel_buffers[$client_channel][] = $data;
+                    break;
+                case NET_SSH2_MSG_CHANNEL_EXTENDED_DATA:
+                    if ($skip_extended || $this->quiet_mode) {
+                        break;
+                    }
+                    /*
+                    if ($client_channel == NET_SSH2_CHANNEL_EXEC) {
+                        $this->_send_channel_packet($client_channel, chr(0));
+                    }
+                    */
+                    // currently, there's only one possible value for $data_type_code: NET_SSH2_EXTENDED_DATA_STDERR
+                    extract(unpack('Ndata_type_code/Nlength', $this->_string_shift($response, 8)));
+                    $data = $this->_string_shift($response, $length);
+                    if ($client_channel == $channel) {
+                        return $data;
+                    }
+                    if (!isset($this->channel_buffers[$client_channel])) {
+                        $this->channel_buffers[$client_channel] = array();
+                    }
+                    $this->channel_buffers[$client_channel][] = $data;
+                    break;
+                case NET_SSH2_MSG_CHANNEL_REQUEST:
+                    extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                    $value = $this->_string_shift($response, $length);
+                    switch ($value) {
+                        case 'exit-signal':
+                            $this->_string_shift($response, 1);
+                            extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                            $this->errors[] = 'SSH_MSG_CHANNEL_REQUEST (exit-signal): ' . $this->_string_shift($response, $length);
+                            $this->_string_shift($response, 1);
+                            extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                            if ($length) {
+                                $this->errors[count($this->errors)].= "\r\n" . $this->_string_shift($response, $length);
+                            }
+                        case 'exit-status':
+                            extract(unpack('Cfalse/Nexit_status', $this->_string_shift($response, 5)));
+                            $this->exit_status = $exit_status;
+                            // "The channel needs to be closed with SSH_MSG_CHANNEL_CLOSE after this message."
+                            // -- http://tools.ietf.org/html/rfc4254#section-6.10
+                            $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel]));
+                            $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel]));
+
+                            $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_EOF;
+                        default:
+                            // "Some systems may not implement signals, in which case they SHOULD ignore this message."
+                            //  -- http://tools.ietf.org/html/rfc4254#section-6.9
+                            break;
+                    }
+                    break;
+                case NET_SSH2_MSG_CHANNEL_CLOSE:
+                    $this->curTimeout = 0;
+
+                    if ($this->bitmap & NET_SSH2_MASK_SHELL) {
+                        $this->bitmap&= ~NET_SSH2_MASK_SHELL;
+                    }
+                    if ($this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_EOF) {
+                        $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel]));
+                    }
+
+                    $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_CLOSE;
+                    return true;
+                case NET_SSH2_MSG_CHANNEL_EOF:
+                    break;
+                default:
+                    user_error('Error reading channel data');
+                    return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+            }
+        }
+    }
+
+    /**
+     * Sends Binary Packets
+     *
+     * See '6. Binary Packet Protocol' of rfc4253 for more info.
+     *
+     * @param String $data
+     * @see Net_SSH2::_get_binary_packet()
+     * @return Boolean
+     * @access private
+     */
+    function _send_binary_packet($data)
+    {
+        if (!is_resource($this->fsock) || feof($this->fsock)) {
+            user_error('Connection closed prematurely');
+            $this->bitmask = 0;
+            return false;
+        }
+
+        //if ($this->compress) {
+        //    // the -4 removes the checksum:
+        //    // http://php.net/function.gzcompress#57710
+        //    $data = substr(gzcompress($data), 0, -4);
+        //}
+
+        // 4 (packet length) + 1 (padding length) + 4 (minimal padding amount) == 9
+        $packet_length = strlen($data) + 9;
+        // round up to the nearest $this->encrypt_block_size
+        $packet_length+= (($this->encrypt_block_size - 1) * $packet_length) % $this->encrypt_block_size;
+        // subtracting strlen($data) is obvious - subtracting 5 is necessary because of packet_length and padding_length
+        $padding_length = $packet_length - strlen($data) - 5;
+        $padding = crypt_random_string($padding_length);
+
+        // we subtract 4 from packet_length because the packet_length field isn't supposed to include itself
+        $packet = pack('NCa*', $packet_length - 4, $padding_length, $data . $padding);
+
+        $hmac = $this->hmac_create !== false ? $this->hmac_create->hash(pack('Na*', $this->send_seq_no, $packet)) : '';
+        $this->send_seq_no++;
+
+        if ($this->encrypt !== false) {
+            $packet = $this->encrypt->encrypt($packet);
+        }
+
+        $packet.= $hmac;
+
+        $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+        $result = strlen($packet) == fputs($this->fsock, $packet);
+        $stop = strtok(microtime(), ' ') + strtok('');
+
+        if (defined('NET_SSH2_LOGGING')) {
+            $current = strtok(microtime(), ' ') + strtok('');
+            $message_number = isset($this->message_numbers[ord($data[0])]) ? $this->message_numbers[ord($data[0])] : 'UNKNOWN (' . ord($data[0]) . ')';
+            $message_number = '-> ' . $message_number .
+                              ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($stop - $start, 4) . 's)';
+            $this->_append_log($message_number, $data);
+            $this->last_packet = $current;
+        }
+
+        return $result;
+    }
+
+    /**
+     * Logs data packets
+     *
+     * Makes sure that only the last 1MB worth of packets will be logged
+     *
+     * @param String $data
+     * @access private
+     */
+    function _append_log($message_number, $message)
+    {
+            switch (NET_SSH2_LOGGING) {
+                // useful for benchmarks
+                case NET_SSH2_LOG_SIMPLE:
+                    $this->message_number_log[] = $message_number;
+                    break;
+                // the most useful log for SSH2
+                case NET_SSH2_LOG_COMPLEX:
+                    $this->message_number_log[] = $message_number;
+                    $this->_string_shift($message);
+                    $this->log_size+= strlen($message);
+                    $this->message_log[] = $message;
+                    while ($this->log_size > NET_SSH2_LOG_MAX_SIZE) {
+                        $this->log_size-= strlen(array_shift($this->message_log));
+                        array_shift($this->message_number_log);
+                    }
+                    break;
+                // dump the output out realtime; packets may be interspersed with non packets,
+                // passwords won't be filtered out and select other packets may not be correctly
+                // identified
+                case NET_SSH2_LOG_REALTIME:
+                    echo "<pre>\r\n" . $this->_format_log(array($message), array($message_number)) . "\r\n</pre>\r\n";
+                    @flush();
+                    @ob_flush();
+                    break;
+                // basically the same thing as NET_SSH2_LOG_REALTIME with the caveat that NET_SSH2_LOG_REALTIME_FILE
+                // needs to be defined and that the resultant log file will be capped out at NET_SSH2_LOG_MAX_SIZE. 
+                // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily
+                // at the beginning of the file
+                case NET_SSH2_LOG_REALTIME_FILE:
+                    if (!isset($this->realtime_log_file)) {
+                        // PHP doesn't seem to like using constants in fopen()
+                        $filename = NET_SSH2_LOG_REALTIME_FILE;
+                        $fp = fopen($filename, 'w');
+                        $this->realtime_log_file = $fp;
+                    }
+                    if (!is_resource($this->realtime_log_file)) {
+                        break;
+                    }
+                    $entry = $this->_format_log(array($message), array($message_number));
+                    if ($this->realtime_log_wrap) {
+                        $temp = "<<< START >>>\r\n";
+                        $entry.= $temp;
+                        fseek($this->realtime_log_file, ftell($this->realtime_log_file) - strlen($temp));
+                    }
+                    $this->realtime_log_size+= strlen($entry);
+                    if ($this->realtime_log_size > NET_SSH2_LOG_MAX_SIZE) {
+                        fseek($this->realtime_log_file, 0);
+                        $this->realtime_log_size = strlen($entry);
+                        $this->realtime_log_wrap = true;
+                    }
+                    fputs($this->realtime_log_file, $entry);
+            }
+    }
+
+    /**
+     * Sends channel data
+     *
+     * Spans multiple SSH_MSG_CHANNEL_DATAs if appropriate
+     *
+     * @param Integer $client_channel
+     * @param String $data
+     * @return Boolean
+     * @access private
+     */
+    function _send_channel_packet($client_channel, $data)
+    {
+        while (strlen($data) > $this->packet_size_client_to_server[$client_channel]) {
+            // resize the window, if appropriate
+            $this->window_size_client_to_server[$client_channel]-= $this->packet_size_client_to_server[$client_channel];
+            if ($this->window_size_client_to_server[$client_channel] < 0) {
+                $packet = pack('CNN', NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST, $this->server_channels[$client_channel], $this->window_size);
+                if (!$this->_send_binary_packet($packet)) {
+                    return false;
+                }
+                $this->window_size_client_to_server[$client_channel]+= $this->window_size;
+            }
+
+            $packet = pack('CN2a*',
+                NET_SSH2_MSG_CHANNEL_DATA,
+                $this->server_channels[$client_channel],
+                $this->packet_size_client_to_server[$client_channel],
+                $this->_string_shift($data, $this->packet_size_client_to_server[$client_channel])
+            );
+
+            if (!$this->_send_binary_packet($packet)) {
+                return false;
+            }
+        }
+
+        // resize the window, if appropriate
+        $this->window_size_client_to_server[$client_channel]-= strlen($data);
+        if ($this->window_size_client_to_server[$client_channel] < 0) {
+            $packet = pack('CNN', NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST, $this->server_channels[$client_channel], $this->window_size);
+            if (!$this->_send_binary_packet($packet)) {
+                return false;
+            }
+            $this->window_size_client_to_server[$client_channel]+= $this->window_size;
+        }
+
+        return $this->_send_binary_packet(pack('CN2a*',
+            NET_SSH2_MSG_CHANNEL_DATA,
+            $this->server_channels[$client_channel],
+            strlen($data),
+            $data));
+    }
+
+    /**
+     * Closes and flushes a channel
+     *
+     * Net_SSH2 doesn't properly close most channels.  For exec() channels are normally closed by the server
+     * and for SFTP channels are presumably closed when the client disconnects.  This functions is intended
+     * for SCP more than anything.
+     *
+     * @param Integer $client_channel
+     * @return Boolean
+     * @access private
+     */
+    function _close_channel($client_channel)
+    {
+        // see http://tools.ietf.org/html/rfc4254#section-5.3
+
+        $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel]));
+
+        $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$client_channel]));
+
+        $this->channel_status[$client_channel] = NET_SSH2_MSG_CHANNEL_CLOSE;
+
+        $this->curTimeout = 0;
+
+        while (!is_bool($this->_get_channel_packet($client_channel)));
+
+        if ($this->bitmap & NET_SSH2_MASK_SHELL) {
+            $this->bitmap&= ~NET_SSH2_MASK_SHELL;
+        }
+    }
+
+    /**
+     * Disconnect
+     *
+     * @param Integer $reason
+     * @return Boolean
+     * @access private
+     */
+    function _disconnect($reason)
+    {
+        if ($this->bitmap) {
+            $data = pack('CNNa*Na*', NET_SSH2_MSG_DISCONNECT, $reason, 0, '', 0, '');
+            $this->_send_binary_packet($data);
+            $this->bitmap = 0;
+            fclose($this->fsock);
+            return false;
+        }
+    }
+
+    /**
+     * String Shift
+     *
+     * Inspired by array_shift
+     *
+     * @param String $string
+     * @param optional Integer $index
+     * @return String
+     * @access private
+     */
+    function _string_shift(&$string, $index = 1)
+    {
+        $substr = substr($string, 0, $index);
+        $string = substr($string, $index);
+        return $substr;
+    }
+
+    /**
+     * Define Array
+     *
+     * Takes any number of arrays whose indices are integers and whose values are strings and defines a bunch of
+     * named constants from it, using the value as the name of the constant and the index as the value of the constant.
+     * If any of the constants that would be defined already exists, none of the constants will be defined.
+     *
+     * @param Array $array
+     * @access private
+     */
+    function _define_array()
+    {
+        $args = func_get_args();
+        foreach ($args as $arg) {
+            foreach ($arg as $key=>$value) {
+                if (!defined($value)) {
+                    define($value, $key);
+                } else {
+                    break 2;
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns a log of the packets that have been sent and received.
+     *
+     * Returns a string if NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX, an array if NET_SSH2_LOGGING == NET_SSH2_LOG_SIMPLE and false if !defined('NET_SSH2_LOGGING')
+     *
+     * @access public
+     * @return String or Array
+     */
+    function getLog()
+    {
+        if (!defined('NET_SSH2_LOGGING')) {
+            return false;
+        }
+
+        switch (NET_SSH2_LOGGING) {
+            case NET_SSH2_LOG_SIMPLE:
+                return $this->message_number_log;
+                break;
+            case NET_SSH2_LOG_COMPLEX:
+                return $this->_format_log($this->message_log, $this->message_number_log);
+                break;
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * Formats a log for printing
+     *
+     * @param Array $message_log
+     * @param Array $message_number_log
+     * @access private
+     * @return String
+     */
+    function _format_log($message_log, $message_number_log)
+    {
+        static $boundary = ':', $long_width = 65, $short_width = 16;
+
+        $output = '';
+        for ($i = 0; $i < count($message_log); $i++) {
+            $output.= $message_number_log[$i] . "\r\n";
+            $current_log = $message_log[$i];
+            $j = 0;
+            do {
+                if (strlen($current_log)) {
+                    $output.= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0  ';
+                }
+                $fragment = $this->_string_shift($current_log, $short_width);
+                $hex = substr(
+                           preg_replace(
+                               '#(.)#es',
+                               '"' . $boundary . '" . str_pad(dechex(ord(substr("\\1", -1))), 2, "0", STR_PAD_LEFT)',
+                               $fragment),
+                           strlen($boundary)
+                       );
+                // replace non ASCII printable characters with dots
+                // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
+                // also replace < with a . since < messes up the output on web browsers
+                $raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment);
+                $output.= str_pad($hex, $long_width - $short_width, ' ') . $raw . "\r\n";
+                $j++;
+            } while (strlen($current_log));
+            $output.= "\r\n";
+        }
+
+        return $output;
+    }
+
+    /**
+     * Returns all errors
+     *
+     * @return String
+     * @access public
+     */
+    function getErrors()
+    {
+        return $this->errors;
+    }
+
+    /**
+     * Returns the last error
+     *
+     * @return String
+     * @access public
+     */
+    function getLastError()
+    {
+        return $this->errors[count($this->errors) - 1];
+    }
+
+    /**
+     * Return the server identification.
+     *
+     * @return String
+     * @access public
+     */
+    function getServerIdentification()
+    {
+        return $this->server_identifier;
+    }
+
+    /**
+     * Return a list of the key exchange algorithms the server supports.
+     *
+     * @return Array
+     * @access public
+     */
+    function getKexAlgorithms()
+    {
+        return $this->kex_algorithms;
+    }
+
+    /**
+     * Return a list of the host key (public key) algorithms the server supports.
+     *
+     * @return Array
+     * @access public
+     */
+    function getServerHostKeyAlgorithms()
+    {
+        return $this->server_host_key_algorithms;
+    }
+
+    /**
+     * Return a list of the (symmetric key) encryption algorithms the server supports, when receiving stuff from the client.
+     *
+     * @return Array
+     * @access public
+     */
+    function getEncryptionAlgorithmsClient2Server()
+    {
+        return $this->encryption_algorithms_client_to_server;
+    }
+
+    /**
+     * Return a list of the (symmetric key) encryption algorithms the server supports, when sending stuff to the client.
+     *
+     * @return Array
+     * @access public
+     */
+    function getEncryptionAlgorithmsServer2Client()
+    {
+        return $this->encryption_algorithms_server_to_client;
+    }
+
+    /**
+     * Return a list of the MAC algorithms the server supports, when receiving stuff from the client.
+     *
+     * @return Array
+     * @access public
+     */
+    function getMACAlgorithmsClient2Server()
+    {
+        return $this->mac_algorithms_client_to_server;
+    }
+
+    /**
+     * Return a list of the MAC algorithms the server supports, when sending stuff to the client.
+     *
+     * @return Array
+     * @access public
+     */
+    function getMACAlgorithmsServer2Client()
+    {
+        return $this->mac_algorithms_server_to_client;
+    }
+
+    /**
+     * Return a list of the compression algorithms the server supports, when receiving stuff from the client.
+     *
+     * @return Array
+     * @access public
+     */
+    function getCompressionAlgorithmsClient2Server()
+    {
+        return $this->compression_algorithms_client_to_server;
+    }
+
+    /**
+     * Return a list of the compression algorithms the server supports, when sending stuff to the client.
+     *
+     * @return Array
+     * @access public
+     */
+    function getCompressionAlgorithmsServer2Client()
+    {
+        return $this->compression_algorithms_server_to_client;
+    }
+
+    /**
+     * Return a list of the languages the server supports, when sending stuff to the client.
+     *
+     * @return Array
+     * @access public
+     */
+    function getLanguagesServer2Client()
+    {
+        return $this->languages_server_to_client;
+    }
+
+    /**
+     * Return a list of the languages the server supports, when receiving stuff from the client.
+     *
+     * @return Array
+     * @access public
+     */
+    function getLanguagesClient2Server()
+    {
+        return $this->languages_client_to_server;
+    }
+
+    /**
+     * Returns the server public host key.
+     *
+     * Caching this the first time you connect to a server and checking the result on subsequent connections
+     * is recommended.  Returns false if the server signature is not signed correctly with the public host key.
+     *
+     * @return Mixed
+     * @access public
+     */
+    function getServerPublicHostKey()
+    {
+        $signature = $this->signature;
+        $server_public_host_key = $this->server_public_host_key;
+
+        extract(unpack('Nlength', $this->_string_shift($server_public_host_key, 4)));
+        $this->_string_shift($server_public_host_key, $length);
+
+        if ($this->signature_validated) {
+            return $this->bitmap ?
+                $this->signature_format . ' ' . base64_encode($this->server_public_host_key) :
+                false;
+        }
+
+        $this->signature_validated = true;
+
+        switch ($this->signature_format) {
+            case 'ssh-dss':
+                $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
+                $p = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+
+                $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
+                $q = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+
+                $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
+                $g = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+
+                $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
+                $y = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+
+                /* The value for 'dss_signature_blob' is encoded as a string containing
+                   r, followed by s (which are 160-bit integers, without lengths or
+                   padding, unsigned, and in network byte order). */
+                $temp = unpack('Nlength', $this->_string_shift($signature, 4));
+                if ($temp['length'] != 40) {
+                    user_error('Invalid signature');
+                    return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+                }
+
+                $r = new Math_BigInteger($this->_string_shift($signature, 20), 256);
+                $s = new Math_BigInteger($this->_string_shift($signature, 20), 256);
+
+                if ($r->compare($q) >= 0 || $s->compare($q) >= 0) {
+                    user_error('Invalid signature');
+                    return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+                }
+
+                $w = $s->modInverse($q);
+
+                $u1 = $w->multiply(new Math_BigInteger(sha1($this->exchange_hash), 16));
+                list(, $u1) = $u1->divide($q);
+
+                $u2 = $w->multiply($r);
+                list(, $u2) = $u2->divide($q);
+
+                $g = $g->modPow($u1, $p);
+                $y = $y->modPow($u2, $p);
+
+                $v = $g->multiply($y);
+                list(, $v) = $v->divide($p);
+                list(, $v) = $v->divide($q);
+
+                if (!$v->equals($r)) {
+                    user_error('Bad server signature');
+                    return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
+                }
+
+                break;
+            case 'ssh-rsa':
+                $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
+                $e = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+
+                $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
+                $n = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+                $nLength = $temp['length'];
+
+                /*
+                $temp = unpack('Nlength', $this->_string_shift($signature, 4));
+                $signature = $this->_string_shift($signature, $temp['length']);
+
+                if (!class_exists('Crypt_RSA')) {
+                    require_once('Crypt/RSA.php');
+                }
+
+                $rsa = new Crypt_RSA();
+                $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
+                $rsa->loadKey(array('e' => $e, 'n' => $n), CRYPT_RSA_PUBLIC_FORMAT_RAW);
+                if (!$rsa->verify($this->exchange_hash, $signature)) {
+                    user_error('Bad server signature');
+                    return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
+                }
+                */
+
+                $temp = unpack('Nlength', $this->_string_shift($signature, 4));
+                $s = new Math_BigInteger($this->_string_shift($signature, $temp['length']), 256);
+
+                // validate an RSA signature per "8.2 RSASSA-PKCS1-v1_5", "5.2.2 RSAVP1", and "9.1 EMSA-PSS" in the
+                // following URL:
+                // ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf
+
+                // also, see SSHRSA.c (rsa2_verifysig) in PuTTy's source.
+
+                if ($s->compare(new Math_BigInteger()) < 0 || $s->compare($n->subtract(new Math_BigInteger(1))) > 0) {
+                    user_error('Invalid signature');
+                    return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+                }
+
+                $s = $s->modPow($e, $n);
+                $s = $s->toBytes();
+
+                $h = pack('N4H*', 0x00302130, 0x0906052B, 0x0E03021A, 0x05000414, sha1($this->exchange_hash));
+                $h = chr(0x01) . str_repeat(chr(0xFF), $nLength - 3 - strlen($h)) . $h;
+
+                if ($s != $h) {
+                    user_error('Bad server signature');
+                    return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
+                }
+                break;
+            default:
+                user_error('Unsupported signature format');
+                return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
+        }
+
+        return $this->signature_format . ' ' . base64_encode($this->server_public_host_key);
+    }
+
+    /**
+     * Returns the exit status of an SSH command or false.
+     *
+     * @return Integer or false
+     * @access public
+     */
+    function getExitStatus()
+    {
+        if (is_null($this->exit_status)) {
+            return false;
+        }
+        return $this->exit_status;
+    }
+}
diff --git a/apps/files_external/3rdparty/phpseclib/phpseclib/openssl.cnf b/apps/files_external/3rdparty/phpseclib/phpseclib/openssl.cnf
new file mode 100644
index 0000000000000000000000000000000000000000..6baa566102c71629a2cb669f6d96d414e6f0e37d
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpseclib/openssl.cnf
@@ -0,0 +1,6 @@
+# minimalist openssl.cnf file for use with phpseclib
+
+HOME			= .
+RANDFILE		= $ENV::HOME/.rnd
+
+[ v3_ca ]
\ No newline at end of file
diff --git a/apps/files_external/3rdparty/phpseclib/phpunit.xml.dist b/apps/files_external/3rdparty/phpseclib/phpunit.xml.dist
new file mode 100644
index 0000000000000000000000000000000000000000..f579ab4fd27b31b74aa0e001d0542d3e1d781b14
--- /dev/null
+++ b/apps/files_external/3rdparty/phpseclib/phpunit.xml.dist
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpunit bootstrap="tests/bootstrap.php"
+         colors="true"
+>
+    <testsuites>
+        <testsuite name="phpseclib Test Suite">
+            <directory>./tests/</directory>
+        </testsuite>
+    </testsuites>
+
+    <!-- Code Coverage -->
+    <filter>
+        <whitelist>
+            <directory>./phpseclib/</directory>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/apps/files_external/appinfo/app.php b/apps/files_external/appinfo/app.php
index c58cfcd0f5e65927e3b5c4f919f5a4a6f993d199..d976c0175232bfe3364f84cca636a40a708765d1 100644
--- a/apps/files_external/appinfo/app.php
+++ b/apps/files_external/appinfo/app.php
@@ -14,6 +14,7 @@ OC::$CLASSPATH['OC\Files\Storage\SWIFT']='apps/files_external/lib/swift.php';
 OC::$CLASSPATH['OC\Files\Storage\SMB']='apps/files_external/lib/smb.php';
 OC::$CLASSPATH['OC\Files\Storage\AmazonS3']='apps/files_external/lib/amazons3.php';
 OC::$CLASSPATH['OC\Files\Storage\Dropbox']='apps/files_external/lib/dropbox.php';
+OC::$CLASSPATH['OC\Files\Storage\SFTP']='apps/files_external/lib/sftp.php';
 OC::$CLASSPATH['OC_Mount_Config']='apps/files_external/lib/config.php';
 
 OCP\App::registerAdmin('files_external', 'settings');
diff --git a/apps/files_external/l10n/bg_BG.php b/apps/files_external/l10n/bg_BG.php
index 1f2c29d54c5596ccbd7bf6d5f6b839b3c7c0fff7..6342da3f3a2fed64407017e0a9663aec98b1b73f 100644
--- a/apps/files_external/l10n/bg_BG.php
+++ b/apps/files_external/l10n/bg_BG.php
@@ -6,6 +6,7 @@
 "Backend" => "Администрация",
 "Configuration" => "Конфигурация",
 "Options" => "Опции",
+"Applicable" => "Приложимо",
 "None set" => "Няма избрано",
 "All Users" => "Всички потребители",
 "Groups" => "Групи",
diff --git a/apps/files_external/l10n/vi.php b/apps/files_external/l10n/vi.php
index 0160692cb65864fc8441d09446f52c2da5692a36..c522c669e1eae0b0822f5ba7fb64ef117cf2ac15 100644
--- a/apps/files_external/l10n/vi.php
+++ b/apps/files_external/l10n/vi.php
@@ -5,6 +5,8 @@
 "Fill out all required fields" => "Điền vào tất cả các trường bắt buộc",
 "Please provide a valid Dropbox app key and secret." => "Xin vui lòng cung cấp một ứng dụng Dropbox hợp lệ và mã bí mật.",
 "Error configuring Google Drive storage" => "Lỗi cấu hình lưu trữ Google Drive",
+"<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares is not possible. Please ask your system administrator to install it." => "<b>Cảnh báo:</b> \"smbclient\" chưa được cài đặt. Mount CIFS/SMB shares là không thể thực hiện được. Hãy hỏi người quản trị hệ thống để cài đặt nó.",
+"<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting of FTP shares is not possible. Please ask your system administrator to install it." => "<b>Cảnh báo:</b> FTP trong PHP chưa được cài đặt hoặc chưa được  mở. Mount FTP shares là không thể. Xin hãy yêu cầu quản trị hệ thống của bạn cài đặt nó.",
 "External Storage" => "Lưu trữ ngoài",
 "Mount point" => "Điểm gắn",
 "Backend" => "phụ trợ",
diff --git a/apps/files_external/lib/config.php b/apps/files_external/lib/config.php
index 6b0df21461baee69a745f68940475dd0c1d41f65..d78c69e83db317f6c956a31aa1be2cec68087929 100755
--- a/apps/files_external/lib/config.php
+++ b/apps/files_external/lib/config.php
@@ -104,6 +104,14 @@ class OC_Mount_Config {
 				'password' => '*Password',
 				'root' => '&Root',
 				'secure' => '!Secure https://'));
+				
+		$backends['\OC\Files\Storage\SFTP']=array(
+			'backend' => 'SFTP',
+			'configuration' => array(
+				'host' => 'URL',
+				'user' => 'Username', 
+				'password' => '*Password', 
+				'root' => '&Root'));
 
 		return($backends);
 	}
@@ -386,7 +394,7 @@ class OC_Mount_Config {
 	}
 
 	/**
-	 * check if php-ftp is installed
+	 * check if php-ftp is installed 
 	 */
 	public static function checkphpftp() {
 		if(function_exists('ftp_login')) {
diff --git a/apps/files_external/lib/sftp.php b/apps/files_external/lib/sftp.php
new file mode 100644
index 0000000000000000000000000000000000000000..551a5a64ef2f6e32347c32f28d59f54683ce9523
--- /dev/null
+++ b/apps/files_external/lib/sftp.php
@@ -0,0 +1,291 @@
+<?php
+/**
+ * Copyright (c) 2012 Henrik Kjölhede <hkjolhede@gmail.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Files\Storage;
+
+set_include_path(get_include_path() . PATH_SEPARATOR . \OC_App::getAppPath('files_external') . '/3rdparty/phpseclib/phpseclib');
+require('Net/SFTP.php');
+
+class SFTP extends \OC\Files\Storage\Common {
+	private $host;
+	private $user;
+	private $password;
+	private $root;
+
+	private $client;
+
+	private static $tempFiles = array();
+
+	public function __construct($params) {
+		$this->host = $params['host'];
+		$proto = strpos($this->host, '://');
+		if ($proto != false) {
+			$this->host = substr($this->host, $proto+3);
+		}
+		$this->user = $params['user'];
+		$this->password = $params['password'];
+		$this->root = isset($params['root']) ? $this->cleanPath($params['root']) : '/';
+		if ($this->root[0] != '/') $this->root = '/' . $this->root;
+		if (substr($this->root, -1, 1) != '/') $this->root .= '/';
+		
+		$host_keys = $this->read_host_keys();
+
+		$this->client = new \Net_SFTP($this->host);
+		if (!$this->client->login($this->user, $this->password)) {
+			throw new \Exception('Login failed');
+		}
+
+		$current_host_key = $this->client->getServerPublicHostKey();
+
+		if (array_key_exists($this->host, $host_keys)) {
+			if ($host_keys[$this->host] != $current_host_key) {
+				throw new \Exception('Host public key does not match known key');
+			}
+		} else {
+			$host_keys[$this->host] = $current_host_key;
+			$this->write_host_keys($host_keys);
+		}
+		
+		if(!$this->file_exists('')){
+			$this->mkdir('');
+		}
+	}
+	
+	public function test() {
+		if (!isset($params['host']) || !isset($params['user']) || !isset($params['password'])) {
+			throw new \Exception("Required parameters not set");
+		}	
+	}
+	
+	public function getId(){
+		return 'sftp::' . $this->user . '@' . $this->host . '/' . $this->root;
+	}
+
+	private function abs_path($path) {
+		return $this->root . $this->cleanPath($path);
+	}
+
+	private function host_keys_path() {
+		try {
+			$storage_view = \OCP\Files::getStorage('files_external');
+			if ($storage_view) {
+				return \OCP\Config::getSystemValue('datadirectory') .
+					$storage_view->getAbsolutePath('') .
+					'ssh_host_keys';
+			}
+		} catch (\Exception $e) {
+		}
+		return false;
+	}
+
+	private function write_host_keys($keys) {
+		try {
+			$key_path = $this->host_keys_path();
+			$fp = fopen($key_path, 'w');
+			foreach ($keys as $host => $key) {
+				fwrite($fp, $host . '::' . $key . "\n");
+			}
+			fclose($fp);
+			return true;
+		} catch (\Exception $e) {
+			return false;
+		}
+	}
+
+	private function read_host_keys() {
+		try {
+			$key_path = $this->host_keys_path();
+			if (file_exists($key_path)) {
+				$hosts = array();
+				$keys = array();
+				$lines = file($key_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
+				if ($lines) {
+					foreach ($lines as $line) {
+						$host_key_arr = explode("::", $line, 2);
+						if (count($host_key_arr) == 2) {
+							$hosts[] = $host_key_arr[0];
+							$keys[] = $host_key_arr[1]; 
+						}
+					}
+					return array_combine($hosts, $keys);
+				}
+			}
+		} catch (\Exception $e) {
+		}
+		return array();
+	}
+
+	public function mkdir($path) {
+		try {
+			return $this->client->mkdir($this->abs_path($path));
+		} catch (\Exception $e) {
+			return false;
+		}
+	}
+
+	public function rmdir($path) {
+		try {
+			return $this->client->delete($this->abs_path($path), true);
+		} catch (\Exception $e) {
+			return false;
+		}
+	}
+
+	public function opendir($path) {
+		try {
+			$list = $this->client->nlist($this->abs_path($path));
+
+			$id = md5('sftp:' . $path);
+			$dir_stream = array();
+			foreach($list as $file) {
+				if ($file != '.' && $file != '..') {
+					$dir_stream[] = $file;
+				}
+			}
+			\OC\Files\Stream\Dir::register($id, $dir_stream);
+			return opendir('fakedir://' . $id);
+		} catch(\Exception $e) {
+			return false;
+		}
+	}
+
+	public function filetype($path) {
+		try {
+			$stat = $this->client->stat($this->abs_path($path));
+			if ($stat['type'] == NET_SFTP_TYPE_REGULAR) return 'file';
+			if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) return 'dir';
+		} catch (\Exeption $e) {
+		}
+		return false;
+	}
+
+	public function isReadable($path) {
+		return true;
+	}
+
+	public function isUpdatable($path) {
+		return true;
+	}
+
+	public function file_exists($path) {
+		try {
+			return $this->client->stat($this->abs_path($path)) === false ? false : true;
+		} catch (\Exception $e) {
+			return false;
+		}
+	}
+
+	public function unlink($path) {
+		try {
+			return $this->client->delete($this->abs_path($path), true);
+		} catch (\Exception $e) {
+			return false;
+		}
+	}
+
+	public function fopen($path, $mode) {
+		try {
+			$abs_path = $this->abs_path($path);
+			switch($mode) {
+				case 'r':
+				case 'rb':
+					if ( !$this->file_exists($path)) return false;
+					if (strrpos($path, '.')!==false) {
+						$ext=substr($path, strrpos($path, '.'));
+					} else {
+						$ext='';
+					}
+					$tmp = \OC_Helper::tmpFile($ext);
+					$this->getFile($abs_path, $tmp);
+					return fopen($tmp, $mode);
+		
+				case 'w':
+				case 'wb':
+				case 'a':
+				case 'ab':
+				case 'r+':
+				case 'w+':
+				case 'wb+':
+				case 'a+':
+				case 'x':
+				case 'x+':
+				case 'c':
+				case 'c+':
+					if (strrpos($path, '.')!==false) {
+						$ext=substr($path, strrpos($path, '.'));
+					} else {
+						$ext='';
+					}
+					$tmpFile=\OC_Helper::tmpFile($ext);
+					\OC\Files\Stream\Close::registerCallback($tmpFile, array($this, 'writeBack'));
+					if ($this->file_exists($path)) {
+						$this->getFile($abs_path, $tmpFile);
+					}
+					self::$tempFiles[$tmpFile]=$abs_path;
+					return fopen('close://'.$tmpFile, $mode);
+			}
+		} catch (\Exception $e) {
+		}
+		return false;
+	}
+
+	public function writeBack($tmpFile) {
+		if (array_key_exists($tmpFile, self::$tempFiles)) {
+			$this->uploadFile($tmpFile, self::$tempFiles[$tmpFile]);
+			unlink($tmpFile);
+			unset(self::$tempFiles[$tmpFile]);
+		}
+	}
+
+	public function free_space($path) {
+		return -1;
+	}
+
+	public function touch($path, $mtime=null) {
+		try {
+			if (!is_null($mtime)) return false;
+			if (!$this->file_exists($path)) {
+				$this->client->put($this->abs_path($path), '');
+			} else {
+				return false;
+			}
+		} catch (\Exception $e) {
+			return false;
+		}
+		return true;
+	}
+
+	public function getFile($path, $target) {
+		$this->client->get($path, $target);
+	}
+
+	public function uploadFile($path, $target) {
+		$this->client->put($target, $path, NET_SFTP_LOCAL_FILE);
+	}
+
+	public function rename($source, $target) {
+		try {
+			return $this->client->rename($this->abs_path($source), $this->abs_path($target));
+		} catch (\Exception $e) {
+			return false;
+		}
+	}
+
+	public function stat($path) {
+		try {
+			$stat = $this->client->stat($this->abs_path($path));
+
+			$mtime = $stat ? $stat['mtime'] : -1;
+			$size = $stat ? $stat['size'] : 0;
+
+			return array('mtime' => $mtime, 'size' => $size, 'ctime' => -1);
+		} catch (\Exception $e) {
+			return false;
+		}
+
+	}
+}
diff --git a/apps/files_external/tests/config.php b/apps/files_external/tests/config.php
index 65127175ad7dea93a567cf9c8bc4e893910844d8..1d4f30c713dd00e098172da16be1a81453f0754f 100644
--- a/apps/files_external/tests/config.php
+++ b/apps/files_external/tests/config.php
@@ -8,7 +8,7 @@ return array(
 		'root'=>'/test',
 	),
 	'webdav'=>array(
-		'run'=>true,
+		'run'=>false,
 		'host'=>'localhost',
 		'user'=>'test',
 		'password'=>'test',
@@ -30,7 +30,7 @@ return array(
 		'root'=>'/',
 	),
 	'smb'=>array(
-		'run'=>true,
+		'run'=>false,
 		'user'=>'test',
 		'password'=>'test',
 		'host'=>'localhost',
@@ -51,5 +51,12 @@ return array(
 		'app_secret' => '',
 		'token' => '',
 		'token_secret' => ''
+	),
+	'sftp' => array (
+		'run'=>false,
+		'host'=>'localhost',
+		'user'=>'test',
+		'password'=>'test',
+		'root'=>'/test'
 	)
 );
diff --git a/apps/files_external/tests/sftp.php b/apps/files_external/tests/sftp.php
new file mode 100644
index 0000000000000000000000000000000000000000..16964e208781c34b4d8ecce4d90230496b51c2fe
--- /dev/null
+++ b/apps/files_external/tests/sftp.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * ownCloud
+ *
+ * @author Henrik Kjölhede
+ * @copyright 2013 Henrik Kjölhede hkjolhede@gmail.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library 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 along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace Test\Files\Storage;
+
+class SFTP extends Storage {
+	private $config;
+
+	public function setUp() {
+		$id = uniqid();
+		$this->config = include('files_external/tests/config.php');
+		if ( ! is_array($this->config) or ! isset($this->config['sftp']) or ! $this->config['sftp']['run']) {
+			$this->markTestSkipped('SFTP backend not configured');
+		}
+		$this->config['sftp']['root'] .= '/' . $id; //make sure we have an new empty folder to work in
+		$this->instance = new \OC\Files\Storage\SFTP($this->config['sftp']);
+	}
+
+	public function tearDown() {
+		if ($this->instance) {
+			$this->instance->rmdir('/');
+		}
+	}
+}
\ No newline at end of file
diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php
index 46a601cfdde60523138e5f2c7181b4b1b53453b1..1aceb8ffefddf48976038ab74d2c0d7d8755fa7a 100644
--- a/apps/files_trashbin/index.php
+++ b/apps/files_trashbin/index.php
@@ -67,8 +67,8 @@ foreach ($result as $r) {
 }
 
 // Make breadcrumb
-$breadcrumb = array(array('dir' => '', 'name' => 'Trash'));
-$pathtohere = '';
+$pathtohere = '';
+$breadcrumb = array();
 foreach (explode('/', $dir) as $i) {
 	if ($i != '') {
 		if ( preg_match('/^(.+)\.d[0-9]+$/', $i, $match) ) {
diff --git a/apps/files_trashbin/l10n/bg_BG.php b/apps/files_trashbin/l10n/bg_BG.php
index 681c1dc5802b6701031e1398243e2eb0276d8e22..2e6309c22b58f9889c22c9730345b8dbc175a3d2 100644
--- a/apps/files_trashbin/l10n/bg_BG.php
+++ b/apps/files_trashbin/l10n/bg_BG.php
@@ -1,3 +1,4 @@
 <?php $TRANSLATIONS = array(
-"Name" => "Име"
+"Name" => "Име",
+"Restore" => "Възтановяване"
 );
diff --git a/apps/files_trashbin/l10n/el.php b/apps/files_trashbin/l10n/el.php
index 83e359890ea53d4cc68f04f83e1cb4fa78508a0a..bc3c2350da66aac3c1b38c596973dda144bd723c 100644
--- a/apps/files_trashbin/l10n/el.php
+++ b/apps/files_trashbin/l10n/el.php
@@ -1,8 +1,14 @@
 <?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "Αδύνατη η μόνιμη διαγραφή του %s",
+"Couldn't restore %s" => "Αδυναμία επαναφοράς %s",
+"perform restore operation" => "εκτέλεση λειτουργία επαναφοράς",
+"delete file permanently" => "μόνιμη διαγραφή αρχείου",
 "Name" => "Όνομα",
+"Deleted" => "Διαγράφηκε",
 "1 folder" => "1 φάκελος",
 "{count} folders" => "{count} φάκελοι",
 "1 file" => "1 αρχείο",
 "{count} files" => "{count} αρχεία",
+"Nothing in here. Your trash bin is empty!" => "Δεν υπάρχει τίποτα εδώ. Ο κάδος σας είναι άδειος!",
 "Restore" => "Επαναφορά"
 );
diff --git a/apps/files_trashbin/l10n/pt_PT.php b/apps/files_trashbin/l10n/pt_PT.php
index 79930315b0eb9bca9ed9484494bc5ba713d701e3..978ab452d6eb59c66e1585e628e3e2bfce13ddf0 100644
--- a/apps/files_trashbin/l10n/pt_PT.php
+++ b/apps/files_trashbin/l10n/pt_PT.php
@@ -1,5 +1,8 @@
 <?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "Não foi possível eliminar %s de forma permanente",
+"Couldn't restore %s" => "Não foi possível restaurar %s",
 "perform restore operation" => "Restaurar",
+"delete file permanently" => "Eliminar permanentemente o(s) ficheiro(s)",
 "Name" => "Nome",
 "Deleted" => "Apagado",
 "1 folder" => "1 pasta",
diff --git a/apps/files_trashbin/l10n/ru_RU.php b/apps/files_trashbin/l10n/ru_RU.php
index c5b1408e2cc0e9a75f2ff3a5e1ca1fd6ffe12fd3..379ee37af83d491b6897ca6e368536696efd9b31 100644
--- a/apps/files_trashbin/l10n/ru_RU.php
+++ b/apps/files_trashbin/l10n/ru_RU.php
@@ -1,8 +1,14 @@
 <?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "%s не может быть удалён навсегда",
+"Couldn't restore %s" => "%s не может быть восстановлен",
+"perform restore operation" => "выполнить операцию восстановления",
+"delete file permanently" => "удалить файл навсегда",
 "Name" => "Имя",
+"Deleted" => "Удалён",
 "1 folder" => "1 папка",
 "{count} folders" => "{количество} папок",
 "1 file" => "1 файл",
 "{count} files" => "{количество} файлов",
+"Nothing in here. Your trash bin is empty!" => "Здесь ничего нет. Ваша корзина пуста!",
 "Restore" => "Восстановить"
 );
diff --git a/apps/files_trashbin/l10n/vi.php b/apps/files_trashbin/l10n/vi.php
index 2c51c69aaf25944967175e07a4c113677e012a6f..ac2a7be02917b305c119818ad24c4da6cd473e8e 100644
--- a/apps/files_trashbin/l10n/vi.php
+++ b/apps/files_trashbin/l10n/vi.php
@@ -1,7 +1,14 @@
 <?php $TRANSLATIONS = array(
+"Couldn't delete %s permanently" => "Không thể óa %s vĩnh viễn",
+"Couldn't restore %s" => "Không thể khôi phục %s",
+"perform restore operation" => "thực hiện phục hồi",
+"delete file permanently" => "xóa file vĩnh viễn",
 "Name" => "Tên",
+"Deleted" => "Đã xóa",
 "1 folder" => "1 thư mục",
 "{count} folders" => "{count} thư mục",
 "1 file" => "1 tập tin",
-"{count} files" => "{count} tập tin"
+"{count} files" => "{count} tập tin",
+"Nothing in here. Your trash bin is empty!" => "Không có gì ở đây. Thùng rác của bạn rỗng!",
+"Restore" => "Khôi phục"
 );
diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php
index bc6562b2080d569b59262ccfa1290e12efd2e973..d88dc1ac252b7446847ab89d90d51eef3df73fc2 100644
--- a/apps/files_trashbin/lib/trash.php
+++ b/apps/files_trashbin/lib/trash.php
@@ -25,6 +25,8 @@ namespace OCA\Files_Trashbin;
 class Trashbin {
 	
 	const DEFAULT_RETENTION_OBLIGATION=180; // how long do we keep files in the trash bin if no other value is defined in the config file (unit: days)
+	const DEFAULTMAXSIZE=50; // unit: percentage; 50% of available disk space/quota
+	
 	/**
 	 * move file to the trash bin
 	 * 
@@ -49,10 +51,14 @@ class Trashbin {
 			$type = 'dir';
 		} else {
 			$type = 'file';
-		}
+		}
+		
+		if (  ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) {
+			$trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin'));
+			$trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin'));
+		}
+		$trashbinSize += self::copy_recursive($file_path, 'files_trashbin/'.$deleted.'.d'.$timestamp, $view);
 
-		self::copy_recursive($file_path, 'files_trashbin/'.$deleted.'.d'.$timestamp, $view);
-		
 		if ( $view->file_exists('files_trashbin/'.$deleted.'.d'.$timestamp) ) {
 			$query = \OC_DB::prepare("INSERT INTO *PREFIX*files_trash (id,timestamp,location,type,mime,user) VALUES (?,?,?,?,?,?)");
 			$result = $query->execute(array($deleted, $timestamp, $location, $type, $mime, $user));
@@ -63,10 +69,12 @@ class Trashbin {
 			}
 	
 			if ( \OCP\App::isEnabled('files_versions') ) {
-				if ( $view->is_dir('files_versions'.$file_path) ) {
+				if ( $view->is_dir('files_versions'.$file_path) ) {
+					$trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_versions/'.$file_path));
 					$view->rename('files_versions'.$file_path, 'versions_trashbin/'. $deleted.'.d'.$timestamp);
 				} else if ( $versions = \OCA\Files_Versions\Storage::getVersions($file_path) ) {
-					foreach ($versions as $v) {
+					foreach ($versions as $v) {
+						$trashbinSize += $view->filesize('files_versions'.$v['path'].'.v'.$v['version']);
 						$view->rename('files_versions'.$v['path'].'.v'.$v['version'], 'versions_trashbin/'. $deleted.'.v'.$v['version'].'.d'.$timestamp);
 					}
 				}
@@ -75,7 +83,26 @@ class Trashbin {
 			\OC_Log::write('files_trashbin', 'Couldn\'t move '.$file_path.' to the trash bin' , \OC_log::ERROR);
 		}
 		
-		self::expire();
+		// get available disk space for user
+		$quota = \OCP\Util::computerFileSize(\OC_Preferences::getValue($user, 'files', 'quota'));
+		if ( $quota == null ) {
+			$quota = \OCP\Util::computerFileSize(\OC_Appconfig::getValue('files', 'default_quota'));
+		}
+		if ( $quota == null ) {
+			$quota = \OC\Files\Filesystem::free_space('/');
+		}
+		
+		// calculate available space for trash bin
+		$rootInfo = $view->getFileInfo('/files');
+		$free = $quota-$rootInfo['size']; // remaining free space for user
+		if ( $free > 0 ) {
+			$availableSpace = ($free * self::DEFAULTMAXSIZE / 100) - $trashbinSize; // how much space can be used for versions
+		} else {
+			$availableSpace = $free-$trashbinSize;
+		}
+		
+		$trashbinSize -= self::expire($availableSpace);
+		\OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize);
 	}
 	
 	
@@ -86,10 +113,13 @@ class Trashbin {
 	 * @param $timestamp time when the file was deleted
 	 */
 	public static function restore($file, $filename, $timestamp) {
-
 		$user = \OCP\User::getUser();
 		$view = new \OC_FilesystemView('/'.$user);
 		
+		if (  ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) {
+			$trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin'));
+			$trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin'));
+		}
 		if ( $timestamp ) {
 			$query = \OC_DB::prepare('SELECT location,type FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?');
 			$result = $query->execute(array($user,$filename,$timestamp))->fetchAll();
@@ -122,16 +152,29 @@ class Trashbin {
 		$mtime = $view->filemtime($source);
 		if( $view->rename($source, $target.$ext) ) {
 			$view->touch($target.$ext, $mtime);
+			if ($view->is_dir($target.$ext)) {
+				$trashbinSize -= self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.$target.$ext));
+			} else {
+				$trashbinSize -= $view->filesize($target.$ext);
+			}
 			// if versioning app is enabled, copy versions from the trash bin back to the original location
-			if ( \OCP\App::isEnabled('files_versions') ) {
-				if ( $result[0]['type'] == 'dir' ) {
+			if ( \OCP\App::isEnabled('files_versions') ) {
+				if ($timestamp ) {
+					$versionedFile = $filename;
+				} else {
+					$versionedFile = $file;
+				}
+				if ( $result[0]['type'] == 'dir' ) {
+					$trashbinSize -= self::calculateSize(new \OC_FilesystemView('/'.$user.'/'.'versions_trashbin/'. $file));
 					$view->rename(\OC_Filesystem::normalizePath('versions_trashbin/'. $file), \OC_Filesystem::normalizePath('files_versions/'.$location.'/'.$filename.$ext));
-				} else if ( $versions = self::getVersionsFromTrash($file, $timestamp) ) {
+				} else if ( $versions = self::getVersionsFromTrash($versionedFile, $timestamp) ) {
 					foreach ($versions as $v) {
 						if ($timestamp ) {
-							$view->rename('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v);
+							$trashbinSize -= $view->filesize('versions_trashbin/'.$versionedFile.'.v'.$v.'.d'.$timestamp);
+							$view->rename('versions_trashbin/'.$versionedFile.'.v'.$v.'.d'.$timestamp, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v);
 						} else {
-							$view->rename('versions_trashbin/'.$file.'.v'.$v, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v);
+							$trashbinSize -= $view->filesize('versions_trashbin/'.$versionedFile.'.v'.$v);
+							$view->rename('versions_trashbin/'.$versionedFile.'.v'.$v, 'files_versions/'.$location.'/'.$filename.$ext.'.v'.$v);
 						}
 					}
 				}
@@ -142,6 +185,7 @@ class Trashbin {
 				$query->execute(array($user,$filename,$timestamp));
 			}
 
+			\OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize);
 			return true;
 		} else {
 			\OC_Log::write('files_trashbin', 'Couldn\'t restore file from trash bin, '.$filename , \OC_log::ERROR);
@@ -154,13 +198,18 @@ class Trashbin {
 	 * delete file from trash bin permanently
 	 * @param $filename path to the file
 	 * @param $timestamp of deletion time
-	 * @return true/false
+	 * @return size of deleted files
 	 */
 	public static function delete($filename, $timestamp=null) {
-	
 		$user = \OCP\User::getUser();
-		$view = new \OC_FilesystemView('/'.$user);
-	
+		$view = new \OC_FilesystemView('/'.$user);
+		$size = 0;
+	
+		if (  ($trashbinSize = \OCP\Config::getAppValue('files_trashbin', 'size')) === null ) {
+			$trashbinSize = self::calculateSize(new \OC_FilesystemView('/'. $user.'/files_trashbin'));
+			$trashbinSize += self::calculateSize(new \OC_FilesystemView('/'. $user.'/versions_trashbin'));
+		}
+
 		if ( $timestamp ) {
 			$query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND id=? AND timestamp=?');
 			$query->execute(array($user,$filename,$timestamp));
@@ -171,31 +220,43 @@ class Trashbin {
 		
 		if ( \OCP\App::isEnabled('files_versions') ) {
 			if ($view->is_dir('versions_trashbin/'.$file)) {
+				$size += self::calculateSize(new \OC_Filesystemview('/'.$user.'/versions_trashbin/'.$file));
 				$view->unlink('versions_trashbin/'.$file);
-			} else if ( $versions = self::getVersionsFromTrash($file, $timestamp) ) {
+			} else if ( $versions = self::getVersionsFromTrash($filename, $timestamp) ) {
 				foreach ($versions as $v) {
 					if ($timestamp ) {
-						$view->unlink('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp);
+						$size += $view->filesize('/versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp);
+						$view->unlink('/versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp);
 					} else {
-						$view->unlink('versions_trashbin/'.$file.'.v'.$v);
+						$size += $view->filesize('/versions_trashbin/'.$filename.'.v'.$v);
+						$view->unlink('/versions_trashbin/'.$filename.'.v'.$v);
 					}
 				}
 			}
 		}
 	
+		if ($view->is_dir('/files_trashbin/'.$file)) {
+			$size += self::calculateSize(new \OC_Filesystemview('/'.$user.'/files_trashbin/'.$file));
+		} else {
+			$size += $view->filesize('/files_trashbin/'.$file);
+		}
 		$view->unlink('/files_trashbin/'.$file);
+		$trashbinSize -= $size;
+		\OCP\Config::setAppValue('files_trashbin', 'size', $trashbinSize);
 		
-		return true;
+		return $size;
 	}
 	
 	
 	/**
-	 * clean up the trash bin
+	 * clean up the trash bin
+	 * @param max. available disk space for trashbin
 	 */
-	private static function expire() {
+	private static function expire($availableSpace) {
 		
-		$view = new \OC_FilesystemView('/'.\OCP\User::getUser());
 		$user = \OCP\User::getUser();
+		$view = new \OC_FilesystemView('/'.$user);
+		$size = 0;
 		
 		$query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash WHERE user=?');
 		$result = $query->execute(array($user))->fetchAll();
@@ -208,11 +269,18 @@ class Trashbin {
 			$timestamp = $r['timestamp'];
 			$filename = $r['id'];
 			if ( $r['timestamp'] < $limit ) {
+				if ($view->is_dir('files_trashbin/'.$filename.'.d'.$timestamp)) {
+					$size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/files_trashbin/'.$filename.'.d'.$timestamp));
+				} else {
+					$size += $view->filesize('files_trashbin/'.$filename.'.d'.$timestamp);
+				}
 				$view->unlink('files_trashbin/'.$filename.'.d'.$timestamp);
 				if ($r['type'] == 'dir') {
+					$size += self::calculateSize(new \OC_FilesystemView('/'.$user.'/versions_trashbin/'.$filename.'.d'.$timestamp));
 					$view->unlink('versions_trashbin/'.$filename.'.d'.$timestamp);
 				} else if ( $versions = self::getVersionsFromTrash($filename, $timestamp) ) {
 					foreach ($versions as $v) {
+						$size += $view->filesize('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp);
 						$view->unlink('versions_trashbin/'.$filename.'.v'.$v.'.d'.$timestamp);
 					}			
 				}
@@ -220,7 +288,25 @@ class Trashbin {
 		}
 		
 		$query = \OC_DB::prepare('DELETE FROM *PREFIX*files_trash WHERE user=? AND timestamp<?');
-		$query->execute(array($user,$limit));
+		$query->execute(array($user,$limit));
+		
+		$availableSpace = $availableSpace + $size;
+		// if size limit for trash bin reached, delete oldest files in trash bin
+		if ($availableSpace < 0) {
+			$query = \OC_DB::prepare('SELECT location,type,id,timestamp FROM *PREFIX*files_trash WHERE user=? ORDER BY timestamp ASC');
+			$result = $query->execute(array($user))->fetchAll();
+			$length = count($result);
+			$i = 0;
+			while ( $i < $length &&   $availableSpace < 0 ) {
+				$tmp = self::delete($result[$i]['id'], $result[$i]['timestamp']);
+				$availableSpace += $tmp;
+				$size += $tmp;
+				$i++;
+			}
+			
+		}
+		
+		return $size;
 	}
 	
 	/**
@@ -231,22 +317,26 @@ class Trashbin {
 	 * @param $view file view for the users root directory
 	 */
 	private static function copy_recursive( $source, $destination, $view ) {
+		$size = 0;
 		if ( $view->is_dir( 'files'.$source ) ) {
 			$view->mkdir( $destination );
 			$view->touch($destination,  $view->filemtime('files'.$source));
 			foreach ( \OC_Files::getDirectoryContent($source) as $i ) {
 				$pathDir = $source.'/'.$i['name'];
 				if ( $view->is_dir('files'.$pathDir) ) {
-					self::copy_recursive($pathDir, $destination.'/'.$i['name'], $view);
+					$size += self::copy_recursive($pathDir, $destination.'/'.$i['name'], $view);
 				} else {
+					$size += $view->filesize('files'.$pathDir);
 					$view->copy( 'files'.$pathDir, $destination . '/' . $i['name'] );
 					$view->touch($destination . '/' . $i['name'], $view->filemtime('files'.$pathDir));
 				}
 			}
 		} else {
+			$size += $view->filesize('files'.$source);
 			$view->copy( 'files'.$source, $destination );
 			$view->touch($destination, $view->filemtime('files'.$source));
 		}
+		return $size;
 	}
 	
 	/**
@@ -257,8 +347,7 @@ class Trashbin {
 	private static function getVersionsFromTrash($filename, $timestamp) {
 		$view = new \OC_FilesystemView('/'.\OCP\User::getUser().'/versions_trashbin');
 		$versionsName = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath($filename);
-		$versions = array();
-		
+		$versions = array();
 		if ($timestamp ) {
 		// fetch for old versions
 			$matches = glob( $versionsName.'.v*.d'.$timestamp );
@@ -300,4 +389,23 @@ class Trashbin {
 		return $ext;
 	}
 
+	/**
+	 * @brief get the size from a given root folder
+	 * @param $view file view on the root folder
+	 * @return size of the folder
+	 */
+	private static function calculateSize($view) {
+		$root = \OCP\Config::getSystemValue('datadirectory').$view->getAbsolutePath('');
+		$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($root), \RecursiveIteratorIterator::CHILD_FIRST);
+		$size = 0;
+		
+		foreach ($iterator as $path) {
+			$relpath = substr($path, strlen($root)-1);
+			if ( !$view->is_dir($relpath) ) {
+				$size += $view->filesize($relpath);
+			}
+		}
+		return $size;
+	}
+	
 }
diff --git a/apps/files_trashbin/templates/index.php b/apps/files_trashbin/templates/index.php
index 24e4a0e6c697249c5aeb5a5150028c747616bcaa..c3e51b4becdfe4d5aad5e30a61c508453416000f 100644
--- a/apps/files_trashbin/templates/index.php
+++ b/apps/files_trashbin/templates/index.php
@@ -9,7 +9,7 @@
 	<div id="emptyfolder"><?php echo $l->t('Nothing in here. Your trash bin is empty!')?></div>
 <?php endif; ?>
 
-<table class="hascontrols">
+<table>
 	<thead>
 		<tr>
 			<th id='headerName'>
diff --git a/apps/files_versions/l10n/el.php b/apps/files_versions/l10n/el.php
index 6b189c2cdd398168d89a99c53f1b90cccfa73253..8b7ecf085fb6b20fb96c56d0836b664a49d6f0e1 100644
--- a/apps/files_versions/l10n/el.php
+++ b/apps/files_versions/l10n/el.php
@@ -1,5 +1,13 @@
 <?php $TRANSLATIONS = array(
+"Could not revert: %s" => "Αδυναμία επαναφοράς του: %s",
+"success" => "επιτυχία",
+"File %s was reverted to version %s" => "Το αρχείο %s επαναφέρθηκε στην έκδοση %s",
+"failure" => "αποτυχία",
+"File %s could not be reverted to version %s" => "Το αρχείο %s δεν είναι δυνατό να επαναφερθεί στην έκδοση %s",
+"No old versions available" => "Μη διαθέσιμες παλιές εκδόσεις",
+"No path specified" => "Δεν καθορίστηκε διαδρομή",
 "History" => "Ιστορικό",
+"Revert a file to a previous version by clicking on its revert button" => "Επαναφορά ενός αρχείου σε προηγούμενη έκδοση πατώντας στο κουμπί επαναφοράς",
 "Files Versioning" => "Εκδόσεις Αρχείων",
 "Enable" => "Ενεργοποίηση"
 );
diff --git a/apps/files_versions/l10n/pt_PT.php b/apps/files_versions/l10n/pt_PT.php
index dc1bde08cad0853c72c4eef5e9ec028dca68247f..629809f95560b74cc13706bfb83115c6cc00fec3 100644
--- a/apps/files_versions/l10n/pt_PT.php
+++ b/apps/files_versions/l10n/pt_PT.php
@@ -1,5 +1,13 @@
 <?php $TRANSLATIONS = array(
+"Could not revert: %s" => "Não foi possível reverter: %s",
+"success" => "Sucesso",
+"File %s was reverted to version %s" => "O ficheiro %s foi revertido para a versão %s",
+"failure" => "Falha",
+"File %s could not be reverted to version %s" => "Não foi possível reverter o ficheiro %s para a versão %s",
+"No old versions available" => "Não existem versões mais antigas",
+"No path specified" => "Nenhum caminho especificado",
 "History" => "Histórico",
+"Revert a file to a previous version by clicking on its revert button" => "Reverter um ficheiro para uma versão anterior clicando no seu botão reverter.",
 "Files Versioning" => "Versionamento de Ficheiros",
 "Enable" => "Activar"
 );
diff --git a/apps/files_versions/l10n/vi.php b/apps/files_versions/l10n/vi.php
index bb7163f6b1875bcafeb1f6f6f6b28502ee9adb52..675cb841c789b9a01a803f86f1cd9e37b08a6ed3 100644
--- a/apps/files_versions/l10n/vi.php
+++ b/apps/files_versions/l10n/vi.php
@@ -1,5 +1,13 @@
 <?php $TRANSLATIONS = array(
+"Could not revert: %s" => "Không thể khôi phục: %s",
+"success" => "thành công",
+"File %s was reverted to version %s" => "File %s đã được khôi phục về phiên bản %s",
+"failure" => "Thất bại",
+"File %s could not be reverted to version %s" => "File %s không thể khôi phục về phiên bản %s",
+"No old versions available" => "Không có phiên bản cũ nào",
+"No path specified" => "Không chỉ ra đường dẫn rõ ràng",
 "History" => "Lịch sử",
+"Revert a file to a previous version by clicking on its revert button" => "Khôi phục một file về phiên bản trước đó bằng cách click vào nút Khôi phục tương ứng",
 "Files Versioning" => "Phiên bản tập tin",
 "Enable" => "Bật "
 );
diff --git a/apps/user_ldap/l10n/pt_PT.php b/apps/user_ldap/l10n/pt_PT.php
index 058e7ba25323abe9d78245223f73c023ea71f265..bfe6656b3b688df9c4aff407441a8688a09e5b10 100644
--- a/apps/user_ldap/l10n/pt_PT.php
+++ b/apps/user_ldap/l10n/pt_PT.php
@@ -43,6 +43,7 @@
 "Disable Main Server" => "Desactivar servidor principal",
 "When switched on, ownCloud will only connect to the replica server." => "Se estiver ligado, o ownCloud vai somente ligar-se a este servidor de réplicas.",
 "Use TLS" => "Usar TLS",
+"Do not use it additionally for LDAPS connections, it will fail." => "Não utilize para adicionar ligações LDAP, irá falhar!",
 "Case insensitve LDAP server (Windows)" => "Servidor LDAP (Windows) não sensível a maiúsculas.",
 "Turn off SSL certificate validation." => "Desligar a validação de certificado SSL.",
 "If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Se a ligação apenas funcionar com está opção, importe o certificado SSL do servidor LDAP para o seu servidor do ownCloud.",
diff --git a/apps/user_ldap/l10n/vi.php b/apps/user_ldap/l10n/vi.php
index 46054e4a4e21b3c07ca4f76b6595bb49b37f8562..4bbb977f36362ff85c5375811920f57e19b753ea 100644
--- a/apps/user_ldap/l10n/vi.php
+++ b/apps/user_ldap/l10n/vi.php
@@ -17,20 +17,30 @@
 "Group Filter" => "Bộ lọc nhóm",
 "Defines the filter to apply, when retrieving groups." => "Xác định các bộ lọc để áp dụng, khi nhóm sử dụng.",
 "without any placeholder, e.g. \"objectClass=posixGroup\"." => "mà không giữ chỗ nào, ví dụ như \"objectClass = osixGroup\".",
+"Connection Settings" => "Connection Settings",
 "Port" => "Cổng",
+"Backup (Replica) Port" => "Cổng sao lưu (Replica)",
+"Disable Main Server" => "Tắt máy chủ chính",
+"When switched on, ownCloud will only connect to the replica server." => "When switched on, ownCloud will only connect to the replica server.",
 "Use TLS" => "Sử dụng TLS",
+"Do not use it additionally for LDAPS connections, it will fail." => "Do not use it additionally for LDAPS connections, it will fail.",
 "Case insensitve LDAP server (Windows)" => "Trường hợp insensitve LDAP máy chủ (Windows)",
 "Turn off SSL certificate validation." => "Tắt xác thực chứng nhận SSL",
 "If connection only works with this option, import the LDAP server's SSL certificate in your ownCloud server." => "Nếu kết nối chỉ hoạt động với tùy chọn này, vui lòng import LDAP certificate SSL  trong máy chủ ownCloud của bạn.",
 "Not recommended, use for testing only." => "Không khuyến khích, Chỉ sử dụng để thử nghiệm.",
 "in seconds. A change empties the cache." => "trong vài giây. Một sự thay đổi bộ nhớ cache.",
+"Directory Settings" => "Directory Settings",
 "User Display Name Field" => "Hiển thị tên người sử dụng",
 "The LDAP attribute to use to generate the user`s ownCloud name." => "Các thuộc tính LDAP sử dụng để tạo tên người dùng ownCloud.",
 "Base User Tree" => "Cây người dùng cơ bản",
+"User Search Attributes" => "User Search Attributes",
+"Optional; one attribute per line" => "Optional; one attribute per line",
 "Group Display Name Field" => "Hiển thị tên nhóm",
 "The LDAP attribute to use to generate the groups`s ownCloud name." => "Các thuộc tính LDAP sử dụng để tạo các nhóm ownCloud.",
 "Base Group Tree" => "Cây nhóm cơ bản",
+"Group Search Attributes" => "Group Search Attributes",
 "Group-Member association" => "Nhóm thành viên Cộng đồng",
+"Special Attributes" => "Special Attributes",
 "in bytes" => "Theo Byte",
 "Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Để trống tên người dùng (mặc định). Nếu không chỉ định thuộc tính LDAP/AD",
 "Help" => "Giúp đỡ"
diff --git a/apps/user_webdavauth/l10n/vi.php b/apps/user_webdavauth/l10n/vi.php
index 9bd32954b058d9ad5c43d6604e9ba18e4bd559f3..ee2aa0891259b8874343f01577a6c50509c08b8f 100644
--- a/apps/user_webdavauth/l10n/vi.php
+++ b/apps/user_webdavauth/l10n/vi.php
@@ -1,3 +1,5 @@
 <?php $TRANSLATIONS = array(
-"WebDAV URL: http://" => "WebDAV URL: http://"
+"WebDAV Authentication" => "Xác thực WebDAV",
+"URL: http://" => "URL: http://",
+"ownCloud will send the user credentials to this URL. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "ownCloud sẽ gửi chứng thư người dùng tới URL này. Tính năng này kiểm tra trả lời và sẽ hiểu mã 401 và 403 của giao thức HTTP là chứng thư không hợp lệ, và mọi trả lời khác được coi là hợp lệ."
 );
diff --git a/config/config.sample.php b/config/config.sample.php
index cfef3d5117dd51220f9ba0ea7d5ac384a48e96d0..2f394c41a3bdc8a044659817a223c5b647713ab6 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -114,6 +114,9 @@ $CONFIG = array(
 /* How long should ownCloud keep deleted files in the trash bin, default value:  180 days */
 'trashbin_retention_obligation' => 180,
 
+/* allow user to change his display name, if it is supported by the back-end */
+'allow_user_to_change_display_name' => true,
+
 /* Check 3rdparty apps for malicious code fragments */
 "appcodechecker" => "",
 
diff --git a/core/css/styles.css b/core/css/styles.css
index e6a4bf6199530571f156fec6d4939e9b8802465d..d18c782c081673030dff8750002a6bd8d042062c 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -155,6 +155,7 @@ input[type="submit"].enabled { background:#66f866; border:1px solid #5e5; -moz-b
 }
 #adminpass-icon, #password-icon { top:1.1em; }
 input[name="password-clone"] { padding-left:1.8em; width:11.7em !important; }
+input[name="adminpass-clone"] { padding-left:1.8em; width:11.7em !important; }
 
 /* Nicely grouping input field sets */
 .grouptop input {
@@ -183,15 +184,16 @@ label.infield { cursor:text !important; top:1.05em; left:.85em; }
 #login form .errors { background:#fed7d7; border:1px solid #f00; list-style-indent:inside; margin:0 0 2em; padding:1em; }
 
 /* Show password toggle */
-#show {
-	position:absolute; right:1em; top:.8em; float:right;
-	display:none;
-}
-#show + label {
-	position:absolute!important; height:14px; width:24px; right:1em; top:1.25em!important;
+#show { position:absolute; right:1em; top:.8em; float:right; }
+#show, #personal-show { display:none; }
+#show + label { right:1em; top:1.25em!important; }
+#show:checked + label, #personal-show:checked + label { opacity:.8; }
+#show + label, #personal-show + label { 
+	position:absolute!important; height:14px; width:24px;
 	background-image:url("../img/actions/toggle.png"); background-repeat:no-repeat; opacity:.3;
 }
-#show:checked + label { opacity:.8; }
+#personal-show + label { margin-top:1em; }
+#passwordbutton { margin-left:2.5em; }
 
 /* Database selector */
 #login form #selectDbType { text-align:center; }
diff --git a/core/img/actions/close.png b/core/img/actions/close.png
new file mode 100644
index 0000000000000000000000000000000000000000..bc0c782882deaa4f9ecf1676592ddba0cc9aacbc
Binary files /dev/null and b/core/img/actions/close.png differ
diff --git a/core/img/actions/close.svg b/core/img/actions/close.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6a6d98e34ad84113dedfa7b5984ffaa8128622d9
--- /dev/null
+++ b/core/img/actions/close.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16"
+   height="16"
+   id="svg3875"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="close.svg"
+   inkscape:export-filename="close.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3877" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="12.67268"
+     inkscape:cx="11.940651"
+     inkscape:cy="15.685139"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="773"
+     inkscape:window-x="0"
+     inkscape:window-y="-1"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3883"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3880">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1036.3622)">
+    <path
+       style="fill:#000000;fill-opacity:1;stroke:none"
+       d="m 3,1040.3622 1,-1 4,3 4,-3 1,1 -3,4 3,4 -1,1 -4,-3 -4,3 -1,-1 3,-4 z"
+       id="path3086"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccc" />
+  </g>
+</svg>
diff --git a/core/img/actions/delete-hover.png b/core/img/actions/delete-hover.png
new file mode 100644
index 0000000000000000000000000000000000000000..08b15510d926eaddb2c59558120a8d0166c58486
Binary files /dev/null and b/core/img/actions/delete-hover.png differ
diff --git a/core/img/actions/delete-hover.svg b/core/img/actions/delete-hover.svg
new file mode 100644
index 0000000000000000000000000000000000000000..63cacd5e38e584b0afaee2265b273ab3a8063755
--- /dev/null
+++ b/core/img/actions/delete-hover.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="16"
+   height="16"
+   id="svg3875"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="delete.svg"
+   inkscape:export-filename="delete-hover.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3877" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="12.67268"
+     inkscape:cx="11.940651"
+     inkscape:cy="15.685139"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="773"
+     inkscape:window-x="0"
+     inkscape:window-y="-1"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3883"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3880">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1036.3622)">
+    <path
+       style="fill:#d40000;fill-opacity:1;stroke:none"
+       d="m 3,1040.3622 1,-1 4,3 4,-3 1,1 -3,4 3,4 -1,1 -4,-3 -4,3 -1,-1 3,-4 z"
+       id="path3086"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccc" />
+  </g>
+</svg>
diff --git a/core/img/actions/view-close.png b/core/img/actions/view-close.png
new file mode 100644
index 0000000000000000000000000000000000000000..80339d78229a0047c048fb1560cdd11f86aebbec
Binary files /dev/null and b/core/img/actions/view-close.png differ
diff --git a/core/img/actions/view-close.svg b/core/img/actions/view-close.svg
new file mode 100644
index 0000000000000000000000000000000000000000..45d66976084e8859b414ca9ea418610f23805dc9
--- /dev/null
+++ b/core/img/actions/view-close.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="32"
+   height="32"
+   id="svg3875"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="view-close.svg"
+   inkscape:export-filename="view-close.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3877" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.3363397"
+     inkscape:cx="4.7098147"
+     inkscape:cy="23.356371"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="773"
+     inkscape:window-x="0"
+     inkscape:window-y="-1"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3883"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3880">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <path
+       style="fill:#ffffff;fill-opacity:1;stroke:none"
+       d="m 6,1028.3622 2,-2 8,7 8,-7 2,2 -7,8 7,8 -2,2 -8,-7 -8,7 -2,-2 7,-8 z"
+       id="path3086"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccccccc" />
+  </g>
+</svg>
diff --git a/core/img/actions/view-next.png b/core/img/actions/view-next.png
new file mode 100644
index 0000000000000000000000000000000000000000..b76bea06713c6bd66eb4913a70f8ce88b55d5829
Binary files /dev/null and b/core/img/actions/view-next.png differ
diff --git a/core/img/actions/view-next.svg b/core/img/actions/view-next.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d5642f1a11cb50d4bd0c81bad1d1a732e4c45a0a
--- /dev/null
+++ b/core/img/actions/view-next.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="32"
+   height="32"
+   id="svg3875"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="view-next.svg"
+   inkscape:export-filename="view-next.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3877" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.3363398"
+     inkscape:cx="30.082863"
+     inkscape:cy="19.387471"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="773"
+     inkscape:window-x="0"
+     inkscape:window-y="-1"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3883"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3880">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <path
+       style="fill:#ffffff;fill-opacity:1;stroke:none"
+       d="m 9,1024.3622 2,-2 14,14 -14,14 -2,-2 10,-12 z"
+       id="path3086"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccc" />
+  </g>
+</svg>
diff --git a/core/img/actions/view-pause.png b/core/img/actions/view-pause.png
new file mode 100644
index 0000000000000000000000000000000000000000..64264ff9281a2114a7c662b93c96018ba5da9777
Binary files /dev/null and b/core/img/actions/view-pause.png differ
diff --git a/core/img/actions/view-pause.svg b/core/img/actions/view-pause.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0edc6f14e28059dce9fed6cea3c1235ab77bcffc
--- /dev/null
+++ b/core/img/actions/view-pause.svg
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="32"
+   height="32"
+   id="svg3875"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="pause.svg"
+   inkscape:export-filename="view-pause.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3877" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.3363397"
+     inkscape:cx="8.9383019"
+     inkscape:cy="10.400115"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="773"
+     inkscape:window-x="0"
+     inkscape:window-y="-1"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3883"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3880">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <path
+       style="fill:#ffffff;fill-opacity:1;stroke:none"
+       d="m 6,1026.3622 0,20 8,0 0,-20 -8,0 z m 12,0 0,20 8,0 0,-20 -8,0 z"
+       id="path3086"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/core/img/actions/view-play.png b/core/img/actions/view-play.png
new file mode 100644
index 0000000000000000000000000000000000000000..0080d45b5cdc57d396bba4ade8c42b36ea197edd
Binary files /dev/null and b/core/img/actions/view-play.png differ
diff --git a/core/img/actions/view-play.svg b/core/img/actions/view-play.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0bdc63bf7e1d07e21af60d0e8982c35059750be0
--- /dev/null
+++ b/core/img/actions/view-play.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="32"
+   height="32"
+   id="svg3875"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="play.svg"
+   inkscape:export-filename="view-play.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3877" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.3363397"
+     inkscape:cx="12.629914"
+     inkscape:cy="9.5218526"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="773"
+     inkscape:window-x="0"
+     inkscape:window-y="-1"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3883"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3880">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <path
+       style="fill:#ffffff;fill-opacity:1;stroke:none"
+       d="m 4,1024.3622 24,12 -24,12 z"
+       id="path3086"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccc" />
+  </g>
+</svg>
diff --git a/core/img/actions/view-previous.png b/core/img/actions/view-previous.png
new file mode 100644
index 0000000000000000000000000000000000000000..82943c23a59ca65b54c2882c4a2ea8901fb42998
Binary files /dev/null and b/core/img/actions/view-previous.png differ
diff --git a/core/img/actions/view-previous.svg b/core/img/actions/view-previous.svg
new file mode 100644
index 0000000000000000000000000000000000000000..df1f49511d070184f4f5d98311b8e2d60190d5d8
--- /dev/null
+++ b/core/img/actions/view-previous.svg
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="32"
+   height="32"
+   id="svg3875"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="view-next.svg"
+   inkscape:export-filename="view-previous.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3877" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="12.67268"
+     inkscape:cx="13.313675"
+     inkscape:cy="18.927817"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1280"
+     inkscape:window-height="773"
+     inkscape:window-x="0"
+     inkscape:window-y="-1"
+     inkscape:window-maximized="1">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3883"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata3880">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-1020.3622)">
+    <path
+       sodipodi:nodetypes="ccccccc"
+       inkscape:connector-curvature="0"
+       id="path2984"
+       d="m 23,1024.3622 -2,-2 -14,14 14,14 2,-2 -10,-12 z"
+       style="fill:#ffffff;fill-opacity:1;stroke:none" />
+  </g>
+</svg>
diff --git a/core/js/js.js b/core/js/js.js
index 5f1870eb6ceb28488e3f7285477131dedc2f8487..ae23c955c3865379e5f35a163dff57014d975879 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -628,7 +628,8 @@ $(document).ready(function(){
 	});
 
 	// 'show password' checkbox
-	$('#password').showPassword();	
+	$('#password').showPassword();
+	$('#adminpass').showPassword();	
 	$('#pass2').showPassword();
 
 	//use infield labels
diff --git a/core/l10n/bg_BG.php b/core/l10n/bg_BG.php
index 587991499a9011f669a3e1c1a9339ac865c26d9e..f2320f1340ee0e533f56c20fa39dc9749ebf33ce 100644
--- a/core/l10n/bg_BG.php
+++ b/core/l10n/bg_BG.php
@@ -11,6 +11,7 @@
 "Error" => "Грешка",
 "Share" => "Споделяне",
 "Password" => "Парола",
+"New password" => "Нова парола",
 "Personal" => "Лични",
 "Users" => "Потребители",
 "Apps" => "Приложения",
diff --git a/core/l10n/ca.php b/core/l10n/ca.php
index c60a818a4eed8b4f5be523bdebeedc4e5eb9c724..2126b96eddb3abd0fb71c42122f68c683e62dd87 100644
--- a/core/l10n/ca.php
+++ b/core/l10n/ca.php
@@ -109,6 +109,8 @@
 "Security Warning" => "Avís de seguretat",
 "No secure random number generator is available, please enable the PHP OpenSSL extension." => "No està disponible el generador de nombres aleatoris segurs, habiliteu l'extensió de PHP OpenSSL.",
 "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sense un generador de nombres aleatoris segurs un atacant podria predir els senyals per restablir la contrasenya i prendre-us el compte.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Per més informació sobre com configurar correctament el servidor, mireu la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentació</a>.",
 "Create an <strong>admin account</strong>" => "Crea un <strong>compte d'administrador</strong>",
 "Advanced" => "Avançat",
 "Data folder" => "Carpeta de dades",
diff --git a/core/l10n/cs_CZ.php b/core/l10n/cs_CZ.php
index c95854bc623aee8d36cfe65ccf4cf05033b546ce..331fcefd923bb055ff45b5b329fb2ab0fb20051a 100644
--- a/core/l10n/cs_CZ.php
+++ b/core/l10n/cs_CZ.php
@@ -109,6 +109,8 @@
 "Security Warning" => "Bezpečnostní upozornění",
 "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Není dostupný žádný bezpečný generátor náhodných čísel. Povolte, prosím, rozšíření OpenSSL v PHP.",
 "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez bezpečného generátoru náhodných čísel může útočník předpovědět token pro obnovu hesla a převzít kontrolu nad Vaším účtem.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Váš adresář s daty a soubory jsou dostupné z internetu, protože soubor .htaccess nefunguje.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Pro informace jak správně nastavit váš server se podívejte do <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">dokumentace</a>.",
 "Create an <strong>admin account</strong>" => "Vytvořit <strong>účet správce</strong>",
 "Advanced" => "Pokročilé",
 "Data folder" => "Složka s daty",
diff --git a/core/l10n/el.php b/core/l10n/el.php
index 01c6eb818a2d837a6f774dc4e7feb551a29609ad..54720f5ecb38ca5d28ce537e4c0fe97718008c63 100644
--- a/core/l10n/el.php
+++ b/core/l10n/el.php
@@ -5,6 +5,7 @@
 "User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Ο χρήστης %s διαμοιράστηκε τον φάκελο \"%s\" μαζί σας. Είναι διαθέσιμος για λήψη εδώ: %s",
 "Category type not provided." => "Δεν δώθηκε τύπος κατηγορίας.",
 "No category to add?" => "Δεν έχετε κατηγορία να προσθέσετε;",
+"This category already exists: %s" => "Αυτή η κατηγορία υπάρχει ήδη: %s",
 "Object type not provided." => "Δεν δώθηκε τύπος αντικειμένου.",
 "%s ID not provided." => "Δεν δώθηκε η ID για %s.",
 "Error adding %s to favorites." => "Σφάλμα προσθήκης %s στα αγαπημένα.",
diff --git a/core/l10n/es.php b/core/l10n/es.php
index a95d408a0bede3795479fbabcfeda1833abf4791..6e6c56205b7140df91c72bad39b7422beac0a5bf 100644
--- a/core/l10n/es.php
+++ b/core/l10n/es.php
@@ -109,6 +109,8 @@
 "Security Warning" => "Advertencia de seguridad",
 "No secure random number generator is available, please enable the PHP OpenSSL extension." => "No está disponible un generador de números aleatorios seguro, por favor habilite la extensión OpenSSL de PHP.",
 "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sin un generador de números aleatorios seguro un atacante podría predecir los tokens de reinicio de su contraseña y tomar control de su cuenta.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Su directorio de datos y sus archivos están probablemente accesibles a través de internet ya que el archivo .htaccess no está funcionando.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Para información sobre cómo configurar adecuadamente su servidor, por favor vea la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentación</a>.",
 "Create an <strong>admin account</strong>" => "Crea una <strong>cuenta de administrador</strong>",
 "Advanced" => "Avanzado",
 "Data folder" => "Directorio de almacenamiento",
diff --git a/core/l10n/fr.php b/core/l10n/fr.php
index ad8ff0a6fcadf98ed31586713b0aa4d4d413e701..630d541b11beb38f6c6c2c72d6ab5ca8c8dc0deb 100644
--- a/core/l10n/fr.php
+++ b/core/l10n/fr.php
@@ -109,6 +109,8 @@
 "Security Warning" => "Avertissement de sécurité",
 "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Aucun générateur de nombre aléatoire sécurisé n'est disponible, veuillez activer l'extension PHP OpenSSL",
 "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sans générateur de nombre aléatoire sécurisé, un attaquant peut être en mesure de prédire les jetons de réinitialisation du mot de passe, et ainsi prendre le contrôle de votre compte utilisateur.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Votre répertoire data est certainement accessible depuis l'internet car le fichier .htaccess ne semble pas fonctionner",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Pour les informations de configuration de votre serveur, veuillez lire la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>.",
 "Create an <strong>admin account</strong>" => "Créer un <strong>compte administrateur</strong>",
 "Advanced" => "Avancé",
 "Data folder" => "Répertoire des données",
diff --git a/core/l10n/it.php b/core/l10n/it.php
index 1068e0c31c7f90cdd221120c1bcd287a1416991e..c0109b91239c2f09d5742f6c904cda3a1ccd8e81 100644
--- a/core/l10n/it.php
+++ b/core/l10n/it.php
@@ -109,6 +109,8 @@
 "Security Warning" => "Avviso di sicurezza",
 "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Non è disponibile alcun generatore di numeri casuali sicuro. Abilita l'estensione OpenSSL di PHP",
 "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Senza un generatore di numeri casuali sicuro, un malintenzionato potrebbe riuscire a individuare i token di ripristino delle password e impossessarsi del tuo account.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "La cartella dei dati e i file sono probabilmente accessibili da Internet poiché il file .htaccess non funziona.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Per informazioni su come configurare correttamente il server, vedi la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentazione</a>.",
 "Create an <strong>admin account</strong>" => "Crea un <strong>account amministratore</strong>",
 "Advanced" => "Avanzate",
 "Data folder" => "Cartella dati",
diff --git a/core/l10n/lv.php b/core/l10n/lv.php
index bc2306774aac7380b902bd7934940898775fd5b4..78be7df9aaf502a4cf624a0f41fda123f6ce6709 100644
--- a/core/l10n/lv.php
+++ b/core/l10n/lv.php
@@ -109,6 +109,8 @@
 "Security Warning" => "Brīdinājums par drošību",
 "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Nav pieejams drošs nejaušu skaitļu ģenerators. Lūdzu, aktivējiet PHP OpenSSL paplašinājumu.",
 "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Bez droša nejaušu skaitļu ģeneratora uzbrucējs var paredzēt paroļu atjaunošanas marķierus un pārņem jūsu kontu.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Visticamāk, jūsu datu direktorija un datnes ir pieejamas no interneta, jo .htaccess datne nedarbojas.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Lai uzzinātu, kā pareizi jākonfigurē šis serveris, skatiet <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">dokumentāciju</a>.",
 "Create an <strong>admin account</strong>" => "Izveidot <strong>administratora kontu</strong>",
 "Advanced" => "Paplašināti",
 "Data folder" => "Datu mape",
diff --git a/core/l10n/pt_PT.php b/core/l10n/pt_PT.php
index 3fb3361b2dc7266e14219e7f77a5a41d8abd6f68..1a17161ae5a018a1fa347e29026c1ef13be37f51 100644
--- a/core/l10n/pt_PT.php
+++ b/core/l10n/pt_PT.php
@@ -5,6 +5,7 @@
 "User %s shared the folder \"%s\" with you. It is available for download here: %s" => "O utilizador %s partilhou a pasta \"%s\" consigo. Está disponível para download aqui: %s",
 "Category type not provided." => "Tipo de categoria não fornecido",
 "No category to add?" => "Nenhuma categoria para adicionar?",
+"This category already exists: %s" => "A categoria já existe: %s",
 "Object type not provided." => "Tipo de objecto não fornecido",
 "%s ID not provided." => "ID %s não fornecido",
 "Error adding %s to favorites." => "Erro a adicionar %s aos favoritos",
@@ -108,6 +109,8 @@
 "Security Warning" => "Aviso de Segurança",
 "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Não existe nenhum gerador seguro de números aleatórios, por favor, active a extensão OpenSSL no PHP.",
 "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Sem nenhum gerador seguro de números aleatórios, uma pessoa mal intencionada pode prever a sua password, reiniciar as seguranças adicionais e tomar conta da sua conta. ",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "A pasta de dados do ownCloud e os respectivos ficheiros, estarão provavelmente acessíveis a partir da internet, pois o ficheiros .htaccess não funciona.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Para obter informações de como configurar correctamente o servidor, veja em: <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>.",
 "Create an <strong>admin account</strong>" => "Criar uma <strong>conta administrativa</strong>",
 "Advanced" => "Avançado",
 "Data folder" => "Pasta de dados",
diff --git a/core/l10n/ru.php b/core/l10n/ru.php
index 0495f60d03f18e8c2d534cc7206f8817cd1b8d69..b9c00c6691c1322cc21222bd384b8384d285310d 100644
--- a/core/l10n/ru.php
+++ b/core/l10n/ru.php
@@ -109,6 +109,8 @@
 "Security Warning" => "Предупреждение безопасности",
 "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Нет доступного защищенного генератора случайных чисел, пожалуйста, включите расширение PHP OpenSSL.",
 "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Без защищенного генератора случайных чисел злоумышленник может предугадать токены сброса пароля и завладеть Вашей учетной записью.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Ваша папка с данными и файлы возможно доступны из интернета потому что файл .htaccess не работает.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Для информации как правильно настроить Ваш сервер, пожалйста загляните в <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">документацию</a>.",
 "Create an <strong>admin account</strong>" => "Создать <strong>учётную запись администратора</strong>",
 "Advanced" => "Дополнительно",
 "Data folder" => "Директория с данными",
diff --git a/core/l10n/ru_RU.php b/core/l10n/ru_RU.php
index fad6ebeddcdc2e3f58a2fb658f7960f696951288..86e068c6c8dd9ac13fda49f9920340811d96ccb1 100644
--- a/core/l10n/ru_RU.php
+++ b/core/l10n/ru_RU.php
@@ -109,6 +109,8 @@
 "Security Warning" => "Предупреждение системы безопасности",
 "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Нет доступного защищенного генератора случайных чисел, пожалуйста, включите расширение PHP OpenSSL.",
 "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Без защищенного генератора случайных чисел злоумышленник может спрогнозировать пароль, сбросить учетные данные и завладеть Вашим аккаунтом.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Ваша папка с данными и файлы возможно доступны из интернета потому что файл .htaccess не работает.",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Для информации как правильно настроить Ваш сервер, пожалйста загляните в <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">документацию</a>.",
 "Create an <strong>admin account</strong>" => "Создать <strong>admin account</strong>",
 "Advanced" => "Расширенный",
 "Data folder" => "Папка данных",
diff --git a/core/l10n/vi.php b/core/l10n/vi.php
index ca6f9b91da22ec498830cdc3a3b1411de0fca9f5..0c4b197322e50b3536ae64c449aee42a98bcf60c 100644
--- a/core/l10n/vi.php
+++ b/core/l10n/vi.php
@@ -5,6 +5,7 @@
 "User %s shared the folder \"%s\" with you. It is available for download here: %s" => "Người dùng %s chia sẻ thư mục \"%s\" cho bạn .Bạn có thể tải tại đây : %s",
 "Category type not provided." => "Kiểu hạng mục không được cung cấp.",
 "No category to add?" => "Không có danh mục được thêm?",
+"This category already exists: %s" => "Danh mục này đã tồn tại: %s",
 "Object type not provided." => "Loại đối tượng không được cung cấp.",
 "%s ID not provided." => "%s ID không được cung cấp.",
 "Error adding %s to favorites." => "Lỗi thêm %s vào mục yêu thích.",
@@ -53,6 +54,7 @@
 "The app name is not specified." => "Tên ứng dụng không được chỉ định.",
 "The required file {file} is not installed!" => "Tập tin cần thiết {file} không được cài đặt!",
 "Share" => "Chia sẻ",
+"Shared" => "Được chia sẻ",
 "Error while sharing" => "Lỗi trong quá trình chia sẻ",
 "Error while unsharing" => "Lỗi trong quá trình gỡ chia sẻ",
 "Error while changing permissions" => "Lỗi trong quá trình phân quyền",
@@ -62,6 +64,7 @@
 "Share with link" => "Chia sẻ với liên kết",
 "Password protect" => "Mật khẩu bảo vệ",
 "Password" => "Mật khẩu",
+"Email link to person" => "Liên kết email tới cá nhân",
 "Send" => "Gởi",
 "Set expiration date" => "Đặt ngày kết thúc",
 "Expiration date" => "Ngày kết thúc",
@@ -80,6 +83,7 @@
 "Error unsetting expiration date" => "Lỗi không thiết lập ngày kết thúc",
 "Error setting expiration date" => "Lỗi cấu hình ngày kết thúc",
 "Sending ..." => "Đang gởi ...",
+"Email sent" => "Email đã được gửi",
 "The update was unsuccessful. Please report this issue to the <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\">ownCloud community</a>." => "Cập nhật không thành công . Vui lòng thông báo đến <a href=\"https://github.com/owncloud/core/issues\" target=\"_blank\"> Cộng đồng ownCloud </a>.",
 "The update was successful. Redirecting you to ownCloud now." => "Cập nhật thành công .Hệ thống sẽ đưa bạn tới ownCloud.",
 "ownCloud password reset" => "Khôi phục mật khẩu Owncloud ",
@@ -105,6 +109,8 @@
 "Security Warning" => "Cảnh bảo bảo mật",
 "No secure random number generator is available, please enable the PHP OpenSSL extension." => "Không an toàn ! chức năng random number generator đã có sẵn ,vui lòng bật  PHP OpenSSL extension.",
 "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "Nếu không có random number generator , Hacker có thể  thiết lập lại mật khẩu và chiếm tài khoản của bạn.",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "Thư mục và file dữ liệu của bạn có thể được truy cập từ internet bởi vì file .htaccess không hoạt động",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "Để biết thêm cách cấu hình máy chủ của bạn, xin xem <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">tài liệu</a>.",
 "Create an <strong>admin account</strong>" => "Tạo một <strong>tài khoản quản trị</strong>",
 "Advanced" => "Nâng cao",
 "Data folder" => "Thư mục dữ liệu",
@@ -124,6 +130,8 @@
 "Lost your password?" => "Bạn quên mật khẩu ?",
 "remember" => "ghi nhớ",
 "Log in" => "Đăng nhập",
+"Alternative Logins" => "Đăng nhập khác",
 "prev" => "Lùi lại",
-"next" => "Kế tiếp"
+"next" => "Kế tiếp",
+"Updating ownCloud to version %s, this may take a while." => "Cập nhật ownCloud lên phiên bản %s, có thể sẽ mất thời gian"
 );
diff --git a/core/l10n/zh_TW.php b/core/l10n/zh_TW.php
index 58d2aca4095e329e270c02321b671858bd3fb289..96142d206891b36e4494ce9943f802a082ab8f51 100644
--- a/core/l10n/zh_TW.php
+++ b/core/l10n/zh_TW.php
@@ -5,6 +5,7 @@
 "User %s shared the folder \"%s\" with you. It is available for download here: %s" => "用戶 %s 與您分享了資料夾 \"%s\" ,您可以從這裡下載它: %s",
 "Category type not provided." => "未提供分類類型。",
 "No category to add?" => "沒有可增加的分類?",
+"This category already exists: %s" => "分類已經存在: %s",
 "Object type not provided." => "不支援的物件類型",
 "%s ID not provided." => "未提供 %s ID 。",
 "Error adding %s to favorites." => "加入 %s 到最愛時發生錯誤。",
@@ -108,6 +109,8 @@
 "Security Warning" => "安全性警告",
 "No secure random number generator is available, please enable the PHP OpenSSL extension." => "沒有可用的亂數產生器,請啟用 PHP 中的 OpenSSL 擴充功能。",
 "Without a secure random number generator an attacker may be able to predict password reset tokens and take over your account." => "若沒有安全的亂數產生器,攻擊者可能可以預測密碼重設信物,然後控制您的帳戶。",
+"Your data directory and files are probably accessible from the internet because the .htaccess file does not work." => "您的資料目錄看起來可以被 Internet 公開存取,因為 .htaccess 設定並未生效。",
+"For information how to properly configure your server, please see the <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>." => "請參考<a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">說明文件</a>以瞭解如何正確設定您的伺服器。",
 "Create an <strong>admin account</strong>" => "建立一個<strong>管理者帳號</strong>",
 "Advanced" => "進階",
 "Data folder" => "資料夾",
@@ -127,6 +130,7 @@
 "Lost your password?" => "忘記密碼?",
 "remember" => "記住",
 "Log in" => "登入",
+"Alternative Logins" => "替代登入方法",
 "prev" => "上一頁",
 "next" => "下一頁",
 "Updating ownCloud to version %s, this may take a while." => "正在將 Owncloud 升級至版本 %s ,這可能需要一點時間。"
diff --git a/core/templates/installation.php b/core/templates/installation.php
index ad0d9cfbadac4a1b05b4df8e1677f50de6e71866..cef979c2ab6b6ac4b60b917c8985668c45e13da1 100644
--- a/core/templates/installation.php
+++ b/core/templates/installation.php
@@ -40,7 +40,7 @@
 			<img class="svg" src="<?php echo image_path('', 'actions/user.svg'); ?>" alt="" />
 		</p>
 		<p class="infield groupbottom">
-			<input type="password" name="adminpass" id="adminpass" value="<?php print OC_Helper::init_var('adminpass'); ?>" required data-typetoggle="#show" />
+			<input type="password" name="adminpass" data-typetoggle="#show" id="adminpass" value="<?php print OC_Helper::init_var('adminpass'); ?>" />
 			<label for="adminpass" class="infield"><?php echo $l->t( 'Password' ); ?></label>
 			<img class="svg" id="adminpass-icon" src="<?php echo image_path('', 'actions/password.svg'); ?>" alt="" />
 			<input type="checkbox" id="show" name="show" />
diff --git a/db_structure.xml b/db_structure.xml
index fc7f1082ffa28f7f9bc74a1c011faffc85f6df28..3ce41096d9ed525fe2c7ea32dda053de22c9aab4 100644
--- a/db_structure.xml
+++ b/db_structure.xml
@@ -108,6 +108,14 @@
 				<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>
@@ -116,11 +124,19 @@
 				<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>
 				<unique>true</unique>
 				<field>
-					<name>logic_path</name>
+					<name>logic_path_hash</name>
 					<sorting>ascending</sorting>
 				</field>
 			</index>
@@ -129,7 +145,7 @@
 				<name>file_map_pp_index</name>
 				<unique>true</unique>
 				<field>
-					<name>physic_path</name>
+					<name>physic_path_hash</name>
 					<sorting>ascending</sorting>
 				</field>
 			</index>
@@ -250,7 +266,7 @@
 				<type>integer</type>
 				<default></default>
 				<notnull>true</notnull>
-				<length>4</length>
+				<length>8</length>
 			</field>
 
 			<field>
diff --git a/l10n/af_ZA/files.po b/l10n/af_ZA/files.po
index 43e9f26707c0631fe563ec4005ee95f918f51d17..67facac0f9e8753270b11b254947f5de22ffc270 100644
--- a/l10n/af_ZA/files.po
+++ b/l10n/af_ZA/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
 "MIME-Version: 1.0\n"
@@ -78,51 +78,52 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr ""
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr ""
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -162,64 +163,60 @@ msgstr ""
 msgid "Upload Error"
 msgstr ""
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr ""
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr ""
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr ""
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr ""
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -276,7 +273,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -291,6 +288,10 @@ msgstr ""
 msgid "Download"
 msgstr ""
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr ""
diff --git a/l10n/af_ZA/files_encryption.po b/l10n/af_ZA/files_encryption.po
index 7bdb33d2fcc5dad311a27d6d4a2ad84c26af6a2d..535d61f3944e2ad9099a07268529c8a148d1f446 100644
--- a/l10n/af_ZA/files_encryption.po
+++ b/l10n/af_ZA/files_encryption.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
 "MIME-Version: 1.0\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Language: af_ZA\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr ""
diff --git a/l10n/af_ZA/lib.po b/l10n/af_ZA/lib.po
index e03f329b9b7060287648ccf6eaaabb433461befe..67a6f17cf09fc2bb666b2f6f7bb64565e4ec6567 100644
--- a/l10n/af_ZA/lib.po
+++ b/l10n/af_ZA/lib.po
@@ -7,9 +7,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-05 00:19+0100\n"
-"PO-Revision-Date: 2012-07-27 22:23+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -17,27 +17,27 @@ msgstr ""
 "Language: af_ZA\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:312
+#: app.php:339
 msgid "Help"
 msgstr "Hulp"
 
-#: app.php:319
+#: app.php:346
 msgid "Personal"
 msgstr "Persoonlik"
 
-#: app.php:324
+#: app.php:351
 msgid "Settings"
 msgstr "Instellings"
 
-#: app.php:329
+#: app.php:356
 msgid "Users"
 msgstr "Gebruikers"
 
-#: app.php:336
+#: app.php:363
 msgid "Apps"
 msgstr "Toepassings"
 
-#: app.php:338
+#: app.php:365
 msgid "Admin"
 msgstr "Admin"
 
@@ -85,6 +85,17 @@ msgstr ""
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr ""
diff --git a/l10n/af_ZA/settings.po b/l10n/af_ZA/settings.po
index a768c32d6cd6c899544be0d7619be0586a38619c..292ab46b0eaefadc0ee66d8e185904202a1ff89d 100644
--- a/l10n/af_ZA/settings.po
+++ b/l10n/af_ZA/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Afrikaans (South Africa) (http://www.transifex.com/projects/p/owncloud/language/af_ZA/)\n"
 "MIME-Version: 1.0\n"
@@ -21,12 +21,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr ""
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr ""
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -80,7 +80,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -213,10 +213,6 @@ msgstr ""
 msgid "New password"
 msgstr "Nuwe wagwoord"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr ""
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr ""
diff --git a/l10n/ar/files.po b/l10n/ar/files.po
index ce179ab2fb86d29f9877840d37adfef07e492508..3e5b521eab816cd32e1dc0d4d51ae99503cda264 100644
--- a/l10n/ar/files.po
+++ b/l10n/ar/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
 "MIME-Version: 1.0\n"
@@ -79,51 +79,52 @@ msgstr ""
 msgid "Files"
 msgstr "الملفات"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "إلغاء مشاركة"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "محذوف"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -163,64 +164,60 @@ msgstr ""
 msgid "Upload Error"
 msgstr ""
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "إغلق"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "الاسم"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "حجم"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "معدل"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -277,7 +274,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -292,6 +289,10 @@ msgstr "لا يوجد شيء هنا. إرفع بعض الملفات!"
 msgid "Download"
 msgstr "تحميل"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "إلغاء مشاركة"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "حجم الترفيع أعلى من المسموح"
diff --git a/l10n/ar/files_encryption.po b/l10n/ar/files_encryption.po
index 59f5adcf60334b9d6c10a4acafb226c9524c192d..66040076539c337ca76b3e821c9538edf6e4a641 100644
--- a/l10n/ar/files_encryption.po
+++ b/l10n/ar/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: ar\n"
 "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "التشفير"
diff --git a/l10n/ar/lib.po b/l10n/ar/lib.po
index dbb9b7359cf675ceb72e88508745f3e9af5da02b..512142c6850de83a43174f2e8505b421d9d7e736 100644
--- a/l10n/ar/lib.po
+++ b/l10n/ar/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Language: ar\n"
 "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "المساعدة"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "شخصي"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "تعديلات"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "المستخدمين"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr ""
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr ""
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -85,6 +85,17 @@ msgstr "معلومات إضافية"
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "منذ ثواني"
diff --git a/l10n/ar/settings.po b/l10n/ar/settings.po
index e3785a9b5a724491496611d866cc40346ae19b74..317e68fa4a655dbf8cded556d0aefd61d3e388a6 100644
--- a/l10n/ar/settings.po
+++ b/l10n/ar/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Arabic (http://www.transifex.com/projects/p/owncloud/language/ar/)\n"
 "MIME-Version: 1.0\n"
@@ -24,12 +24,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "فشل تحميل القائمة من الآب ستور"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "لم يتم التأكد من الشخصية بنجاح"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -83,7 +83,7 @@ msgstr "فشل إضافة المستخدم الى المجموعة %s"
 msgid "Unable to remove user from group %s"
 msgstr "فشل إزالة المستخدم من المجموعة %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -216,10 +216,6 @@ msgstr "كلمات السر الحالية"
 msgid "New password"
 msgstr "كلمات سر جديدة"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "أظهر"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "عدل كلمة السر"
diff --git a/l10n/bg_BG/core.po b/l10n/bg_BG/core.po
index aaa4f3d190d231fb610cd79d6fe383558c68b18b..06b082dffc5d1f9dfa07b4c0b1480ace347f5665 100644
--- a/l10n/bg_BG/core.po
+++ b/l10n/bg_BG/core.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 10:30+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
 "MIME-Version: 1.0\n"
@@ -160,59 +160,59 @@ msgstr ""
 msgid "December"
 msgstr ""
 
-#: js/js.js:284
+#: js/js.js:286
 msgid "Settings"
 msgstr "Настройки"
 
-#: js/js.js:764
+#: js/js.js:766
 msgid "seconds ago"
 msgstr "преди секунди"
 
-#: js/js.js:765
+#: js/js.js:767
 msgid "1 minute ago"
 msgstr "преди 1 минута"
 
-#: js/js.js:766
+#: js/js.js:768
 msgid "{minutes} minutes ago"
 msgstr ""
 
-#: js/js.js:767
+#: js/js.js:769
 msgid "1 hour ago"
 msgstr "преди 1 час"
 
-#: js/js.js:768
+#: js/js.js:770
 msgid "{hours} hours ago"
 msgstr ""
 
-#: js/js.js:769
+#: js/js.js:771
 msgid "today"
 msgstr "днес"
 
-#: js/js.js:770
+#: js/js.js:772
 msgid "yesterday"
 msgstr "вчера"
 
-#: js/js.js:771
+#: js/js.js:773
 msgid "{days} days ago"
 msgstr ""
 
-#: js/js.js:772
+#: js/js.js:774
 msgid "last month"
 msgstr "последният месец"
 
-#: js/js.js:773
+#: js/js.js:775
 msgid "{months} months ago"
 msgstr ""
 
-#: js/js.js:774
+#: js/js.js:776
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:775
+#: js/js.js:777
 msgid "last year"
 msgstr "последната година"
 
-#: js/js.js:776
+#: js/js.js:778
 msgid "years ago"
 msgstr "последните години"
 
@@ -242,8 +242,8 @@ msgid "The object type is not specified."
 msgstr ""
 
 #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
-#: js/share.js:583
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
 msgid "Error"
 msgstr "Грешка"
 
@@ -263,7 +263,7 @@ msgstr "Споделяне"
 msgid "Shared"
 msgstr ""
 
-#: js/share.js:141 js/share.js:611
+#: js/share.js:141 js/share.js:622
 msgid "Error while sharing"
 msgstr ""
 
@@ -359,23 +359,23 @@ msgstr ""
 msgid "share"
 msgstr ""
 
-#: js/share.js:373 js/share.js:558
+#: js/share.js:373 js/share.js:569
 msgid "Password protected"
 msgstr ""
 
-#: js/share.js:571
+#: js/share.js:582
 msgid "Error unsetting expiration date"
 msgstr ""
 
-#: js/share.js:583
+#: js/share.js:594
 msgid "Error setting expiration date"
 msgstr ""
 
-#: js/share.js:598
+#: js/share.js:609
 msgid "Sending ..."
 msgstr ""
 
-#: js/share.js:609
+#: js/share.js:620
 msgid "Email sent"
 msgstr ""
 
@@ -429,7 +429,7 @@ msgstr ""
 
 #: lostpassword/templates/resetpassword.php:8
 msgid "New password"
-msgstr ""
+msgstr "Нова парола"
 
 #: lostpassword/templates/resetpassword.php:11
 msgid "Reset password"
diff --git a/l10n/bg_BG/files.po b/l10n/bg_BG/files.po
index f4b6a8ca6742b7f70035314966e1bca197c21f5a..827d1e52d1f34a0449a20490dc12b4297d0cce63 100644
--- a/l10n/bg_BG/files.po
+++ b/l10n/bg_BG/files.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
 "MIME-Version: 1.0\n"
@@ -80,51 +80,52 @@ msgstr ""
 msgid "Files"
 msgstr "Файлове"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr ""
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Изтриване"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Преименуване"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "препокриване"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "отказ"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "възтановяване"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -164,64 +165,60 @@ msgstr ""
 msgid "Upload Error"
 msgstr ""
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
-msgstr ""
+msgstr "Затвори"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Качването е спряно."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Име"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Размер"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Променено"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -278,7 +275,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -293,6 +290,10 @@ msgstr "Няма нищо тук. Качете нещо."
 msgid "Download"
 msgstr "Изтегляне"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Файлът който сте избрали за качване е прекалено голям"
diff --git a/l10n/bg_BG/files_encryption.po b/l10n/bg_BG/files_encryption.po
index 6faf2d1a518deabe97ec73c2fd6d1f1527c63841..4ec6da246a3540490bd731e7fc8b3535af2b2212 100644
--- a/l10n/bg_BG/files_encryption.po
+++ b/l10n/bg_BG/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: bg_BG\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Криптиране"
diff --git a/l10n/bg_BG/files_external.po b/l10n/bg_BG/files_external.po
index 656df3768ccdd55f773dad21baf2ac3ac145d7a9..66a058cb8777c4c7cefbe21ba98b4ad37ead97d6 100644
--- a/l10n/bg_BG/files_external.po
+++ b/l10n/bg_BG/files_external.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-10 00:04+0100\n"
-"PO-Revision-Date: 2013-01-09 20:47+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 10:20+0000\n"
 "Last-Translator: Stefan Ilivanov <ilivanov@gmail.com>\n"
 "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
 "MIME-Version: 1.0\n"
@@ -42,13 +42,13 @@ msgstr ""
 msgid "Error configuring Google Drive storage"
 msgstr ""
 
-#: lib/config.php:434
+#: lib/config.php:405
 msgid ""
 "<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
 "is not possible. Please ask your system administrator to install it."
 msgstr ""
 
-#: lib/config.php:435
+#: lib/config.php:406
 msgid ""
 "<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
 " of FTP shares is not possible. Please ask your system administrator to "
@@ -77,7 +77,7 @@ msgstr "Опции"
 
 #: templates/settings.php:12
 msgid "Applicable"
-msgstr ""
+msgstr "Приложимо"
 
 #: templates/settings.php:27
 msgid "Add mount point"
diff --git a/l10n/bg_BG/files_trashbin.po b/l10n/bg_BG/files_trashbin.po
index cf5275530e1917aab04f917e43d668f136351762..bd5ca7e1fe609d48bf091462efe58a55de96b176 100644
--- a/l10n/bg_BG/files_trashbin.po
+++ b/l10n/bg_BG/files_trashbin.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 23:11+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 10:30+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
 "MIME-Version: 1.0\n"
@@ -65,4 +65,4 @@ msgstr ""
 
 #: templates/index.php:20 templates/index.php:22
 msgid "Restore"
-msgstr ""
+msgstr "Възтановяване"
diff --git a/l10n/bg_BG/lib.po b/l10n/bg_BG/lib.po
index 5e238d11362d3f766871de481fabd0a47a97a2fd..5ab2d04c53e211689d3af9eaf6f9342bd92a80ca 100644
--- a/l10n/bg_BG/lib.po
+++ b/l10n/bg_BG/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
 "MIME-Version: 1.0\n"
@@ -18,49 +18,49 @@ msgstr ""
 "Language: bg_BG\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Помощ"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Лични"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Настройки"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Потребители"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Приложения"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Админ"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Изтеглянето като ZIP е изключено."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Файловете трябва да се изтеглят един по един."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Назад към файловете"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Избраните файлове са прекалено големи за генерирането на ZIP архив."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
-msgstr ""
+msgstr "не може да се определи"
 
 #: json.php:28
 msgid "Application is not enabled"
@@ -86,6 +86,17 @@ msgstr "Текст"
 msgid "Images"
 msgstr "Снимки"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "преди секунди"
diff --git a/l10n/bg_BG/settings.po b/l10n/bg_BG/settings.po
index 4cef09976a2a00556519d58c33e8b890a576c074..66e0bc07fe1bda0f953c58fa2c7ff56f6f4e16c3 100644
--- a/l10n/bg_BG/settings.po
+++ b/l10n/bg_BG/settings.po
@@ -4,14 +4,14 @@
 # 
 # Translators:
 #   <adn.adin@gmail.com>, 2011.
-# Stefan Ilivanov <ilivanov@gmail.com>, 2011.
+# Stefan Ilivanov <ilivanov@gmail.com>, 2011,2013.
 # Yasen Pramatarov <yasen@lindeas.com>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bulgarian (Bulgaria) (http://www.transifex.com/projects/p/owncloud/language/bg_BG/)\n"
 "MIME-Version: 1.0\n"
@@ -24,12 +24,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr ""
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Възникна проблем с идентификацията"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -63,7 +63,7 @@ msgstr ""
 
 #: ajax/setlanguage.php:15
 msgid "Language changed"
-msgstr ""
+msgstr "Езикът е променен"
 
 #: ajax/setlanguage.php:17 ajax/setlanguage.php:20
 msgid "Invalid request"
@@ -83,7 +83,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -125,11 +125,11 @@ msgstr ""
 
 #: personal.php:34 personal.php:35
 msgid "__language_name__"
-msgstr ""
+msgstr "__language_name__"
 
 #: templates/apps.php:10
 msgid "Add your App"
-msgstr ""
+msgstr "Добавете Ваше приложение"
 
 #: templates/apps.php:11
 msgid "More Apps"
@@ -137,7 +137,7 @@ msgstr ""
 
 #: templates/apps.php:24
 msgid "Select an App"
-msgstr ""
+msgstr "Изберете приложение"
 
 #: templates/apps.php:28
 msgid "See application page at apps.owncloud.com"
@@ -206,23 +206,19 @@ msgstr ""
 
 #: templates/personal.php:25
 msgid "Unable to change your password"
-msgstr ""
+msgstr "Промяната на паролата не беше извършена"
 
 #: templates/personal.php:26
 msgid "Current password"
-msgstr ""
+msgstr "Текуща парола"
 
 #: templates/personal.php:27
 msgid "New password"
-msgstr ""
-
-#: templates/personal.php:28
-msgid "show"
-msgstr ""
+msgstr "Нова парола"
 
 #: templates/personal.php:29
 msgid "Change password"
-msgstr ""
+msgstr "Промяна на паролата"
 
 #: templates/personal.php:41 templates/users.php:80
 msgid "Display Name"
@@ -246,7 +242,7 @@ msgstr "E-mail"
 
 #: templates/personal.php:56
 msgid "Your email address"
-msgstr ""
+msgstr "Вашия email адрес"
 
 #: templates/personal.php:57
 msgid "Fill in an email address to enable password recovery"
@@ -254,11 +250,11 @@ msgstr ""
 
 #: templates/personal.php:63 templates/personal.php:64
 msgid "Language"
-msgstr ""
+msgstr "Език"
 
 #: templates/personal.php:69
 msgid "Help translate"
-msgstr ""
+msgstr "Помогнете с превода"
 
 #: templates/personal.php:74
 msgid "WebDAV"
@@ -292,7 +288,7 @@ msgstr "Групи"
 
 #: templates/users.php:32
 msgid "Create"
-msgstr ""
+msgstr "Създаване"
 
 #: templates/users.php:35
 msgid "Default Storage"
@@ -304,7 +300,7 @@ msgstr ""
 
 #: templates/users.php:60 templates/users.php:157
 msgid "Other"
-msgstr ""
+msgstr "Други"
 
 #: templates/users.php:84 templates/users.php:121
 msgid "Group Admin"
diff --git a/l10n/bn_BD/files.po b/l10n/bn_BD/files.po
index 023ecf7d1e7d126a7f670621ce5801117ea93687..0cc1231047ba8268ff43f27e9b289733b51a946b 100644
--- a/l10n/bn_BD/files.po
+++ b/l10n/bn_BD/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
 "MIME-Version: 1.0\n"
@@ -21,16 +21,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "%s কে স্থানান্তর করা সম্ভব হলো না -  এই নামের ফাইল বিদ্যমান"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "%s  কে স্থানান্তর করা সম্ভব হলো না"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "ফাইলের নাম পরিবর্তন করা সম্ভব হলো না"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -79,51 +79,52 @@ msgstr "ভুল ডিরেক্টরি"
 msgid "Files"
 msgstr "ফাইল"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "ভাগাভাগি বাতিল "
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "মুছে ফেল"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "পূনঃনামকরণ"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "মুলতুবি"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} টি বিদ্যমান"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "প্রতিস্থাপন"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "নাম সুপারিশ করুন"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "বাতিল"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "{new_name}  প্রতিস্থাপন করা হয়েছে"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "ক্রিয়া প্রত্যাহার"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} কে {old_name} নামে প্রতিস্থাপন করা হয়েছে"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -163,64 +164,60 @@ msgstr "আপনার ফাইলটি আপলোড করা সম্
 msgid "Upload Error"
 msgstr "আপলোড করতে সমস্যা "
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "বন্ধ"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "মুলতুবি"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "১টি ফাইল আপলোড করা হচ্ছে"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} টি ফাইল আপলোড করা হচ্ছে"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "আপলোড বাতিল করা হয়েছে।"
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "ফাইল আপলোড চলমান। এই পৃষ্ঠা পরিত্যাগ করলে আপলোড বাতিল করা হবে।"
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL ফাঁকা রাখা যাবে না।"
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "ফোল্ডারের নামটি সঠিক নয়। 'ভাগাভাগি করা' শুধুমাত্র Owncloud  এর জন্য সংরক্ষিত।"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "নাম"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "আকার"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "পরিবর্তিত"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "১টি ফোল্ডার"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} টি ফোল্ডার"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "১টি ফাইল"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} টি ফাইল"
 
@@ -277,7 +274,7 @@ msgid "From link"
 msgstr " লিংক থেকে"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -292,6 +289,10 @@ msgstr "এখানে কিছুই নেই। কিছু আপলো
 msgid "Download"
 msgstr "ডাউনলোড"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "ভাগাভাগি বাতিল "
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "আপলোডের আকারটি অনেক বড়"
diff --git a/l10n/bn_BD/files_encryption.po b/l10n/bn_BD/files_encryption.po
index aa9ec9846229082171f08d7366a6b0d030f455a3..7c8a89fc3b7a199225ab7099eece613a103fe572 100644
--- a/l10n/bn_BD/files_encryption.po
+++ b/l10n/bn_BD/files_encryption.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
 "MIME-Version: 1.0\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Language: bn_BD\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "সংকেতায়ন"
diff --git a/l10n/bn_BD/lib.po b/l10n/bn_BD/lib.po
index da90c84c9766ad8100dad6e2cacd0a1b7b1f9f0b..cfe719acd213327697fa5466f86ec16eb8256896 100644
--- a/l10n/bn_BD/lib.po
+++ b/l10n/bn_BD/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Language: bn_BD\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "সহায়িকা"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "ব্যক্তিগত"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "নিয়ামকসমূহ"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "ব্যভহারকারী"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "অ্যাপ"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "প্রশাসক"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIP ডাউনলোড বন্ধ করা আছে।"
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "ফাইলগুলো একে একে ডাউনলোড করা আবশ্যক।"
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "ফাইলে ফিরে চল"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "নির্বাচিত ফাইলগুলো এতই বৃহৎ যে জিপ ফাইল তৈরী করা সম্ভব নয়।"
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -85,6 +85,17 @@ msgstr ""
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "সেকেন্ড পূর্বে"
diff --git a/l10n/bn_BD/settings.po b/l10n/bn_BD/settings.po
index 946bd8cd254de0034e29ce644d3b478677b636f7..3e31663a3db94a0d2fc74d269c26a311215a99fc 100644
--- a/l10n/bn_BD/settings.po
+++ b/l10n/bn_BD/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Bengali (Bangladesh) (http://www.transifex.com/projects/p/owncloud/language/bn_BD/)\n"
 "MIME-Version: 1.0\n"
@@ -22,12 +22,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "অ্যাপস্টোর থেকে তালিকা লোড করতে সক্ষম নয়"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "অনুমোদন ঘটিত সমস্যা"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -81,7 +81,7 @@ msgstr " %s গোষ্ঠীতে ব্যবহারকারী যোগ
 msgid "Unable to remove user from group %s"
 msgstr "%s গোষ্ঠী থেকে ব্যবহারকারীকে অপসারণ করা সম্ভব হলো না"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -214,10 +214,6 @@ msgstr "বর্তমান কূটশব্দ"
 msgid "New password"
 msgstr "নতুন কূটশব্দ"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "প্রদর্শন"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "কূটশব্দ পরিবর্তন করুন"
diff --git a/l10n/ca/core.po b/l10n/ca/core.po
index 10f01f6ce3554aaf90f6cfbd28c93ddd012e772d..bdfbedf5a509c983d660a6d6feebf8ae736ca65b 100644
--- a/l10n/ca/core.po
+++ b/l10n/ca/core.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 10:20+0000\n"
+"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
 "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -159,59 +159,59 @@ msgstr "Novembre"
 msgid "December"
 msgstr "Desembre"
 
-#: js/js.js:284
+#: js/js.js:286
 msgid "Settings"
 msgstr "Arranjament"
 
-#: js/js.js:764
+#: js/js.js:766
 msgid "seconds ago"
 msgstr "segons enrere"
 
-#: js/js.js:765
+#: js/js.js:767
 msgid "1 minute ago"
 msgstr "fa 1 minut"
 
-#: js/js.js:766
+#: js/js.js:768
 msgid "{minutes} minutes ago"
 msgstr "fa {minutes} minuts"
 
-#: js/js.js:767
+#: js/js.js:769
 msgid "1 hour ago"
 msgstr "fa 1 hora"
 
-#: js/js.js:768
+#: js/js.js:770
 msgid "{hours} hours ago"
 msgstr "fa {hours} hores"
 
-#: js/js.js:769
+#: js/js.js:771
 msgid "today"
 msgstr "avui"
 
-#: js/js.js:770
+#: js/js.js:772
 msgid "yesterday"
 msgstr "ahir"
 
-#: js/js.js:771
+#: js/js.js:773
 msgid "{days} days ago"
 msgstr "fa {days} dies"
 
-#: js/js.js:772
+#: js/js.js:774
 msgid "last month"
 msgstr "el mes passat"
 
-#: js/js.js:773
+#: js/js.js:775
 msgid "{months} months ago"
 msgstr "fa {months} mesos"
 
-#: js/js.js:774
+#: js/js.js:776
 msgid "months ago"
 msgstr "mesos enrere"
 
-#: js/js.js:775
+#: js/js.js:777
 msgid "last year"
 msgstr "l'any passat"
 
-#: js/js.js:776
+#: js/js.js:778
 msgid "years ago"
 msgstr "anys enrere"
 
@@ -241,8 +241,8 @@ msgid "The object type is not specified."
 msgstr "No s'ha especificat el tipus d'objecte."
 
 #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
-#: js/share.js:583
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
 msgid "Error"
 msgstr "Error"
 
@@ -262,7 +262,7 @@ msgstr "Comparteix"
 msgid "Shared"
 msgstr "Compartit"
 
-#: js/share.js:141 js/share.js:611
+#: js/share.js:141 js/share.js:622
 msgid "Error while sharing"
 msgstr "Error en compartir"
 
@@ -358,23 +358,23 @@ msgstr "elimina"
 msgid "share"
 msgstr "comparteix"
 
-#: js/share.js:373 js/share.js:558
+#: js/share.js:373 js/share.js:569
 msgid "Password protected"
 msgstr "Protegeix amb contrasenya"
 
-#: js/share.js:571
+#: js/share.js:582
 msgid "Error unsetting expiration date"
 msgstr "Error en eliminar la data d'expiració"
 
-#: js/share.js:583
+#: js/share.js:594
 msgid "Error setting expiration date"
 msgstr "Error en establir la data d'expiració"
 
-#: js/share.js:598
+#: js/share.js:609
 msgid "Sending ..."
 msgstr "Enviant..."
 
-#: js/share.js:609
+#: js/share.js:620
 msgid "Email sent"
 msgstr "El correu electrónic s'ha enviat"
 
@@ -490,14 +490,14 @@ msgstr "Sense un generador de nombres aleatoris segurs un atacant podria predir
 msgid ""
 "Your data directory and files are probably accessible from the internet "
 "because the .htaccess file does not work."
-msgstr ""
+msgstr "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona."
 
 #: templates/installation.php:32
 msgid ""
 "For information how to properly configure your server, please see the <a "
 "href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
 "target=\"_blank\">documentation</a>."
-msgstr ""
+msgstr "Per més informació sobre com configurar correctament el servidor, mireu la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentació</a>."
 
 #: templates/installation.php:36
 msgid "Create an <strong>admin account</strong>"
diff --git a/l10n/ca/files.po b/l10n/ca/files.po
index eb952e6f7c26284e041f56d46b031cbfe815d74c..6442aaa9c9b835b70a8a253620e94510bf51aadb 100644
--- a/l10n/ca/files.po
+++ b/l10n/ca/files.po
@@ -14,9 +14,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 15:40+0000\n"
+"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
 "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -27,16 +27,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "No s'ha pogut moure %s - Ja hi ha un fitxer amb aquest nom"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr " No s'ha pogut moure %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "No es pot canviar el nom del fitxer"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -75,7 +75,7 @@ msgstr "Ha fallat en escriure al disc"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "No hi ha prou espai disponible"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -85,51 +85,52 @@ msgstr "Directori no vàlid."
 msgid "Files"
 msgstr "Fitxers"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Deixa de compartir"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr "Esborra permanentment"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Suprimeix"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Reanomena"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Pendents"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} ja existeix"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "substitueix"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "sugereix un nom"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "cancel·la"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "s'ha substituït {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "desfés"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "s'ha substituït {old_name} per {new_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "executa d'operació d'esborrar"
 
@@ -169,64 +170,60 @@ msgstr "No es pot pujar el fitxer perquè és una carpeta o té 0 bytes"
 msgid "Upload Error"
 msgstr "Error en la pujada"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Tanca"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Pendents"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 fitxer pujant"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} fitxers en pujada"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "La pujada s'ha cancel·lat."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "La URL no pot ser buida"
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Nom de carpeta no vàlid. L'ús de 'Shared' està reservat per Owncloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:948 templates/index.php:67
 msgid "Name"
 msgstr "Nom"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:949 templates/index.php:78
 msgid "Size"
 msgstr "Mida"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:950 templates/index.php:80
 msgid "Modified"
 msgstr "Modificat"
 
-#: js/files.js:974
+#: js/files.js:969
 msgid "1 folder"
 msgstr "1 carpeta"
 
-#: js/files.js:976
+#: js/files.js:971
 msgid "{count} folders"
 msgstr "{count} carpetes"
 
-#: js/files.js:984
+#: js/files.js:979
 msgid "1 file"
 msgstr "1 fitxer"
 
-#: js/files.js:986
+#: js/files.js:981
 msgid "{count} files"
 msgstr "{count} fitxers"
 
@@ -283,8 +280,8 @@ msgid "From link"
 msgstr "Des d'enllaç"
 
 #: templates/index.php:40
-msgid "Trash"
-msgstr "Esborra"
+msgid "Trash bin"
+msgstr "Paperera"
 
 #: templates/index.php:46
 msgid "Cancel upload"
@@ -298,6 +295,10 @@ msgstr "Res per aquí. Pugeu alguna cosa!"
 msgid "Download"
 msgstr "Baixa"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Deixa de compartir"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "La pujada és massa gran"
diff --git a/l10n/ca/files_encryption.po b/l10n/ca/files_encryption.po
index 481b00ceee933a1ad7a3c7c6c41a4ebf86df5589..98f7c39d55d97267260364d1d740c03dbae29787 100644
--- a/l10n/ca/files_encryption.po
+++ b/l10n/ca/files_encryption.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 07:20+0000\n"
-"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: ca\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Connecteu-vos al client ownCloud i canvieu la contrasenya d'encriptació per completar la conversió."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "s'ha commutat a l'encriptació per part del client"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Canvia la contrasenya d'encriptació per la d'accés"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Comproveu les contrasenyes i proveu-ho de nou."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "No s'ha pogut canviar la contrasenya d'encriptació de fitxers per la d'accés"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Encriptatge"
diff --git a/l10n/ca/lib.po b/l10n/ca/lib.po
index 965da96ee3144d01868ef0d9d31b91299136d182..055312186fd91e384afa0744458525f95f616da4 100644
--- a/l10n/ca/lib.po
+++ b/l10n/ca/lib.po
@@ -3,13 +3,14 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+#  <rcalvoi@yahoo.com>, 2013.
 #   <rcalvoi@yahoo.com>, 2012-2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-18 00:03+0100\n"
-"PO-Revision-Date: 2013-01-17 09:24+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 15:40+0000\n"
 "Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
 "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
 "MIME-Version: 1.0\n"
@@ -18,47 +19,47 @@ msgstr ""
 "Language: ca\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Ajuda"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Personal"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Configuració"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Usuaris"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Aplicacions"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Administració"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "La baixada en ZIP està desactivada."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Els fitxers s'han de baixar d'un en un."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Torna a Fitxers"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Els fitxers seleccionats son massa grans per generar un fitxer zip."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "no s'ha pogut determinar"
 
@@ -86,6 +87,17 @@ msgstr "Text"
 msgid "Images"
 msgstr "Imatges"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament."
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Comproveu les <a href='%s'>guies d'instal·lació</a>."
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "segons enrere"
diff --git a/l10n/ca/settings.po b/l10n/ca/settings.po
index 3234dabdadfac03f9482ab73a35d0d45a339fad4..cc9de05cb212973a052eb8f897770e94dcbb02e5 100644
--- a/l10n/ca/settings.po
+++ b/l10n/ca/settings.po
@@ -13,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 15:20+0000\n"
-"Last-Translator: rogerc <rcalvoi@yahoo.com>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Catalan (http://www.transifex.com/projects/p/owncloud/language/ca/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -27,12 +27,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "No s'ha pogut carregar la llista des de l'App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Error d'autenticació"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr "No s'ha pogut canviar el nom a mostrar"
 
@@ -86,7 +86,7 @@ msgstr "No es pot afegir l'usuari al grup %s"
 msgid "Unable to remove user from group %s"
 msgstr "No es pot eliminar l'usuari del grup %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "No s'ha pogut actualitzar l'aplicació."
 
@@ -219,10 +219,6 @@ msgstr "Contrasenya actual"
 msgid "New password"
 msgstr "Contrasenya nova"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "mostra"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Canvia la contrasenya"
diff --git a/l10n/cs_CZ/core.po b/l10n/cs_CZ/core.po
index 65f55a38758d6335081dac70250008a13b49b1d6..87c6869293e5fdcc12fab78385c155775b4fcaa7 100644
--- a/l10n/cs_CZ/core.po
+++ b/l10n/cs_CZ/core.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 13:30+0000\n"
+"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
 "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -160,59 +160,59 @@ msgstr "Listopad"
 msgid "December"
 msgstr "Prosinec"
 
-#: js/js.js:284
+#: js/js.js:286
 msgid "Settings"
 msgstr "Nastavení"
 
-#: js/js.js:764
+#: js/js.js:766
 msgid "seconds ago"
 msgstr "před pár vteřinami"
 
-#: js/js.js:765
+#: js/js.js:767
 msgid "1 minute ago"
 msgstr "před minutou"
 
-#: js/js.js:766
+#: js/js.js:768
 msgid "{minutes} minutes ago"
 msgstr "před {minutes} minutami"
 
-#: js/js.js:767
+#: js/js.js:769
 msgid "1 hour ago"
 msgstr "před hodinou"
 
-#: js/js.js:768
+#: js/js.js:770
 msgid "{hours} hours ago"
 msgstr "před {hours} hodinami"
 
-#: js/js.js:769
+#: js/js.js:771
 msgid "today"
 msgstr "dnes"
 
-#: js/js.js:770
+#: js/js.js:772
 msgid "yesterday"
 msgstr "včera"
 
-#: js/js.js:771
+#: js/js.js:773
 msgid "{days} days ago"
 msgstr "před {days} dny"
 
-#: js/js.js:772
+#: js/js.js:774
 msgid "last month"
 msgstr "minulý mesíc"
 
-#: js/js.js:773
+#: js/js.js:775
 msgid "{months} months ago"
 msgstr "před {months} měsíci"
 
-#: js/js.js:774
+#: js/js.js:776
 msgid "months ago"
 msgstr "před měsíci"
 
-#: js/js.js:775
+#: js/js.js:777
 msgid "last year"
 msgstr "minulý rok"
 
-#: js/js.js:776
+#: js/js.js:778
 msgid "years ago"
 msgstr "před lety"
 
@@ -242,8 +242,8 @@ msgid "The object type is not specified."
 msgstr "Není určen typ objektu."
 
 #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
-#: js/share.js:583
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
 msgid "Error"
 msgstr "Chyba"
 
@@ -263,7 +263,7 @@ msgstr "Sdílet"
 msgid "Shared"
 msgstr "Sdílené"
 
-#: js/share.js:141 js/share.js:611
+#: js/share.js:141 js/share.js:622
 msgid "Error while sharing"
 msgstr "Chyba při sdílení"
 
@@ -359,23 +359,23 @@ msgstr "smazat"
 msgid "share"
 msgstr "sdílet"
 
-#: js/share.js:373 js/share.js:558
+#: js/share.js:373 js/share.js:569
 msgid "Password protected"
 msgstr "Chráněno heslem"
 
-#: js/share.js:571
+#: js/share.js:582
 msgid "Error unsetting expiration date"
 msgstr "Chyba při odstraňování data vypršení platnosti"
 
-#: js/share.js:583
+#: js/share.js:594
 msgid "Error setting expiration date"
 msgstr "Chyba při nastavení data vypršení platnosti"
 
-#: js/share.js:598
+#: js/share.js:609
 msgid "Sending ..."
 msgstr "Odesílám..."
 
-#: js/share.js:609
+#: js/share.js:620
 msgid "Email sent"
 msgstr "E-mail odeslán"
 
@@ -491,14 +491,14 @@ msgstr "Bez bezpečného generátoru náhodných čísel může útočník před
 msgid ""
 "Your data directory and files are probably accessible from the internet "
 "because the .htaccess file does not work."
-msgstr ""
+msgstr "Váš adresář s daty a soubory jsou dostupné z internetu, protože soubor .htaccess nefunguje."
 
 #: templates/installation.php:32
 msgid ""
 "For information how to properly configure your server, please see the <a "
 "href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
 "target=\"_blank\">documentation</a>."
-msgstr ""
+msgstr "Pro informace jak správně nastavit váš server se podívejte do <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">dokumentace</a>."
 
 #: templates/installation.php:36
 msgid "Create an <strong>admin account</strong>"
diff --git a/l10n/cs_CZ/files.po b/l10n/cs_CZ/files.po
index 16812c71df73aff5996abf4b4dc9d0629f2143d3..c6ea61394f2c1aff47ed6374889a30dd21bda7ac 100644
--- a/l10n/cs_CZ/files.po
+++ b/l10n/cs_CZ/files.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 10:40+0000\n"
+"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
 "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -23,16 +23,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Nelze přesunout %s - existuje soubor se stejným názvem"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Nelze přesunout %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Nelze přejmenovat soubor"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -71,7 +71,7 @@ msgstr "Zápis na disk selhal"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Nedostatek dostupného úložného prostoru"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -81,51 +81,52 @@ msgstr "Neplatný adresář"
 msgid "Files"
 msgstr "Soubory"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Zrušit sdílení"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr "Trvale odstranit"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Smazat"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Přejmenovat"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Čekající"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} již existuje"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "nahradit"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "navrhnout název"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "zrušit"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "nahrazeno {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "zpět"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "nahrazeno {new_name} s {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "provést smazání"
 
@@ -165,64 +166,60 @@ msgstr "Nelze odeslat Váš soubor, protože je to adresář nebo má velikost 0
 msgid "Upload Error"
 msgstr "Chyba odesílání"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Zavřít"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Čekající"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "odesílá se 1 soubor"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "odesílám {count} souborů"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Odesílání zrušeno."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Probíhá odesílání souboru. Opuštění stránky vyústí ve zrušení nahrávání."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL nemůže být prázdná"
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Neplatný název složky. Použití 'Shared' je rezervováno pro vnitřní potřeby Owncloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:948 templates/index.php:67
 msgid "Name"
 msgstr "Název"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:949 templates/index.php:78
 msgid "Size"
 msgstr "Velikost"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:950 templates/index.php:80
 msgid "Modified"
 msgstr "Změněno"
 
-#: js/files.js:974
+#: js/files.js:969
 msgid "1 folder"
 msgstr "1 složka"
 
-#: js/files.js:976
+#: js/files.js:971
 msgid "{count} folders"
 msgstr "{count} složky"
 
-#: js/files.js:984
+#: js/files.js:979
 msgid "1 file"
 msgstr "1 soubor"
 
-#: js/files.js:986
+#: js/files.js:981
 msgid "{count} files"
 msgstr "{count} soubory"
 
@@ -279,7 +276,7 @@ msgid "From link"
 msgstr "Z odkazu"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr "Koš"
 
 #: templates/index.php:46
@@ -294,6 +291,10 @@ msgstr "Žádný obsah. Nahrajte něco."
 msgid "Download"
 msgstr "Stáhnout"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Zrušit sdílení"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Odeslaný soubor je příliš velký"
diff --git a/l10n/cs_CZ/files_encryption.po b/l10n/cs_CZ/files_encryption.po
index ea06c00d305bc6263d0497bfab3bb7dc3121617c..566eff0e84ab5771fa773761edcb96b4f8fb35ff 100644
--- a/l10n/cs_CZ/files_encryption.po
+++ b/l10n/cs_CZ/files_encryption.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 09:51+0000\n"
-"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: cs_CZ\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Prosím přejděte na svého klienta ownCloud a nastavte šifrovací heslo pro dokončení konverze."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "přepnuto na šifrování na straně klienta"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Změnit šifrovací heslo na přihlašovací"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Zkontrolujte, prosím, své heslo a zkuste to znovu."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Nelze změnit šifrovací heslo na přihlašovací."
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Šifrování"
diff --git a/l10n/cs_CZ/lib.po b/l10n/cs_CZ/lib.po
index 55cc3d0f58c6b02c9dcaacc05bc1c7fdc5f3e403..2ef101c13ceb491eba35a2e23cd3db018ab9f36c 100644
--- a/l10n/cs_CZ/lib.po
+++ b/l10n/cs_CZ/lib.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-18 00:03+0100\n"
-"PO-Revision-Date: 2013-01-17 11:01+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 10:50+0000\n"
 "Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
 "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
 "MIME-Version: 1.0\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Language: cs_CZ\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Nápověda"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Osobní"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Nastavení"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Uživatelé"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Aplikace"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Administrace"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Stahování ZIPu je vypnuto."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Soubory musí být stahovány jednotlivě."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Zpět k souborům"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Vybrané soubory jsou příliš velké pro vytvoření zip souboru."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "nelze zjistit"
 
@@ -87,6 +87,17 @@ msgstr "Text"
 msgid "Images"
 msgstr "Obrázky"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "Váš webový server není správně nastaven pro umožnění synchronizace, protože rozhraní WebDAV je rozbité."
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Zkonzultujte, prosím, <a href='%s'>průvodce instalací</a>."
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "před vteřinami"
diff --git a/l10n/cs_CZ/settings.po b/l10n/cs_CZ/settings.po
index edfcef8add0158ff69a6993554d2b79df3a9c7eb..d78f97af88ac636531df20933c819370e591ad2c 100644
--- a/l10n/cs_CZ/settings.po
+++ b/l10n/cs_CZ/settings.po
@@ -13,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 12:41+0000\n"
-"Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Czech (Czech Republic) (http://www.transifex.com/projects/p/owncloud/language/cs_CZ/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -27,12 +27,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Nelze načíst seznam z App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Chyba ověření"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr "Nelze změnit zobrazované jméno"
 
@@ -86,7 +86,7 @@ msgstr "Nelze přidat uživatele do skupiny %s"
 msgid "Unable to remove user from group %s"
 msgstr "Nelze odstranit uživatele ze skupiny %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "Nelze aktualizovat aplikaci."
 
@@ -219,10 +219,6 @@ msgstr "Současné heslo"
 msgid "New password"
 msgstr "Nové heslo"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "zobrazit"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Změnit heslo"
diff --git a/l10n/da/files.po b/l10n/da/files.po
index faeb92854c3e5145a17555df377d5dcc4fab3fd1..dfe1828390c7e02a6c671d4b0d058d3664608adb 100644
--- a/l10n/da/files.po
+++ b/l10n/da/files.po
@@ -15,8 +15,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
 "MIME-Version: 1.0\n"
@@ -28,16 +28,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Kunne ikke flytte %s - der findes allerede en fil med dette navn"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Kunne ikke flytte %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Kunne ikke omdøbe fil"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -76,7 +76,7 @@ msgstr "Fejl ved skrivning til disk."
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Der er ikke nok plads til rådlighed"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -86,51 +86,52 @@ msgstr "Ugyldig mappe."
 msgid "Files"
 msgstr "Filer"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Fjern deling"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Slet"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Omdøb"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Afventer"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} eksisterer allerede"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "erstat"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "foreslå navn"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "fortryd"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "erstattede {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "fortryd"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "erstattede {new_name} med {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -170,64 +171,60 @@ msgstr "Kunne ikke uploade din fil, da det enten er en mappe eller er tom"
 msgid "Upload Error"
 msgstr "Fejl ved upload"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Luk"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Afventer"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 fil uploades"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} filer uploades"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Upload afbrudt."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URLen kan ikke være tom."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Ugyldigt mappenavn. Brug af \"Shared\" er forbeholdt Owncloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Navn"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Størrelse"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Ændret"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 mappe"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} mapper"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 fil"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} filer"
 
@@ -284,7 +281,7 @@ msgid "From link"
 msgstr "Fra link"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -299,6 +296,10 @@ msgstr "Her er tomt. Upload noget!"
 msgid "Download"
 msgstr "Download"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Fjern deling"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Upload for stor"
diff --git a/l10n/da/files_encryption.po b/l10n/da/files_encryption.po
index 2a28a291a50d6307e2be452eea6dd4e5c2d19c1b..10625b4397d190a3da3ab0a98814131850a7537f 100644
--- a/l10n/da/files_encryption.po
+++ b/l10n/da/files_encryption.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
 "MIME-Version: 1.0\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: da\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Skift venligst til din ownCloud-klient og skift krypteringskoden for at fuldføre konverteringen."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "skiftet til kryptering på klientsiden"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Udskift krypteringskode til login-adgangskode"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Check adgangskoder og forsøg igen."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Kunne ikke udskifte krypteringskode med login-adgangskode"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Kryptering"
diff --git a/l10n/da/lib.po b/l10n/da/lib.po
index 5596da61c317db3bfc8e0f2d0e7aaa3e1f57be28..48865c2368e4a634d31ac532e3c2b9835e1c313d 100644
--- a/l10n/da/lib.po
+++ b/l10n/da/lib.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 11:52+0000\n"
-"Last-Translator: Morten Juhl-Johansen Zölde-Fejér <morten@writtenandread.net>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,47 +20,47 @@ msgstr ""
 "Language: da\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Hjælp"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Personlig"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Indstillinger"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Brugere"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Apps"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Admin"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIP-download er slået fra."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Filer skal downloades en for en."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Tilbage til Filer"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "De markerede filer er for store til at generere en ZIP-fil."
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "kunne ikke fastslås"
 
@@ -88,6 +88,17 @@ msgstr "SMS"
 msgid "Images"
 msgstr "Billeder"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "sekunder siden"
diff --git a/l10n/da/settings.po b/l10n/da/settings.po
index b2be1f63796a8e7ff3724338fe1db6fa0d2a7e73..d743660c24f5afdee3cceb783b2c7885751b2b1e 100644
--- a/l10n/da/settings.po
+++ b/l10n/da/settings.po
@@ -17,8 +17,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Danish (http://www.transifex.com/projects/p/owncloud/language/da/)\n"
 "MIME-Version: 1.0\n"
@@ -31,12 +31,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Kunne ikke indlæse listen fra App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Adgangsfejl"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -90,7 +90,7 @@ msgstr "Brugeren kan ikke tilføjes til gruppen %s"
 msgid "Unable to remove user from group %s"
 msgstr "Brugeren kan ikke fjernes fra gruppen %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -223,10 +223,6 @@ msgstr "Nuværende adgangskode"
 msgid "New password"
 msgstr "Ny adgangskode"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "vis"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Skift kodeord"
diff --git a/l10n/de/files.po b/l10n/de/files.po
index a016e0c1074269d5d7f2086d267d21a382730c56..bf70be47a703372fe318e5dc3f905207e8d45080 100644
--- a/l10n/de/files.po
+++ b/l10n/de/files.po
@@ -28,8 +28,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
 "MIME-Version: 1.0\n"
@@ -41,16 +41,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits."
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Konnte %s nicht verschieben"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Konnte Datei nicht umbenennen"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -89,7 +89,7 @@ msgstr "Fehler beim Schreiben auf die Festplatte"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Nicht genug Speicherplatz verfügbar"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -99,51 +99,52 @@ msgstr "Ungültiges Verzeichnis."
 msgid "Files"
 msgstr "Dateien"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Nicht mehr freigeben"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Löschen"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Umbenennen"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Ausstehend"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} existiert bereits"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "ersetzen"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "Name vorschlagen"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "abbrechen"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "{new_name} wurde ersetzt"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "rückgängig machen"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "{old_name} ersetzt durch {new_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "Löschvorgang ausführen"
 
@@ -183,64 +184,60 @@ msgstr "Deine Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichn
 msgid "Upload Error"
 msgstr "Fehler beim Upload"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Schließen"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Ausstehend"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "Eine Datei wird hoch geladen"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} Dateien werden hochgeladen"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Upload abgebrochen."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "Die URL darf nicht leer sein."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten."
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Name"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Größe"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Bearbeitet"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 Ordner"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} Ordner"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 Datei"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} Dateien"
 
@@ -297,8 +294,8 @@ msgid "From link"
 msgstr "Von einem Link"
 
 #: templates/index.php:40
-msgid "Trash"
-msgstr "Papierkorb"
+msgid "Trash bin"
+msgstr ""
 
 #: templates/index.php:46
 msgid "Cancel upload"
@@ -312,6 +309,10 @@ msgstr "Alles leer. Lade etwas hoch!"
 msgid "Download"
 msgstr "Herunterladen"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Nicht mehr freigeben"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Upload zu groß"
diff --git a/l10n/de/files_encryption.po b/l10n/de/files_encryption.po
index 858ca4d69230a94a5dbd15da8654eb46b96a4ede..075f5b773496f218505ce21cea0222b348b51ddd 100644
--- a/l10n/de/files_encryption.po
+++ b/l10n/de/files_encryption.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
 "MIME-Version: 1.0\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: de\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Bitte wechseln Sie nun zum ownCloud Client und ändern Sie ihr Verschlüsselungspasswort um die Konvertierung abzuschließen."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "Zur Clientseitigen Verschlüsselung gewechselt"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Ändern des Verschlüsselungspasswortes zum Anmeldepasswort"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Bitte überprüfen sie Ihr Passwort und versuchen Sie es erneut."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Ihr Verschlüsselungspasswort konnte nicht als Anmeldepasswort gesetzt werden."
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Verschlüsselung"
diff --git a/l10n/de/lib.po b/l10n/de/lib.po
index d27f2e0504b04502f77658dfaf70b9e29df1fbf2..be6328b4e49d7767f06b18e05d35ec687c9a0012 100644
--- a/l10n/de/lib.po
+++ b/l10n/de/lib.po
@@ -14,9 +14,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-21 00:04+0100\n"
-"PO-Revision-Date: 2013-01-20 03:39+0000\n"
-"Last-Translator: Marcel Kühlhorn <susefan93@gmx.de>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -24,47 +24,47 @@ msgstr ""
 "Language: de\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Hilfe"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Persönlich"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Einstellungen"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Benutzer"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Apps"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Administrator"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Der ZIP-Download ist deaktiviert."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Die Dateien müssen einzeln heruntergeladen werden."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Zurück zu \"Dateien\""
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Die gewählten Dateien sind zu groß, um eine ZIP-Datei zu erstellen."
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "Konnte nicht festgestellt werden"
 
@@ -92,6 +92,17 @@ msgstr "Text"
 msgid "Images"
 msgstr "Bilder"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "Gerade eben"
diff --git a/l10n/de/settings.po b/l10n/de/settings.po
index 701892688ca0390dc0550340ad002a32eaa99daa..6ae8b00eda0e65478682e4a0b16a2ebadae3652f 100644
--- a/l10n/de/settings.po
+++ b/l10n/de/settings.po
@@ -26,8 +26,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (http://www.transifex.com/projects/p/owncloud/language/de/)\n"
 "MIME-Version: 1.0\n"
@@ -40,12 +40,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Die Liste der Anwendungen im Store konnte nicht geladen werden."
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Fehler bei der Anmeldung"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -99,7 +99,7 @@ msgstr "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden"
 msgid "Unable to remove user from group %s"
 msgstr "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -232,10 +232,6 @@ msgstr "Aktuelles Passwort"
 msgid "New password"
 msgstr "Neues Passwort"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "zeigen"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Passwort ändern"
diff --git a/l10n/de_DE/files.po b/l10n/de_DE/files.po
index 4ff85767805182ae5a798b5d58016129efaf2c1a..a92ea83e99f3f835df0eb646f2de883aa2d0edc3 100644
--- a/l10n/de_DE/files.po
+++ b/l10n/de_DE/files.po
@@ -30,8 +30,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
 "MIME-Version: 1.0\n"
@@ -43,16 +43,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Konnte %s nicht verschieben - Datei mit diesem Namen existiert bereits"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Konnte %s nicht verschieben"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Konnte Datei nicht umbenennen"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -91,7 +91,7 @@ msgstr "Fehler beim Schreiben auf die Festplatte"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Nicht genug Speicher vorhanden."
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -101,51 +101,52 @@ msgstr "Ungültiges Verzeichnis."
 msgid "Files"
 msgstr "Dateien"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Nicht mehr freigeben"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr "Entgültig löschen"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Löschen"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Umbenennen"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Ausstehend"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} existiert bereits"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "ersetzen"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "Name vorschlagen"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "abbrechen"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "{new_name} wurde ersetzt"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "rückgängig machen"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "{old_name} wurde ersetzt durch {new_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "Führe das Löschen aus"
 
@@ -185,64 +186,60 @@ msgstr "Ihre Datei kann nicht hochgeladen werden, da sie entweder ein Verzeichni
 msgid "Upload Error"
 msgstr "Fehler beim Upload"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Schließen"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Ausstehend"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 Datei wird hochgeladen"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} Dateien wurden hochgeladen"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Upload abgebrochen."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Der Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "Die URL darf nicht leer sein."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Ungültiger Verzeichnisname. Die Nutzung von \"Shared\" ist ownCloud vorbehalten"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Name"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Größe"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Bearbeitet"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 Ordner"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} Ordner"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 Datei"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} Dateien"
 
@@ -299,8 +296,8 @@ msgid "From link"
 msgstr "Von einem Link"
 
 #: templates/index.php:40
-msgid "Trash"
-msgstr "Abfall"
+msgid "Trash bin"
+msgstr ""
 
 #: templates/index.php:46
 msgid "Cancel upload"
@@ -314,6 +311,10 @@ msgstr "Alles leer. Bitte laden Sie etwas hoch!"
 msgid "Download"
 msgstr "Herunterladen"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Nicht mehr freigeben"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Der Upload ist zu groß"
diff --git a/l10n/de_DE/files_encryption.po b/l10n/de_DE/files_encryption.po
index af3fe444bfe03f975631e173e4d4cc8207df42a4..a4b8388e6031d6ac1ab7b93f3c11d71221c425c0 100644
--- a/l10n/de_DE/files_encryption.po
+++ b/l10n/de_DE/files_encryption.po
@@ -13,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:09+0100\n"
-"PO-Revision-Date: 2013-02-07 08:20+0000\n"
-"Last-Translator: Susi <>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -23,28 +23,6 @@ msgstr ""
 "Language: de_DE\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Bitte wechseln Sie nun zum ownCloud Client und ändern Sie ihr Verschlüsselungspasswort um die Konvertierung abzuschließen."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "Zur Clientseitigen Verschlüsselung gewechselt"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Ändern des Verschlüsselungspasswortes zum Anmeldepasswort"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Bitte überprüfen sie Ihr Passwort und versuchen Sie es erneut."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Ihr Verschlüsselungspasswort konnte nicht als Anmeldepasswort gesetzt werden."
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Verschlüsselung"
diff --git a/l10n/de_DE/lib.po b/l10n/de_DE/lib.po
index 851e152e2d5e56c7d3e9140b109e949c1216e414..2211ceeaee99aa65a902c87950a0b6f37dbdb88e 100644
--- a/l10n/de_DE/lib.po
+++ b/l10n/de_DE/lib.po
@@ -15,9 +15,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-18 00:03+0100\n"
-"PO-Revision-Date: 2013-01-17 21:16+0000\n"
-"Last-Translator: a.tangemann <a.tangemann@web.de>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -25,47 +25,47 @@ msgstr ""
 "Language: de_DE\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Hilfe"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Persönlich"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Einstellungen"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Benutzer"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Apps"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Administrator"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Der ZIP-Download ist deaktiviert."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Die Dateien müssen einzeln heruntergeladen werden."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Zurück zu \"Dateien\""
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Die gewählten Dateien sind zu groß, um eine ZIP-Datei zu erstellen."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "konnte nicht ermittelt werden"
 
@@ -93,6 +93,17 @@ msgstr "Text"
 msgid "Images"
 msgstr "Bilder"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "Gerade eben"
diff --git a/l10n/de_DE/settings.po b/l10n/de_DE/settings.po
index e198138298e6b021812954f8f3af54b07f380d62..7d2e04f58b7e868147325e187947f593ac23ba00 100644
--- a/l10n/de_DE/settings.po
+++ b/l10n/de_DE/settings.po
@@ -29,9 +29,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 08:10+0000\n"
-"Last-Translator: Susi <>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: German (Germany) (http://www.transifex.com/projects/p/owncloud/language/de_DE/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -43,12 +43,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Die Liste der Anwendungen im Store konnte nicht geladen werden."
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Fehler bei der Anmeldung"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr "Das Ändern des Anzeigenamens ist nicht möglich"
 
@@ -102,7 +102,7 @@ msgstr "Der Benutzer konnte nicht zur Gruppe %s hinzugefügt werden"
 msgid "Unable to remove user from group %s"
 msgstr "Der Benutzer konnte nicht aus der Gruppe %s entfernt werden"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "Die App konnte nicht geupdated werden."
 
@@ -235,10 +235,6 @@ msgstr "Aktuelles Passwort"
 msgid "New password"
 msgstr "Neues Passwort"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "zeigen"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Passwort ändern"
diff --git a/l10n/el/core.po b/l10n/el/core.po
index 6947ca9a5cfde613b31757e5570dd58955f33a21..0c8ae8d8ae9a2310753984aca47270c159eb1fcc 100644
--- a/l10n/el/core.po
+++ b/l10n/el/core.po
@@ -4,7 +4,7 @@
 # 
 # Translators:
 # axil Pι <axilleas@archlinux.gr>, 2012.
-# Dimitris M. <monopatis@gmail.com>, 2012.
+# Dimitris M. <monopatis@gmail.com>, 2012-2013.
 # Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012.
 # Efstathios Iosifidis <iosifidis@opensuse.org>, 2012.
 # Marios Bekatoros <>, 2012.
@@ -15,9 +15,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 14:40+0000\n"
+"Last-Translator: Dimitris M. <monopatis@gmail.com>\n"
 "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -60,7 +60,7 @@ msgstr "Δεν έχετε κατηγορία να προσθέσετε;"
 #: ajax/vcategories/add.php:37
 #, php-format
 msgid "This category already exists: %s"
-msgstr ""
+msgstr "Αυτή η κατηγορία υπάρχει ήδη: %s"
 
 #: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
 #: ajax/vcategories/favorites.php:24
@@ -164,59 +164,59 @@ msgstr "Νοέμβριος"
 msgid "December"
 msgstr "Δεκέμβριος"
 
-#: js/js.js:284
+#: js/js.js:286
 msgid "Settings"
 msgstr "Ρυθμίσεις"
 
-#: js/js.js:764
+#: js/js.js:766
 msgid "seconds ago"
 msgstr "δευτερόλεπτα πριν"
 
-#: js/js.js:765
+#: js/js.js:767
 msgid "1 minute ago"
 msgstr "1 λεπτό πριν"
 
-#: js/js.js:766
+#: js/js.js:768
 msgid "{minutes} minutes ago"
 msgstr "{minutes} λεπτά πριν"
 
-#: js/js.js:767
+#: js/js.js:769
 msgid "1 hour ago"
 msgstr "1 ώρα πριν"
 
-#: js/js.js:768
+#: js/js.js:770
 msgid "{hours} hours ago"
 msgstr "{hours} ώρες πριν"
 
-#: js/js.js:769
+#: js/js.js:771
 msgid "today"
 msgstr "σήμερα"
 
-#: js/js.js:770
+#: js/js.js:772
 msgid "yesterday"
 msgstr "χτες"
 
-#: js/js.js:771
+#: js/js.js:773
 msgid "{days} days ago"
 msgstr "{days} ημέρες πριν"
 
-#: js/js.js:772
+#: js/js.js:774
 msgid "last month"
 msgstr "τελευταίο μήνα"
 
-#: js/js.js:773
+#: js/js.js:775
 msgid "{months} months ago"
 msgstr "{months} μήνες πριν"
 
-#: js/js.js:774
+#: js/js.js:776
 msgid "months ago"
 msgstr "μήνες πριν"
 
-#: js/js.js:775
+#: js/js.js:777
 msgid "last year"
 msgstr "τελευταίο χρόνο"
 
-#: js/js.js:776
+#: js/js.js:778
 msgid "years ago"
 msgstr "χρόνια πριν"
 
@@ -246,8 +246,8 @@ msgid "The object type is not specified."
 msgstr "Δεν καθορίστηκε ο τύπος του αντικειμένου."
 
 #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
-#: js/share.js:583
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
 msgid "Error"
 msgstr "Σφάλμα"
 
@@ -267,7 +267,7 @@ msgstr "Διαμοιρασμός"
 msgid "Shared"
 msgstr ""
 
-#: js/share.js:141 js/share.js:611
+#: js/share.js:141 js/share.js:622
 msgid "Error while sharing"
 msgstr "Σφάλμα κατά τον διαμοιρασμό"
 
@@ -363,23 +363,23 @@ msgstr "διαγραφή"
 msgid "share"
 msgstr "διαμοιρασμός"
 
-#: js/share.js:373 js/share.js:558
+#: js/share.js:373 js/share.js:569
 msgid "Password protected"
 msgstr "Προστασία με συνθηματικό"
 
-#: js/share.js:571
+#: js/share.js:582
 msgid "Error unsetting expiration date"
 msgstr "Σφάλμα κατά την διαγραφή της ημ. λήξης"
 
-#: js/share.js:583
+#: js/share.js:594
 msgid "Error setting expiration date"
 msgstr "Σφάλμα κατά τον ορισμό ημ. λήξης"
 
-#: js/share.js:598
+#: js/share.js:609
 msgid "Sending ..."
 msgstr "Αποστολή..."
 
-#: js/share.js:609
+#: js/share.js:620
 msgid "Email sent"
 msgstr "Το Email απεστάλη "
 
diff --git a/l10n/el/files.po b/l10n/el/files.po
index 8466d5bc77a090b0bf6b75641c2a06e92e50f000..d0ce4ea85e864b76d3a1141de95589c779d5c937 100644
--- a/l10n/el/files.po
+++ b/l10n/el/files.po
@@ -3,7 +3,7 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
-# Dimitris M. <monopatis@gmail.com>, 2012.
+# Dimitris M. <monopatis@gmail.com>, 2012-2013.
 # Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012-2013.
 # Efstathios Iosifidis <iefstathios@gmail.com>, 2013.
 # Efstathios Iosifidis <iosifidis@opensuse.org>, 2012.
@@ -15,8 +15,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 "MIME-Version: 1.0\n"
@@ -28,16 +28,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Αδυναμία μετακίνησης του %s - υπάρχει ήδη αρχείο με αυτό το όνομα"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Αδυναμία μετακίνησης του %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Αδυναμία μετονομασίας αρχείου"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -76,7 +76,7 @@ msgstr "Αποτυχία εγγραφής στο δίσκο"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Μη επαρκής διαθέσιμος αποθηκευτικός χώρος"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -86,53 +86,54 @@ msgstr "Μη έγκυρος φάκελος."
 msgid "Files"
 msgstr "Αρχεία"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Διακοπή κοινής χρήσης"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
-msgstr ""
+msgstr "Μόνιμη διαγραφή"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Διαγραφή"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Μετονομασία"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Εκκρεμεί"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} υπάρχει ήδη"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "αντικατέστησε"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "συνιστώμενο όνομα"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "ακύρωση"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "{new_name} αντικαταστάθηκε"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "αναίρεση"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "αντικαταστάθηκε το {new_name} με {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
-msgstr ""
+msgstr "εκτέλεση διαδικασία διαγραφής"
 
 #: js/files.js:52
 msgid "'.' is an invalid file name."
@@ -170,64 +171,60 @@ msgstr "Αδυναμία στην αποστολή του αρχείου σας
 msgid "Upload Error"
 msgstr "Σφάλμα Αποστολής"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Κλείσιμο"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Εκκρεμεί"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 αρχείο ανεβαίνει"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} αρχεία ανεβαίνουν"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Η αποστολή ακυρώθηκε."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "Η URL δεν πρέπει να είναι κενή."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Μη έγκυρο όνομα φακέλου. Η χρήση του 'Κοινόχρηστος' χρησιμοποιείται από ο Owncloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Όνομα"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Μέγεθος"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Τροποποιήθηκε"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 φάκελος"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} φάκελοι"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 αρχείο"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} αρχεία"
 
@@ -284,7 +281,7 @@ msgid "From link"
 msgstr "Από σύνδεσμο"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -299,6 +296,10 @@ msgstr "Δεν υπάρχει τίποτα εδώ. Ανέβασε κάτι!"
 msgid "Download"
 msgstr "Λήψη"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Διακοπή κοινής χρήσης"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Πολύ μεγάλο αρχείο προς αποστολή"
@@ -319,4 +320,4 @@ msgstr "Τρέχουσα αναζήτηση "
 
 #: templates/upgrade.php:2
 msgid "Upgrading filesystem cache..."
-msgstr ""
+msgstr "Αναβάθμιση μνήμης cache του συστήματος αρχείων..."
diff --git a/l10n/el/files_encryption.po b/l10n/el/files_encryption.po
index fe96e9ba8afbd80ffea19e25d73ee0aac0b1ae09..7196402db423993479cc1d90a1195bcb8ba24ea6 100644
--- a/l10n/el/files_encryption.po
+++ b/l10n/el/files_encryption.po
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Dimitris M. <monopatis@gmail.com>, 2013.
 # Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012.
 # Efstathios Iosifidis <iefstathios@gmail.com>, 2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 "MIME-Version: 1.0\n"
@@ -19,43 +20,21 @@ msgstr ""
 "Language: el\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Αλλαγή συνθηματικού κρυπτογράφησης στο συνθηματικό εισόδου "
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Παρακαλώ ελέγξτε το συνθηματικό σας και προσπαθήστε ξανά."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Αδυναμία αλλαγής συνθηματικού κρυπτογράφησης αρχείων στο συνθηματικό εισόδου σας"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Κρυπτογράφηση"
 
 #: templates/settings-personal.php:7
 msgid "File encryption is enabled."
-msgstr ""
+msgstr "Η κρυπτογράφηση αρχείων είναι ενεργή."
 
 #: templates/settings-personal.php:11
 msgid "The following file types will not be encrypted:"
-msgstr ""
+msgstr "Οι παρακάτω τύποι αρχείων δεν θα κρυπτογραφηθούν:"
 
 #: templates/settings.php:7
 msgid "Exclude the following file types from encryption:"
-msgstr ""
+msgstr "Εξαίρεση των παρακάτω τύπων αρχείων από την κρυπτογράφηση:"
 
 #: templates/settings.php:12
 msgid "None"
diff --git a/l10n/el/files_trashbin.po b/l10n/el/files_trashbin.po
index 27cd5e21b4cad14ee7af697e6e283ac62fc7dbb6..91d2ccfde2cccdcb87458d3f048e77070ed8a363 100644
--- a/l10n/el/files_trashbin.po
+++ b/l10n/el/files_trashbin.po
@@ -3,13 +3,14 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Dimitris M. <monopatis@gmail.com>, 2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 23:11+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 14:20+0000\n"
+"Last-Translator: Dimitris M. <monopatis@gmail.com>\n"
 "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,20 +21,20 @@ msgstr ""
 #: ajax/delete.php:22
 #, php-format
 msgid "Couldn't delete %s permanently"
-msgstr ""
+msgstr "Αδύνατη η μόνιμη διαγραφή του %s"
 
 #: ajax/undelete.php:41
 #, php-format
 msgid "Couldn't restore %s"
-msgstr ""
+msgstr "Αδυναμία επαναφοράς %s"
 
 #: js/trash.js:7 js/trash.js:94
 msgid "perform restore operation"
-msgstr ""
+msgstr "εκτέλεση λειτουργία επαναφοράς"
 
 #: js/trash.js:33
 msgid "delete file permanently"
-msgstr ""
+msgstr "μόνιμη διαγραφή αρχείου"
 
 #: js/trash.js:125 templates/index.php:17
 msgid "Name"
@@ -41,7 +42,7 @@ msgstr "Όνομα"
 
 #: js/trash.js:126 templates/index.php:27
 msgid "Deleted"
-msgstr ""
+msgstr "Διαγράφηκε"
 
 #: js/trash.js:135
 msgid "1 folder"
@@ -61,7 +62,7 @@ msgstr "{count} αρχεία"
 
 #: templates/index.php:9
 msgid "Nothing in here. Your trash bin is empty!"
-msgstr ""
+msgstr "Δεν υπάρχει τίποτα εδώ. Ο κάδος σας είναι άδειος!"
 
 #: templates/index.php:20 templates/index.php:22
 msgid "Restore"
diff --git a/l10n/el/files_versions.po b/l10n/el/files_versions.po
index 7f82eaf81c7b05755ab6e2f2dae18429d7c32875..0f2316b7ab764b41106c06c2774e605fa50dc9e6 100644
--- a/l10n/el/files_versions.po
+++ b/l10n/el/files_versions.po
@@ -3,16 +3,16 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
-# Dimitris M. <monopatis@gmail.com>, 2012.
+# Dimitris M. <monopatis@gmail.com>, 2012-2013.
 # Efstathios Iosifidis <diamond_gr@freemail.gr>, 2012.
 # Nisok Kosin <nikos.efthimiou@gmail.com>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 23:11+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 14:20+0000\n"
+"Last-Translator: Dimitris M. <monopatis@gmail.com>\n"
 "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -23,33 +23,33 @@ msgstr ""
 #: ajax/rollbackVersion.php:15
 #, php-format
 msgid "Could not revert: %s"
-msgstr ""
+msgstr "Αδυναμία επαναφοράς του: %s"
 
 #: history.php:40
 msgid "success"
-msgstr ""
+msgstr "επιτυχία"
 
 #: history.php:42
 #, php-format
 msgid "File %s was reverted to version %s"
-msgstr ""
+msgstr "Το αρχείο %s επαναφέρθηκε στην έκδοση %s"
 
 #: history.php:49
 msgid "failure"
-msgstr ""
+msgstr "αποτυχία"
 
 #: history.php:51
 #, php-format
 msgid "File %s could not be reverted to version %s"
-msgstr ""
+msgstr "Το αρχείο %s δεν είναι δυνατό να επαναφερθεί στην έκδοση %s"
 
 #: history.php:68
 msgid "No old versions available"
-msgstr ""
+msgstr "Μη διαθέσιμες παλιές εκδόσεις"
 
 #: history.php:73
 msgid "No path specified"
-msgstr ""
+msgstr "Δεν καθορίστηκε διαδρομή"
 
 #: js/versions.js:16
 msgid "History"
@@ -57,7 +57,7 @@ msgstr "Ιστορικό"
 
 #: templates/history.php:20
 msgid "Revert a file to a previous version by clicking on its revert button"
-msgstr ""
+msgstr "Επαναφορά ενός αρχείου σε προηγούμενη έκδοση πατώντας στο κουμπί επαναφοράς"
 
 #: templates/settings.php:3
 msgid "Files Versioning"
diff --git a/l10n/el/lib.po b/l10n/el/lib.po
index 27ef72f2eb270ab79cea929ff5151fb9ed92c98a..214303c9d108af5c1903c256c33bc4cc66e60dad 100644
--- a/l10n/el/lib.po
+++ b/l10n/el/lib.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-18 00:03+0100\n"
-"PO-Revision-Date: 2013-01-17 20:39+0000\n"
-"Last-Translator: xneo1 <vagelis@cyberdest.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Language: el\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Βοήθεια"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Προσωπικά"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Ρυθμίσεις"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Χρήστες"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Εφαρμογές"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Διαχειριστής"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Η λήψη ZIP απενεργοποιήθηκε."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Τα αρχεία πρέπει να ληφθούν ένα-ένα."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Πίσω στα Αρχεία"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Τα επιλεγμένα αρχεία είναι μεγάλα ώστε να δημιουργηθεί αρχείο zip."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "δεν μπορούσε να προσδιορισθεί"
 
@@ -87,6 +87,17 @@ msgstr "Κείμενο"
 msgid "Images"
 msgstr "Εικόνες"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "δευτερόλεπτα πριν"
diff --git a/l10n/el/settings.po b/l10n/el/settings.po
index c6c5dfb10f04503431fa9c8f81d9237ddd87e98d..5a14d240bbf9f68a8f696f1d2b03242cfd192a7a 100644
--- a/l10n/el/settings.po
+++ b/l10n/el/settings.po
@@ -19,8 +19,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Greek (http://www.transifex.com/projects/p/owncloud/language/el/)\n"
 "MIME-Version: 1.0\n"
@@ -33,12 +33,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Σφάλμα στην φόρτωση της λίστας από το App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Σφάλμα πιστοποίησης"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -92,7 +92,7 @@ msgstr "Αδυναμία προσθήκη χρήστη στην ομάδα %s"
 msgid "Unable to remove user from group %s"
 msgstr "Αδυναμία αφαίρεσης χρήστη από την ομάδα %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -225,10 +225,6 @@ msgstr "Τρέχων συνθηματικό"
 msgid "New password"
 msgstr "Νέο συνθηματικό"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "εμφάνιση"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Αλλαγή συνθηματικού"
diff --git a/l10n/eo/files.po b/l10n/eo/files.po
index 139cd4a827f2dd9200a377f12a411f0113f79004..f2006ab6bd89c1858644dd3a825ee0ab296b0753 100644
--- a/l10n/eo/files.po
+++ b/l10n/eo/files.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
 "MIME-Version: 1.0\n"
@@ -23,16 +23,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Ne eblis movi %s: dosiero kun ĉi tiu nomo jam ekzistas"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Ne eblis movi %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Ne eblis alinomigi dosieron"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -81,51 +81,52 @@ msgstr "Nevalida dosierujo."
 msgid "Files"
 msgstr "Dosieroj"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Malkunhavigi"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Forigi"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Alinomigi"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Traktotaj"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} jam ekzistas"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "anstataŭigi"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "sugesti nomon"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "nuligi"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "anstataŭiĝis {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "malfari"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "anstataŭiĝis {new_name} per {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -165,64 +166,60 @@ msgstr "Ne eblis alŝuti vian dosieron ĉar ĝi estas dosierujo aŭ havas 0 duum
 msgid "Upload Error"
 msgstr "Alŝuta eraro"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Fermi"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Traktotaj"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 dosiero estas alŝutata"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} dosieroj alŝutatas"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "La alŝuto nuliĝis."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Dosieralŝuto plenumiĝas. Lasi la paĝon nun nuligus la alŝuton."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL ne povas esti malplena."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Nevalida dosierujnomo. Uzo de “Shared” rezervatas de Owncloud."
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Nomo"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Grando"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Modifita"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 dosierujo"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} dosierujoj"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 dosiero"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} dosierujoj"
 
@@ -279,7 +276,7 @@ msgid "From link"
 msgstr "El ligilo"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -294,6 +291,10 @@ msgstr "Nenio estas ĉi tie. Alŝutu ion!"
 msgid "Download"
 msgstr "Elŝuti"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Malkunhavigi"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Elŝuto tro larĝa"
diff --git a/l10n/eo/files_encryption.po b/l10n/eo/files_encryption.po
index 77ddc820b56e3c568699679ad0dfd2a31ec7718d..1a1260fd41311b86a4b74a259f1d11121d5be038 100644
--- a/l10n/eo/files_encryption.po
+++ b/l10n/eo/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: eo\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Ĉifrado"
diff --git a/l10n/eo/lib.po b/l10n/eo/lib.po
index 05fd08aa22b7866c6752498b23f77f3d5d258be7..72ab91a9de38457aa3a2c3dca491588441a429e7 100644
--- a/l10n/eo/lib.po
+++ b/l10n/eo/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
 "MIME-Version: 1.0\n"
@@ -18,47 +18,47 @@ msgstr ""
 "Language: eo\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Helpo"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Persona"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Agordo"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Uzantoj"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Aplikaĵoj"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Administranto"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIP-elŝuto estas malkapabligita."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Dosieroj devas elŝutiĝi unuope."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Reen al la dosieroj"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "La elektitaj dosieroj tro grandas por genero de ZIP-dosiero."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -86,6 +86,17 @@ msgstr "Teksto"
 msgid "Images"
 msgstr "Bildoj"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "sekundojn antaŭe"
diff --git a/l10n/eo/settings.po b/l10n/eo/settings.po
index d48c43e7b6f745c1da46385e250e041d64dbe961..3ffe8c68b7419dae293d98ec5d0ced44f7ce3105 100644
--- a/l10n/eo/settings.po
+++ b/l10n/eo/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Esperanto (http://www.transifex.com/projects/p/owncloud/language/eo/)\n"
 "MIME-Version: 1.0\n"
@@ -24,12 +24,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Ne eblis ŝargi liston el aplikaĵovendejo"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Aŭtentiga eraro"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -83,7 +83,7 @@ msgstr "Ne eblis aldoni la uzanton al la grupo %s"
 msgid "Unable to remove user from group %s"
 msgstr "Ne eblis forigi la uzantan el la grupo %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -216,10 +216,6 @@ msgstr "Nuna pasvorto"
 msgid "New password"
 msgstr "Nova pasvorto"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "montri"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Ŝanĝi la pasvorton"
diff --git a/l10n/es/core.po b/l10n/es/core.po
index ff3f6b2cd572efb460904f4c69d6ace2ed7beb17..4b75e189da41f25dfa3ce21bd530093e948a1fd9 100644
--- a/l10n/es/core.po
+++ b/l10n/es/core.po
@@ -6,6 +6,7 @@
 # Felix Liberio <felix.liberio@gmail.com>, 2013.
 #   <javierkaiser@gmail.com>, 2012.
 # Javier Llorente <javier@opensuse.org>, 2012.
+#  <juanma@kde.org.ar>, 2013.
 #   <juanma@kde.org.ar>, 2011-2013.
 #   <malmirk@gmail.com>, 2012.
 # oSiNaReF  <>, 2012.
@@ -20,9 +21,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 11:30+0000\n"
+"Last-Translator: juanman <juanma@kde.org.ar>\n"
 "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -169,59 +170,59 @@ msgstr "Noviembre"
 msgid "December"
 msgstr "Diciembre"
 
-#: js/js.js:284
+#: js/js.js:286
 msgid "Settings"
 msgstr "Ajustes"
 
-#: js/js.js:764
+#: js/js.js:767
 msgid "seconds ago"
 msgstr "hace segundos"
 
-#: js/js.js:765
+#: js/js.js:768
 msgid "1 minute ago"
 msgstr "hace 1 minuto"
 
-#: js/js.js:766
+#: js/js.js:769
 msgid "{minutes} minutes ago"
 msgstr "hace {minutes} minutos"
 
-#: js/js.js:767
+#: js/js.js:770
 msgid "1 hour ago"
 msgstr "Hace 1 hora"
 
-#: js/js.js:768
+#: js/js.js:771
 msgid "{hours} hours ago"
 msgstr "Hace {hours} horas"
 
-#: js/js.js:769
+#: js/js.js:772
 msgid "today"
 msgstr "hoy"
 
-#: js/js.js:770
+#: js/js.js:773
 msgid "yesterday"
 msgstr "ayer"
 
-#: js/js.js:771
+#: js/js.js:774
 msgid "{days} days ago"
 msgstr "hace {days} días"
 
-#: js/js.js:772
+#: js/js.js:775
 msgid "last month"
 msgstr "mes pasado"
 
-#: js/js.js:773
+#: js/js.js:776
 msgid "{months} months ago"
 msgstr "Hace {months} meses"
 
-#: js/js.js:774
+#: js/js.js:777
 msgid "months ago"
 msgstr "hace meses"
 
-#: js/js.js:775
+#: js/js.js:778
 msgid "last year"
 msgstr "año pasado"
 
-#: js/js.js:776
+#: js/js.js:779
 msgid "years ago"
 msgstr "hace años"
 
@@ -251,8 +252,8 @@ msgid "The object type is not specified."
 msgstr "El tipo de objeto no se ha especificado."
 
 #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
-#: js/share.js:583
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
 msgid "Error"
 msgstr "Fallo"
 
@@ -272,7 +273,7 @@ msgstr "Compartir"
 msgid "Shared"
 msgstr "Compartido"
 
-#: js/share.js:141 js/share.js:611
+#: js/share.js:141 js/share.js:622
 msgid "Error while sharing"
 msgstr "Error compartiendo"
 
@@ -368,23 +369,23 @@ msgstr "eliminar"
 msgid "share"
 msgstr "compartir"
 
-#: js/share.js:373 js/share.js:558
+#: js/share.js:373 js/share.js:569
 msgid "Password protected"
 msgstr "Protegido por contraseña"
 
-#: js/share.js:571
+#: js/share.js:582
 msgid "Error unsetting expiration date"
 msgstr "Error al eliminar la fecha de caducidad"
 
-#: js/share.js:583
+#: js/share.js:594
 msgid "Error setting expiration date"
 msgstr "Error estableciendo fecha de caducidad"
 
-#: js/share.js:598
+#: js/share.js:609
 msgid "Sending ..."
 msgstr "Enviando..."
 
-#: js/share.js:609
+#: js/share.js:620
 msgid "Email sent"
 msgstr "Correo electrónico enviado"
 
@@ -500,14 +501,14 @@ msgstr "Sin un generador de números aleatorios seguro un atacante podría prede
 msgid ""
 "Your data directory and files are probably accessible from the internet "
 "because the .htaccess file does not work."
-msgstr ""
+msgstr "Su directorio de datos y sus archivos están probablemente accesibles a través de internet ya que el archivo .htaccess no está funcionando."
 
 #: templates/installation.php:32
 msgid ""
 "For information how to properly configure your server, please see the <a "
 "href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
 "target=\"_blank\">documentation</a>."
-msgstr ""
+msgstr "Para información sobre cómo configurar adecuadamente su servidor, por favor vea la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentación</a>."
 
 #: templates/installation.php:36
 msgid "Create an <strong>admin account</strong>"
diff --git a/l10n/es/files.po b/l10n/es/files.po
index 589961db7a0503d34cb69ef283b45b589de4701b..369ddba9feac1aff8f5b29dd619c22adebea3835 100644
--- a/l10n/es/files.po
+++ b/l10n/es/files.po
@@ -7,6 +7,7 @@
 # Agustin Ferrario <agustin.ferrario@hotmail.com.ar>, 2013.
 #   <devianpctek@gmail.com>, 2012.
 # Javier Llorente <javier@opensuse.org>, 2012.
+#  <juanma@kde.org.ar>, 2013.
 #   <juanma@kde.org.ar>, 2012-2013.
 #   <karvayoEdgar@gmail.com>, 2013.
 # Rubén Trujillo <rubentrf@gmail.com>, 2012.
@@ -17,9 +18,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 11:30+0000\n"
+"Last-Translator: juanman <juanma@kde.org.ar>\n"
 "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -30,16 +31,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "No se puede mover %s - Ya existe un archivo con ese nombre"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "No se puede mover %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "No se puede renombrar el archivo"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -78,7 +79,7 @@ msgstr "La escritura en disco ha fallado"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "No hay suficiente espacio disponible"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -88,51 +89,52 @@ msgstr "Directorio invalido."
 msgid "Files"
 msgstr "Archivos"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Dejar de compartir"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr "Eliminar permanentemente"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Eliminar"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Renombrar"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Pendiente"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} ya existe"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "reemplazar"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "sugerir nombre"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "cancelar"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "reemplazado {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "deshacer"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "reemplazado {new_name} con {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "Eliminar"
 
@@ -172,64 +174,60 @@ msgstr "No ha sido posible subir tu archivo porque es un directorio o tiene 0 by
 msgid "Upload Error"
 msgstr "Error al subir el archivo"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "cerrrar"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Pendiente"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "subiendo 1 archivo"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "Subiendo {count} archivos"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Subida cancelada."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "La subida del archivo está en proceso. Salir de la página ahora cancelará la subida."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "La URL no puede estar vacía."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Nombre de carpeta invalido. El uso de \"Shared\" esta reservado para Owncloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:948 templates/index.php:67
 msgid "Name"
 msgstr "Nombre"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:949 templates/index.php:78
 msgid "Size"
 msgstr "Tamaño"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:950 templates/index.php:80
 msgid "Modified"
 msgstr "Modificado"
 
-#: js/files.js:974
+#: js/files.js:969
 msgid "1 folder"
 msgstr "1 carpeta"
 
-#: js/files.js:976
+#: js/files.js:971
 msgid "{count} folders"
 msgstr "{count} carpetas"
 
-#: js/files.js:984
+#: js/files.js:979
 msgid "1 file"
 msgstr "1 archivo"
 
-#: js/files.js:986
+#: js/files.js:981
 msgid "{count} files"
 msgstr "{count} archivos"
 
@@ -286,8 +284,8 @@ msgid "From link"
 msgstr "Desde el enlace"
 
 #: templates/index.php:40
-msgid "Trash"
-msgstr "Basura"
+msgid "Trash bin"
+msgstr "Papelera de reciclaje"
 
 #: templates/index.php:46
 msgid "Cancel upload"
@@ -301,6 +299,10 @@ msgstr "Aquí no hay nada. ¡Sube algo!"
 msgid "Download"
 msgstr "Descargar"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Dejar de compartir"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "El archivo es demasiado grande"
diff --git a/l10n/es/files_encryption.po b/l10n/es/files_encryption.po
index b7d69adaf0207de57f4aae9cc2b00c7aa068d573..f4c68c14f4c90f4cb7598baa6b5431dfc640ada0 100644
--- a/l10n/es/files_encryption.po
+++ b/l10n/es/files_encryption.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-05 23:10+0000\n"
-"Last-Translator: msvladimir <vladimirmartinezsierra@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -21,28 +21,6 @@ msgstr ""
 "Language: es\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Por favor, cambie su cliente de ownCloud y cambie su clave de cifrado para completar la conversión."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "Cambiar a cifrado del lado del cliente"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Cambie la clave de cifrado para su contraseña de inicio de sesión"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Por favor revise su contraseña e intentelo de nuevo."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "No se pudo cambiar la contraseña de cifrado de archivos de su contraseña de inicio de sesión"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Cifrado"
diff --git a/l10n/es/lib.po b/l10n/es/lib.po
index 38c6ee28554826597d9f614fe53b7ed9fd9abc72..a327c7a27d08b45cf747f711123c5717ab6bd049 100644
--- a/l10n/es/lib.po
+++ b/l10n/es/lib.po
@@ -4,6 +4,7 @@
 # 
 # Translators:
 # Agustin Ferrario <agustin.ferrario@hotmail.com.ar>, 2013.
+#  <juanma@kde.org.ar>, 2013.
 #   <juanma@kde.org.ar>, 2012.
 # Raul Fernandez Garcia <raulfg3@gmail.com>, 2012.
 # Rubén Trujillo <rubentrf@gmail.com>, 2012.
@@ -12,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-21 00:04+0100\n"
-"PO-Revision-Date: 2013-01-20 02:14+0000\n"
-"Last-Translator: Agustin Ferrario <agustin.ferrario@hotmail.com.ar>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 11:20+0000\n"
+"Last-Translator: juanman <juanma@kde.org.ar>\n"
 "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -22,47 +23,47 @@ msgstr ""
 "Language: es\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Ayuda"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Personal"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Ajustes"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Usuarios"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Aplicaciones"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Administración"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "La descarga en ZIP está desactivada."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Los archivos deben ser descargados uno por uno."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Volver a Archivos"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Los archivos seleccionados son demasiado grandes para generar el archivo zip."
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "no pudo ser determinado"
 
@@ -90,6 +91,17 @@ msgstr "Texto"
 msgid "Images"
 msgstr "Imágenes"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando."
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Por favor, vuelva a comprobar las <a href='%s'>guías de instalación</a>."
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "hace segundos"
diff --git a/l10n/es/settings.po b/l10n/es/settings.po
index ef23546dea677a6c0a030dc80ab49b5f01e34a0a..28a2afba54e191eb5957b2b1033456b0fcf2ee92 100644
--- a/l10n/es/settings.po
+++ b/l10n/es/settings.po
@@ -20,9 +20,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 00:30+0000\n"
-"Last-Translator: msvladimir <vladimirmartinezsierra@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (http://www.transifex.com/projects/p/owncloud/language/es/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -34,12 +34,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Imposible cargar la lista desde el App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Error de autenticación"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr "Incapaz de cambiar el nombre"
 
@@ -93,7 +93,7 @@ msgstr "Imposible añadir el usuario al grupo %s"
 msgid "Unable to remove user from group %s"
 msgstr "Imposible eliminar al usuario del grupo %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "No se puedo actualizar la aplicacion."
 
@@ -226,10 +226,6 @@ msgstr "Contraseña actual"
 msgid "New password"
 msgstr "Nueva contraseña:"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "mostrar"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Cambiar contraseña"
diff --git a/l10n/es_AR/files.po b/l10n/es_AR/files.po
index 45bc777add8993c5b705a70425286f5cfa6374c4..74cb51e8c7a009bcf415918621011b77bcdedd57 100644
--- a/l10n/es_AR/files.po
+++ b/l10n/es_AR/files.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
 "MIME-Version: 1.0\n"
@@ -23,16 +23,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "No se pudo mover %s - Un archivo con este nombre ya existe"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "No se pudo mover %s "
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "No fue posible cambiar el nombre al archivo"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -71,7 +71,7 @@ msgstr "Error al escribir en el disco"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "No hay suficiente capacidad de almacenamiento"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -81,51 +81,52 @@ msgstr "Directorio invalido."
 msgid "Files"
 msgstr "Archivos"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Dejar de compartir"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Borrar"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Cambiar nombre"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Pendiente"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} ya existe"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "reemplazar"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "sugerir nombre"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "cancelar"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "reemplazado {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "deshacer"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "reemplazado {new_name} con {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "Eliminar"
 
@@ -165,64 +166,60 @@ msgstr "No fue posible subir el archivo porque es un directorio o porque su tama
 msgid "Upload Error"
 msgstr "Error al subir el archivo"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Cerrar"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Pendiente"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "Subiendo 1 archivo"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "Subiendo {count} archivos"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "La subida fue cancelada"
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "La URL no puede estar vacía"
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Nombre de carpeta inválido. El uso de 'Shared' está reservado por ownCloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Nombre"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Tamaño"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Modificado"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 directorio"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} directorios"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 archivo"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} archivos"
 
@@ -279,8 +276,8 @@ msgid "From link"
 msgstr "Desde enlace"
 
 #: templates/index.php:40
-msgid "Trash"
-msgstr "Papelera"
+msgid "Trash bin"
+msgstr ""
 
 #: templates/index.php:46
 msgid "Cancel upload"
@@ -294,6 +291,10 @@ msgstr "No hay nada. ¡Subí contenido!"
 msgid "Download"
 msgstr "Descargar"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Dejar de compartir"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "El archivo es demasiado grande"
diff --git a/l10n/es_AR/files_encryption.po b/l10n/es_AR/files_encryption.po
index 0e80127a880150510b9e0b58d045691651c7139c..1afbf7e9f8963eac33e753b0913dbb38302b830a 100644
--- a/l10n/es_AR/files_encryption.po
+++ b/l10n/es_AR/files_encryption.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
 "MIME-Version: 1.0\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: es_AR\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Por favor, cambiá uu cliente de ownCloud y cambiá tu clave de encriptado para completar la conversión."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "Cambiado a encriptación por parte del cliente"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Cambiá la clave de encriptado para tu contraseña de inicio de sesión"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Por favor, revisá tu contraseña e intentalo de nuevo."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "No se pudo cambiar la contraseña de encriptación de archivos de tu contraseña de inicio de sesión"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Encriptación"
diff --git a/l10n/es_AR/lib.po b/l10n/es_AR/lib.po
index 0b6fd72855b184ecc55e129cb2ec507a28da96a8..5dd15f23d723530df137279c5dcab4b88da32e91 100644
--- a/l10n/es_AR/lib.po
+++ b/l10n/es_AR/lib.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-21 00:04+0100\n"
-"PO-Revision-Date: 2013-01-20 03:00+0000\n"
-"Last-Translator: Agustin Ferrario <agustin.ferrario@hotmail.com.ar>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Language: es_AR\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Ayuda"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Personal"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Ajustes"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Usuarios"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Aplicaciones"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Administración"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "La descarga en ZIP está desactivada."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Los archivos deben ser descargados de a uno."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Volver a archivos"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Los archivos seleccionados son demasiado grandes para generar el archivo zip."
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "no pudo ser determinado"
 
@@ -87,6 +87,17 @@ msgstr "Texto"
 msgid "Images"
 msgstr "Imágenes"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "hace unos segundos"
diff --git a/l10n/es_AR/settings.po b/l10n/es_AR/settings.po
index a9d2e183b6e3fdf3f31220e869d5823918a0f91a..f70c0090755b258010f88ec845e45c29133cd68d 100644
--- a/l10n/es_AR/settings.po
+++ b/l10n/es_AR/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Spanish (Argentina) (http://www.transifex.com/projects/p/owncloud/language/es_AR/)\n"
 "MIME-Version: 1.0\n"
@@ -24,12 +24,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Imposible cargar la lista desde el App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Error al autenticar"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -83,7 +83,7 @@ msgstr "No fue posible añadir el usuario al grupo %s"
 msgid "Unable to remove user from group %s"
 msgstr "No es posible eliminar al usuario del grupo %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -216,10 +216,6 @@ msgstr "Contraseña actual"
 msgid "New password"
 msgstr "Nueva contraseña:"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "mostrar"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Cambiar contraseña"
diff --git a/l10n/et_EE/files.po b/l10n/et_EE/files.po
index c42827d819d6c89a8dd972853bc0dc8bc91c5ef9..3e795d756e086e08345597ad752cea4316c57114 100644
--- a/l10n/et_EE/files.po
+++ b/l10n/et_EE/files.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
 "MIME-Version: 1.0\n"
@@ -80,51 +80,52 @@ msgstr ""
 msgid "Files"
 msgstr "Failid"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Lõpeta jagamine"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Kustuta"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "ümber"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Ootel"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} on juba olemas"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "asenda"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "soovita nime"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "loobu"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "asendatud nimega {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "tagasi"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "asendas nime {old_name} nimega {new_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -164,64 +165,60 @@ msgstr "Sinu faili üleslaadimine ebaõnnestus, kuna see on kaust või selle suu
 msgid "Upload Error"
 msgstr "Üleslaadimise viga"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Sulge"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Ootel"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 faili üleslaadimisel"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} faili üleslaadimist"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Üleslaadimine tühistati."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Faili üleslaadimine on töös.  Lehelt lahkumine katkestab selle üleslaadimise."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL ei saa olla tühi."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Nimi"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Suurus"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Muudetud"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 kaust"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} kausta"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 fail"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} faili"
 
@@ -278,7 +275,7 @@ msgid "From link"
 msgstr "Allikast"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -293,6 +290,10 @@ msgstr "Siin pole midagi. Lae midagi üles!"
 msgid "Download"
 msgstr "Lae alla"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Lõpeta jagamine"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Üleslaadimine on liiga suur"
diff --git a/l10n/et_EE/files_encryption.po b/l10n/et_EE/files_encryption.po
index c7abb91cb730766103137023c5c73de669d74cb0..3f06b12afb2279d670b7ea39ba89791462861059 100644
--- a/l10n/et_EE/files_encryption.po
+++ b/l10n/et_EE/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: et_EE\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Krüpteerimine"
diff --git a/l10n/et_EE/lib.po b/l10n/et_EE/lib.po
index a137f08e4a3d56e3610c21b31a8c0f7d0022a738..0a5e2f9590d3c4b60bb5bd3a02974a6274910845 100644
--- a/l10n/et_EE/lib.po
+++ b/l10n/et_EE/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
 "MIME-Version: 1.0\n"
@@ -18,47 +18,47 @@ msgstr ""
 "Language: et_EE\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Abiinfo"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Isiklik"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Seaded"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Kasutajad"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Rakendused"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Admin"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIP-ina allalaadimine on välja lülitatud."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Failid tuleb alla laadida ükshaaval."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Tagasi failide juurde"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Valitud failid on ZIP-faili loomiseks liiga suured."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -86,6 +86,17 @@ msgstr "Tekst"
 msgid "Images"
 msgstr "Pildid"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "sekundit tagasi"
diff --git a/l10n/et_EE/settings.po b/l10n/et_EE/settings.po
index bd9993e5ebcc824ffeeb62ad7a1f32cdbdb97d9f..601caf374a738689c1b4344bbbd4ac6a1adc71e7 100644
--- a/l10n/et_EE/settings.po
+++ b/l10n/et_EE/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Estonian (Estonia) (http://www.transifex.com/projects/p/owncloud/language/et_EE/)\n"
 "MIME-Version: 1.0\n"
@@ -23,12 +23,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "App Sotre'i nimekirja laadimine ebaõnnestus"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Autentimise viga"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -82,7 +82,7 @@ msgstr "Kasutajat ei saa lisada gruppi %s"
 msgid "Unable to remove user from group %s"
 msgstr "Kasutajat ei saa eemaldada grupist %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -215,10 +215,6 @@ msgstr "Praegune parool"
 msgid "New password"
 msgstr "Uus parool"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "näita"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Muuda parooli"
diff --git a/l10n/eu/files.po b/l10n/eu/files.po
index e32bbe4ed2fbd285d34b06b38e86ebbedadf7933..c7a7fc3d327a7b4b7ddfb9478525866f95a313b1 100644
--- a/l10n/eu/files.po
+++ b/l10n/eu/files.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
 "MIME-Version: 1.0\n"
@@ -24,16 +24,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Ezin da %s mugitu - Izen hau duen fitxategia dagoeneko existitzen da"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Ezin dira fitxategiak mugitu %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Ezin izan da fitxategia berrizendatu"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -72,7 +72,7 @@ msgstr "Errore bat izan da diskoan idazterakoan"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Ez dago behar aina leku erabilgarri,"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -82,51 +82,52 @@ msgstr "Baliogabeko karpeta."
 msgid "Files"
 msgstr "Fitxategiak"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Ez elkarbanatu"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Ezabatu"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Berrizendatu"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Zain"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} dagoeneko existitzen da"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "ordeztu"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "aholkatu izena"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "ezeztatu"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "ordezkatua {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "desegin"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr " {new_name}-k {old_name} ordezkatu du"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -166,64 +167,60 @@ msgstr "Ezin da zure fitxategia igo, karpeta bat da edo 0 byt ditu"
 msgid "Upload Error"
 msgstr "Igotzean errore bat suertatu da"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Itxi"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Zain"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "fitxategi 1 igotzen"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} fitxategi igotzen"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Igoera ezeztatuta"
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URLa ezin da hutsik egon."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Baliogabeako karpeta izena. 'Shared' izena Owncloudek erreserbatzen du"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Izena"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Tamaina"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Aldatuta"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "karpeta bat"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} karpeta"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "fitxategi bat"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} fitxategi"
 
@@ -280,7 +277,7 @@ msgid "From link"
 msgstr "Estekatik"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -295,6 +292,10 @@ msgstr "Ez dago ezer. Igo zerbait!"
 msgid "Download"
 msgstr "Deskargatu"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Ez elkarbanatu"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Igotakoa handiegia da"
diff --git a/l10n/eu/files_encryption.po b/l10n/eu/files_encryption.po
index 8f72a0453b40a2ad68942908b8e4511afa9f03ce..767e018b1fbca1858e178f0148fff4e941f3704c 100644
--- a/l10n/eu/files_encryption.po
+++ b/l10n/eu/files_encryption.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
 "MIME-Version: 1.0\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: eu\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Mesedez egiaztatu zure pasahitza eta saia zaitez berriro:"
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Enkriptazioa"
diff --git a/l10n/eu/lib.po b/l10n/eu/lib.po
index 9ba6d45bb6d8da4c096be89be260a02440737927..45a8d4d0bc72b15af1795752f0cb1d70ea11fe7e 100644
--- a/l10n/eu/lib.po
+++ b/l10n/eu/lib.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-20 00:05+0100\n"
-"PO-Revision-Date: 2013-01-19 00:06+0000\n"
-"Last-Translator: asieriko <asieriko@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Language: eu\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Laguntza"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Pertsonala"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Ezarpenak"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Erabiltzaileak"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Aplikazioak"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Admin"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIP deskarga ez dago gaituta."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Fitxategiak banan-banan deskargatu behar dira."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Itzuli fitxategietara"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Hautatuko fitxategiak oso handiak dira zip fitxategia sortzeko."
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "ezin izan da zehaztu"
 
@@ -87,6 +87,17 @@ msgstr "Testua"
 msgid "Images"
 msgstr "Irudiak"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "orain dela segundu batzuk"
diff --git a/l10n/eu/settings.po b/l10n/eu/settings.po
index b605292a8ae9977db1dfd8654f01a2afd4c0082a..de1a02251eb4fc2ba9cac02c370d8057fdc83992 100644
--- a/l10n/eu/settings.po
+++ b/l10n/eu/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Basque (http://www.transifex.com/projects/p/owncloud/language/eu/)\n"
 "MIME-Version: 1.0\n"
@@ -25,12 +25,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Ezin izan da App Dendatik zerrenda kargatu"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Autentifikazio errorea"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -84,7 +84,7 @@ msgstr "Ezin izan da erabiltzailea %s taldera gehitu"
 msgid "Unable to remove user from group %s"
 msgstr "Ezin izan da erabiltzailea %s taldetik ezabatu"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -217,10 +217,6 @@ msgstr "Uneko pasahitza"
 msgid "New password"
 msgstr "Pasahitz berria"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "erakutsi"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Aldatu pasahitza"
diff --git a/l10n/fa/files.po b/l10n/fa/files.po
index d18c250ecf5fbe1596c1b744ecb11e68ed074a9a..ace120766b4b62973a577dd3e668ccf7d93caac1 100644
--- a/l10n/fa/files.po
+++ b/l10n/fa/files.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
 "MIME-Version: 1.0\n"
@@ -24,16 +24,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "%s نمی تواند حرکت کند - در حال حاضر پرونده با این نام وجود دارد. "
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "%s نمی تواند حرکت کند "
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "قادر به تغییر نام پرونده نیست."
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -82,51 +82,52 @@ msgstr "فهرست راهنما نامعتبر می باشد."
 msgid "Files"
 msgstr "فایل ها"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "لغو اشتراک"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "پاک کردن"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "تغییرنام"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "در انتظار"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{نام _جدید} در حال حاضر وجود دارد."
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "جایگزین"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "پیشنهاد نام"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "لغو"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "{نام _جدید} جایگزین شد "
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "بازگشت"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "{نام_جدید} با { نام_قدیمی} جایگزین شد."
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -166,64 +167,60 @@ msgstr "ناتوان در بارگذاری یا فایل یک پوشه است ی
 msgid "Upload Error"
 msgstr "خطا در بار گذاری"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "بستن"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "در انتظار"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 پرونده آپلود شد."
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{ شمار } فایل های در حال آپلود"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "بار گذاری لغو شد"
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "آپلودکردن پرونده در حال پیشرفت است. در صورت خروج از صفحه آپلود لغو میگردد. "
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL  نمی تواند خالی باشد."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "نام پوشه نامعتبر است. استفاده از \" به اشتراک گذاشته شده \" متعلق به سایت Owncloud است."
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "نام"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "اندازه"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "تغییر یافته"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 پوشه"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{ شمار} پوشه ها"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 پرونده"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{ شمار } فایل ها"
 
@@ -280,7 +277,7 @@ msgid "From link"
 msgstr "از پیوند"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -295,6 +292,10 @@ msgstr "اینجا هیچ چیز نیست."
 msgid "Download"
 msgstr "بارگیری"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "لغو اشتراک"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "حجم بارگذاری بسیار زیاد است"
diff --git a/l10n/fa/files_encryption.po b/l10n/fa/files_encryption.po
index 586cebd200fa5dd85de059903d4b7568e67dc80c..ca4053cf7ee19d470142ed34d468a047458c9c56 100644
--- a/l10n/fa/files_encryption.po
+++ b/l10n/fa/files_encryption.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
 "MIME-Version: 1.0\n"
@@ -20,28 +20,6 @@ msgstr ""
 "Language: fa\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "لطفا گذرواژه خود را بررسی کنید و دوباره امتحان کنید."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "رمزگذاری"
diff --git a/l10n/fa/lib.po b/l10n/fa/lib.po
index 4fb46ee34436b33dd41f9ed49710abf5d88ff184..e5a7af775256b82406007d6c84aee8a93a62f24e 100644
--- a/l10n/fa/lib.po
+++ b/l10n/fa/lib.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-03 00:04+0100\n"
-"PO-Revision-Date: 2013-02-02 14:01+0000\n"
-"Last-Translator: Amir Reza Asadi <amirreza.asadi@live.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,27 +19,27 @@ msgstr ""
 "Language: fa\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: app.php:312
+#: app.php:339
 msgid "Help"
 msgstr "راه‌نما"
 
-#: app.php:319
+#: app.php:346
 msgid "Personal"
 msgstr "شخصی"
 
-#: app.php:324
+#: app.php:351
 msgid "Settings"
 msgstr "تنظیمات"
 
-#: app.php:329
+#: app.php:356
 msgid "Users"
 msgstr "کاربران"
 
-#: app.php:336
+#: app.php:363
 msgid "Apps"
 msgstr "  برنامه ها"
 
-#: app.php:338
+#: app.php:365
 msgid "Admin"
 msgstr "مدیر"
 
@@ -87,6 +87,17 @@ msgstr "متن"
 msgid "Images"
 msgstr "تصاویر"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "ثانیه‌ها پیش"
diff --git a/l10n/fa/settings.po b/l10n/fa/settings.po
index f38f77bf14e89a0e0b68d3db106a9415c54900f0..9b1925120861c8e1ed7584c265bdd69fea6e7f9d 100644
--- a/l10n/fa/settings.po
+++ b/l10n/fa/settings.po
@@ -12,8 +12,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Persian (http://www.transifex.com/projects/p/owncloud/language/fa/)\n"
 "MIME-Version: 1.0\n"
@@ -26,12 +26,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "قادر به بارگذاری لیست از فروشگاه اپ نیستم"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "خطا در اعتبار سنجی"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -85,7 +85,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -218,10 +218,6 @@ msgstr "گذرواژه کنونی"
 msgid "New password"
 msgstr "گذرواژه جدید"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "نمایش"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "تغییر گذر واژه"
diff --git a/l10n/fi_FI/files.po b/l10n/fi_FI/files.po
index 57096ee2349b688378d201d3fa6adae61d09bbb7..cbc9351025fbd1f32d375d8b49a981597c055601 100644
--- a/l10n/fi_FI/files.po
+++ b/l10n/fi_FI/files.po
@@ -12,9 +12,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 10:40+0000\n"
+"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
 "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -25,16 +25,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Kohteen %s siirto ei onnistunut - Tiedosto samalla nimellä on jo olemassa"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Kohteen %s siirto ei onnistunut"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Tiedoston nimeäminen uudelleen ei onnistunut"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -73,7 +73,7 @@ msgstr "Levylle kirjoitus epäonnistui"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Tallennustilaa ei ole riittävästi käytettävissä"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -83,51 +83,52 @@ msgstr "Virheellinen kansio."
 msgid "Files"
 msgstr "Tiedostot"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Peru jakaminen"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
-msgstr ""
+msgstr "Poista pysyvästi"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Poista"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Nimeä uudelleen"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Odottaa"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} on jo olemassa"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "korvaa"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "ehdota nimeä"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "peru"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "kumoa"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "suorita poistotoiminto"
 
@@ -167,64 +168,60 @@ msgstr "Tiedoston lähetys epäonnistui, koska sen koko on 0 tavua tai kyseessä
 msgid "Upload Error"
 msgstr "Lähetysvirhe."
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Sulje"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Odottaa"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Lähetys peruttu."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "Verkko-osoite ei voi olla tyhjä"
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:948 templates/index.php:67
 msgid "Name"
 msgstr "Nimi"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:949 templates/index.php:78
 msgid "Size"
 msgstr "Koko"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:950 templates/index.php:80
 msgid "Modified"
 msgstr "Muutettu"
 
-#: js/files.js:974
+#: js/files.js:969
 msgid "1 folder"
 msgstr "1 kansio"
 
-#: js/files.js:976
+#: js/files.js:971
 msgid "{count} folders"
 msgstr "{count} kansiota"
 
-#: js/files.js:984
+#: js/files.js:979
 msgid "1 file"
 msgstr "1 tiedosto"
 
-#: js/files.js:986
+#: js/files.js:981
 msgid "{count} files"
 msgstr "{count} tiedostoa"
 
@@ -281,7 +278,7 @@ msgid "From link"
 msgstr "Linkistä"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr "Roskakori"
 
 #: templates/index.php:46
@@ -296,6 +293,10 @@ msgstr "Täällä ei ole mitään. Lähetä tänne jotakin!"
 msgid "Download"
 msgstr "Lataa"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Peru jakaminen"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Lähetettävä tiedosto on liian suuri"
diff --git a/l10n/fi_FI/files_encryption.po b/l10n/fi_FI/files_encryption.po
index d8095a939b7264caff0fda3fc4bb94e3360500bb..00e3d63dbb34ba095740dd0080be0dabe09360df 100644
--- a/l10n/fi_FI/files_encryption.po
+++ b/l10n/fi_FI/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: fi_FI\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Tarkista salasanasi ja yritä uudelleen."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Salaus"
diff --git a/l10n/fi_FI/lib.po b/l10n/fi_FI/lib.po
index 7b90f23c2cd82bc41a1a606157c98ca8424fe1ff..524ae12f75e8f2e68c50cb351748ab0c80126a35 100644
--- a/l10n/fi_FI/lib.po
+++ b/l10n/fi_FI/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-18 00:03+0100\n"
-"PO-Revision-Date: 2013-01-17 08:40+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 10:40+0000\n"
 "Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
 "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
 "MIME-Version: 1.0\n"
@@ -18,47 +18,47 @@ msgstr ""
 "Language: fi_FI\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Ohje"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Henkilökohtainen"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Asetukset"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Käyttäjät"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Sovellukset"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Ylläpitäjä"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIP-lataus on poistettu käytöstä."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Tiedostot on ladattava yksittäin."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Takaisin tiedostoihin"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Valitut tiedostot ovat liian suurikokoisia mahtuakseen zip-tiedostoon."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "ei voitu määrittää"
 
@@ -86,6 +86,17 @@ msgstr "Teksti"
 msgid "Images"
 msgstr "Kuvat"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Lue tarkasti <a href='%s'>asennusohjeet</a>."
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "sekuntia sitten"
diff --git a/l10n/fi_FI/settings.po b/l10n/fi_FI/settings.po
index f31845d910bc7467746dedbd9d011a71b0bddba5..e5363fcee797151a7004c67c961fde5c13ed44ef 100644
--- a/l10n/fi_FI/settings.po
+++ b/l10n/fi_FI/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Finnish (Finland) (http://www.transifex.com/projects/p/owncloud/language/fi_FI/)\n"
 "MIME-Version: 1.0\n"
@@ -24,14 +24,14 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Ei pystytä lataamaan listaa sovellusvarastosta (App Store)"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Todennusvirhe"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
-msgstr ""
+msgstr "Näyttönimen muuttaminen epäonnistui"
 
 #: ajax/creategroup.php:10
 msgid "Group already exists"
@@ -83,7 +83,7 @@ msgstr "Käyttäjän tai ryhmän %s lisääminen ei onnistu"
 msgid "Unable to remove user from group %s"
 msgstr "Käyttäjän poistaminen ryhmästä %s ei onnistu"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "Sovelluksen päivitys epäonnistui."
 
@@ -216,10 +216,6 @@ msgstr "Nykyinen salasana"
 msgid "New password"
 msgstr "Uusi salasana"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "näytä"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Vaihda salasana"
@@ -230,15 +226,15 @@ msgstr "Näyttönimi"
 
 #: templates/personal.php:42
 msgid "Your display name was changed"
-msgstr ""
+msgstr "Näyttönimesi muutettiin"
 
 #: templates/personal.php:43
 msgid "Unable to change your display name"
-msgstr ""
+msgstr "Näyttönimen muuttaminen epäonnistui"
 
 #: templates/personal.php:46
 msgid "Change display name"
-msgstr ""
+msgstr "Muuta näyttönimeä"
 
 #: templates/personal.php:55
 msgid "Email"
diff --git a/l10n/fr/core.po b/l10n/fr/core.po
index 1454975ea7f50b274116c1197f9ccea331119101..62f0878214d2b32be2368194c211e29c1f8c024c 100644
--- a/l10n/fr/core.po
+++ b/l10n/fr/core.po
@@ -14,15 +14,16 @@
 # Nahir Mohamed <nahirmoha@gmail.com>, 2012.
 #   <nathaplop@gmail.com>, 2012.
 #   <nicolas@shivaserv.fr>, 2012.
+# Robert Di Rosa <>, 2013.
 #   <rom1dep@gmail.com>, 2011.
 # Romain DEP. <rom1dep@gmail.com>, 2012-2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 11:00+0000\n"
+"Last-Translator: Robert Di Rosa <>\n"
 "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -169,59 +170,59 @@ msgstr "novembre"
 msgid "December"
 msgstr "décembre"
 
-#: js/js.js:284
+#: js/js.js:286
 msgid "Settings"
 msgstr "Paramètres"
 
-#: js/js.js:764
+#: js/js.js:767
 msgid "seconds ago"
 msgstr "il y a quelques secondes"
 
-#: js/js.js:765
+#: js/js.js:768
 msgid "1 minute ago"
 msgstr "il y a une minute"
 
-#: js/js.js:766
+#: js/js.js:769
 msgid "{minutes} minutes ago"
 msgstr "il y a {minutes} minutes"
 
-#: js/js.js:767
+#: js/js.js:770
 msgid "1 hour ago"
 msgstr "Il y a une heure"
 
-#: js/js.js:768
+#: js/js.js:771
 msgid "{hours} hours ago"
 msgstr "Il y a {hours} heures"
 
-#: js/js.js:769
+#: js/js.js:772
 msgid "today"
 msgstr "aujourd'hui"
 
-#: js/js.js:770
+#: js/js.js:773
 msgid "yesterday"
 msgstr "hier"
 
-#: js/js.js:771
+#: js/js.js:774
 msgid "{days} days ago"
 msgstr "il y a {days} jours"
 
-#: js/js.js:772
+#: js/js.js:775
 msgid "last month"
 msgstr "le mois dernier"
 
-#: js/js.js:773
+#: js/js.js:776
 msgid "{months} months ago"
 msgstr "Il y a {months} mois"
 
-#: js/js.js:774
+#: js/js.js:777
 msgid "months ago"
 msgstr "il y a plusieurs mois"
 
-#: js/js.js:775
+#: js/js.js:778
 msgid "last year"
 msgstr "l'année dernière"
 
-#: js/js.js:776
+#: js/js.js:779
 msgid "years ago"
 msgstr "il y a plusieurs années"
 
@@ -251,8 +252,8 @@ msgid "The object type is not specified."
 msgstr "Le type d'objet n'est pas spécifié."
 
 #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
-#: js/share.js:583
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
 msgid "Error"
 msgstr "Erreur"
 
@@ -272,7 +273,7 @@ msgstr "Partager"
 msgid "Shared"
 msgstr "Partagé"
 
-#: js/share.js:141 js/share.js:611
+#: js/share.js:141 js/share.js:622
 msgid "Error while sharing"
 msgstr "Erreur lors de la mise en partage"
 
@@ -368,23 +369,23 @@ msgstr "supprimer"
 msgid "share"
 msgstr "partager"
 
-#: js/share.js:373 js/share.js:558
+#: js/share.js:373 js/share.js:569
 msgid "Password protected"
 msgstr "Protégé par un mot de passe"
 
-#: js/share.js:571
+#: js/share.js:582
 msgid "Error unsetting expiration date"
 msgstr "Une erreur est survenue pendant la suppression de la date d'expiration"
 
-#: js/share.js:583
+#: js/share.js:594
 msgid "Error setting expiration date"
 msgstr "Erreur lors de la spécification de la date d'expiration"
 
-#: js/share.js:598
+#: js/share.js:609
 msgid "Sending ..."
 msgstr "En cours d'envoi ..."
 
-#: js/share.js:609
+#: js/share.js:620
 msgid "Email sent"
 msgstr "Email envoyé"
 
@@ -500,14 +501,14 @@ msgstr "Sans générateur de nombre aléatoire sécurisé, un attaquant peut êt
 msgid ""
 "Your data directory and files are probably accessible from the internet "
 "because the .htaccess file does not work."
-msgstr ""
+msgstr "Votre répertoire data est certainement accessible depuis l'internet car le fichier .htaccess ne semble pas fonctionner"
 
 #: templates/installation.php:32
 msgid ""
 "For information how to properly configure your server, please see the <a "
 "href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
 "target=\"_blank\">documentation</a>."
-msgstr ""
+msgstr "Pour les informations de configuration de votre serveur, veuillez lire la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>."
 
 #: templates/installation.php:36
 msgid "Create an <strong>admin account</strong>"
diff --git a/l10n/fr/files.po b/l10n/fr/files.po
index 0e732da55ae5c6bb29cece0dbe7dbd08361206e4..1f984617ca5a7613ec48f3afca940628359a58ab 100644
--- a/l10n/fr/files.po
+++ b/l10n/fr/files.po
@@ -14,16 +14,16 @@
 # Guillaume Paumier <guillom.pom@gmail.com>, 2012.
 #   <life_0n_mars@live.fr>, 2012.
 # Nahir Mohamed <nahirmoha@gmail.com>, 2012.
-# Robert Di Rosa <>, 2012.
+# Robert Di Rosa <>, 2012-2013.
 #   <rom1dep@gmail.com>, 2011.
 # Romain DEP. <rom1dep@gmail.com>, 2012-2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 11:00+0000\n"
+"Last-Translator: Robert Di Rosa <>\n"
 "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -34,16 +34,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Impossible de déplacer %s - Un fichier possédant ce nom existe déjà"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Impossible de déplacer %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Impossible de renommer le fichier"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -82,7 +82,7 @@ msgstr "Erreur d'écriture sur le disque"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Plus assez d'espace de stockage disponible"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -92,51 +92,52 @@ msgstr "Dossier invalide."
 msgid "Files"
 msgstr "Fichiers"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Ne plus partager"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr "Supprimer de façon définitive"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Supprimer"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Renommer"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "En cours"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} existe déjà"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "remplacer"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "Suggérer un nom"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "annuler"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "{new_name} a été remplacé"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "annuler"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} a été remplacé par {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "effectuer l'opération de suppression"
 
@@ -176,64 +177,60 @@ msgstr "Impossible de charger vos fichiers car il s'agit d'un dossier ou le fich
 msgid "Upload Error"
 msgstr "Erreur de chargement"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Fermer"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "En cours"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 fichier en cours de téléchargement"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} fichiers téléversés"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Chargement annulé."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "L'URL ne peut-être vide"
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Nom de dossier invalide. L'utilisation du mot 'Shared' est réservée à Owncloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:948 templates/index.php:67
 msgid "Name"
 msgstr "Nom"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:949 templates/index.php:78
 msgid "Size"
 msgstr "Taille"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:950 templates/index.php:80
 msgid "Modified"
 msgstr "Modifié"
 
-#: js/files.js:974
+#: js/files.js:969
 msgid "1 folder"
 msgstr "1 dossier"
 
-#: js/files.js:976
+#: js/files.js:971
 msgid "{count} folders"
 msgstr "{count} dossiers"
 
-#: js/files.js:984
+#: js/files.js:979
 msgid "1 file"
 msgstr "1 fichier"
 
-#: js/files.js:986
+#: js/files.js:981
 msgid "{count} files"
 msgstr "{count} fichiers"
 
@@ -290,7 +287,7 @@ msgid "From link"
 msgstr "Depuis le lien"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr "Corbeille"
 
 #: templates/index.php:46
@@ -305,6 +302,10 @@ msgstr "Il n'y a rien ici ! Envoyez donc quelque chose :)"
 msgid "Download"
 msgstr "Télécharger"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Ne plus partager"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Fichier trop volumineux"
diff --git a/l10n/fr/files_encryption.po b/l10n/fr/files_encryption.po
index ac5a41de0019ab7490857e755e8ff0c75fb91306..7c41515ad8892bb77f6379ecf7099beb3bdf423f 100644
--- a/l10n/fr/files_encryption.po
+++ b/l10n/fr/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 14:02+0000\n"
-"Last-Translator: Romain DEP. <rom1dep@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: fr\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Veuillez vous connecter depuis votre client de synchronisation ownCloud et changer votre mot de passe de chiffrement pour finaliser la conversion."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "Mode de chiffrement changé en chiffrement côté client"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Convertir le mot de passe de chiffrement en mot de passe de connexion"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Veuillez vérifier vos mots de passe et réessayer."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Impossible de convertir votre mot de passe de chiffrement en mot de passe de connexion"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Chiffrement"
diff --git a/l10n/fr/lib.po b/l10n/fr/lib.po
index 0ae131d5c58828d2520d52c605be7cc48e22f547..9138f2a9a073101412e35143fddb01228bf4770c 100644
--- a/l10n/fr/lib.po
+++ b/l10n/fr/lib.po
@@ -4,13 +4,14 @@
 # 
 # Translators:
 # Geoffrey Guerrier <geoffrey.guerrier@gmail.com>, 2012.
+# Robert Di Rosa <>, 2013.
 # Romain DEP. <rom1dep@gmail.com>, 2012-2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-25 00:05+0100\n"
-"PO-Revision-Date: 2013-01-24 01:17+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 17:40+0000\n"
 "Last-Translator: Romain DEP. <rom1dep@gmail.com>\n"
 "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
 "MIME-Version: 1.0\n"
@@ -19,47 +20,47 @@ msgstr ""
 "Language: fr\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Aide"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Personnel"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Paramètres"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Utilisateurs"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Applications"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Administration"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Téléchargement ZIP désactivé."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Les fichiers nécessitent d'être téléchargés un par un."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Retour aux Fichiers"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Les fichiers sélectionnés sont trop volumineux pour être compressés."
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "impossible à déterminer"
 
@@ -87,6 +88,17 @@ msgstr "Texte"
 msgid "Images"
 msgstr "Images"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "Votre serveur web, n'est pas correctement configuré pour permettre la synchronisation des fichiers, car l'interface WebDav ne fonctionne pas comme il faut."
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Veuillez vous référer au <a href='%s'>guide d'installation</a>."
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "à l'instant"
diff --git a/l10n/fr/settings.po b/l10n/fr/settings.po
index edf75b638a000ea722e1bfd578514696db21515e..e9bd5d1095936e7b615dd0a1c836ff9712e0909c 100644
--- a/l10n/fr/settings.po
+++ b/l10n/fr/settings.po
@@ -24,9 +24,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 14:01+0000\n"
-"Last-Translator: Romain DEP. <rom1dep@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: French (http://www.transifex.com/projects/p/owncloud/language/fr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -38,12 +38,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Impossible de charger la liste depuis l'App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Erreur d'authentification"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr "Impossible de modifier le nom d'affichage"
 
@@ -97,7 +97,7 @@ msgstr "Impossible d'ajouter l'utilisateur au groupe %s"
 msgid "Unable to remove user from group %s"
 msgstr "Impossible de supprimer l'utilisateur du groupe %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "Impossible de mettre à jour l'application"
 
@@ -230,10 +230,6 @@ msgstr "Mot de passe actuel"
 msgid "New password"
 msgstr "Nouveau mot de passe"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "Afficher"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Changer de mot de passe"
diff --git a/l10n/gl/files.po b/l10n/gl/files.po
index 928faa768b90fb683bc0b8db129620a8fb9210af..4440639947c16736d610d4cfbdb769b72dd1dd96 100644
--- a/l10n/gl/files.po
+++ b/l10n/gl/files.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 "MIME-Version: 1.0\n"
@@ -22,16 +22,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Non se moveu %s - Xa existe un ficheiro con ese nome."
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Non se puido mover %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Non se pode renomear o ficheiro"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -80,51 +80,52 @@ msgstr "O directorio é incorrecto."
 msgid "Files"
 msgstr "Ficheiros"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Deixar de compartir"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Eliminar"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Mudar o nome"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Pendentes"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "xa existe un {new_name}"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "substituír"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "suxerir nome"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "cancelar"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "substituír {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "desfacer"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "substituír {new_name} polo {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -164,64 +165,60 @@ msgstr "Non se puido subir o ficheiro pois ou é un directorio ou ten 0 bytes"
 msgid "Upload Error"
 msgstr "Erro na subida"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Pechar"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Pendentes"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 ficheiro subíndose"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} ficheiros subíndose"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Subida cancelada."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "A subida do ficheiro está en curso. Saír agora da páxina cancelará a subida."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL non pode quedar baleiro."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Nome de cartafol non válido. O uso de 'Shared' está reservado por Owncloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Nome"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Tamaño"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Modificado"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 cartafol"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} cartafoles"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 ficheiro"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} ficheiros"
 
@@ -278,7 +275,7 @@ msgid "From link"
 msgstr "Dende a ligazón"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -293,6 +290,10 @@ msgstr "Nada por aquí. Envía algo."
 msgid "Download"
 msgstr "Descargar"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Deixar de compartir"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Envío demasiado grande"
diff --git a/l10n/gl/files_encryption.po b/l10n/gl/files_encryption.po
index 2d7038a12497b63b3fe9f3f7670e0250f83c8435..ae8181660a9dcd84b8ca42b681e77b7560c1d90a 100644
--- a/l10n/gl/files_encryption.po
+++ b/l10n/gl/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: gl\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Cifrado"
diff --git a/l10n/gl/lib.po b/l10n/gl/lib.po
index c6fc161311af6285d7e8bcae12eaa71340128629..dfe0a1f31023c8029bcb1f4ce40ff0dde7d658bc 100644
--- a/l10n/gl/lib.po
+++ b/l10n/gl/lib.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-23 00:05+0100\n"
-"PO-Revision-Date: 2013-01-22 06:11+0000\n"
-"Last-Translator: Xosé M. Lamas <correo.xmgz@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,47 +20,47 @@ msgstr ""
 "Language: gl\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Axuda"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Persoal"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Configuracións"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Usuarios"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Aplicativos"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Administración"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "As descargas ZIP están desactivadas"
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Os ficheiros necesitan seren descargados de un en un."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Volver aos ficheiros"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Os ficheiros seleccionados son demasiado grandes como para xerar un ficheiro zip."
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "non puido ser determinado"
 
@@ -88,6 +88,17 @@ msgstr "Texto"
 msgid "Images"
 msgstr "Imaxes"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "hai segundos"
diff --git a/l10n/gl/settings.po b/l10n/gl/settings.po
index ca408e9994364260d8aafe79ce9603913c9bcb47..f4022c9f2b45fcb8dbe572468af9d51813e2eefc 100644
--- a/l10n/gl/settings.po
+++ b/l10n/gl/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Galician (http://www.transifex.com/projects/p/owncloud/language/gl/)\n"
 "MIME-Version: 1.0\n"
@@ -24,12 +24,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Non foi posíbel cargar a lista desde a App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Produciuse un erro de autenticación"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -83,7 +83,7 @@ msgstr "Non é posíbel engadir o usuario ao grupo %s"
 msgid "Unable to remove user from group %s"
 msgstr "Non é posíbel eliminar o usuario do grupo %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -216,10 +216,6 @@ msgstr "Contrasinal actual"
 msgid "New password"
 msgstr "Novo contrasinal"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "amosar"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Cambiar o contrasinal"
diff --git a/l10n/he/files.po b/l10n/he/files.po
index 97499d15ec7b698e89ed11ce447ce6fd8215aafe..8a109378c45f67bac6f44e5f149cdb6d616b5ba5 100644
--- a/l10n/he/files.po
+++ b/l10n/he/files.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
 "MIME-Version: 1.0\n"
@@ -82,51 +82,52 @@ msgstr ""
 msgid "Files"
 msgstr "קבצים"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "הסר שיתוף"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "מחיקה"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "שינוי שם"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "ממתין"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} כבר קיים"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "החלפה"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "הצעת שם"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "ביטול"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "{new_name} הוחלף"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "ביטול"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} הוחלף ב־{old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -166,64 +167,60 @@ msgstr "לא יכול להעלות את הקובץ מכיוון שזו תקיה
 msgid "Upload Error"
 msgstr "שגיאת העלאה"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "סגירה"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "ממתין"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "קובץ אחד נשלח"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} קבצים נשלחים"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "ההעלאה בוטלה."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "מתבצעת כעת העלאת קבצים. עזיבה של העמוד תבטל את ההעלאה."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "קישור אינו יכול להיות ריק."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "שם"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "גודל"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "זמן שינוי"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "תיקייה אחת"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} תיקיות"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "קובץ אחד"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} קבצים"
 
@@ -280,7 +277,7 @@ msgid "From link"
 msgstr "מקישור"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -295,6 +292,10 @@ msgstr "אין כאן שום דבר. אולי ברצונך להעלות משהו
 msgid "Download"
 msgstr "הורדה"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "הסר שיתוף"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "העלאה גדולה מידי"
diff --git a/l10n/he/files_encryption.po b/l10n/he/files_encryption.po
index 5347a271b671d438ba47fe16f8b5567f3ed0cebc..2c26e96cd12132ba40a314695fb7e2851af74528 100644
--- a/l10n/he/files_encryption.po
+++ b/l10n/he/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: he\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "הצפנה"
diff --git a/l10n/he/lib.po b/l10n/he/lib.po
index 8383f3ccc95277107e84f50b9b63db36cc786349..fbafbd81e455ec8fa6a24e9669221b071e8fbc0a 100644
--- a/l10n/he/lib.po
+++ b/l10n/he/lib.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
 "MIME-Version: 1.0\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Language: he\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "עזרה"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "אישי"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "הגדרות"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "משתמשים"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "יישומים"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "מנהל"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "הורדת ZIP כבויה"
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "יש להוריד את הקבצים אחד אחרי השני."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "חזרה לקבצים"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "הקבצים הנבחרים גדולים מידי ליצירת קובץ zip."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -87,6 +87,17 @@ msgstr "טקסט"
 msgid "Images"
 msgstr "תמונות"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "שניות"
diff --git a/l10n/he/settings.po b/l10n/he/settings.po
index 018aebd9f602c48d5111a9f9983882d6df35e5cc..2fee13d9292d6e43fe96c8a111af8cbd5bd91f22 100644
--- a/l10n/he/settings.po
+++ b/l10n/he/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hebrew (http://www.transifex.com/projects/p/owncloud/language/he/)\n"
 "MIME-Version: 1.0\n"
@@ -25,12 +25,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "לא ניתן לטעון רשימה מה־App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "שגיאת הזדהות"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -84,7 +84,7 @@ msgstr "לא ניתן להוסיף משתמש לקבוצה %s"
 msgid "Unable to remove user from group %s"
 msgstr "לא ניתן להסיר משתמש מהקבוצה %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -217,10 +217,6 @@ msgstr "ססמה נוכחית"
 msgid "New password"
 msgstr "ססמה חדשה"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "הצגה"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "שינוי ססמה"
diff --git a/l10n/hi/files.po b/l10n/hi/files.po
index 1bffd04a96371a9f39d6852c4a9f60c56a8f4560..fe4e56b565b2febf8170413a82c33febfb7ea051 100644
--- a/l10n/hi/files.po
+++ b/l10n/hi/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
 "MIME-Version: 1.0\n"
@@ -78,51 +78,52 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr ""
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr ""
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -162,64 +163,60 @@ msgstr ""
 msgid "Upload Error"
 msgstr ""
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr ""
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr ""
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr ""
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr ""
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -276,7 +273,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -291,6 +288,10 @@ msgstr ""
 msgid "Download"
 msgstr ""
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr ""
diff --git a/l10n/hi/files_encryption.po b/l10n/hi/files_encryption.po
index 82eea01a3f32e05169ef1c9c86e23b9d199e99df..94768da1fcc82e1d63b9dfbd2d662c3d1efe9bc3 100644
--- a/l10n/hi/files_encryption.po
+++ b/l10n/hi/files_encryption.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
 "MIME-Version: 1.0\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Language: hi\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr ""
diff --git a/l10n/hi/lib.po b/l10n/hi/lib.po
index 9cb97532356ba2242da5f0b901f1887de2557bca..beea38356858834bf50ebde1aa783945fac4fa13 100644
--- a/l10n/hi/lib.po
+++ b/l10n/hi/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Language: hi\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr ""
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr ""
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr ""
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr ""
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr ""
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr ""
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -85,6 +85,17 @@ msgstr ""
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr ""
diff --git a/l10n/hi/settings.po b/l10n/hi/settings.po
index b0e88f95c9b086bee71ba6b070be73feb9468566..86afd8794ea7337d1669452883f3577160285e0d 100644
--- a/l10n/hi/settings.po
+++ b/l10n/hi/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hindi (http://www.transifex.com/projects/p/owncloud/language/hi/)\n"
 "MIME-Version: 1.0\n"
@@ -21,12 +21,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr ""
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr ""
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -80,7 +80,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -213,10 +213,6 @@ msgstr ""
 msgid "New password"
 msgstr "नया पासवर्ड"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr ""
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr ""
diff --git a/l10n/hr/files.po b/l10n/hr/files.po
index 54726b33311cd0bc05cfbf04fd8decea80b7b2de..4e58c45f936b8a597953e9e05790f144415eae56 100644
--- a/l10n/hr/files.po
+++ b/l10n/hr/files.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
 "MIME-Version: 1.0\n"
@@ -81,51 +81,52 @@ msgstr ""
 msgid "Files"
 msgstr "Datoteke"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Prekini djeljenje"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Briši"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Promjeni ime"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "U tijeku"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "zamjeni"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "predloži ime"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "odustani"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "vrati"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -165,64 +166,60 @@ msgstr "Nemoguće poslati datoteku jer je prazna ili je direktorij"
 msgid "Upload Error"
 msgstr "Pogreška pri slanju"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Zatvori"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "U tijeku"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 datoteka se učitava"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Slanje poništeno."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Učitavanje datoteke. Napuštanjem stranice će prekinuti učitavanje."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Naziv"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Veličina"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Zadnja promjena"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -279,7 +276,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -294,6 +291,10 @@ msgstr "Nema ničega u ovoj mapi. Pošalji nešto!"
 msgid "Download"
 msgstr "Preuzmi"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Prekini djeljenje"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Prijenos je preobiman"
diff --git a/l10n/hr/files_encryption.po b/l10n/hr/files_encryption.po
index 9b86d0ed1f18c43a6237f067cef9116305ee14a4..434831e8abeb6c88e8cee096b634ed14bc238bc3 100644
--- a/l10n/hr/files_encryption.po
+++ b/l10n/hr/files_encryption.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
 "MIME-Version: 1.0\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Language: hr\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr ""
diff --git a/l10n/hr/lib.po b/l10n/hr/lib.po
index 28ed5873c3373ac8218f8c4811ee58e30a0535ba..9eedb4b6807a5162eb88fde0fe212cb830cdbcf0 100644
--- a/l10n/hr/lib.po
+++ b/l10n/hr/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Language: hr\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Pomoć"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Osobno"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Postavke"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Korisnici"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr ""
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr ""
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -85,6 +85,17 @@ msgstr "Tekst"
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "sekundi prije"
diff --git a/l10n/hr/settings.po b/l10n/hr/settings.po
index 062d280811c653ff8933210787b539cc6ac20f64..38cc52f1a3a72e3c63be65c2f12eb07e543f82b6 100644
--- a/l10n/hr/settings.po
+++ b/l10n/hr/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Croatian (http://www.transifex.com/projects/p/owncloud/language/hr/)\n"
 "MIME-Version: 1.0\n"
@@ -24,12 +24,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Nemogićnost učitavanja liste sa Apps Stora"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Greška kod autorizacije"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -83,7 +83,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -216,10 +216,6 @@ msgstr "Trenutna lozinka"
 msgid "New password"
 msgstr "Nova lozinka"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "prikaz"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Izmjena lozinke"
diff --git a/l10n/hu_HU/files.po b/l10n/hu_HU/files.po
index 3b40ac770e6d3a4b4bd51fdb861af384924184f4..5a793b84bff9709a7154ee5aea56c181c57c2ae1 100644
--- a/l10n/hu_HU/files.po
+++ b/l10n/hu_HU/files.po
@@ -14,8 +14,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
 "MIME-Version: 1.0\n"
@@ -27,16 +27,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "%s áthelyezése nem sikerült - már létezik másik fájl ezzel a névvel"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Nem sikerült %s áthelyezése"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Nem lehet átnevezni a fájlt"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -75,7 +75,7 @@ msgstr "Nem sikerült a lemezre történő írás"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Nincs elég szabad hely."
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -85,51 +85,52 @@ msgstr "Érvénytelen mappa."
 msgid "Files"
 msgstr "Fájlok"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Megosztás visszavonása"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Törlés"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Átnevezés"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Folyamatban"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} már létezik"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "írjuk fölül"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "legyen más neve"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "mégse"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "a(z) {new_name} állományt kicseréltük"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "visszavonás"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} fájlt kicseréltük ezzel:  {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -169,64 +170,60 @@ msgstr "Nem tölthető fel, mert mappa volt, vagy 0 byte méretű"
 msgid "Upload Error"
 msgstr "Feltöltési hiba"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Bezárás"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Folyamatban"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 fájl töltődik föl"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} fájl töltődik föl"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "A feltöltést megszakítottuk."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "Az URL nem lehet semmi."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Érvénytelen mappanév. A név használata csak a Owncloud számára lehetséges."
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Név"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Méret"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Módosítva"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 mappa"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} mappa"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 fájl"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} fájl"
 
@@ -283,7 +280,7 @@ msgid "From link"
 msgstr "Feltöltés linkről"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -298,6 +295,10 @@ msgstr "Itt nincs semmi. Töltsön fel valamit!"
 msgid "Download"
 msgstr "Letöltés"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Megosztás visszavonása"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "A feltöltés túl nagy"
diff --git a/l10n/hu_HU/files_encryption.po b/l10n/hu_HU/files_encryption.po
index 0409118f14acdc4a4ddf5cd49ced3f83c39c131a..3a5ec713fb121134c0d3c46ef45d77451d7ed5db 100644
--- a/l10n/hu_HU/files_encryption.po
+++ b/l10n/hu_HU/files_encryption.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
 "MIME-Version: 1.0\n"
@@ -20,28 +20,6 @@ msgstr ""
 "Language: hu_HU\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Kérjük, hogy váltson át az ownCloud kliensére, és változtassa meg a titkosítási jelszót az átalakítás befejezéséhez."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "átváltva a kliens oldalai titkosításra"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Titkosítási jelszó módosítása a bejelentkezési jelszóra"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Kérjük, ellenőrizze a jelszavait, és próbálja meg újra."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Nem módosíthatja a fájltitkosítási jelszavát a bejelentkezési jelszavára"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Titkosítás"
diff --git a/l10n/hu_HU/lib.po b/l10n/hu_HU/lib.po
index c3c29798b139f1294e83af9f317ced661a3c9b80..f32209e9a7db9bc6ef6dadd9d9152dfcb963a6a6 100644
--- a/l10n/hu_HU/lib.po
+++ b/l10n/hu_HU/lib.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-26 00:09+0100\n"
-"PO-Revision-Date: 2013-01-25 12:37+0000\n"
-"Last-Translator: Laszlo Tornoci <torlasz@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,47 +20,47 @@ msgstr ""
 "Language: hu_HU\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Súgó"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Személyes"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Beállítások"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Felhasználók"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Alkalmazások"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Admin"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "A ZIP-letöltés nincs engedélyezve."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "A fájlokat egyenként kell letölteni"
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Vissza a Fájlokhoz"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "A kiválasztott fájlok túl nagyok a zip tömörítéshez."
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "nem határozható meg"
 
@@ -88,6 +88,17 @@ msgstr "Szöveg"
 msgid "Images"
 msgstr "Képek"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "másodperce"
diff --git a/l10n/hu_HU/settings.po b/l10n/hu_HU/settings.po
index d544d5d95b051c731bc041dc24284457675944ec..a0057f4b4aa932d6c33ad56f20d95c7ff3f9901f 100644
--- a/l10n/hu_HU/settings.po
+++ b/l10n/hu_HU/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Hungarian (Hungary) (http://www.transifex.com/projects/p/owncloud/language/hu_HU/)\n"
 "MIME-Version: 1.0\n"
@@ -24,12 +24,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Nem tölthető le a lista az App Store-ból"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Azonosítási hiba"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -83,7 +83,7 @@ msgstr "A felhasználó nem adható hozzá ehhez a csoporthoz: %s"
 msgid "Unable to remove user from group %s"
 msgstr "A felhasználó nem távolítható el ebből a csoportból: %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -216,10 +216,6 @@ msgstr "A jelenlegi jelszó"
 msgid "New password"
 msgstr "Az új jelszó"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "lássam"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "A jelszó megváltoztatása"
diff --git a/l10n/ia/files.po b/l10n/ia/files.po
index 1ef72be29ba9f9dde1aa08c49e141e7af4cdca3d..bbc3d82ed75211c906db842265acc6fef5e3f97e 100644
--- a/l10n/ia/files.po
+++ b/l10n/ia/files.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
 "MIME-Version: 1.0\n"
@@ -80,51 +80,52 @@ msgstr ""
 msgid "Files"
 msgstr "Files"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr ""
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Deler"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -164,64 +165,60 @@ msgstr ""
 msgid "Upload Error"
 msgstr ""
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Clauder"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Nomine"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Dimension"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Modificate"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -278,7 +275,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -293,6 +290,10 @@ msgstr "Nihil hic. Incarga alcun cosa!"
 msgid "Download"
 msgstr "Discargar"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Incargamento troppo longe"
diff --git a/l10n/ia/files_encryption.po b/l10n/ia/files_encryption.po
index e9ea289fb9edbc479bbaf320560cc45a40e9b776..11e4cc8eb8c110820bbd50fae6ad4953bda41c17 100644
--- a/l10n/ia/files_encryption.po
+++ b/l10n/ia/files_encryption.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
 "MIME-Version: 1.0\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Language: ia\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr ""
diff --git a/l10n/ia/lib.po b/l10n/ia/lib.po
index 2e638284821b1c61c96ecef68aee4137473ab4bf..f1ac2e492b6d94ee6d9c28fd29ec8136d52732ac 100644
--- a/l10n/ia/lib.po
+++ b/l10n/ia/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Language: ia\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Adjuta"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Personal"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Configurationes"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Usatores"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr ""
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr ""
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -85,6 +85,17 @@ msgstr "Texto"
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr ""
diff --git a/l10n/ia/settings.po b/l10n/ia/settings.po
index 47c4885728c28f537944da79b5b798c388c8dac1..a68c1ff556de61dd6052496c50e74cd20416601b 100644
--- a/l10n/ia/settings.po
+++ b/l10n/ia/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Interlingua (http://www.transifex.com/projects/p/owncloud/language/ia/)\n"
 "MIME-Version: 1.0\n"
@@ -23,12 +23,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr ""
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr ""
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -82,7 +82,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -215,10 +215,6 @@ msgstr "Contrasigno currente"
 msgid "New password"
 msgstr "Nove contrasigno"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "monstrar"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Cambiar contrasigno"
diff --git a/l10n/id/files.po b/l10n/id/files.po
index c3b51b237dd0d6d274712b01716e92c3b050ab1f..e8dd16f5fad409e50890f3f2e77b8515f921a73e 100644
--- a/l10n/id/files.po
+++ b/l10n/id/files.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
 "MIME-Version: 1.0\n"
@@ -81,51 +81,52 @@ msgstr ""
 msgid "Files"
 msgstr "Berkas"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "batalkan berbagi"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Hapus"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Menunggu"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "mengganti"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "batalkan"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "batal dikerjakan"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -165,64 +166,60 @@ msgstr "Gagal mengunggah berkas anda karena berupa direktori atau mempunyai ukur
 msgid "Upload Error"
 msgstr "Terjadi Galat Pengunggahan"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "tutup"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Menunggu"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Pengunggahan dibatalkan."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "tautan tidak boleh kosong"
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Nama"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Ukuran"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Dimodifikasi"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -279,7 +276,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -294,6 +291,10 @@ msgstr "Tidak ada apa-apa di sini. Unggah sesuatu!"
 msgid "Download"
 msgstr "Unduh"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "batalkan berbagi"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Unggahan terlalu besar"
diff --git a/l10n/id/files_encryption.po b/l10n/id/files_encryption.po
index 88fc1f30a5a8bf81bc3ae00b0c0ebbb2068fc4cf..28191e4f23cfffe8142422b4d16ca4dde3ab2ce8 100644
--- a/l10n/id/files_encryption.po
+++ b/l10n/id/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: id\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "enkripsi"
diff --git a/l10n/id/lib.po b/l10n/id/lib.po
index 013ed9d846ca493767439613426a65c47590ce8d..020143c5a5fb1ca43debc41c747e0f8f9884c802 100644
--- a/l10n/id/lib.po
+++ b/l10n/id/lib.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
 "MIME-Version: 1.0\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Language: id\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "bantu"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "perseorangan"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "pengaturan"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "pengguna"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "aplikasi"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "admin"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "download ZIP sedang dimatikan"
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "file harus di unduh satu persatu"
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "kembali ke daftar file"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "file yang dipilih terlalu besar untuk membuat file zip"
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -87,6 +87,17 @@ msgstr "teks"
 msgid "Images"
 msgstr "Gambar"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "beberapa detik yang lalu"
diff --git a/l10n/id/settings.po b/l10n/id/settings.po
index 2787995bd72b92380ddb453b74da4414c25d2a5d..60ef068bce8e4072a1ceabadc194ecdec71ec92d 100644
--- a/l10n/id/settings.po
+++ b/l10n/id/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Indonesian (http://www.transifex.com/projects/p/owncloud/language/id/)\n"
 "MIME-Version: 1.0\n"
@@ -25,12 +25,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr ""
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "autentikasi bermasalah"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -84,7 +84,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -217,10 +217,6 @@ msgstr "Password saat ini"
 msgid "New password"
 msgstr "kata kunci baru"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "perlihatkan"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Rubah password"
diff --git a/l10n/is/files.po b/l10n/is/files.po
index a1ea0e3040fec1e02e68051a3afc535bec8a75fc..c4b5238a062949a56ca45a6dd5637e7b496c5c8d 100644
--- a/l10n/is/files.po
+++ b/l10n/is/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
 "MIME-Version: 1.0\n"
@@ -21,16 +21,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Gat ekki fært %s - Skrá með þessu nafni er þegar til"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Gat ekki fært %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Gat ekki endurskýrt skrá"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -79,51 +79,52 @@ msgstr "Ógild mappa."
 msgid "Files"
 msgstr "Skrár"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Hætta deilingu"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Eyða"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Endurskýra"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Bíður"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} er þegar til"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "yfirskrifa"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "stinga upp á nafni"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "hætta við"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "endurskýrði {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "afturkalla"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "yfirskrifaði {new_name} með {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -163,64 +164,60 @@ msgstr "Innsending á skrá mistókst, hugsanlega sendir þú möppu eða skrái
 msgid "Upload Error"
 msgstr "Villa við innsendingu"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Loka"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Bíður"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 skrá innsend"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} skrár innsendar"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Hætt við innsendingu."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "Vefslóð má ekki vera tóm."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Óleyfilegt nafn á möppu. Nafnið 'Shared' er frátekið fyrir Owncloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Nafn"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Stærð"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Breytt"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 mappa"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} möppur"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 skrá"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} skrár"
 
@@ -277,7 +274,7 @@ msgid "From link"
 msgstr "Af tengli"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -292,6 +289,10 @@ msgstr "Ekkert hér. Settu eitthvað inn!"
 msgid "Download"
 msgstr "Niðurhal"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Hætta deilingu"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Innsend skrá er of stór"
diff --git a/l10n/is/files_encryption.po b/l10n/is/files_encryption.po
index 4d128e6b4fe6c83a81c03fddf23461277d26da36..63f151c73c1b3356e86731923977b5802eacb7d6 100644
--- a/l10n/is/files_encryption.po
+++ b/l10n/is/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: is\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Dulkóðun"
diff --git a/l10n/is/lib.po b/l10n/is/lib.po
index e6b54f855f2462f30a50667767b48cdb9e6e4ad4..2b6b678986f8c9e6070e6d86629bdc29170225a4 100644
--- a/l10n/is/lib.po
+++ b/l10n/is/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
 "MIME-Version: 1.0\n"
@@ -18,47 +18,47 @@ msgstr ""
 "Language: is\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Hjálp"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Um mig"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Stillingar"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Notendur"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Forrit"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Stjórnun"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Slökkt á ZIP niðurhali."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Skrárnar verður að sækja eina og eina"
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Aftur í skrár"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Valdar skrár eru of stórar til að búa til ZIP skrá."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -86,6 +86,17 @@ msgstr "Texti"
 msgid "Images"
 msgstr "Myndir"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "sek."
diff --git a/l10n/is/settings.po b/l10n/is/settings.po
index fea2c3787841530bba7738749248c0df909658f5..72097fa93608463dd8779b48fd813b9bf5fb6c2c 100644
--- a/l10n/is/settings.po
+++ b/l10n/is/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Icelandic (http://www.transifex.com/projects/p/owncloud/language/is/)\n"
 "MIME-Version: 1.0\n"
@@ -22,12 +22,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Ekki tókst að hlaða lista frá forrita síðu"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Villa við auðkenningu"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -81,7 +81,7 @@ msgstr "Ekki tókst að bæta notenda við hópinn %s"
 msgid "Unable to remove user from group %s"
 msgstr "Ekki tókst að fjarlægja notanda úr hópnum %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -214,10 +214,6 @@ msgstr "Núverandi lykilorð"
 msgid "New password"
 msgstr "Nýtt lykilorð"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "sýna"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Breyta lykilorði"
diff --git a/l10n/it/core.po b/l10n/it/core.po
index 9d72b5b8d2712ab27d0b19f814f0737536edf0da..bca11b8fb89def985d697e95d666322495c4d10d 100644
--- a/l10n/it/core.po
+++ b/l10n/it/core.po
@@ -13,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 00:44+0000\n"
+"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
 "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -162,59 +162,59 @@ msgstr "Novembre"
 msgid "December"
 msgstr "Dicembre"
 
-#: js/js.js:284
+#: js/js.js:286
 msgid "Settings"
 msgstr "Impostazioni"
 
-#: js/js.js:764
+#: js/js.js:766
 msgid "seconds ago"
 msgstr "secondi fa"
 
-#: js/js.js:765
+#: js/js.js:767
 msgid "1 minute ago"
 msgstr "Un minuto fa"
 
-#: js/js.js:766
+#: js/js.js:768
 msgid "{minutes} minutes ago"
 msgstr "{minutes} minuti fa"
 
-#: js/js.js:767
+#: js/js.js:769
 msgid "1 hour ago"
 msgstr "1 ora fa"
 
-#: js/js.js:768
+#: js/js.js:770
 msgid "{hours} hours ago"
 msgstr "{hours} ore fa"
 
-#: js/js.js:769
+#: js/js.js:771
 msgid "today"
 msgstr "oggi"
 
-#: js/js.js:770
+#: js/js.js:772
 msgid "yesterday"
 msgstr "ieri"
 
-#: js/js.js:771
+#: js/js.js:773
 msgid "{days} days ago"
 msgstr "{days} giorni fa"
 
-#: js/js.js:772
+#: js/js.js:774
 msgid "last month"
 msgstr "mese scorso"
 
-#: js/js.js:773
+#: js/js.js:775
 msgid "{months} months ago"
 msgstr "{months} mesi fa"
 
-#: js/js.js:774
+#: js/js.js:776
 msgid "months ago"
 msgstr "mesi fa"
 
-#: js/js.js:775
+#: js/js.js:777
 msgid "last year"
 msgstr "anno scorso"
 
-#: js/js.js:776
+#: js/js.js:778
 msgid "years ago"
 msgstr "anni fa"
 
@@ -244,8 +244,8 @@ msgid "The object type is not specified."
 msgstr "Il tipo di oggetto non è specificato."
 
 #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
-#: js/share.js:583
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
 msgid "Error"
 msgstr "Errore"
 
@@ -265,7 +265,7 @@ msgstr "Condividi"
 msgid "Shared"
 msgstr "Condivisi"
 
-#: js/share.js:141 js/share.js:611
+#: js/share.js:141 js/share.js:622
 msgid "Error while sharing"
 msgstr "Errore durante la condivisione"
 
@@ -361,23 +361,23 @@ msgstr "eliminare"
 msgid "share"
 msgstr "condividere"
 
-#: js/share.js:373 js/share.js:558
+#: js/share.js:373 js/share.js:569
 msgid "Password protected"
 msgstr "Protetta da password"
 
-#: js/share.js:571
+#: js/share.js:582
 msgid "Error unsetting expiration date"
 msgstr "Errore durante la rimozione della data di scadenza"
 
-#: js/share.js:583
+#: js/share.js:594
 msgid "Error setting expiration date"
 msgstr "Errore durante l'impostazione della data di scadenza"
 
-#: js/share.js:598
+#: js/share.js:609
 msgid "Sending ..."
 msgstr "Invio in corso..."
 
-#: js/share.js:609
+#: js/share.js:620
 msgid "Email sent"
 msgstr "Messaggio inviato"
 
@@ -493,14 +493,14 @@ msgstr "Senza un generatore di numeri casuali sicuro, un malintenzionato potrebb
 msgid ""
 "Your data directory and files are probably accessible from the internet "
 "because the .htaccess file does not work."
-msgstr ""
+msgstr "La cartella dei dati e i file sono probabilmente accessibili da Internet poiché il file .htaccess non funziona."
 
 #: templates/installation.php:32
 msgid ""
 "For information how to properly configure your server, please see the <a "
 "href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
 "target=\"_blank\">documentation</a>."
-msgstr ""
+msgstr "Per informazioni su come configurare correttamente il server, vedi la <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentazione</a>."
 
 #: templates/installation.php:36
 msgid "Create an <strong>admin account</strong>"
diff --git a/l10n/it/files.po b/l10n/it/files.po
index fae888f3261f9c49a9559c232aa32cda4ee46ee3..206c29c048139272924e0e3054b7ef1c59559ab3 100644
--- a/l10n/it/files.po
+++ b/l10n/it/files.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-09 23:50+0000\n"
+"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
 "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -24,16 +24,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Impossibile spostare %s - un file con questo nome esiste già"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Impossibile spostare %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Impossibile rinominare il file"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -72,7 +72,7 @@ msgstr "Scrittura su disco non riuscita"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Spazio di archiviazione insufficiente"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -82,51 +82,52 @@ msgstr "Cartella non valida."
 msgid "Files"
 msgstr "File"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Rimuovi condivisione"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr "Elimina definitivamente"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Elimina"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Rinomina"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "In corso"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} esiste già"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "sostituisci"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "suggerisci nome"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "annulla"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "sostituito {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "annulla"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "sostituito {new_name} con {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "esegui l'operazione di eliminazione"
 
@@ -166,64 +167,60 @@ msgstr "Impossibile inviare il file poiché è una cartella o ha dimensione 0 by
 msgid "Upload Error"
 msgstr "Errore di invio"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Chiudi"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "In corso"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 file in fase di caricamento"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} file in fase di caricamentoe"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Invio annullato"
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "L'URL non può essere vuoto."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Nome della cartella non valido. L'uso di 'Shared' è riservato da ownCloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:948 templates/index.php:67
 msgid "Name"
 msgstr "Nome"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:949 templates/index.php:78
 msgid "Size"
 msgstr "Dimensione"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:950 templates/index.php:80
 msgid "Modified"
 msgstr "Modificato"
 
-#: js/files.js:974
+#: js/files.js:969
 msgid "1 folder"
 msgstr "1 cartella"
 
-#: js/files.js:976
+#: js/files.js:971
 msgid "{count} folders"
 msgstr "{count} cartelle"
 
-#: js/files.js:984
+#: js/files.js:979
 msgid "1 file"
 msgstr "1 file"
 
-#: js/files.js:986
+#: js/files.js:981
 msgid "{count} files"
 msgstr "{count} file"
 
@@ -280,7 +277,7 @@ msgid "From link"
 msgstr "Da collegamento"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr "Cestino"
 
 #: templates/index.php:46
@@ -295,6 +292,10 @@ msgstr "Non c'è niente qui. Carica qualcosa!"
 msgid "Download"
 msgstr "Scarica"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Rimuovi condivisione"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Il file caricato è troppo grande"
diff --git a/l10n/it/files_encryption.po b/l10n/it/files_encryption.po
index 843b2a267d5c4d82f76d785ed9c340045de2dd00..e94b78922132488a6ca7c664bc3fdcdcfb47cdf4 100644
--- a/l10n/it/files_encryption.po
+++ b/l10n/it/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-05 23:20+0000\n"
-"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: it\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Passa al tuo client ownCloud e cambia la password di cifratura per completare la conversione."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "passato alla cifratura lato client"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Converti la password di cifratura nella password di accesso"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Controlla la password e prova ancora."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Impossibile convertire la password di cifratura nella password di accesso"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Cifratura"
diff --git a/l10n/it/lib.po b/l10n/it/lib.po
index e162e94ad32ffd6b34cf425f90eeaf8f3ea81fb9..f181c1149ed4eb8e97375b909119104473f1264b 100644
--- a/l10n/it/lib.po
+++ b/l10n/it/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-18 00:03+0100\n"
-"PO-Revision-Date: 2013-01-17 06:44+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-09 23:50+0000\n"
 "Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
 "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 "MIME-Version: 1.0\n"
@@ -18,47 +18,47 @@ msgstr ""
 "Language: it\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Aiuto"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Personale"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Impostazioni"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Utenti"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Applicazioni"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Admin"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Lo scaricamento in formato ZIP è stato disabilitato."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "I file devono essere scaricati uno alla volta."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Torna ai file"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "I  file selezionati sono troppo grandi per generare un file zip."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "non può essere determinato"
 
@@ -86,6 +86,17 @@ msgstr "Testo"
 msgid "Images"
 msgstr "Immagini"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata."
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Leggi attentamente le <a href='%s'>guide d'installazione</a>."
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "secondi fa"
diff --git a/l10n/it/settings.po b/l10n/it/settings.po
index 769e953dd0175589a5d8999388ba17aa20052826..30430dd4bfd9e8cd52fb313bc477293e8fcef339 100644
--- a/l10n/it/settings.po
+++ b/l10n/it/settings.po
@@ -14,9 +14,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-06 23:21+0000\n"
-"Last-Translator: Vincenzo Reale <vinx.reale@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Italian (http://www.transifex.com/projects/p/owncloud/language/it/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -28,12 +28,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Impossibile caricare l'elenco dall'App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Errore di autenticazione"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr "Impossibile cambiare il nome visualizzato"
 
@@ -87,7 +87,7 @@ msgstr "Impossibile aggiungere l'utente al gruppo %s"
 msgid "Unable to remove user from group %s"
 msgstr "Impossibile rimuovere l'utente dal gruppo %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "Impossibile aggiornate l'applicazione."
 
@@ -220,10 +220,6 @@ msgstr "Password attuale"
 msgid "New password"
 msgstr "Nuova password"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "mostra"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Modifica password"
diff --git a/l10n/ja_JP/files.po b/l10n/ja_JP/files.po
index 52a59def6d63b71ea5ec1b3c5106a9ad887d61b3..ff098adc1baf80679bdcd078df5431f0c1791bdf 100644
--- a/l10n/ja_JP/files.po
+++ b/l10n/ja_JP/files.po
@@ -12,8 +12,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 "MIME-Version: 1.0\n"
@@ -25,16 +25,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "%s を移動できませんでした ― この名前のファイルはすでに存在します"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "%s を移動できませんでした"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "ファイル名の変更ができません"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -73,7 +73,7 @@ msgstr "ディスクへの書き込みに失敗しました"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "ストレージに十分な空き容量がありません"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -83,51 +83,52 @@ msgstr "無効なディレクトリです。"
 msgid "Files"
 msgstr "ファイル"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "共有しない"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr "完全に削除する"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "削除"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "名前の変更"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "保留"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} はすでに存在しています"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "置き換え"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "推奨名称"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "キャンセル"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "{new_name} を置換"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "元に戻す"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "{old_name} を {new_name} に置換"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "削除を実行"
 
@@ -167,64 +168,60 @@ msgstr "ディレクトリもしくは0バイトのファイルはアップロ
 msgid "Upload Error"
 msgstr "アップロードエラー"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "閉じる"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "保留"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "ファイルを1つアップロード中"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} ファイルをアップロード中"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "アップロードはキャンセルされました。"
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。"
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URLは空にできません。"
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "無効なフォルダ名です。'Shared' の利用は ownCloud が予約済みです。"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "名前"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "サイズ"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "更新日時"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 フォルダ"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} フォルダ"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 ファイル"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} ファイル"
 
@@ -281,8 +278,8 @@ msgid "From link"
 msgstr "リンク"
 
 #: templates/index.php:40
-msgid "Trash"
-msgstr "ゴミ箱"
+msgid "Trash bin"
+msgstr ""
 
 #: templates/index.php:46
 msgid "Cancel upload"
@@ -296,6 +293,10 @@ msgstr "ここには何もありません。何かアップロードしてくだ
 msgid "Download"
 msgstr "ダウンロード"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "共有しない"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "ファイルサイズが大きすぎます"
diff --git a/l10n/ja_JP/files_encryption.po b/l10n/ja_JP/files_encryption.po
index 1f13d0117c7ac1cfd52b90b2e12d4d76bf846374..6d5a563dfe035058e3aa36226522400ca440607d 100644
--- a/l10n/ja_JP/files_encryption.po
+++ b/l10n/ja_JP/files_encryption.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:09+0100\n"
-"PO-Revision-Date: 2013-02-07 02:20+0000\n"
-"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: ja_JP\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "変換を完了するために、ownCloud クライアントに切り替えて、暗号化パスワードを変更してください。"
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "クライアントサイドの暗号化に切り替えました"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "暗号化パスワードをログインパスワードに変更"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "パスワードを確認してもう一度行なってください。"
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "ファイル暗号化パスワードをログインパスワードに変更できませんでした。"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "暗号化"
diff --git a/l10n/ja_JP/lib.po b/l10n/ja_JP/lib.po
index 8dca4957997a6845ae1d4f3894757844f255e5ab..1cdf2d62aea72a149f805644136d444b88b6ec1e 100644
--- a/l10n/ja_JP/lib.po
+++ b/l10n/ja_JP/lib.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-19 00:04+0100\n"
-"PO-Revision-Date: 2013-01-18 08:12+0000\n"
-"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Language: ja_JP\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "ヘルプ"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "個人設定"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "設定"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "ユーザ"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "アプリ"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "管理者"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIPダウンロードは無効です。"
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "ファイルは1つずつダウンロードする必要があります。"
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "ファイルに戻る"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "選択したファイルはZIPファイルの生成には大きすぎます。"
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "測定できませんでした"
 
@@ -87,6 +87,17 @@ msgstr "TTY TDD"
 msgid "Images"
 msgstr "画像"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "秒前"
diff --git a/l10n/ja_JP/settings.po b/l10n/ja_JP/settings.po
index d8f0f19d63d0d7c05da278c5b080a7f85856a339..851cc61113300fc62720a84f6cf5cd36f48c750d 100644
--- a/l10n/ja_JP/settings.po
+++ b/l10n/ja_JP/settings.po
@@ -12,9 +12,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 02:20+0000\n"
-"Last-Translator: Daisuke Deguchi <ddeguchi@nagoya-u.jp>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Japanese (Japan) (http://www.transifex.com/projects/p/owncloud/language/ja_JP/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -26,12 +26,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "アプリストアからリストをロードできません"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "認証エラー"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr "表示名を変更できません"
 
@@ -85,7 +85,7 @@ msgstr "ユーザをグループ %s に追加できません"
 msgid "Unable to remove user from group %s"
 msgstr "ユーザをグループ %s から削除できません"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "アプリを更新出来ませんでした。"
 
@@ -218,10 +218,6 @@ msgstr "現在のパスワード"
 msgid "New password"
 msgstr "新しいパスワード"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "表示"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "パスワードを変更"
diff --git a/l10n/ka_GE/files.po b/l10n/ka_GE/files.po
index 640d3d1fabdc71ab5a1d0a4f8a6a7f468212539f..c9b22c6c9c536b399308ad8137655b8334feb6bb 100644
--- a/l10n/ka_GE/files.po
+++ b/l10n/ka_GE/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
 "MIME-Version: 1.0\n"
@@ -79,51 +79,52 @@ msgstr ""
 msgid "Files"
 msgstr "ფაილები"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "გაზიარების მოხსნა"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "წაშლა"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "გადარქმევა"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "მოცდის რეჟიმში"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} უკვე არსებობს"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "შეცვლა"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "სახელის შემოთავაზება"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "უარყოფა"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "{new_name} შეცვლილია"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "დაბრუნება"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} შეცვლილია {old_name}–ით"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -163,64 +164,60 @@ msgstr "თქვენი ფაილის ატვირთვა ვერ
 msgid "Upload Error"
 msgstr "შეცდომა ატვირთვისას"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "დახურვა"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "მოცდის რეჟიმში"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 ფაილის ატვირთვა"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} ფაილი იტვირთება"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "ატვირთვა შეჩერებულ იქნა."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას"
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "სახელი"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "ზომა"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "შეცვლილია"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 საქაღალდე"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} საქაღალდე"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 ფაილი"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} ფაილი"
 
@@ -277,7 +274,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -292,6 +289,10 @@ msgstr "აქ არაფერი არ არის. ატვირთე
 msgid "Download"
 msgstr "ჩამოტვირთვა"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "გაზიარების მოხსნა"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "ასატვირთი ფაილი ძალიან დიდია"
diff --git a/l10n/ka_GE/files_encryption.po b/l10n/ka_GE/files_encryption.po
index 3bdaa16e10235a60fafcd0750222c7ce66e916a3..81a4932c1409182a70474f9d0a71f83e388b21e5 100644
--- a/l10n/ka_GE/files_encryption.po
+++ b/l10n/ka_GE/files_encryption.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
 "MIME-Version: 1.0\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Language: ka_GE\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr ""
diff --git a/l10n/ka_GE/lib.po b/l10n/ka_GE/lib.po
index f43fa26c139991902a1771e67bfeba7870064645..333713fd7a5675f1eff04230a10450fb30b74cf0 100644
--- a/l10n/ka_GE/lib.po
+++ b/l10n/ka_GE/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
 "MIME-Version: 1.0\n"
@@ -18,47 +18,47 @@ msgstr ""
 "Language: ka_GE\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "დახმარება"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "პირადი"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "პარამეტრები"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "მომხმარებელი"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "აპლიკაციები"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "ადმინისტრატორი"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -86,6 +86,17 @@ msgstr "ტექსტი"
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "წამის წინ"
diff --git a/l10n/ka_GE/settings.po b/l10n/ka_GE/settings.po
index 2f73884030edcf3708488cc09b136dd21caf574b..a715d2a7d2aae67bfa88ab880bfaf1ac7e2e72c7 100644
--- a/l10n/ka_GE/settings.po
+++ b/l10n/ka_GE/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Georgian (Georgia) (http://www.transifex.com/projects/p/owncloud/language/ka_GE/)\n"
 "MIME-Version: 1.0\n"
@@ -22,12 +22,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "აპლიკაციების სია ვერ ჩამოიტვირთა App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "ავთენტიფიკაციის შეცდომა"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -81,7 +81,7 @@ msgstr "მომხმარებლის დამატება ვერ
 msgid "Unable to remove user from group %s"
 msgstr "მომხმარებლის წაშლა ვერ მოხეხდა ჯგუფიდან %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -214,10 +214,6 @@ msgstr "მიმდინარე პაროლი"
 msgid "New password"
 msgstr "ახალი პაროლი"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "გამოაჩინე"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "პაროლის შეცვლა"
diff --git a/l10n/ko/files.po b/l10n/ko/files.po
index 3b842ed252526609c6934a483fafd89378e0ebaf..4fc91abaeefaff4c955cdfaf7f3937c0d0f71e9b 100644
--- a/l10n/ko/files.po
+++ b/l10n/ko/files.po
@@ -13,8 +13,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
 "MIME-Version: 1.0\n"
@@ -26,16 +26,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "%s 항목을 이동시키지 못하였음 - 파일 이름이 이미 존재함"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "%s 항목을 이딩시키지 못하였음"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "파일 이름바꾸기 할 수 없음"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -84,51 +84,52 @@ msgstr "올바르지 않은 디렉터리입니다."
 msgid "Files"
 msgstr "파일"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "공유 해제"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "삭제"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "이름 바꾸기"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "보류 중"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name}이(가) 이미 존재함"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "바꾸기"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "이름 제안"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "취소"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "{new_name}을(를) 대체함"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "실행 취소"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "{old_name}이(가) {new_name}(으)로 대체됨"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -168,64 +169,60 @@ msgstr "이 파일은 디렉터리이거나 비어 있기 때문에 업로드할
 msgid "Upload Error"
 msgstr "업로드 오류"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "닫기"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "보류 중"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "파일 1개 업로드 중"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "파일 {count}개 업로드 중"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "업로드가 취소되었습니다."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL을 입력해야 합니다."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "폴더 이름이 유효하지 않습니다. "
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "이름"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "크기"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "수정됨"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "폴더 1개"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "폴더 {count}개"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "파일 1개"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "파일 {count}개"
 
@@ -282,7 +279,7 @@ msgid "From link"
 msgstr "링크에서"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -297,6 +294,10 @@ msgstr "내용이 없습니다. 업로드할 수 있습니다!"
 msgid "Download"
 msgstr "다운로드"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "공유 해제"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "업로드 용량 초과"
diff --git a/l10n/ko/files_encryption.po b/l10n/ko/files_encryption.po
index 22d55b969793f2ada908060acab00b34a73bd845..79f1c6ae60785936c91116c9a7ae1b0ca8f3ccd1 100644
--- a/l10n/ko/files_encryption.po
+++ b/l10n/ko/files_encryption.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
 "MIME-Version: 1.0\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: ko\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "ownCloud로 전환한 다음 암호화에 사용할 암호를 변경하면 변환이 완료됩니다."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "클라이언트 암호화로 변경됨"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "암호화 암호를 로그인 암호로 변경"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "암호를 확인한 다음 다시 시도하십시오."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "암호화 암호를 로그인 암호로 변경할 수 없습니다"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "암호화"
diff --git a/l10n/ko/lib.po b/l10n/ko/lib.po
index ffbaa11a4ec6f63dc568d0a6088f0c678fd567da..2a2fefa135a622f19d106e430239efd400b17549 100644
--- a/l10n/ko/lib.po
+++ b/l10n/ko/lib.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-31 17:02+0100\n"
-"PO-Revision-Date: 2013-01-31 08:10+0000\n"
-"Last-Translator: Shinjo Park <kde@peremen.name>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,27 +20,27 @@ msgstr ""
 "Language: ko\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "도움말"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "개인"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "설정"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "사용자"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "앱"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "관리자"
 
@@ -88,6 +88,17 @@ msgstr "텍스트"
 msgid "Images"
 msgstr "그림"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "초 전"
diff --git a/l10n/ko/settings.po b/l10n/ko/settings.po
index 65a8c9d6e2222a345a380fb6b3a2de65395e3165..a3e3db39bfd5ec4c520adcfcb38c25d670878068 100644
--- a/l10n/ko/settings.po
+++ b/l10n/ko/settings.po
@@ -12,8 +12,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Korean (http://www.transifex.com/projects/p/owncloud/language/ko/)\n"
 "MIME-Version: 1.0\n"
@@ -26,12 +26,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "앱 스토어에서 목록을 가져올 수 없습니다"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "인증 오류"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -85,7 +85,7 @@ msgstr "그룹 %s에 사용자를 추가할 수 없습니다."
 msgid "Unable to remove user from group %s"
 msgstr "그룹 %s에서 사용자를 삭제할 수 없습니다."
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -218,10 +218,6 @@ msgstr "현재 암호"
 msgid "New password"
 msgstr "새 암호"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "보이기"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "암호 변경"
diff --git a/l10n/ku_IQ/files.po b/l10n/ku_IQ/files.po
index a94f46369662e609401c0e9953ab3bdb1576b447..e22bec404b1bbc9036eb00a1b8d2f8ff1b19ceaa 100644
--- a/l10n/ku_IQ/files.po
+++ b/l10n/ku_IQ/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
 "MIME-Version: 1.0\n"
@@ -78,51 +78,52 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr ""
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr ""
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -162,64 +163,60 @@ msgstr ""
 msgid "Upload Error"
 msgstr ""
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "داخستن"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "ناونیشانی به‌سته‌ر نابێت به‌تاڵ بێت."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "ناو"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr ""
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr ""
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -276,7 +273,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -291,6 +288,10 @@ msgstr ""
 msgid "Download"
 msgstr "داگرتن"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr ""
diff --git a/l10n/ku_IQ/files_encryption.po b/l10n/ku_IQ/files_encryption.po
index db1496b70d914f0c4eea68f72a5a6078227c2640..25da3eec3afd9567186f2759b49c4c8eb826fab8 100644
--- a/l10n/ku_IQ/files_encryption.po
+++ b/l10n/ku_IQ/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: ku_IQ\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "نهێنیکردن"
diff --git a/l10n/ku_IQ/lib.po b/l10n/ku_IQ/lib.po
index 64ee0185d35dcabb78ef321cc64526b701a45f2c..1c1edaba17f45963d7d906617f772232deaa3bb0 100644
--- a/l10n/ku_IQ/lib.po
+++ b/l10n/ku_IQ/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Language: ku_IQ\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "یارمەتی"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr ""
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "ده‌ستكاری"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "به‌كارهێنه‌ر"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr ""
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr ""
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -85,6 +85,17 @@ msgstr ""
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr ""
diff --git a/l10n/ku_IQ/settings.po b/l10n/ku_IQ/settings.po
index 7973f6b16d5456230be9d009b208c9a0bb84cff2..99e3162d7b258d5e8c691138f4a9e3347b211d12 100644
--- a/l10n/ku_IQ/settings.po
+++ b/l10n/ku_IQ/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Kurdish (Iraq) (http://www.transifex.com/projects/p/owncloud/language/ku_IQ/)\n"
 "MIME-Version: 1.0\n"
@@ -21,12 +21,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr ""
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr ""
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -80,7 +80,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -213,10 +213,6 @@ msgstr ""
 msgid "New password"
 msgstr "وشەی نهێنی نوێ"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr ""
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr ""
diff --git a/l10n/lb/files.po b/l10n/lb/files.po
index fd8f5e4c98c9116dfb87161a7c3c15499bc86bba..fbd5a7b1bc02b2bec243c7e0c2d60fbbbe69beb9 100644
--- a/l10n/lb/files.po
+++ b/l10n/lb/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
 "MIME-Version: 1.0\n"
@@ -79,51 +79,52 @@ msgstr ""
 msgid "Files"
 msgstr "Dateien"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Net méi deelen"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Läschen"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "ersetzen"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "ofbriechen"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "réckgängeg man"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -163,64 +164,60 @@ msgstr "Kann deng Datei net eroplueden well et en Dossier ass oder 0 byte grouss
 msgid "Upload Error"
 msgstr "Fehler beim eroplueden"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Zoumaachen"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Upload ofgebrach."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "File Upload am gaang. Wann's de des Säit verléiss gëtt den Upload ofgebrach."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Numm"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Gréisst"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Geännert"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -277,7 +274,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -292,6 +289,10 @@ msgstr "Hei ass näischt. Lued eppes rop!"
 msgid "Download"
 msgstr "Eroflueden"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Net méi deelen"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Upload ze grouss"
diff --git a/l10n/lb/files_encryption.po b/l10n/lb/files_encryption.po
index c8fc462a15b95b57be2e66c6b2620f26e81b9617..6705693de91df00da7c2573070ba095e813f58f1 100644
--- a/l10n/lb/files_encryption.po
+++ b/l10n/lb/files_encryption.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
 "MIME-Version: 1.0\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Language: lb\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr ""
diff --git a/l10n/lb/lib.po b/l10n/lb/lib.po
index b7995af6442a4d6bac3226a757f0dc3fade48819..ae807f5d530ead3e1c310f510483c16e31e43574 100644
--- a/l10n/lb/lib.po
+++ b/l10n/lb/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-27 00:04+0100\n"
-"PO-Revision-Date: 2013-01-26 13:36+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Language: lb\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Hëllef"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Perséinlech"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Astellungen"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr ""
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr ""
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr ""
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -85,6 +85,17 @@ msgstr "SMS"
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr ""
diff --git a/l10n/lb/settings.po b/l10n/lb/settings.po
index 021e271d8fe8d265e16e2e93250b55d74076403c..e0e6727bc769b4c8b622eac960c27a1419bae6c1 100644
--- a/l10n/lb/settings.po
+++ b/l10n/lb/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Luxembourgish (http://www.transifex.com/projects/p/owncloud/language/lb/)\n"
 "MIME-Version: 1.0\n"
@@ -22,12 +22,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Konnt Lescht net vum App Store lueden"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Authentifikatioun's Fehler"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -81,7 +81,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -214,10 +214,6 @@ msgstr "Momentan 't Passwuert"
 msgid "New password"
 msgstr "Neit Passwuert"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "weisen"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Passwuert änneren"
diff --git a/l10n/lt_LT/files.po b/l10n/lt_LT/files.po
index 33d7eb0d16c8e9221bbc4041e6989beab8ecc742..966c0c8a3487db395b0e1f5a849ad87c713db149 100644
--- a/l10n/lt_LT/files.po
+++ b/l10n/lt_LT/files.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
 "MIME-Version: 1.0\n"
@@ -81,51 +81,52 @@ msgstr ""
 msgid "Files"
 msgstr "Failai"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Nebesidalinti"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Ištrinti"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Pervadinti"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Laukiantis"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} jau egzistuoja"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "pakeisti"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "pasiūlyti pavadinimą"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "atšaukti"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "pakeiskite {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "anuliuoti"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "pakeiskite {new_name} į {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -165,64 +166,60 @@ msgstr "Neįmanoma įkelti failo - jo dydis gali būti 0 bitų arba tai kataloga
 msgid "Upload Error"
 msgstr "Įkėlimo klaida"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Užverti"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Laukiantis"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "įkeliamas 1 failas"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count}  įkeliami failai"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Įkėlimas atšauktas."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Pavadinimas"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Dydis"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Pakeista"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 aplankalas"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} aplankalai"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 failas"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} failai"
 
@@ -279,7 +276,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -294,6 +291,10 @@ msgstr "Čia tuščia. Įkelkite ką nors!"
 msgid "Download"
 msgstr "Atsisiųsti"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Nebesidalinti"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Įkėlimui failas per didelis"
diff --git a/l10n/lt_LT/files_encryption.po b/l10n/lt_LT/files_encryption.po
index 6e52ef83bbb03749920804faba05588e56ca6dd2..2e398b6292a5689094aa76fe367ee4934d5ce699 100644
--- a/l10n/lt_LT/files_encryption.po
+++ b/l10n/lt_LT/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: lt_LT\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Šifravimas"
diff --git a/l10n/lt_LT/lib.po b/l10n/lt_LT/lib.po
index 1f676fdd4ec966b1288da74ff9f7bce44075183a..8cc55d0a7eaa2d7a9d8cfdf2a16a4cc3a0dbf646 100644
--- a/l10n/lt_LT/lib.po
+++ b/l10n/lt_LT/lib.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
 "MIME-Version: 1.0\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Language: lt_LT\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Pagalba"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Asmeniniai"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Nustatymai"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Vartotojai"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Programos"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Administravimas"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIP atsisiuntimo galimybė yra išjungta."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Failai turi būti parsiunčiami vienas po kito."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Atgal į Failus"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Pasirinkti failai per dideli archyvavimui į ZIP."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -87,6 +87,17 @@ msgstr "Žinučių"
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "prieš kelias sekundes"
diff --git a/l10n/lt_LT/settings.po b/l10n/lt_LT/settings.po
index e1ef964d696b148abde96e9cb2addfb5a363be14..6bf8bea3a4984977277bc2cac5f8ddee0ceaad7a 100644
--- a/l10n/lt_LT/settings.po
+++ b/l10n/lt_LT/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Lithuanian (Lithuania) (http://www.transifex.com/projects/p/owncloud/language/lt_LT/)\n"
 "MIME-Version: 1.0\n"
@@ -23,12 +23,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Neįmanoma įkelti sąrašo iš Programų Katalogo"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Autentikacijos klaida"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -82,7 +82,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -215,10 +215,6 @@ msgstr "Dabartinis slaptažodis"
 msgid "New password"
 msgstr "Naujas slaptažodis"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "rodyti"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Pakeisti slaptažodį"
diff --git a/l10n/lv/core.po b/l10n/lv/core.po
index c64e2073edeaa589e713371b8ccec55f6c3c4b40..3b10e4c5c06b0352ecd4854206f9a28edc8c9fb0 100644
--- a/l10n/lv/core.po
+++ b/l10n/lv/core.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
+"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
 "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -158,59 +158,59 @@ msgstr "Novembris"
 msgid "December"
 msgstr "Decembris"
 
-#: js/js.js:284
+#: js/js.js:286
 msgid "Settings"
 msgstr "Iestatījumi"
 
-#: js/js.js:764
+#: js/js.js:767
 msgid "seconds ago"
 msgstr "sekundes atpakaļ"
 
-#: js/js.js:765
+#: js/js.js:768
 msgid "1 minute ago"
 msgstr "pirms 1 minūtes"
 
-#: js/js.js:766
+#: js/js.js:769
 msgid "{minutes} minutes ago"
 msgstr "pirms {minutes} minūtēm"
 
-#: js/js.js:767
+#: js/js.js:770
 msgid "1 hour ago"
 msgstr "pirms 1 stundas"
 
-#: js/js.js:768
+#: js/js.js:771
 msgid "{hours} hours ago"
 msgstr "pirms {hours} stundām"
 
-#: js/js.js:769
+#: js/js.js:772
 msgid "today"
 msgstr "šodien"
 
-#: js/js.js:770
+#: js/js.js:773
 msgid "yesterday"
 msgstr "vakar"
 
-#: js/js.js:771
+#: js/js.js:774
 msgid "{days} days ago"
 msgstr "pirms {days} dienām"
 
-#: js/js.js:772
+#: js/js.js:775
 msgid "last month"
 msgstr "pagājušajā mēnesī"
 
-#: js/js.js:773
+#: js/js.js:776
 msgid "{months} months ago"
 msgstr "pirms {months} mēnešiem"
 
-#: js/js.js:774
+#: js/js.js:777
 msgid "months ago"
 msgstr "mēnešus atpakaļ"
 
-#: js/js.js:775
+#: js/js.js:778
 msgid "last year"
 msgstr "gājušajā gadā"
 
-#: js/js.js:776
+#: js/js.js:779
 msgid "years ago"
 msgstr "gadus atpakaļ"
 
@@ -240,8 +240,8 @@ msgid "The object type is not specified."
 msgstr "Nav norādīts objekta tips."
 
 #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
-#: js/share.js:583
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
 msgid "Error"
 msgstr "Kļūda"
 
@@ -261,7 +261,7 @@ msgstr "Dalīties"
 msgid "Shared"
 msgstr "Kopīgs"
 
-#: js/share.js:141 js/share.js:611
+#: js/share.js:141 js/share.js:622
 msgid "Error while sharing"
 msgstr "Kļūda, daloties"
 
@@ -357,23 +357,23 @@ msgstr "dzēst"
 msgid "share"
 msgstr "dalīties"
 
-#: js/share.js:373 js/share.js:558
+#: js/share.js:373 js/share.js:569
 msgid "Password protected"
 msgstr "Aizsargāts ar paroli"
 
-#: js/share.js:571
+#: js/share.js:582
 msgid "Error unsetting expiration date"
 msgstr "Kļūda, noņemot termiņa datumu"
 
-#: js/share.js:583
+#: js/share.js:594
 msgid "Error setting expiration date"
 msgstr "Kļūda, iestatot termiņa datumu"
 
-#: js/share.js:598
+#: js/share.js:609
 msgid "Sending ..."
 msgstr "Sūta..."
 
-#: js/share.js:609
+#: js/share.js:620
 msgid "Email sent"
 msgstr "Vēstule nosūtīta"
 
@@ -489,14 +489,14 @@ msgstr "Bez droša nejaušu skaitļu ģeneratora uzbrucējs var paredzēt paroļ
 msgid ""
 "Your data directory and files are probably accessible from the internet "
 "because the .htaccess file does not work."
-msgstr ""
+msgstr "Visticamāk, jūsu datu direktorija un datnes ir pieejamas no interneta, jo .htaccess datne nedarbojas."
 
 #: templates/installation.php:32
 msgid ""
 "For information how to properly configure your server, please see the <a "
 "href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
 "target=\"_blank\">documentation</a>."
-msgstr ""
+msgstr "Lai uzzinātu, kā pareizi jākonfigurē šis serveris, skatiet <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">dokumentāciju</a>."
 
 #: templates/installation.php:36
 msgid "Create an <strong>admin account</strong>"
diff --git a/l10n/lv/files.po b/l10n/lv/files.po
index 803cbc1725341467823d92f87c1cb8ec034eeead..348038ee690472a78f583f88ab4fcda57e6e3b66 100644
--- a/l10n/lv/files.po
+++ b/l10n/lv/files.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
+"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
 "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -23,16 +23,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Nevarēja pārvietot %s — jau eksistē datne ar tādu nosaukumu"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Nevarēja pārvietot %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Nevarēja pārsaukt datni"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -71,7 +71,7 @@ msgstr "Neizdevās saglabāt diskā"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Nav pietiekami daudz vietas"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -81,51 +81,52 @@ msgstr "Nederīga direktorija."
 msgid "Files"
 msgstr "Datnes"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Pārtraukt dalīšanos"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr "Dzēst pavisam"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Dzēst"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Pārsaukt"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Gaida savu kārtu"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} jau eksistē"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "aizvietot"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "ieteiktais nosaukums"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "atcelt"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "aizvietots {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "atsaukt"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "aizvietoja {new_name} ar {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "veikt dzēšanas darbību"
 
@@ -165,64 +166,60 @@ msgstr "Nevar augšupielādēt jūsu datni, jo tā ir direktorija vai arī tās
 msgid "Upload Error"
 msgstr "Kļūda augšupielādējot"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Aizvērt"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Gaida savu kārtu"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "Augšupielādē 1 datni"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "augšupielādē {count} datnes"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Augšupielāde ir atcelta."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL nevar būt tukšs."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Nederīgs mapes nosaukums. “Koplietots” izmantojums ir rezervēts ownCloud servisam."
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:948 templates/index.php:67
 msgid "Name"
 msgstr "Nosaukums"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:949 templates/index.php:78
 msgid "Size"
 msgstr "Izmērs"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:950 templates/index.php:80
 msgid "Modified"
 msgstr "Mainīts"
 
-#: js/files.js:974
+#: js/files.js:969
 msgid "1 folder"
 msgstr "1 mape"
 
-#: js/files.js:976
+#: js/files.js:971
 msgid "{count} folders"
 msgstr "{count} mapes"
 
-#: js/files.js:984
+#: js/files.js:979
 msgid "1 file"
 msgstr "1 datne"
 
-#: js/files.js:986
+#: js/files.js:981
 msgid "{count} files"
 msgstr "{count} datnes"
 
@@ -279,7 +276,7 @@ msgid "From link"
 msgstr "No saites"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr "Miskaste"
 
 #: templates/index.php:46
@@ -294,6 +291,10 @@ msgstr "Te vēl nekas nav. Rīkojies, sāc augšupielādēt!"
 msgid "Download"
 msgstr "Lejupielādēt"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Pārtraukt dalīšanos"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Datne ir par lielu, lai to augšupielādētu"
diff --git a/l10n/lv/files_encryption.po b/l10n/lv/files_encryption.po
index c5f33459a225ff9914d1de03f9030b9eda12fd5d..845062cf87778dfcdba1c07b1d57b51366bc2a3d 100644
--- a/l10n/lv/files_encryption.po
+++ b/l10n/lv/files_encryption.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 20:40+0000\n"
-"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: lv\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Lūdzu, pārslēdzieties uz savu ownCloud klientu un maniet savu šifrēšanas paroli, lai pabeigtu pārveidošanu."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "Pārslēdzās uz klienta puses šifrēšanu"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Mainīt šifrēšanas paroli uz ierakstīšanās paroli"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Lūdzu, pārbaudiet savas paroles un mēģiniet vēlreiz."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Nevarēja mainīt datņu šifrēšanas paroli uz ierakstīšanās paroli"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Šifrēšana"
diff --git a/l10n/lv/lib.po b/l10n/lv/lib.po
index 3dd07bcc2b247500353bad75657b9ec23206bdea..4f0a8d9ceaa05c9c242cfebba06029deb714d64a 100644
--- a/l10n/lv/lib.po
+++ b/l10n/lv/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 21:40+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
 "Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
 "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
 "MIME-Version: 1.0\n"
@@ -18,27 +18,27 @@ msgstr ""
 "Language: lv\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
 
-#: app.php:313
+#: app.php:339
 msgid "Help"
 msgstr "Palīdzība"
 
-#: app.php:320
+#: app.php:346
 msgid "Personal"
 msgstr "Personīgi"
 
-#: app.php:325
+#: app.php:351
 msgid "Settings"
 msgstr "Iestatījumi"
 
-#: app.php:330
+#: app.php:356
 msgid "Users"
 msgstr "Lietotāji"
 
-#: app.php:337
+#: app.php:363
 msgid "Apps"
 msgstr "Lietotnes"
 
-#: app.php:339
+#: app.php:365
 msgid "Admin"
 msgstr "Administratori"
 
@@ -86,6 +86,17 @@ msgstr "Teksts"
 msgid "Images"
 msgstr "Attēli"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "Jūsu serveris vēl nav pareizi iestatīts, lai ļautu sinhronizēt datnes, jo izskatās, ka WebDAV saskarne ir salauzta."
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Lūdzu, vēlreiz pārbaudiet <a href='%s'>instalēšanas palīdzību</a>."
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "sekundes atpakaļ"
diff --git a/l10n/lv/settings.po b/l10n/lv/settings.po
index 2cd29ffc5a44d5a57571232a0cd08a0ca6106092..be79edd9126cd4888277629c61d58f51408b41b9 100644
--- a/l10n/lv/settings.po
+++ b/l10n/lv/settings.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 04:30+0000\n"
-"Last-Translator: Rūdolfs Mazurs <rudolfs.mazurs@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Latvian (http://www.transifex.com/projects/p/owncloud/language/lv/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -24,12 +24,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Nevar lejupielādēt sarakstu no lietotņu veikala"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Autentifikācijas kļūda"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr "Nevarēja mainīt redzamo vārdu"
 
@@ -83,7 +83,7 @@ msgstr "Nevar pievienot lietotāju grupai %s"
 msgid "Unable to remove user from group %s"
 msgstr "Nevar izņemt lietotāju no grupas %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "Nevarēja atjaunināt lietotni."
 
@@ -216,10 +216,6 @@ msgstr "Pašreizējā parole"
 msgid "New password"
 msgstr "Jauna parole"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "parādīt"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Mainīt paroli"
diff --git a/l10n/mk/files.po b/l10n/mk/files.po
index 67955f49c62c92d81979637592e7c87040c3cdd5..1d5a2ed386ec5c89b1a6e600b086105a0e438277 100644
--- a/l10n/mk/files.po
+++ b/l10n/mk/files.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
 "MIME-Version: 1.0\n"
@@ -81,51 +81,52 @@ msgstr ""
 msgid "Files"
 msgstr "Датотеки"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Не споделувај"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Избриши"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Преименувај"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Чека"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} веќе постои"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "замени"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "предложи име"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "откажи"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "земенета {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "врати"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "заменета {new_name} со {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -165,64 +166,60 @@ msgstr "Не може да се преземе вашата датотека б
 msgid "Upload Error"
 msgstr "Грешка при преземање"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Затвои"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Чека"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 датотека се подига"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} датотеки се подигаат"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Преземањето е прекинато."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Подигање на датотека е во тек. Напуштење на страницата ќе го прекине."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "Адресата неможе да биде празна."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Име"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Големина"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Променето"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 папка"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} папки"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 датотека"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} датотеки"
 
@@ -279,7 +276,7 @@ msgid "From link"
 msgstr "Од врска"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -294,6 +291,10 @@ msgstr "Тука нема ништо. Снимете нешто!"
 msgid "Download"
 msgstr "Преземи"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Не споделувај"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Датотеката е премногу голема"
diff --git a/l10n/mk/files_encryption.po b/l10n/mk/files_encryption.po
index 56ed5df95cdb2f9495721da778f34f1a7dc4cdbd..3eab97885bd975b38368d60a7f71db0f30e93b8f 100644
--- a/l10n/mk/files_encryption.po
+++ b/l10n/mk/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: mk\n"
 "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Енкрипција"
diff --git a/l10n/mk/lib.po b/l10n/mk/lib.po
index ada37660729dba1fe825e22d5c03f6a40b29c1c6..ba0adddc437f68f0838547b12753b23cba696c9a 100644
--- a/l10n/mk/lib.po
+++ b/l10n/mk/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
 "MIME-Version: 1.0\n"
@@ -18,47 +18,47 @@ msgstr ""
 "Language: mk\n"
 "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Помош"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Лично"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Параметри"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Корисници"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Аппликации"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Админ"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Преземање во ZIP е исклучено"
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Датотеките треба да се симнат една по една."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Назад кон датотеки"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Избраните датотеки се преголеми за да се генерира zip."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -86,6 +86,17 @@ msgstr "Текст"
 msgid "Images"
 msgstr "Слики"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "пред секунди"
diff --git a/l10n/mk/settings.po b/l10n/mk/settings.po
index f441c26ada434200048bdf207938c81d717a2866..dfdae53b05ac7bcc6e0fe0545804012924a6a4d9 100644
--- a/l10n/mk/settings.po
+++ b/l10n/mk/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Macedonian (http://www.transifex.com/projects/p/owncloud/language/mk/)\n"
 "MIME-Version: 1.0\n"
@@ -24,12 +24,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Неможам да вчитам листа од App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Грешка во автентикација"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -83,7 +83,7 @@ msgstr "Неможе да додадам корисник во група %s"
 msgid "Unable to remove user from group %s"
 msgstr "Неможе да избришам корисник од група %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -216,10 +216,6 @@ msgstr "Моментална лозинка"
 msgid "New password"
 msgstr "Нова лозинка"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "прикажи"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Смени лозинка"
diff --git a/l10n/ms_MY/files.po b/l10n/ms_MY/files.po
index fe69de831b7c65ed72cd77e39b68d8257a22165f..8498ceb30275db4d2825f95a73bc4d372c59de60 100644
--- a/l10n/ms_MY/files.po
+++ b/l10n/ms_MY/files.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
 "MIME-Version: 1.0\n"
@@ -82,51 +82,52 @@ msgstr ""
 msgid "Files"
 msgstr "fail"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr ""
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Padam"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Dalam proses"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "ganti"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "Batal"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -166,64 +167,60 @@ msgstr "Tidak boleh memuatnaik fail anda kerana mungkin ianya direktori atau sai
 msgid "Upload Error"
 msgstr "Muat naik ralat"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Tutup"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Dalam proses"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Muatnaik dibatalkan."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Nama "
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Saiz"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Dimodifikasi"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -280,7 +277,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -295,6 +292,10 @@ msgstr "Tiada apa-apa di sini. Muat naik sesuatu!"
 msgid "Download"
 msgstr "Muat turun"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Muat naik terlalu besar"
diff --git a/l10n/ms_MY/files_encryption.po b/l10n/ms_MY/files_encryption.po
index 5c9ecb2f2284f915c5eac09678a0b1155bd1cab3..b87b0fa030b53428cdc22f6f6ca0a954fb707e94 100644
--- a/l10n/ms_MY/files_encryption.po
+++ b/l10n/ms_MY/files_encryption.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
 "MIME-Version: 1.0\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Language: ms_MY\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr ""
diff --git a/l10n/ms_MY/lib.po b/l10n/ms_MY/lib.po
index 5365e602ba13b63caa40ca4397d97f6c9b308cc7..2ba170d21550bc9250818f5207362deae8cd9089 100644
--- a/l10n/ms_MY/lib.po
+++ b/l10n/ms_MY/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-18 00:03+0100\n"
-"PO-Revision-Date: 2013-01-17 21:57+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Language: ms_MY\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Bantuan"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Peribadi"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Tetapan"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Pengguna"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr ""
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr ""
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -85,6 +85,17 @@ msgstr "Teks"
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr ""
diff --git a/l10n/ms_MY/settings.po b/l10n/ms_MY/settings.po
index b04dd7bcb1367154fd911bacbb193ec051690f1d..a845175201474f4d5635384d050d0717d627f5f8 100644
--- a/l10n/ms_MY/settings.po
+++ b/l10n/ms_MY/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Malay (Malaysia) (http://www.transifex.com/projects/p/owncloud/language/ms_MY/)\n"
 "MIME-Version: 1.0\n"
@@ -25,12 +25,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr ""
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Ralat pengesahan"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -84,7 +84,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -217,10 +217,6 @@ msgstr "Kata laluan semasa"
 msgid "New password"
 msgstr "Kata laluan baru"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "Papar"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Ubah kata laluan"
diff --git a/l10n/nb_NO/files.po b/l10n/nb_NO/files.po
index 832fb94d7bfeb0a21e0f63136a22a63b3f47daac..885b07c549e190c29f8d633cef34c26a2474c61f 100644
--- a/l10n/nb_NO/files.po
+++ b/l10n/nb_NO/files.po
@@ -16,8 +16,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -87,51 +87,52 @@ msgstr ""
 msgid "Files"
 msgstr "Filer"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Avslutt deling"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Slett"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Omdøp"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Ventende"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} finnes allerede"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "erstatt"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "foreslå navn"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "avbryt"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "erstatt {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "angre"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "erstatt {new_name} med {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -171,64 +172,60 @@ msgstr "Kan ikke laste opp filen din siden det er en mappe eller den har 0 bytes
 msgid "Upload Error"
 msgstr "Opplasting feilet"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Lukk"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Ventende"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 fil lastes opp"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} filer laster opp"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Opplasting avbrutt."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL-en kan ikke være tom."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Navn"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Størrelse"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Endret"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 mappe"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} mapper"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 fil"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} filer"
 
@@ -285,7 +282,7 @@ msgid "From link"
 msgstr "Fra link"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -300,6 +297,10 @@ msgstr "Ingenting her. Last opp noe!"
 msgid "Download"
 msgstr "Last ned"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Avslutt deling"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Opplasting for stor"
diff --git a/l10n/nb_NO/files_encryption.po b/l10n/nb_NO/files_encryption.po
index c8657a91e1b7433f9aa6bf97e5c875f3c8dcc598..7be43b41df8fbfb3b0096b8c82578194cf320a7d 100644
--- a/l10n/nb_NO/files_encryption.po
+++ b/l10n/nb_NO/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: nb_NO\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Kryptering"
diff --git a/l10n/nb_NO/lib.po b/l10n/nb_NO/lib.po
index 4de870048561ef4ce19b48e9dc01e99235c8b70f..981e26c022b60897685e4c4559ed24e850b79eae 100644
--- a/l10n/nb_NO/lib.po
+++ b/l10n/nb_NO/lib.po
@@ -12,8 +12,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -22,47 +22,47 @@ msgstr ""
 "Language: nb_NO\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Hjelp"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Personlig"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Innstillinger"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Brukere"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Apper"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Admin"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIP-nedlasting av avslått"
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Filene må lastes ned en om gangen"
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Tilbake til filer"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "De valgte filene er for store til å kunne generere ZIP-fil"
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -90,6 +90,17 @@ msgstr "Tekst"
 msgid "Images"
 msgstr "Bilder"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "sekunder siden"
diff --git a/l10n/nb_NO/settings.po b/l10n/nb_NO/settings.po
index f96018e116979fdba38e3057463398e91b8dd3f3..f25a8d17ad845991785f8e7e2e21fa7dbe3da97b 100644
--- a/l10n/nb_NO/settings.po
+++ b/l10n/nb_NO/settings.po
@@ -15,8 +15,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/owncloud/language/nb_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -29,12 +29,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Lasting av liste fra App Store feilet."
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Autentikasjonsfeil"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -88,7 +88,7 @@ msgstr "Kan ikke legge bruker til gruppen %s"
 msgid "Unable to remove user from group %s"
 msgstr "Kan ikke slette bruker fra gruppen %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -221,10 +221,6 @@ msgstr "Nåværende passord"
 msgid "New password"
 msgstr "Nytt passord"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "vis"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Endre passord"
diff --git a/l10n/nl/files.po b/l10n/nl/files.po
index b91face47aef79142c919f252d0d7cbda798e846..4d8405dc73171a8e9f62f6b90f8a31d4e73f7b57 100644
--- a/l10n/nl/files.po
+++ b/l10n/nl/files.po
@@ -19,8 +19,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
 "MIME-Version: 1.0\n"
@@ -32,16 +32,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Kon %s niet verplaatsen - Er bestaat al een bestand met deze naam"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Kon %s niet verplaatsen"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Kan bestand niet hernoemen"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -90,51 +90,52 @@ msgstr "Ongeldige directory."
 msgid "Files"
 msgstr "Bestanden"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Stop delen"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr "Verwijder definitief"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Verwijder"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Hernoem"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Wachten"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} bestaat al"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "vervang"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "Stel een naam voor"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "annuleren"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "verving {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "ongedaan maken"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "verving {new_name} met {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "uitvoeren verwijderactie"
 
@@ -174,64 +175,60 @@ msgstr "uploaden van de file mislukt, het is of een directory of de bestandsgroo
 msgid "Upload Error"
 msgstr "Upload Fout"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Sluit"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Wachten"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 bestand wordt ge-upload"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} bestanden aan het uploaden"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Uploaden geannuleerd."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL kan niet leeg zijn."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Ongeldige mapnaam. Gebruik van'Gedeeld' is voorbehouden aan Owncloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Naam"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Bestandsgrootte"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Laatst aangepast"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 map"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} mappen"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 bestand"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} bestanden"
 
@@ -288,8 +285,8 @@ msgid "From link"
 msgstr "Vanaf link"
 
 #: templates/index.php:40
-msgid "Trash"
-msgstr "Verwijderen"
+msgid "Trash bin"
+msgstr ""
 
 #: templates/index.php:46
 msgid "Cancel upload"
@@ -303,6 +300,10 @@ msgstr "Er bevindt zich hier niets. Upload een bestand!"
 msgid "Download"
 msgstr "Download"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Stop delen"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Bestanden te groot"
diff --git a/l10n/nl/files_encryption.po b/l10n/nl/files_encryption.po
index a138d9b3ae53c7ba54faeb1e2845a42648b7f27d..c287efb9f79568a9589c75f6b7baad47f60a41f6 100644
--- a/l10n/nl/files_encryption.po
+++ b/l10n/nl/files_encryption.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:09+0100\n"
-"PO-Revision-Date: 2013-02-07 13:50+0000\n"
-"Last-Translator: André Koot <meneer@tken.net>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,28 +20,6 @@ msgstr ""
 "Language: nl\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Schakel om naar uw eigen ownCloud client en wijzig uw versleutelwachtwoord om de conversie af te ronden."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "overgeschakeld naar client side encryptie"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Verander encryptie wachtwoord naar login wachtwoord"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Controleer uw wachtwoorden en probeer het opnieuw."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Kon het bestandsencryptie wachtwoord niet veranderen naar het login wachtwoord"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Versleuteling"
diff --git a/l10n/nl/lib.po b/l10n/nl/lib.po
index 2ae038b9e406daf42b280db369bce47f52794cce..5a2a68eb4562761fc1a2916c4c7ec0cad411592f 100644
--- a/l10n/nl/lib.po
+++ b/l10n/nl/lib.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-19 00:04+0100\n"
-"PO-Revision-Date: 2013-01-18 09:03+0000\n"
-"Last-Translator: André Koot <meneer@tken.net>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -21,47 +21,47 @@ msgstr ""
 "Language: nl\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Help"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Persoonlijk"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Instellingen"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Gebruikers"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Apps"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Beheerder"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIP download is uitgeschakeld."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Bestanden moeten één voor één worden gedownload."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Terug naar bestanden"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "De geselecteerde bestanden zijn te groot om een zip bestand te maken."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "kon niet worden vastgesteld"
 
@@ -89,6 +89,17 @@ msgstr "Tekst"
 msgid "Images"
 msgstr "Afbeeldingen"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "seconden geleden"
diff --git a/l10n/nl/settings.po b/l10n/nl/settings.po
index 2e6ae9ed37bb7602969eaaefe00a71ab263c4c2f..29757d8ffb4f51e5c8e82758490b3e8c4d25159e 100644
--- a/l10n/nl/settings.po
+++ b/l10n/nl/settings.po
@@ -18,9 +18,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 14:00+0000\n"
-"Last-Translator: André Koot <meneer@tken.net>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Dutch (http://www.transifex.com/projects/p/owncloud/language/nl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -32,12 +32,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Kan de lijst niet van de App store laden"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Authenticatie fout"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr "Kon de weergavenaam niet wijzigen"
 
@@ -91,7 +91,7 @@ msgstr "Niet in staat om gebruiker toe te voegen aan groep %s"
 msgid "Unable to remove user from group %s"
 msgstr "Niet in staat om gebruiker te verwijderen uit groep %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "Kon de app niet bijwerken."
 
@@ -224,10 +224,6 @@ msgstr "Huidig wachtwoord"
 msgid "New password"
 msgstr "Nieuw wachtwoord"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "weergeven"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Wijzig wachtwoord"
diff --git a/l10n/nn_NO/files.po b/l10n/nn_NO/files.po
index 5ec5f4610142f89563d047a7dcdf96f3a38736e7..67550c2332e18ad31822f8adbbecacda7ec60c92 100644
--- a/l10n/nn_NO/files.po
+++ b/l10n/nn_NO/files.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -80,51 +80,52 @@ msgstr ""
 msgid "Files"
 msgstr "Filer"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr ""
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Slett"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -164,64 +165,60 @@ msgstr ""
 msgid "Upload Error"
 msgstr ""
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Lukk"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Namn"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Storleik"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Endra"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -278,7 +275,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -293,6 +290,10 @@ msgstr "Ingenting her. Last noko opp!"
 msgid "Download"
 msgstr "Last ned"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "For stor opplasting"
diff --git a/l10n/nn_NO/files_encryption.po b/l10n/nn_NO/files_encryption.po
index 4db0ffa21b923e2295195154dfc34f9a836b82b7..5b5ba56793880ef8d642b10754c107ab8356bd54 100644
--- a/l10n/nn_NO/files_encryption.po
+++ b/l10n/nn_NO/files_encryption.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Language: nn_NO\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr ""
diff --git a/l10n/nn_NO/lib.po b/l10n/nn_NO/lib.po
index 5d33fc1e808ab605434a43ee61fac7b370699980..ba41555b99ddb9ccbe28d7b4de41c2ea8c7c68fc 100644
--- a/l10n/nn_NO/lib.po
+++ b/l10n/nn_NO/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Language: nn_NO\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Hjelp"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Personleg"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Innstillingar"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Brukarar"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr ""
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr ""
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -85,6 +85,17 @@ msgstr "Tekst"
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr ""
diff --git a/l10n/nn_NO/settings.po b/l10n/nn_NO/settings.po
index 0d0f12e96e567c78db418795c920d83610ef3390..2db598c4b3c33f51f2b831f3914d830271100a3b 100644
--- a/l10n/nn_NO/settings.po
+++ b/l10n/nn_NO/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Norwegian Nynorsk (Norway) (http://www.transifex.com/projects/p/owncloud/language/nn_NO/)\n"
 "MIME-Version: 1.0\n"
@@ -23,12 +23,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Klarer ikkje å laste inn liste fra App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Feil i autentisering"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -82,7 +82,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -215,10 +215,6 @@ msgstr "Passord"
 msgid "New password"
 msgstr "Nytt passord"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "vis"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Endra passord"
diff --git a/l10n/oc/files.po b/l10n/oc/files.po
index 115f85f0fb11b724e6890f2e5eaa546b35830b1e..46ec34e54763fe460fc39ac29c8b90080117ae00 100644
--- a/l10n/oc/files.po
+++ b/l10n/oc/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
 "MIME-Version: 1.0\n"
@@ -79,51 +79,52 @@ msgstr ""
 msgid "Files"
 msgstr "Fichièrs"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Non parteja"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Escafa"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Torna nomenar"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Al esperar"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "remplaça"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "nom prepausat"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "anulla"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "defar"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -163,64 +164,60 @@ msgstr "Impossible d'amontcargar lo teu fichièr qu'es un repertòri o que ten p
 msgid "Upload Error"
 msgstr "Error d'amontcargar"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr ""
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Al esperar"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 fichièr al amontcargar"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Amontcargar anullat."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Un amontcargar es a se far. Daissar aquesta pagina ara tamparà lo cargament. "
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Nom"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Talha"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Modificat"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -277,7 +274,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -292,6 +289,10 @@ msgstr "Pas res dedins. Amontcarga qualquaren"
 msgid "Download"
 msgstr "Avalcarga"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Non parteja"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Amontcargament tròp gròs"
diff --git a/l10n/oc/files_encryption.po b/l10n/oc/files_encryption.po
index a912cb58e7142afa1f9d616fd8fb9acbd450129f..4db4079a8e0dcd4d6cc5bcfc7db55fd1c29bcf67 100644
--- a/l10n/oc/files_encryption.po
+++ b/l10n/oc/files_encryption.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
 "MIME-Version: 1.0\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Language: oc\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr ""
diff --git a/l10n/oc/lib.po b/l10n/oc/lib.po
index 7a056315f6d6c9a494d9f9b2ecfe17a3f46d2e2f..c96977d906d6ed16bd3f56a08d092218447a6d2c 100644
--- a/l10n/oc/lib.po
+++ b/l10n/oc/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
 "MIME-Version: 1.0\n"
@@ -18,47 +18,47 @@ msgstr ""
 "Language: oc\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Ajuda"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Personal"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Configuracion"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Usancièrs"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Apps"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Admin"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Avalcargar los ZIP es inactiu."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Los fichièrs devan èsser avalcargats un per un."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Torna cap als fichièrs"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -86,6 +86,17 @@ msgstr ""
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "segonda a"
diff --git a/l10n/oc/settings.po b/l10n/oc/settings.po
index 2c3d180e39322e381dbd389f9da434561049ef0b..2aa4e254a4c30a69c60c3dbc75016f4c3f75c5cd 100644
--- a/l10n/oc/settings.po
+++ b/l10n/oc/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Occitan (post 1500) (http://www.transifex.com/projects/p/owncloud/language/oc/)\n"
 "MIME-Version: 1.0\n"
@@ -22,12 +22,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Pas possible de cargar la tièra dempuèi App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Error d'autentificacion"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -81,7 +81,7 @@ msgstr "Pas capable d'apondre un usancièr al grop %s"
 msgid "Unable to remove user from group %s"
 msgstr "Pas capable de tira un usancièr del grop %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -214,10 +214,6 @@ msgstr "Senhal en cors"
 msgid "New password"
 msgstr "Senhal novèl"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "mòstra"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Cambia lo senhal"
diff --git a/l10n/pl/files.po b/l10n/pl/files.po
index 74de66a0d419dd547790314af278b39eaeaec4d2..f49e1712ec6eefd31e6b2fcffd07537dc14fa967 100644
--- a/l10n/pl/files.po
+++ b/l10n/pl/files.po
@@ -15,8 +15,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 "MIME-Version: 1.0\n"
@@ -28,16 +28,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Nie można było przenieść %s - Plik o takiej nazwie już istnieje"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Nie można było przenieść %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Nie można zmienić nazwy pliku"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -86,51 +86,52 @@ msgstr "Zła ścieżka."
 msgid "Files"
 msgstr "Pliki"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Nie udostępniaj"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Usuwa element"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Zmień nazwę"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Oczekujące"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} już istnieje"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "zastap"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "zasugeruj nazwę"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "anuluj"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "zastąpiony {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "wróć"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "zastąpiony {new_name} z {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -170,64 +171,60 @@ msgstr "Nie można wczytać pliku jeśli jest katalogiem lub ma 0 bajtów"
 msgid "Upload Error"
 msgstr "Błąd wczytywania"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Zamknij"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Oczekujące"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 plik wczytany"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} przesyłanie plików"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Wczytywanie anulowane."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Wysyłanie pliku jest w toku. Teraz opuszczając stronę wysyłanie zostanie anulowane."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL nie może być pusty."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Nazwa folderu nieprawidłowa. Wykorzystanie \"Shared\" jest zarezerwowane przez Owncloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Nazwa"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Rozmiar"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Czas modyfikacji"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 folder"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} foldery"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 plik"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} pliki"
 
@@ -284,7 +281,7 @@ msgid "From link"
 msgstr "Z linku"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -299,6 +296,10 @@ msgstr "Brak zawartości. Proszę wysłać pliki!"
 msgid "Download"
 msgstr "Pobiera element"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Nie udostępniaj"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Wysyłany plik ma za duży rozmiar"
diff --git a/l10n/pl/files_encryption.po b/l10n/pl/files_encryption.po
index acf7f3f06eba0c08339d13a921763628c3cf67b5..414c6659d9b69921acba590a876cb7f48fea275a 100644
--- a/l10n/pl/files_encryption.po
+++ b/l10n/pl/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: pl\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Szyfrowanie"
diff --git a/l10n/pl/lib.po b/l10n/pl/lib.po
index 917ce3b654bdfdac25939cf9ba2aa379ff891768..c1b35c7656ef34d837d36d6287b1e840d61a9aa3 100644
--- a/l10n/pl/lib.po
+++ b/l10n/pl/lib.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-29 00:05+0100\n"
-"PO-Revision-Date: 2013-01-28 19:59+0000\n"
-"Last-Translator: Marcin Małecki <gerber@tkdami.net>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,47 +20,47 @@ msgstr ""
 "Language: pl\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Pomoc"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Osobiste"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Ustawienia"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Użytkownicy"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Aplikacje"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Administrator"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Pobieranie ZIP jest wyłączone."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Pliki muszą zostać pobrane pojedynczo."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Wróć do plików"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Wybrane pliki są zbyt duże, aby wygenerować plik zip."
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "nie może zostać znaleziony"
 
@@ -88,6 +88,17 @@ msgstr "Połączenie tekstowe"
 msgid "Images"
 msgstr "Obrazy"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "sekund temu"
diff --git a/l10n/pl/settings.po b/l10n/pl/settings.po
index 7849faf3679ca3b8a8a66e2449cd9b718530de2f..614e8163aeca9b008d649543e69a18be1b7e14b3 100644
--- a/l10n/pl/settings.po
+++ b/l10n/pl/settings.po
@@ -18,8 +18,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Polish (http://www.transifex.com/projects/p/owncloud/language/pl/)\n"
 "MIME-Version: 1.0\n"
@@ -32,12 +32,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Nie mogę załadować listy aplikacji"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Błąd uwierzytelniania"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -91,7 +91,7 @@ msgstr "Nie można dodać użytkownika do grupy %s"
 msgid "Unable to remove user from group %s"
 msgstr "Nie można usunąć użytkownika z grupy %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -224,10 +224,6 @@ msgstr "Bieżące hasło"
 msgid "New password"
 msgstr "Nowe hasło"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "Wyświetlanie"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Zmień hasło"
diff --git a/l10n/pl_PL/files.po b/l10n/pl_PL/files.po
index 19de2c06401a8cd98f44b2b96f9781ac20e55fd9..e1e818868003d56b9885ff5a655e0c7082dd1d70 100644
--- a/l10n/pl_PL/files.po
+++ b/l10n/pl_PL/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
 "MIME-Version: 1.0\n"
@@ -78,51 +78,52 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr ""
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr ""
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -162,64 +163,60 @@ msgstr ""
 msgid "Upload Error"
 msgstr ""
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr ""
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr ""
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr ""
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr ""
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -276,7 +273,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -291,6 +288,10 @@ msgstr ""
 msgid "Download"
 msgstr ""
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr ""
diff --git a/l10n/pl_PL/files_encryption.po b/l10n/pl_PL/files_encryption.po
index 2e95f4ce7e560e19b7c87c9e422c7f67ea5a65f0..d41a8cb3da55fdae02b4dba55be976f241454567 100644
--- a/l10n/pl_PL/files_encryption.po
+++ b/l10n/pl_PL/files_encryption.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
 "MIME-Version: 1.0\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Language: pl_PL\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr ""
diff --git a/l10n/pl_PL/lib.po b/l10n/pl_PL/lib.po
index af7e0260b91e80dba60d4291b21e12b043c47ebb..8fec7a7635a827ef9a876573f13a263078202790 100644
--- a/l10n/pl_PL/lib.po
+++ b/l10n/pl_PL/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Language: pl_PL\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr ""
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr ""
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Ustawienia"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr ""
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr ""
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr ""
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -85,6 +85,17 @@ msgstr ""
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr ""
diff --git a/l10n/pl_PL/settings.po b/l10n/pl_PL/settings.po
index 991c4808c5bb57bbc83efa7991d97a5772c78540..68b10e8e13ac0bbab8b30e0aa43a43a535d46f4c 100644
--- a/l10n/pl_PL/settings.po
+++ b/l10n/pl_PL/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Polish (Poland) (http://www.transifex.com/projects/p/owncloud/language/pl_PL/)\n"
 "MIME-Version: 1.0\n"
@@ -21,12 +21,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr ""
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr ""
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -80,7 +80,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -213,10 +213,6 @@ msgstr ""
 msgid "New password"
 msgstr ""
 
-#: templates/personal.php:28
-msgid "show"
-msgstr ""
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr ""
diff --git a/l10n/pt_BR/files.po b/l10n/pt_BR/files.po
index a1270334a2b9c7871af457014c8841499a30c85a..2fd721d545f7dc826054fff50618a8e342e20314 100644
--- a/l10n/pt_BR/files.po
+++ b/l10n/pt_BR/files.po
@@ -16,8 +16,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
@@ -29,16 +29,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Não possível mover %s - Um arquivo com este nome já existe"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Não possível mover %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Impossível renomear arquivo"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -77,7 +77,7 @@ msgstr "Falha ao escrever no disco"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Espaço de armazenamento insuficiente"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -87,51 +87,52 @@ msgstr "Diretório inválido."
 msgid "Files"
 msgstr "Arquivos"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Descompartilhar"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Excluir"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Renomear"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Pendente"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} já existe"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "substituir"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "sugerir nome"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "cancelar"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "substituído {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "desfazer"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "Substituído {old_name} por {new_name} "
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -171,64 +172,60 @@ msgstr "Impossível enviar seus arquivo como diretório ou ele tem 0 bytes."
 msgid "Upload Error"
 msgstr "Erro de envio"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Fechar"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Pendente"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "enviando 1 arquivo"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "Enviando {count} arquivos"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Envio cancelado."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Upload em andamento. Sair da página agora resultará no cancelamento do envio."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL não pode ficar em branco"
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Nome de pasta inválido. O uso de 'Shared' é reservado para o Owncloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Nome"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Tamanho"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Modificado"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 pasta"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} pastas"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 arquivo"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} arquivos"
 
@@ -285,7 +282,7 @@ msgid "From link"
 msgstr "Do link"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -300,6 +297,10 @@ msgstr "Nada aqui.Carrege alguma coisa!"
 msgid "Download"
 msgstr "Baixar"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Descompartilhar"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Arquivo muito grande"
diff --git a/l10n/pt_BR/files_encryption.po b/l10n/pt_BR/files_encryption.po
index 1a4579181b5448005b0d058382d0905a65669340..ee2e192fb41676bd1651734bf2ab8e1942c7ae24 100644
--- a/l10n/pt_BR/files_encryption.po
+++ b/l10n/pt_BR/files_encryption.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: pt_BR\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Por favor, vá ao seu cliente ownCloud e mude sua criptografia de senha para completar a conversão."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "alterado para criptografia por parte do cliente"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Mudar senha de criptografia para senha de login"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Por favor, verifique suas senhas e tente novamente."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Não foi possível mudar sua senha de criptografia de arquivos para sua senha de login"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Criptografia"
diff --git a/l10n/pt_BR/lib.po b/l10n/pt_BR/lib.po
index d20d57c814588a89147e2bad69cc528a3584e28a..dfed3b3905682521a7d71d7976aae6ff917a2ba9 100644
--- a/l10n/pt_BR/lib.po
+++ b/l10n/pt_BR/lib.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-31 00:27+0100\n"
-"PO-Revision-Date: 2013-01-30 15:50+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
@@ -20,27 +20,27 @@ msgstr ""
 "Language: pt_BR\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Ajuda"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Pessoal"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Ajustes"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Usuários"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Aplicações"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Admin"
 
@@ -88,6 +88,17 @@ msgstr "Texto"
 msgid "Images"
 msgstr "Imagens"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "segundos atrás"
diff --git a/l10n/pt_BR/settings.po b/l10n/pt_BR/settings.po
index de48363261ed41776e9b587042bcd3ba78364099..ec1d231b927f4645032a16090e90a1821e0a9445 100644
--- a/l10n/pt_BR/settings.po
+++ b/l10n/pt_BR/settings.po
@@ -17,8 +17,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/owncloud/language/pt_BR/)\n"
 "MIME-Version: 1.0\n"
@@ -31,12 +31,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Não foi possível carregar lista da App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Erro de autenticação"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -90,7 +90,7 @@ msgstr "Não foi possível adicionar usuário ao grupo %s"
 msgid "Unable to remove user from group %s"
 msgstr "Não foi possível remover usuário do grupo %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -223,10 +223,6 @@ msgstr "Senha atual"
 msgid "New password"
 msgstr "Nova senha"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "mostrar"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Alterar senha"
diff --git a/l10n/pt_PT/core.po b/l10n/pt_PT/core.po
index 720a1bc3a2e4a4b6cb4eea6607fc9d3cc798797f..7b19a970580dd69ce0735cfbbee8fc6050e99b23 100644
--- a/l10n/pt_PT/core.po
+++ b/l10n/pt_PT/core.po
@@ -15,9 +15,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
+"Last-Translator: Mouxy <daniel@mouxy.net>\n"
 "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -60,7 +60,7 @@ msgstr "Nenhuma categoria para adicionar?"
 #: ajax/vcategories/add.php:37
 #, php-format
 msgid "This category already exists: %s"
-msgstr ""
+msgstr "A categoria já existe: %s"
 
 #: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
 #: ajax/vcategories/favorites.php:24
@@ -164,59 +164,59 @@ msgstr "Novembro"
 msgid "December"
 msgstr "Dezembro"
 
-#: js/js.js:284
+#: js/js.js:286
 msgid "Settings"
 msgstr "Definições"
 
-#: js/js.js:764
+#: js/js.js:767
 msgid "seconds ago"
 msgstr "Minutos atrás"
 
-#: js/js.js:765
+#: js/js.js:768
 msgid "1 minute ago"
 msgstr "Há 1 minuto"
 
-#: js/js.js:766
+#: js/js.js:769
 msgid "{minutes} minutes ago"
 msgstr "{minutes} minutos atrás"
 
-#: js/js.js:767
+#: js/js.js:770
 msgid "1 hour ago"
 msgstr "Há 1 hora"
 
-#: js/js.js:768
+#: js/js.js:771
 msgid "{hours} hours ago"
 msgstr "Há {hours} horas atrás"
 
-#: js/js.js:769
+#: js/js.js:772
 msgid "today"
 msgstr "hoje"
 
-#: js/js.js:770
+#: js/js.js:773
 msgid "yesterday"
 msgstr "ontem"
 
-#: js/js.js:771
+#: js/js.js:774
 msgid "{days} days ago"
 msgstr "{days} dias atrás"
 
-#: js/js.js:772
+#: js/js.js:775
 msgid "last month"
 msgstr "ultímo mês"
 
-#: js/js.js:773
+#: js/js.js:776
 msgid "{months} months ago"
 msgstr "Há {months} meses atrás"
 
-#: js/js.js:774
+#: js/js.js:777
 msgid "months ago"
 msgstr "meses atrás"
 
-#: js/js.js:775
+#: js/js.js:778
 msgid "last year"
 msgstr "ano passado"
 
-#: js/js.js:776
+#: js/js.js:779
 msgid "years ago"
 msgstr "anos atrás"
 
@@ -246,8 +246,8 @@ msgid "The object type is not specified."
 msgstr "O tipo de objecto não foi especificado"
 
 #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
-#: js/share.js:583
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
 msgid "Error"
 msgstr "Erro"
 
@@ -267,7 +267,7 @@ msgstr "Partilhar"
 msgid "Shared"
 msgstr "Partilhado"
 
-#: js/share.js:141 js/share.js:611
+#: js/share.js:141 js/share.js:622
 msgid "Error while sharing"
 msgstr "Erro ao partilhar"
 
@@ -363,23 +363,23 @@ msgstr "apagar"
 msgid "share"
 msgstr "partilhar"
 
-#: js/share.js:373 js/share.js:558
+#: js/share.js:373 js/share.js:569
 msgid "Password protected"
 msgstr "Protegido com palavra-passe"
 
-#: js/share.js:571
+#: js/share.js:582
 msgid "Error unsetting expiration date"
 msgstr "Erro ao retirar a data de expiração"
 
-#: js/share.js:583
+#: js/share.js:594
 msgid "Error setting expiration date"
 msgstr "Erro ao aplicar a data de expiração"
 
-#: js/share.js:598
+#: js/share.js:609
 msgid "Sending ..."
 msgstr "A Enviar..."
 
-#: js/share.js:609
+#: js/share.js:620
 msgid "Email sent"
 msgstr "E-mail enviado"
 
@@ -495,14 +495,14 @@ msgstr "Sem nenhum gerador seguro de números aleatórios, uma pessoa mal intenc
 msgid ""
 "Your data directory and files are probably accessible from the internet "
 "because the .htaccess file does not work."
-msgstr ""
+msgstr "A pasta de dados do ownCloud e os respectivos ficheiros, estarão provavelmente acessíveis a partir da internet, pois o ficheiros .htaccess não funciona."
 
 #: templates/installation.php:32
 msgid ""
 "For information how to properly configure your server, please see the <a "
 "href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
 "target=\"_blank\">documentation</a>."
-msgstr ""
+msgstr "Para obter informações de como configurar correctamente o servidor, veja em: <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">documentation</a>."
 
 #: templates/installation.php:36
 msgid "Create an <strong>admin account</strong>"
diff --git a/l10n/pt_PT/files.po b/l10n/pt_PT/files.po
index 4f3a80d9f705e05054df915926e419dd37cda7a3..9e6b511ab92e6fd5e909cb68997b4b660227da66 100644
--- a/l10n/pt_PT/files.po
+++ b/l10n/pt_PT/files.po
@@ -15,9 +15,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
+"Last-Translator: Mouxy <daniel@mouxy.net>\n"
 "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -28,16 +28,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Não foi possível mover o ficheiro %s - Já existe um ficheiro com esse nome"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Não foi possível move o ficheiro %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Não foi possível renomear o ficheiro"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -76,7 +76,7 @@ msgstr "Falhou a escrita no disco"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Não há espaço suficiente em disco"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -86,51 +86,52 @@ msgstr "Directório Inválido"
 msgid "Files"
 msgstr "Ficheiros"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Deixar de partilhar"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr "Eliminar permanentemente"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Apagar"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Renomear"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Pendente"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "O nome {new_name} já existe"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "substituir"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "sugira um nome"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "cancelar"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "{new_name} substituido"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "desfazer"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "substituido {new_name} por {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "Executar a tarefa de apagar"
 
@@ -170,64 +171,60 @@ msgstr "Não é possível fazer o envio do ficheiro devido a ser uma pasta ou te
 msgid "Upload Error"
 msgstr "Erro no envio"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Fechar"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Pendente"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "A enviar 1 ficheiro"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "A carregar {count} ficheiros"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Envio cancelado."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Envio de ficheiro em progresso. Irá cancelar o envio se sair da página agora."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "O URL não pode estar vazio."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Nome de pasta inválido. O Uso de 'shared' é reservado para o ownCloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:948 templates/index.php:67
 msgid "Name"
 msgstr "Nome"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:949 templates/index.php:78
 msgid "Size"
 msgstr "Tamanho"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:950 templates/index.php:80
 msgid "Modified"
 msgstr "Modificado"
 
-#: js/files.js:974
+#: js/files.js:969
 msgid "1 folder"
 msgstr "1 pasta"
 
-#: js/files.js:976
+#: js/files.js:971
 msgid "{count} folders"
 msgstr "{count} pastas"
 
-#: js/files.js:984
+#: js/files.js:979
 msgid "1 file"
 msgstr "1 ficheiro"
 
-#: js/files.js:986
+#: js/files.js:981
 msgid "{count} files"
 msgstr "{count} ficheiros"
 
@@ -284,8 +281,8 @@ msgid "From link"
 msgstr "Da ligação"
 
 #: templates/index.php:40
-msgid "Trash"
-msgstr "Lixo"
+msgid "Trash bin"
+msgstr "Reciclagem"
 
 #: templates/index.php:46
 msgid "Cancel upload"
@@ -299,6 +296,10 @@ msgstr "Vazio. Envie alguma coisa!"
 msgid "Download"
 msgstr "Transferir"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Deixar de partilhar"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Envio muito grande"
diff --git a/l10n/pt_PT/files_encryption.po b/l10n/pt_PT/files_encryption.po
index 09e55792f705e9b872f208d6518b413048b48a87..461a5030b77309c5bc3a67538e873b3340ffd754 100644
--- a/l10n/pt_PT/files_encryption.po
+++ b/l10n/pt_PT/files_encryption.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
+"Last-Translator: Mouxy <daniel@mouxy.net>\n"
 "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,43 +19,21 @@ msgstr ""
 "Language: pt_PT\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Por favor, use o seu cliente de sincronização do ownCloud e altere a sua password de encriptação para concluír a conversão."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "Alterado para encriptação do lado do cliente"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Alterar a password de encriptação para a password de login"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Por favor verifique as suas paswords e tente de novo."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Não foi possível alterar a password de encriptação de ficheiros para a sua password de login"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Encriptação"
 
 #: templates/settings-personal.php:7
 msgid "File encryption is enabled."
-msgstr ""
+msgstr "A encriptação de ficheiros está ligada"
 
 #: templates/settings-personal.php:11
 msgid "The following file types will not be encrypted:"
-msgstr ""
+msgstr "Os seguintes ficheiros não serão encriptados:"
 
 #: templates/settings.php:7
 msgid "Exclude the following file types from encryption:"
-msgstr ""
+msgstr "Excluir da encriptação os seguintes tipos de ficheiro:"
 
 #: templates/settings.php:12
 msgid "None"
diff --git a/l10n/pt_PT/files_trashbin.po b/l10n/pt_PT/files_trashbin.po
index 5f79fd320696e54b06fb8ff65af4739a153061b6..5e720d8b5ce43a20810b58a87ff9ad1e2b1c78a4 100644
--- a/l10n/pt_PT/files_trashbin.po
+++ b/l10n/pt_PT/files_trashbin.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 23:11+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
+"Last-Translator: Mouxy <daniel@mouxy.net>\n"
 "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -21,12 +21,12 @@ msgstr ""
 #: ajax/delete.php:22
 #, php-format
 msgid "Couldn't delete %s permanently"
-msgstr ""
+msgstr "Não foi possível eliminar %s de forma permanente"
 
 #: ajax/undelete.php:41
 #, php-format
 msgid "Couldn't restore %s"
-msgstr ""
+msgstr "Não foi possível restaurar %s"
 
 #: js/trash.js:7 js/trash.js:94
 msgid "perform restore operation"
@@ -34,7 +34,7 @@ msgstr "Restaurar"
 
 #: js/trash.js:33
 msgid "delete file permanently"
-msgstr ""
+msgstr "Eliminar permanentemente o(s) ficheiro(s)"
 
 #: js/trash.js:125 templates/index.php:17
 msgid "Name"
diff --git a/l10n/pt_PT/files_versions.po b/l10n/pt_PT/files_versions.po
index 48cc4e4416c270ba2467f8a3453a5355e32d1719..9e0c86ead326e0c955ba592cb8179b406c657f88 100644
--- a/l10n/pt_PT/files_versions.po
+++ b/l10n/pt_PT/files_versions.po
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Daniel Pinto <daniel@mouxy.net>, 2013.
 # Duarte Velez Grilo <duartegrilo@gmail.com>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 23:11+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
+"Last-Translator: Mouxy <daniel@mouxy.net>\n"
 "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -21,33 +22,33 @@ msgstr ""
 #: ajax/rollbackVersion.php:15
 #, php-format
 msgid "Could not revert: %s"
-msgstr ""
+msgstr "Não foi possível reverter: %s"
 
 #: history.php:40
 msgid "success"
-msgstr ""
+msgstr "Sucesso"
 
 #: history.php:42
 #, php-format
 msgid "File %s was reverted to version %s"
-msgstr ""
+msgstr "O ficheiro %s foi revertido para a versão %s"
 
 #: history.php:49
 msgid "failure"
-msgstr ""
+msgstr "Falha"
 
 #: history.php:51
 #, php-format
 msgid "File %s could not be reverted to version %s"
-msgstr ""
+msgstr "Não foi possível reverter o ficheiro %s para a versão %s"
 
 #: history.php:68
 msgid "No old versions available"
-msgstr ""
+msgstr "Não existem versões mais antigas"
 
 #: history.php:73
 msgid "No path specified"
-msgstr ""
+msgstr "Nenhum caminho especificado"
 
 #: js/versions.js:16
 msgid "History"
@@ -55,7 +56,7 @@ msgstr "Histórico"
 
 #: templates/history.php:20
 msgid "Revert a file to a previous version by clicking on its revert button"
-msgstr ""
+msgstr "Reverter um ficheiro para uma versão anterior clicando no seu botão reverter."
 
 #: templates/settings.php:3
 msgid "Files Versioning"
diff --git a/l10n/pt_PT/lib.po b/l10n/pt_PT/lib.po
index b9d558cbb40f91eb8e47f97f4f2d22ab664d8e70..7f3eebc2de30e913bb7b027b3c7aeb8988556ac2 100644
--- a/l10n/pt_PT/lib.po
+++ b/l10n/pt_PT/lib.po
@@ -4,13 +4,14 @@
 # 
 # Translators:
 #   <daniel@mouxy.net>, 2012-2013.
+# Daniel Pinto <daniel@mouxy.net>, 2013.
 # Duarte Velez Grilo <duartegrilo@gmail.com>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-18 00:03+0100\n"
-"PO-Revision-Date: 2013-01-17 00:47+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
 "Last-Translator: Mouxy <daniel@mouxy.net>\n"
 "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
@@ -19,47 +20,47 @@ msgstr ""
 "Language: pt_PT\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Ajuda"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Pessoal"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Configurações"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Utilizadores"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Aplicações"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Admin"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Descarregamento em ZIP está desligado."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Os ficheiros precisam de ser descarregados um por um."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Voltar a Ficheiros"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Os ficheiros seleccionados são grandes demais para gerar um ficheiro zip."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "Não foi possível determinar"
 
@@ -87,6 +88,17 @@ msgstr "Texto"
 msgid "Images"
 msgstr "Imagens"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas."
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "Por favor verifique <a href='%s'>installation guides</a>."
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "há alguns segundos"
diff --git a/l10n/pt_PT/settings.po b/l10n/pt_PT/settings.po
index 8c1833afc0e8119ce57c8f33eee6c98f8cb92161..9f04757a83fc70cf2b4a67deaafb9f4bbcaa887f 100644
--- a/l10n/pt_PT/settings.po
+++ b/l10n/pt_PT/settings.po
@@ -15,8 +15,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
@@ -29,14 +29,14 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Incapaz de carregar a lista da App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Erro de autenticação"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
-msgstr ""
+msgstr "Não foi possível alterar o nome"
 
 #: ajax/creategroup.php:10
 msgid "Group already exists"
@@ -88,7 +88,7 @@ msgstr "Impossível acrescentar utilizador ao grupo %s"
 msgid "Unable to remove user from group %s"
 msgstr "Impossível apagar utilizador do grupo %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "Não foi possível actualizar a aplicação."
 
@@ -221,10 +221,6 @@ msgstr "Palavra-chave actual"
 msgid "New password"
 msgstr "Nova palavra-chave"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "mostrar"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Alterar palavra-chave"
@@ -235,15 +231,15 @@ msgstr "Nome público"
 
 #: templates/personal.php:42
 msgid "Your display name was changed"
-msgstr ""
+msgstr "O seu nome foi alterado"
 
 #: templates/personal.php:43
 msgid "Unable to change your display name"
-msgstr ""
+msgstr "Não foi possível alterar o seu nome"
 
 #: templates/personal.php:46
 msgid "Change display name"
-msgstr ""
+msgstr "Alterar nome"
 
 #: templates/personal.php:55
 msgid "Email"
diff --git a/l10n/pt_PT/user_ldap.po b/l10n/pt_PT/user_ldap.po
index 643d61ad73aeec8ce18752fef93f23f067a16555..3a798d9e6a02099c1136fc68325c31677b34479b 100644
--- a/l10n/pt_PT/user_ldap.po
+++ b/l10n/pt_PT/user_ldap.po
@@ -12,9 +12,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 23:11+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 14:21+0000\n"
+"Last-Translator: Mouxy <daniel@mouxy.net>\n"
 "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/owncloud/language/pt_PT/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -219,7 +219,7 @@ msgstr "Usar TLS"
 
 #: templates/settings.php:38
 msgid "Do not use it additionally for LDAPS connections, it will fail."
-msgstr ""
+msgstr "Não utilize para adicionar ligações LDAP, irá falhar!"
 
 #: templates/settings.php:39
 msgid "Case insensitve LDAP server (Windows)"
diff --git a/l10n/ro/files.po b/l10n/ro/files.po
index 5cb6516a7378209d5f918fd4c00f6c0085c9409e..4e321298f04e64e0578582e9dc6fd240e7bb061c 100644
--- a/l10n/ro/files.po
+++ b/l10n/ro/files.po
@@ -13,8 +13,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
 "MIME-Version: 1.0\n"
@@ -26,16 +26,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Nu se poate de mutat %s - Fișier cu acest nume deja există"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Nu s-a putut muta %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Nu s-a putut redenumi fișierul"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -84,51 +84,52 @@ msgstr "Director invalid."
 msgid "Files"
 msgstr "Fișiere"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Anulează partajarea"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Șterge"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Redenumire"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "În așteptare"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} deja exista"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "înlocuire"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "sugerează nume"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "anulare"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "inlocuit {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "Anulează ultima acțiune"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} inlocuit cu {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -168,64 +169,60 @@ msgstr "Nu s-a putut încărca fișierul tău deoarece pare să fie un director
 msgid "Upload Error"
 msgstr "Eroare la încărcare"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Închide"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "În așteptare"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "un fișier se încarcă"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} fisiere incarcate"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Încărcare anulată."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "Adresa URL nu poate fi goală."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Invalid folder name. Usage of 'Shared' is reserved by Ownclou"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Nume"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Dimensiune"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Modificat"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 folder"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} foldare"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 fisier"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} fisiere"
 
@@ -282,7 +279,7 @@ msgid "From link"
 msgstr "de la adresa"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -297,6 +294,10 @@ msgstr "Nimic aici. Încarcă ceva!"
 msgid "Download"
 msgstr "Descarcă"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Anulează partajarea"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Fișierul încărcat este prea mare"
diff --git a/l10n/ro/files_encryption.po b/l10n/ro/files_encryption.po
index 10fad6ca469405a13f4f0bdab14785a88df87b4a..ba27a3e08d25f072b9ef8aba92d8a9f494e06b85 100644
--- a/l10n/ro/files_encryption.po
+++ b/l10n/ro/files_encryption.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
 "MIME-Version: 1.0\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: ro\n"
 "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Te rugăm să mergi în clientul ownCloud și să schimbi parola pentru a finisa conversia"
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "setat la encriptare locală"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Schimbă parola de ecriptare în parolă de acces"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Verifică te rog parolele și înceracă din nou."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Nu s-a putut schimba parola de encripție a fișierelor ca parolă de acces"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Încriptare"
diff --git a/l10n/ro/lib.po b/l10n/ro/lib.po
index a48eb334748bf48914e8f357277d80e41b237dc4..0d5dcd34eae387d3ee2ed5c7358510fb0f6fe498 100644
--- a/l10n/ro/lib.po
+++ b/l10n/ro/lib.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-26 00:09+0100\n"
-"PO-Revision-Date: 2013-01-25 21:31+0000\n"
-"Last-Translator: Dimon Pockemon <>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,47 +20,47 @@ msgstr ""
 "Language: ro\n"
 "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Ajutor"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Personal"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Setări"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Utilizatori"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Aplicații"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Admin"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Descărcarea ZIP este dezactivată."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Fișierele trebuie descărcate unul câte unul."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Înapoi la fișiere"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Fișierele selectate sunt prea mari pentru a genera un fișier zip."
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "nu poate fi determinat"
 
@@ -88,6 +88,17 @@ msgstr "Text"
 msgid "Images"
 msgstr "Imagini"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "secunde în urmă"
diff --git a/l10n/ro/settings.po b/l10n/ro/settings.po
index a54bf6ea81fb5d33f7752efaac3f2b85e5f29a3f..53b608c053bd6e36a1a765be9a74eaf66aa46ec0 100644
--- a/l10n/ro/settings.po
+++ b/l10n/ro/settings.po
@@ -14,8 +14,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Romanian (http://www.transifex.com/projects/p/owncloud/language/ro/)\n"
 "MIME-Version: 1.0\n"
@@ -28,12 +28,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Imposibil de încărcat lista din App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Eroare de autentificare"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -87,7 +87,7 @@ msgstr "Nu s-a putut adăuga utilizatorul la grupul %s"
 msgid "Unable to remove user from group %s"
 msgstr "Nu s-a putut elimina utilizatorul din grupul %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -220,10 +220,6 @@ msgstr "Parola curentă"
 msgid "New password"
 msgstr "Noua parolă"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "afișează"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Schimbă parola"
diff --git a/l10n/ru/core.po b/l10n/ru/core.po
index f41a1f241b90fca5adec7b14be538c1ba82c0879..b9e138452be4622b7a6f9322770771acc562ae60 100644
--- a/l10n/ru/core.po
+++ b/l10n/ru/core.po
@@ -19,9 +19,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 18:40+0000\n"
+"Last-Translator: Langaru <langaru@gmail.com>\n"
 "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -168,59 +168,59 @@ msgstr "Ноябрь"
 msgid "December"
 msgstr "Декабрь"
 
-#: js/js.js:284
+#: js/js.js:286
 msgid "Settings"
 msgstr "Настройки"
 
-#: js/js.js:764
+#: js/js.js:766
 msgid "seconds ago"
 msgstr "несколько секунд назад"
 
-#: js/js.js:765
+#: js/js.js:767
 msgid "1 minute ago"
 msgstr "1 минуту назад"
 
-#: js/js.js:766
+#: js/js.js:768
 msgid "{minutes} minutes ago"
 msgstr "{minutes} минут назад"
 
-#: js/js.js:767
+#: js/js.js:769
 msgid "1 hour ago"
 msgstr "час назад"
 
-#: js/js.js:768
+#: js/js.js:770
 msgid "{hours} hours ago"
 msgstr "{hours} часов назад"
 
-#: js/js.js:769
+#: js/js.js:771
 msgid "today"
 msgstr "сегодня"
 
-#: js/js.js:770
+#: js/js.js:772
 msgid "yesterday"
 msgstr "вчера"
 
-#: js/js.js:771
+#: js/js.js:773
 msgid "{days} days ago"
 msgstr "{days} дней назад"
 
-#: js/js.js:772
+#: js/js.js:774
 msgid "last month"
 msgstr "в прошлом месяце"
 
-#: js/js.js:773
+#: js/js.js:775
 msgid "{months} months ago"
 msgstr "{months} месяцев назад"
 
-#: js/js.js:774
+#: js/js.js:776
 msgid "months ago"
 msgstr "несколько месяцев назад"
 
-#: js/js.js:775
+#: js/js.js:777
 msgid "last year"
 msgstr "в прошлом году"
 
-#: js/js.js:776
+#: js/js.js:778
 msgid "years ago"
 msgstr "несколько лет назад"
 
@@ -250,8 +250,8 @@ msgid "The object type is not specified."
 msgstr "Тип объекта не указан"
 
 #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
-#: js/share.js:583
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
 msgid "Error"
 msgstr "Ошибка"
 
@@ -271,7 +271,7 @@ msgstr "Открыть доступ"
 msgid "Shared"
 msgstr "Общие"
 
-#: js/share.js:141 js/share.js:611
+#: js/share.js:141 js/share.js:622
 msgid "Error while sharing"
 msgstr "Ошибка при открытии доступа"
 
@@ -367,23 +367,23 @@ msgstr "удалить"
 msgid "share"
 msgstr "открыть доступ"
 
-#: js/share.js:373 js/share.js:558
+#: js/share.js:373 js/share.js:569
 msgid "Password protected"
 msgstr "Защищено паролем"
 
-#: js/share.js:571
+#: js/share.js:582
 msgid "Error unsetting expiration date"
 msgstr "Ошибка при отмене срока доступа"
 
-#: js/share.js:583
+#: js/share.js:594
 msgid "Error setting expiration date"
 msgstr "Ошибка при установке срока доступа"
 
-#: js/share.js:598
+#: js/share.js:609
 msgid "Sending ..."
 msgstr "Отправляется ..."
 
-#: js/share.js:609
+#: js/share.js:620
 msgid "Email sent"
 msgstr "Письмо отправлено"
 
@@ -499,14 +499,14 @@ msgstr "Без защищенного генератора случайных ч
 msgid ""
 "Your data directory and files are probably accessible from the internet "
 "because the .htaccess file does not work."
-msgstr ""
+msgstr "Ваша папка с данными и файлы возможно доступны из интернета потому что файл .htaccess не работает."
 
 #: templates/installation.php:32
 msgid ""
 "For information how to properly configure your server, please see the <a "
 "href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
 "target=\"_blank\">documentation</a>."
-msgstr ""
+msgstr "Для информации как правильно настроить Ваш сервер, пожалйста загляните в <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">документацию</a>."
 
 #: templates/installation.php:36
 msgid "Create an <strong>admin account</strong>"
diff --git a/l10n/ru/files.po b/l10n/ru/files.po
index bbb67c0ef4ace723eb4f520bd7d9d5a9a76d9781..8d0db97a9f64da5d14c07bda9c9f44a9a39ae999 100644
--- a/l10n/ru/files.po
+++ b/l10n/ru/files.po
@@ -20,8 +20,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
 "MIME-Version: 1.0\n"
@@ -33,16 +33,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Невозможно переместить %s - файл с таким именем уже существует"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Невозможно переместить %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Невозможно переименовать файл"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -81,7 +81,7 @@ msgstr "Ошибка записи на диск"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Недостаточно доступного места в хранилище"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -91,51 +91,52 @@ msgstr "Неправильный каталог."
 msgid "Files"
 msgstr "Файлы"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Отменить публикацию"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr "Удалено навсегда"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Удалить"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Переименовать"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Ожидание"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} уже существует"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "заменить"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "предложить название"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "отмена"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "заменено {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "отмена"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "заменено {new_name} на {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "выполняется операция удаления"
 
@@ -175,64 +176,60 @@ msgstr "Не удается загрузить файл размером 0 ба
 msgid "Upload Error"
 msgstr "Ошибка загрузки"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Закрыть"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Ожидание"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "загружается 1 файл"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} файлов загружается"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Загрузка отменена."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Файл в процессе загрузки. Покинув страницу вы прервёте загрузку."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "Ссылка не может быть пустой."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Неправильное имя каталога. Имя 'Shared' зарезервировано."
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Название"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Размер"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Изменён"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 папка"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} папок"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 файл"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} файлов"
 
@@ -289,8 +286,8 @@ msgid "From link"
 msgstr "Из ссылки"
 
 #: templates/index.php:40
-msgid "Trash"
-msgstr "Корзина"
+msgid "Trash bin"
+msgstr ""
 
 #: templates/index.php:46
 msgid "Cancel upload"
@@ -304,6 +301,10 @@ msgstr "Здесь ничего нет. Загрузите что-нибудь!"
 msgid "Download"
 msgstr "Скачать"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Отменить публикацию"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Файл слишком большой"
diff --git a/l10n/ru/files_encryption.po b/l10n/ru/files_encryption.po
index 4f23cda8f69f46cea4cb033bac9084424adb09b8..1244183e43b039381c2fe04567c059ff71a75866 100644
--- a/l10n/ru/files_encryption.po
+++ b/l10n/ru/files_encryption.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 06:40+0000\n"
-"Last-Translator: Langaru <langaru@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: ru\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Пожалуйста переключитесь на Ваш клиент ownCloud и поменяйте пароль шиврования для завершения преобразования."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "переключён на шифрование со стороны клиента"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Изменить пароль шифрования для пароля входа"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Пожалуйста проверьте пароли и попробуйте снова."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Невозможно изменить Ваш пароль файла шифрования для пароля входа"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Шифрование"
diff --git a/l10n/ru/lib.po b/l10n/ru/lib.po
index f834d506e211929469154a3299eb1483899a5519..2511e84c266403ac16cd2d929f68a21677524876 100644
--- a/l10n/ru/lib.po
+++ b/l10n/ru/lib.po
@@ -13,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 07:20+0000\n"
-"Last-Translator: m4rkell <sergey@markevich.ru>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -23,27 +23,27 @@ msgstr ""
 "Language: ru\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: app.php:313
+#: app.php:339
 msgid "Help"
 msgstr "Помощь"
 
-#: app.php:320
+#: app.php:346
 msgid "Personal"
 msgstr "Личное"
 
-#: app.php:325
+#: app.php:351
 msgid "Settings"
 msgstr "Настройки"
 
-#: app.php:330
+#: app.php:356
 msgid "Users"
 msgstr "Пользователи"
 
-#: app.php:337
+#: app.php:363
 msgid "Apps"
 msgstr "Приложения"
 
-#: app.php:339
+#: app.php:365
 msgid "Admin"
 msgstr "Admin"
 
@@ -91,6 +91,17 @@ msgstr "Текст"
 msgid "Images"
 msgstr "Изображения"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "менее минуты"
diff --git a/l10n/ru/settings.po b/l10n/ru/settings.po
index b0831ab57ab990c09cfacc061ba08db7ca87efd3..1bb91218cb03312470cc355fd6e14e4419ad8b45 100644
--- a/l10n/ru/settings.po
+++ b/l10n/ru/settings.po
@@ -21,9 +21,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 07:10+0000\n"
-"Last-Translator: Langaru <langaru@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Russian (http://www.transifex.com/projects/p/owncloud/language/ru/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -35,12 +35,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Загрузка из App Store запрещена"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Ошибка авторизации"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr "Невозможно изменить отображаемое имя"
 
@@ -94,7 +94,7 @@ msgstr "Невозможно добавить пользователя в гру
 msgid "Unable to remove user from group %s"
 msgstr "Невозможно удалить пользователя из группы %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "Невозможно обновить приложение"
 
@@ -227,10 +227,6 @@ msgstr "Текущий пароль"
 msgid "New password"
 msgstr "Новый пароль"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "показать"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Сменить пароль"
diff --git a/l10n/ru_RU/core.po b/l10n/ru_RU/core.po
index a32af7892a240bb26620e1842676fdde40934a65..4e067548587b625ac1194c3aefed2184e0cab921 100644
--- a/l10n/ru_RU/core.po
+++ b/l10n/ru_RU/core.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 18:40+0000\n"
+"Last-Translator: Langaru <langaru@gmail.com>\n"
 "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -159,59 +159,59 @@ msgstr "Ноябрь"
 msgid "December"
 msgstr "Декабрь"
 
-#: js/js.js:284
+#: js/js.js:286
 msgid "Settings"
 msgstr "Настройки"
 
-#: js/js.js:764
+#: js/js.js:766
 msgid "seconds ago"
 msgstr "секунд назад"
 
-#: js/js.js:765
+#: js/js.js:767
 msgid "1 minute ago"
 msgstr " 1 минуту назад"
 
-#: js/js.js:766
+#: js/js.js:768
 msgid "{minutes} minutes ago"
 msgstr "{минуты} минут назад"
 
-#: js/js.js:767
+#: js/js.js:769
 msgid "1 hour ago"
 msgstr "1 час назад"
 
-#: js/js.js:768
+#: js/js.js:770
 msgid "{hours} hours ago"
 msgstr "{часы} часов назад"
 
-#: js/js.js:769
+#: js/js.js:771
 msgid "today"
 msgstr "сегодня"
 
-#: js/js.js:770
+#: js/js.js:772
 msgid "yesterday"
 msgstr "вчера"
 
-#: js/js.js:771
+#: js/js.js:773
 msgid "{days} days ago"
 msgstr "{дни} дней назад"
 
-#: js/js.js:772
+#: js/js.js:774
 msgid "last month"
 msgstr "в прошлом месяце"
 
-#: js/js.js:773
+#: js/js.js:775
 msgid "{months} months ago"
 msgstr "{месяцы} месяцев назад"
 
-#: js/js.js:774
+#: js/js.js:776
 msgid "months ago"
 msgstr "месяц назад"
 
-#: js/js.js:775
+#: js/js.js:777
 msgid "last year"
 msgstr "в прошлом году"
 
-#: js/js.js:776
+#: js/js.js:778
 msgid "years ago"
 msgstr "лет назад"
 
@@ -241,8 +241,8 @@ msgid "The object type is not specified."
 msgstr "Тип объекта не указан."
 
 #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
-#: js/share.js:583
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
 msgid "Error"
 msgstr "Ошибка"
 
@@ -262,7 +262,7 @@ msgstr "Сделать общим"
 msgid "Shared"
 msgstr "Опубликовано"
 
-#: js/share.js:141 js/share.js:611
+#: js/share.js:141 js/share.js:622
 msgid "Error while sharing"
 msgstr "Ошибка создания общего доступа"
 
@@ -358,23 +358,23 @@ msgstr "удалить"
 msgid "share"
 msgstr "сделать общим"
 
-#: js/share.js:373 js/share.js:558
+#: js/share.js:373 js/share.js:569
 msgid "Password protected"
 msgstr "Пароль защищен"
 
-#: js/share.js:571
+#: js/share.js:582
 msgid "Error unsetting expiration date"
 msgstr "Ошибка при отключении даты истечения срока действия"
 
-#: js/share.js:583
+#: js/share.js:594
 msgid "Error setting expiration date"
 msgstr "Ошибка при установке даты истечения срока действия"
 
-#: js/share.js:598
+#: js/share.js:609
 msgid "Sending ..."
 msgstr "Отправка ..."
 
-#: js/share.js:609
+#: js/share.js:620
 msgid "Email sent"
 msgstr "Письмо отправлено"
 
@@ -490,14 +490,14 @@ msgstr "Без защищенного генератора случайных ч
 msgid ""
 "Your data directory and files are probably accessible from the internet "
 "because the .htaccess file does not work."
-msgstr ""
+msgstr "Ваша папка с данными и файлы возможно доступны из интернета потому что файл .htaccess не работает."
 
 #: templates/installation.php:32
 msgid ""
 "For information how to properly configure your server, please see the <a "
 "href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
 "target=\"_blank\">documentation</a>."
-msgstr ""
+msgstr "Для информации как правильно настроить Ваш сервер, пожалйста загляните в <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">документацию</a>."
 
 #: templates/installation.php:36
 msgid "Create an <strong>admin account</strong>"
diff --git a/l10n/ru_RU/files.po b/l10n/ru_RU/files.po
index 574b383f37a0f45089e0b4fa123948d0eb0493ce..209a7d5ba5c837fd241955ce3f2e001af2b12c1f 100644
--- a/l10n/ru_RU/files.po
+++ b/l10n/ru_RU/files.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
 "MIME-Version: 1.0\n"
@@ -82,51 +82,52 @@ msgstr "Неверный каталог."
 msgid "Files"
 msgstr "Файлы"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Скрыть"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr "Удалить навсегда"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Удалить"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Переименовать"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Ожидающий решения"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{новое_имя} уже существует"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "отмена"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "подобрать название"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "отменить"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "заменено {новое_имя}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "отменить действие"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "заменено {новое_имя} с {старое_имя}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "выполняется процесс удаления"
 
@@ -166,64 +167,60 @@ msgstr "Невозможно загрузить файл,\n так как он 
 msgid "Upload Error"
 msgstr "Ошибка загрузки"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Закрыть"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Ожидающий решения"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "загрузка 1 файла"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{количество} загружено файлов"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Загрузка отменена"
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Процесс загрузки файла. Если покинуть страницу сейчас, загрузка будет отменена."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL не должен быть пустым."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Неверное имя папки. Использование наименования 'Опубликовано' зарезервировано Owncloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Имя"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Размер"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Изменен"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 папка"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{количество} папок"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 файл"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{количество} файлов"
 
@@ -280,8 +277,8 @@ msgid "From link"
 msgstr "По ссылке"
 
 #: templates/index.php:40
-msgid "Trash"
-msgstr "Корзина"
+msgid "Trash bin"
+msgstr ""
 
 #: templates/index.php:46
 msgid "Cancel upload"
@@ -295,6 +292,10 @@ msgstr "Здесь ничего нет. Загрузите что-нибудь!"
 msgid "Download"
 msgstr "Загрузить"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Скрыть"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Загрузка слишком велика"
diff --git a/l10n/ru_RU/files_encryption.po b/l10n/ru_RU/files_encryption.po
index 41f89c1b290c54e375223813d752a9ce7e646670..cd0001f8dac4f5030281f9c517f5a8c9f018194a 100644
--- a/l10n/ru_RU/files_encryption.po
+++ b/l10n/ru_RU/files_encryption.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
 "MIME-Version: 1.0\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: ru_RU\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Пожалуйста, переключитесь на ownCloud-клиент и измените Ваш пароль шифрования для завершения конвертации."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "переключено на шифрование на клиентской стороне"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Пожалуйста, проверьте Ваш пароль и попробуйте снова"
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Шифрование"
diff --git a/l10n/ru_RU/files_trashbin.po b/l10n/ru_RU/files_trashbin.po
index d738f9f42154bb6609ac8f57393b1dbafe4d23c8..1213f4e5eb120f17ff9941b7cdd88be0264c8903 100644
--- a/l10n/ru_RU/files_trashbin.po
+++ b/l10n/ru_RU/files_trashbin.po
@@ -3,13 +3,14 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# Дмитрий <langaru@gmail.com>, 2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 17:51+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 18:20+0000\n"
+"Last-Translator: Langaru <langaru@gmail.com>\n"
 "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,20 +21,20 @@ msgstr ""
 #: ajax/delete.php:22
 #, php-format
 msgid "Couldn't delete %s permanently"
-msgstr ""
+msgstr "%s не может быть удалён навсегда"
 
 #: ajax/undelete.php:41
 #, php-format
 msgid "Couldn't restore %s"
-msgstr ""
+msgstr "%s не может быть восстановлен"
 
 #: js/trash.js:7 js/trash.js:94
 msgid "perform restore operation"
-msgstr ""
+msgstr "выполнить операцию восстановления"
 
 #: js/trash.js:33
 msgid "delete file permanently"
-msgstr ""
+msgstr "удалить файл навсегда"
 
 #: js/trash.js:125 templates/index.php:17
 msgid "Name"
@@ -41,7 +42,7 @@ msgstr "Имя"
 
 #: js/trash.js:126 templates/index.php:27
 msgid "Deleted"
-msgstr ""
+msgstr "Удалён"
 
 #: js/trash.js:135
 msgid "1 folder"
@@ -61,7 +62,7 @@ msgstr "{количество} файлов"
 
 #: templates/index.php:9
 msgid "Nothing in here. Your trash bin is empty!"
-msgstr ""
+msgstr "Здесь ничего нет. Ваша корзина пуста!"
 
 #: templates/index.php:20 templates/index.php:22
 msgid "Restore"
diff --git a/l10n/ru_RU/lib.po b/l10n/ru_RU/lib.po
index 34e58324fbddb64f551404e201999e8f59452688..7ea63fa247b9d6e7a77b3c275fba08169d697ffb 100644
--- a/l10n/ru_RU/lib.po
+++ b/l10n/ru_RU/lib.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 10:41+0000\n"
-"Last-Translator: AnnaSch <cdewqazxsqwe@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Language: ru_RU\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Помощь"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Персональный"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Настройки"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Пользователи"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Приложения"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Админ"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Загрузка ZIP выключена."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Файлы должны быть загружены один за другим."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Обратно к файлам"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Выбранные файлы слишком велики для генерации zip-архива."
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "не может быть определено"
 
@@ -87,6 +87,17 @@ msgstr "Текст"
 msgid "Images"
 msgstr "Изображения"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "секунд назад"
diff --git a/l10n/ru_RU/settings.po b/l10n/ru_RU/settings.po
index 184b4e73c63cb9d715f6b9e4dec2797d3760ebd3..0c0232363b802ffda02f36429871ed7fec87785b 100644
--- a/l10n/ru_RU/settings.po
+++ b/l10n/ru_RU/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Russian (Russia) (http://www.transifex.com/projects/p/owncloud/language/ru_RU/)\n"
 "MIME-Version: 1.0\n"
@@ -23,12 +23,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Невозможно загрузить список из App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Ошибка авторизации"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -82,7 +82,7 @@ msgstr "Невозможно добавить пользователя в гру
 msgid "Unable to remove user from group %s"
 msgstr "Невозможно удалить пользователя из группы %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -215,10 +215,6 @@ msgstr "Текущий пароль"
 msgid "New password"
 msgstr "Новый пароль"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "показать"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Изменить пароль"
diff --git a/l10n/si_LK/files.po b/l10n/si_LK/files.po
index e3e769381eb3bfae9b6595c6ce02a2669ba1c9af..2277e5ab288830771475e725380affae834ebe75 100644
--- a/l10n/si_LK/files.po
+++ b/l10n/si_LK/files.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -80,51 +80,52 @@ msgstr ""
 msgid "Files"
 msgstr "ගොනු"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "නොබෙදු"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "මකන්න"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "නැවත නම් කරන්න"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "ප්‍රතිස්ථාපනය කරන්න"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "නමක් යෝජනා කරන්න"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "අත් හරින්න"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "නිෂ්ප්‍රභ කරන්න"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -164,64 +165,60 @@ msgstr ""
 msgid "Upload Error"
 msgstr "උඩුගත කිරීමේ දෝශයක්"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "වසන්න"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 ගොනුවක් උඩගත කෙරේ"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "උඩුගත කිරීම අත් හරින්න ලදී"
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "උඩුගතකිරීමක් සිදුවේ. පිටුව හැර යාමෙන් එය නැවතෙනු ඇත"
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "යොමුව හිස් විය නොහැක"
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "නම"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "ප්‍රමාණය"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "වෙනස් කළ"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 ෆොල්ඩරයක්"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 ගොනුවක්"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -278,7 +275,7 @@ msgid "From link"
 msgstr "යොමුවෙන්"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -293,6 +290,10 @@ msgstr "මෙහි කිසිවක් නොමැත. යමක් උඩ
 msgid "Download"
 msgstr "බාගත කිරීම"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "නොබෙදු"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "උඩුගත කිරීම විශාල වැඩිය"
diff --git a/l10n/si_LK/files_encryption.po b/l10n/si_LK/files_encryption.po
index 14724b9e31c1e45c66aef46d98526ef910c05b56..7af077ac2a7fdaca427df6170f8bc67316e80395 100644
--- a/l10n/si_LK/files_encryption.po
+++ b/l10n/si_LK/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: si_LK\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "ගුප්ත කේතනය"
diff --git a/l10n/si_LK/lib.po b/l10n/si_LK/lib.po
index 9fcdc0a05a40595e7bb637a4639d399851c81303..2590931e9385601600f597106daacc26436f88ba 100644
--- a/l10n/si_LK/lib.po
+++ b/l10n/si_LK/lib.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Language: si_LK\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "උදව්"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "පෞද්ගලික"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "සිටුවම්"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "පරිශීලකයන්"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "යෙදුම්"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "පරිපාලක"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIP භාගත කිරීම් අක්‍රියයි"
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "ගොනු එකින් එක භාගත යුතුයි"
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "ගොනු වෙතට නැවත යන්න"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "තෝරාගත් ගොනු ZIP ගොනුවක් තැනීමට විශාල වැඩිය."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -87,6 +87,17 @@ msgstr "පෙළ"
 msgid "Images"
 msgstr "අනු රූ"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "තත්පරයන්ට පෙර"
diff --git a/l10n/si_LK/settings.po b/l10n/si_LK/settings.po
index 223283dfa924c636b0d61e2e645708830e03dd13..12dc3ef730312ec482bda0d2e0a74f427f008293 100644
--- a/l10n/si_LK/settings.po
+++ b/l10n/si_LK/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Sinhala (Sri Lanka) (http://www.transifex.com/projects/p/owncloud/language/si_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -24,12 +24,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr ""
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "සත්‍යාපන දෝෂයක්"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -83,7 +83,7 @@ msgstr "පරිශීලකයා %s කණ්ඩායමට එකතු ක
 msgid "Unable to remove user from group %s"
 msgstr "පරිශීලකයා %s කණ්ඩායමින් ඉවත් කළ නොහැක"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -216,10 +216,6 @@ msgstr "වත්මන් මුරපදය"
 msgid "New password"
 msgstr "නව මුරපදය"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "ප්‍රදර්ශනය කිරීම"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "මුරපදය වෙනස් කිරීම"
diff --git a/l10n/sk/files.po b/l10n/sk/files.po
index e1beb2b3ae564feda5de09f882777baf5755ad0a..8f6e6f689eeb695dd511cc8548ab82c591aa1a35 100644
--- a/l10n/sk/files.po
+++ b/l10n/sk/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
 "MIME-Version: 1.0\n"
@@ -78,51 +78,52 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr ""
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr ""
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -162,64 +163,60 @@ msgstr ""
 msgid "Upload Error"
 msgstr ""
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr ""
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr ""
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr ""
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr ""
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -276,7 +273,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -291,6 +288,10 @@ msgstr ""
 msgid "Download"
 msgstr ""
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr ""
diff --git a/l10n/sk/files_encryption.po b/l10n/sk/files_encryption.po
index 1873413f16c9af1f8be24b2d80864085b92ab810..eb687048cabbdc79857a0ba08158f5a8a2ef1f25 100644
--- a/l10n/sk/files_encryption.po
+++ b/l10n/sk/files_encryption.po
@@ -7,9 +7,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2012-08-12 22:33+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Language: sk\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr ""
diff --git a/l10n/sk/lib.po b/l10n/sk/lib.po
index 0d0976b9704ef8be2a693a46eaf5fde0328fe480..41bbad659559d3e1351e89ddc75d6c1d09d35698 100644
--- a/l10n/sk/lib.po
+++ b/l10n/sk/lib.po
@@ -7,9 +7,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2012-07-27 22:23+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -17,27 +17,27 @@ msgstr ""
 "Language: sk\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
-#: app.php:313
+#: app.php:339
 msgid "Help"
 msgstr ""
 
-#: app.php:320
+#: app.php:346
 msgid "Personal"
 msgstr ""
 
-#: app.php:325
+#: app.php:351
 msgid "Settings"
 msgstr ""
 
-#: app.php:330
+#: app.php:356
 msgid "Users"
 msgstr ""
 
-#: app.php:337
+#: app.php:363
 msgid "Apps"
 msgstr ""
 
-#: app.php:339
+#: app.php:365
 msgid "Admin"
 msgstr ""
 
@@ -85,6 +85,17 @@ msgstr ""
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr ""
diff --git a/l10n/sk/settings.po b/l10n/sk/settings.po
index 8ae555c067af1d2116cad873522e97555b1e1bb1..b75c78b6f43aa4a49d8474fcdaff439b70ecaf1a 100644
--- a/l10n/sk/settings.po
+++ b/l10n/sk/settings.po
@@ -7,9 +7,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2011-07-25 16:05+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (http://www.transifex.com/projects/p/owncloud/language/sk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -21,12 +21,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr ""
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr ""
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -80,7 +80,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -213,10 +213,6 @@ msgstr ""
 msgid "New password"
 msgstr ""
 
-#: templates/personal.php:28
-msgid "show"
-msgstr ""
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr ""
diff --git a/l10n/sk_SK/files.po b/l10n/sk_SK/files.po
index 618ce24cad4facba144141d69864656f78eedaec..3c052399e2e025ebbdfb8f61c39e20e508d68748 100644
--- a/l10n/sk_SK/files.po
+++ b/l10n/sk_SK/files.po
@@ -13,8 +13,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
 "MIME-Version: 1.0\n"
@@ -26,16 +26,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Nie je možné presunúť %s - súbor s týmto menom už existuje"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Nie je možné presunúť %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Nemožno premenovať súbor"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -74,7 +74,7 @@ msgstr "Zápis na disk sa nepodaril"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Nedostatok dostupného úložného priestoru"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -84,51 +84,52 @@ msgstr "Neplatný adresár"
 msgid "Files"
 msgstr "Súbory"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Nezdielať"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr "Zmazať  trvalo"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Odstrániť"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Premenovať"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Čaká sa"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} už existuje"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "nahradiť"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "pomôcť s menom"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "zrušiť"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "prepísaný {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "vrátiť"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "prepísaný {new_name} súborom {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "vykonať zmazanie"
 
@@ -168,64 +169,60 @@ msgstr "Nemôžem nahrať súbor lebo je to priečinok alebo má 0 bajtov."
 msgid "Upload Error"
 msgstr "Chyba odosielania"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Zavrieť"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Čaká sa"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 súbor sa posiela "
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} súborov odosielaných"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Odosielanie zrušené"
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Opustenie stránky zruší práve prebiehajúce odosielanie súboru."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL nemôže byť prázdne"
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Neplatné meno adresára. Používanie mena 'Shared' je vyhradené len pre Owncloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Meno"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Veľkosť"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Upravené"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 priečinok"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} priečinkov"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 súbor"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} súborov"
 
@@ -282,8 +279,8 @@ msgid "From link"
 msgstr "Z odkazu"
 
 #: templates/index.php:40
-msgid "Trash"
-msgstr "Kôš"
+msgid "Trash bin"
+msgstr ""
 
 #: templates/index.php:46
 msgid "Cancel upload"
@@ -297,6 +294,10 @@ msgstr "Žiadny súbor. Nahrajte niečo!"
 msgid "Download"
 msgstr "Stiahnuť"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Nezdielať"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Odosielaný súbor je príliš veľký"
diff --git a/l10n/sk_SK/files_encryption.po b/l10n/sk_SK/files_encryption.po
index 1e9b778f2670e7903f2492c068010b54c97c21e2..a03aa2a7259bf9d657e897548aa582855e5920b2 100644
--- a/l10n/sk_SK/files_encryption.po
+++ b/l10n/sk_SK/files_encryption.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 22:50+0000\n"
-"Last-Translator: georg007 <georg007@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,28 +20,6 @@ msgstr ""
 "Language: sk_SK\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Prosím, prejdite do svojho klienta ownCloud a zmente šifrovacie heslo na dokončenie konverzie."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "prepnuté na šifrovanie prostredníctvom klienta"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Zmeniť šifrovacie heslo na prihlasovacie"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Skontrolujte si heslo a skúste to znovu."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Nie je možné zmeniť šifrovacie heslo na prihlasovacie"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Šifrovanie"
diff --git a/l10n/sk_SK/lib.po b/l10n/sk_SK/lib.po
index 693d9535e45eec212ed099c2bd70231c482a741d..37ba5198f612397421c62e8422d9b8cb680af7dd 100644
--- a/l10n/sk_SK/lib.po
+++ b/l10n/sk_SK/lib.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-30 00:23+0100\n"
-"PO-Revision-Date: 2013-01-29 16:07+0000\n"
-"Last-Translator: mhh <marian.hvolka@stuba.sk>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -21,47 +21,47 @@ msgstr ""
 "Language: sk_SK\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Pomoc"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Osobné"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Nastavenia"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Užívatelia"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Aplikácie"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Správca"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Sťahovanie súborov ZIP je vypnuté."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Súbory musia byť nahrávané jeden za druhým."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Späť na súbory"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Zvolené súbory sú príliž veľké na vygenerovanie zip súboru."
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "nedá sa zistiť"
 
@@ -89,6 +89,17 @@ msgstr "Text"
 msgid "Images"
 msgstr "Obrázky"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "pred sekundami"
diff --git a/l10n/sk_SK/settings.po b/l10n/sk_SK/settings.po
index 3ba63102905c365b25ca407cc37009081b008d28..9862a581ccc51031dd8f25c60e9e1238dc7d6408 100644
--- a/l10n/sk_SK/settings.po
+++ b/l10n/sk_SK/settings.po
@@ -13,8 +13,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovak (Slovakia) (http://www.transifex.com/projects/p/owncloud/language/sk_SK/)\n"
 "MIME-Version: 1.0\n"
@@ -27,12 +27,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Nie je možné nahrať zoznam z App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Chyba pri autentifikácii"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -86,7 +86,7 @@ msgstr "Nie je možné pridať užívateľa do skupiny %s"
 msgid "Unable to remove user from group %s"
 msgstr "Nie je možné odstrániť používateľa zo skupiny %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "Nemožno aktualizovať aplikáciu."
 
@@ -219,10 +219,6 @@ msgstr "Aktuálne heslo"
 msgid "New password"
 msgstr "Nové heslo"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "zobraziť"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Zmeniť heslo"
diff --git a/l10n/sl/files.po b/l10n/sl/files.po
index 89ab93eb4258a1a72aa0be4b31dfe223dff75c99..3482d91388aca4c69d0060882d0a324de341ed89 100644
--- a/l10n/sl/files.po
+++ b/l10n/sl/files.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
 "MIME-Version: 1.0\n"
@@ -82,51 +82,52 @@ msgstr ""
 msgid "Files"
 msgstr "Datoteke"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Odstrani iz souporabe"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Izbriši"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Preimenuj"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "V čakanju ..."
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} že obstaja"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "zamenjaj"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "predlagaj ime"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "prekliči"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "zamenjano je ime {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "razveljavi"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "zamenjano ime {new_name} z imenom {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -166,64 +167,60 @@ msgstr "Pošiljanje ni mogoče, saj gre za mapo, ali pa je datoteka velikosti 0
 msgid "Upload Error"
 msgstr "Napaka med nalaganjem"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Zapri"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "V čakanju ..."
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "Pošiljanje 1 datoteke"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "nalagam {count} datotek"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Pošiljanje je preklicano."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "Naslov URL ne sme biti prazen."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Ime"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Velikost"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Spremenjeno"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 mapa"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} map"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 datoteka"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} datotek"
 
@@ -280,7 +277,7 @@ msgid "From link"
 msgstr "Iz povezave"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -295,6 +292,10 @@ msgstr "Tukaj ni ničesar. Naložite kaj!"
 msgid "Download"
 msgstr "Prejmi"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Odstrani iz souporabe"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Nalaganje ni mogoče, ker je preveliko"
diff --git a/l10n/sl/files_encryption.po b/l10n/sl/files_encryption.po
index da59ca9a4767b0aeb1795658c2b2478b13157ac3..86d2a0d7d36ea951441dff37aa414ff1fb506623 100644
--- a/l10n/sl/files_encryption.po
+++ b/l10n/sl/files_encryption.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
 "MIME-Version: 1.0\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: sl\n"
 "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Šifriranje"
diff --git a/l10n/sl/lib.po b/l10n/sl/lib.po
index 4af090e968d26dc6e957820ba680deb3ed3cca4e..e0c60dd5cd20ad26835e2300f5ec02718b82d540 100644
--- a/l10n/sl/lib.po
+++ b/l10n/sl/lib.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
 "MIME-Version: 1.0\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Language: sl\n"
 "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Pomoč"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Osebno"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Nastavitve"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Uporabniki"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Programi"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Skrbništvo"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Prejem datotek ZIP je onemogočen."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Datoteke je mogoče prejeti le posamič."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Nazaj na datoteke"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Izbrane datoteke so prevelike za ustvarjanje datoteke arhiva zip."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -87,6 +87,17 @@ msgstr "Besedilo"
 msgid "Images"
 msgstr "Slike"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "pred nekaj sekundami"
diff --git a/l10n/sl/settings.po b/l10n/sl/settings.po
index 9046223ab32844b3d6b97c8be58284153d91b222..d806bf7c5a1bfa89a96c6eab7bf6539cf3014851 100644
--- a/l10n/sl/settings.po
+++ b/l10n/sl/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Slovenian (http://www.transifex.com/projects/p/owncloud/language/sl/)\n"
 "MIME-Version: 1.0\n"
@@ -25,12 +25,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Ni mogoče naložiti seznama iz App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Napaka overitve"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -84,7 +84,7 @@ msgstr "Uporabnika ni mogoče dodati k skupini %s"
 msgid "Unable to remove user from group %s"
 msgstr "Uporabnika ni mogoče odstraniti iz skupine %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -217,10 +217,6 @@ msgstr "Trenutno geslo"
 msgid "New password"
 msgstr "Novo geslo"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "pokaži"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Spremeni geslo"
diff --git a/l10n/sr/files.po b/l10n/sr/files.po
index e3ee1fecc9417c72dfbb03d756d3248ce24d4788..23342d8cef9322299bc8cd94349f1befe7676654 100644
--- a/l10n/sr/files.po
+++ b/l10n/sr/files.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
 "MIME-Version: 1.0\n"
@@ -81,51 +81,52 @@ msgstr ""
 msgid "Files"
 msgstr "Датотеке"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Укини дељење"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Обриши"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Преименуј"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "На чекању"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} већ постоји"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "замени"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "предложи назив"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "откажи"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "замењено {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "опозови"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "замењено {new_name} са {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -165,64 +166,60 @@ msgstr "Не могу да отпремим датотеку као фасцик
 msgid "Upload Error"
 msgstr "Грешка при отпремању"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Затвори"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "На чекању"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "Отпремам 1 датотеку"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "Отпремам {count} датотеке/а"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Отпремање је прекинуто."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Отпремање датотеке је у току. Ако сада напустите страницу, прекинућете отпремање."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Назив"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Величина"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Измењено"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 фасцикла"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} фасцикле/и"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 датотека"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} датотеке/а"
 
@@ -279,7 +276,7 @@ msgid "From link"
 msgstr "Са везе"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -294,6 +291,10 @@ msgstr "Овде нема ничег. Отпремите нешто!"
 msgid "Download"
 msgstr "Преузми"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Укини дељење"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Датотека је превелика"
diff --git a/l10n/sr/files_encryption.po b/l10n/sr/files_encryption.po
index 4578d7473276ee878b8be71ed59cd6a7b1b5a32c..4f38bb711f920edeb8ec52ab355e7f830ebcc6a3 100644
--- a/l10n/sr/files_encryption.po
+++ b/l10n/sr/files_encryption.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
 "MIME-Version: 1.0\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: sr\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Шифровање"
diff --git a/l10n/sr/lib.po b/l10n/sr/lib.po
index 5f6cad797ab1805d6d54b0aa343f00e871becd57..1520b0230c2d43178f26c6b1bfe88c8eab4c820f 100644
--- a/l10n/sr/lib.po
+++ b/l10n/sr/lib.po
@@ -10,9 +10,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 17:30+0000\n"
-"Last-Translator: Rancher <theranchcowboy@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,27 +20,27 @@ msgstr ""
 "Language: sr\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: app.php:313
+#: app.php:339
 msgid "Help"
 msgstr "Помоћ"
 
-#: app.php:320
+#: app.php:346
 msgid "Personal"
 msgstr "Лично"
 
-#: app.php:325
+#: app.php:351
 msgid "Settings"
 msgstr "Поставке"
 
-#: app.php:330
+#: app.php:356
 msgid "Users"
 msgstr "Корисници"
 
-#: app.php:337
+#: app.php:363
 msgid "Apps"
 msgstr "Апликације"
 
-#: app.php:339
+#: app.php:365
 msgid "Admin"
 msgstr "Администратор"
 
@@ -88,6 +88,17 @@ msgstr "Текст"
 msgid "Images"
 msgstr "Слике"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "пре неколико секунди"
diff --git a/l10n/sr/settings.po b/l10n/sr/settings.po
index 57f48decd5797afb26e177e6b12fe948bd506e26..ed8fbed9d04bcf464d7ba4f24a133bc8a49ffe4e 100644
--- a/l10n/sr/settings.po
+++ b/l10n/sr/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (http://www.transifex.com/projects/p/owncloud/language/sr/)\n"
 "MIME-Version: 1.0\n"
@@ -23,12 +23,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Грешка приликом учитавања списка из Складишта Програма"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Грешка при аутентификацији"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -82,7 +82,7 @@ msgstr "Не могу да додам корисника у групу %s"
 msgid "Unable to remove user from group %s"
 msgstr "Не могу да уклоним корисника из групе %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -215,10 +215,6 @@ msgstr "Тренутна лозинка"
 msgid "New password"
 msgstr "Нова лозинка"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "прикажи"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Измени лозинку"
diff --git a/l10n/sr@latin/files.po b/l10n/sr@latin/files.po
index d0e6867e65ef897c7ecf49dfd7955e24d6b0b915..b1035f141dce4bf21b23fc64b4519f834449420d 100644
--- a/l10n/sr@latin/files.po
+++ b/l10n/sr@latin/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
 "MIME-Version: 1.0\n"
@@ -79,51 +79,52 @@ msgstr ""
 msgid "Files"
 msgstr "Fajlovi"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr ""
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Obriši"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -163,64 +164,60 @@ msgstr ""
 msgid "Upload Error"
 msgstr ""
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Zatvori"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Ime"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Veličina"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Zadnja izmena"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -277,7 +274,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -292,6 +289,10 @@ msgstr "Ovde nema ničeg. Pošaljite nešto!"
 msgid "Download"
 msgstr "Preuzmi"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Pošiljka je prevelika"
diff --git a/l10n/sr@latin/files_encryption.po b/l10n/sr@latin/files_encryption.po
index 55b2d059ad05fa355a5518aef488504cdafde3e5..a34c90f6c0de4dcc6d561c436af8fbebdf0cb94e 100644
--- a/l10n/sr@latin/files_encryption.po
+++ b/l10n/sr@latin/files_encryption.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
 "MIME-Version: 1.0\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Language: sr@latin\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr ""
diff --git a/l10n/sr@latin/lib.po b/l10n/sr@latin/lib.po
index 264724c09118aac7e113bc74708a5fc69cad28ff..8d21e154552fdfd6395d84b07aa1ed829ce7c75f 100644
--- a/l10n/sr@latin/lib.po
+++ b/l10n/sr@latin/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Language: sr@latin\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Pomoć"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Lično"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Podešavanja"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Korisnici"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr ""
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr ""
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -85,6 +85,17 @@ msgstr "Tekst"
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr ""
diff --git a/l10n/sr@latin/settings.po b/l10n/sr@latin/settings.po
index f5f05886b64ecd368594c68c308f0b20aa75469d..7be26c74f1f9945028cb1675e8165cb314304283 100644
--- a/l10n/sr@latin/settings.po
+++ b/l10n/sr@latin/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Serbian (Latin) (http://www.transifex.com/projects/p/owncloud/language/sr@latin/)\n"
 "MIME-Version: 1.0\n"
@@ -22,12 +22,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr ""
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Greška pri autentifikaciji"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -81,7 +81,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -214,10 +214,6 @@ msgstr "Trenutna lozinka"
 msgid "New password"
 msgstr "Nova lozinka"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "prikaži"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Izmeni lozinku"
diff --git a/l10n/sv/files.po b/l10n/sv/files.po
index 1ca2ac1ef0e7d73e39fd5448169ed8a8d2dbaa59..edb0d69b8078ee125ecbdd05cd50057404f25977 100644
--- a/l10n/sv/files.po
+++ b/l10n/sv/files.po
@@ -14,8 +14,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
 "MIME-Version: 1.0\n"
@@ -27,16 +27,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Kunde inte flytta %s - Det finns redan en fil med detta namn"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Kan inte flytta %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Kan inte byta namn på filen"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -75,7 +75,7 @@ msgstr "Misslyckades spara till disk"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Inte tillräckligt med lagringsutrymme tillgängligt"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -85,51 +85,52 @@ msgstr "Felaktig mapp."
 msgid "Files"
 msgstr "Filer"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Sluta dela"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Radera"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Byt namn"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Väntar"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} finns redan"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "ersätt"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "föreslå namn"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "avbryt"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "ersatt {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "ångra"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "ersatt {new_name} med {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "utför raderingen"
 
@@ -169,64 +170,60 @@ msgstr "Kunde inte ladda upp dina filer eftersom det antingen är en mapp eller
 msgid "Upload Error"
 msgstr "Uppladdningsfel"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Stäng"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Väntar"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 filuppladdning"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} filer laddas upp"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Uppladdning avbruten."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL kan inte vara tom."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Ogiltigt mappnamn. Användande av 'Shared' är reserverat av ownCloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Namn"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Storlek"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Ändrad"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 mapp"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} mappar"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 fil"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} filer"
 
@@ -283,8 +280,8 @@ msgid "From link"
 msgstr "Från länk"
 
 #: templates/index.php:40
-msgid "Trash"
-msgstr "Papperskorgen"
+msgid "Trash bin"
+msgstr ""
 
 #: templates/index.php:46
 msgid "Cancel upload"
@@ -298,6 +295,10 @@ msgstr "Ingenting här. Ladda upp något!"
 msgid "Download"
 msgstr "Ladda ner"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Sluta dela"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "För stor uppladdning"
diff --git a/l10n/sv/files_encryption.po b/l10n/sv/files_encryption.po
index 3c52fd72781fca6474915c3eb5019336e160d553..b401db609de32d1be23dd421e1b4f90b92d7ebbb 100644
--- a/l10n/sv/files_encryption.po
+++ b/l10n/sv/files_encryption.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 02:41+0000\n"
-"Last-Translator: Lokal_Profil <lokal_profil@hotmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: sv\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "Vänligen växla till ownCloud klienten och ändra ditt krypteringslösenord för att slutföra omvandlingen."
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "Bytte till kryptering på klientsidan"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "Ändra krypteringslösenord till loginlösenord"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "Kontrollera dina lösenord och försök igen."
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "Kunde inte ändra ditt filkrypteringslösenord till ditt loginlösenord"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Kryptering"
diff --git a/l10n/sv/lib.po b/l10n/sv/lib.po
index 3fea987f13fd0dade9282861223d02bcbd7855b5..9d898da3010ebb271e183cb6d5e7560e713ac112 100644
--- a/l10n/sv/lib.po
+++ b/l10n/sv/lib.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-23 00:05+0100\n"
-"PO-Revision-Date: 2013-01-21 14:32+0000\n"
-"Last-Translator: Magnus Höglund <magnus@linux.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Language: sv\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Hjälp"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Personligt"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Inställningar"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Användare"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Program"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Admin"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Nerladdning av ZIP är avstängd."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Filer laddas ner en åt gången."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Tillbaka till Filer"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Valda filer är för stora för att skapa zip-fil."
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "kunde inte bestämmas"
 
@@ -87,6 +87,17 @@ msgstr "Text"
 msgid "Images"
 msgstr "Bilder"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "sekunder sedan"
diff --git a/l10n/sv/settings.po b/l10n/sv/settings.po
index c51345d4304293c9dff337bfb43be0c4a347f284..46e0324111119ffc415069f1779ec3e05abe5440 100644
--- a/l10n/sv/settings.po
+++ b/l10n/sv/settings.po
@@ -16,8 +16,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swedish (http://www.transifex.com/projects/p/owncloud/language/sv/)\n"
 "MIME-Version: 1.0\n"
@@ -30,12 +30,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Kan inte ladda listan från App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Autentiseringsfel"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -89,7 +89,7 @@ msgstr "Kan inte lägga till användare i gruppen %s"
 msgid "Unable to remove user from group %s"
 msgstr "Kan inte radera användare från gruppen %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "Kunde inte uppdatera appen"
 
@@ -222,10 +222,6 @@ msgstr "Nuvarande lösenord"
 msgid "New password"
 msgstr "Nytt lösenord"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "visa"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Ändra lösenord"
diff --git a/l10n/sw_KE/files.po b/l10n/sw_KE/files.po
index ed72da9980bc70ecb7ee4ba846c18494d38cabc9..742adbe87b48cd07333a9c928977f192ae52af0f 100644
--- a/l10n/sw_KE/files.po
+++ b/l10n/sw_KE/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
 "MIME-Version: 1.0\n"
@@ -78,51 +78,52 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr ""
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr ""
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -162,64 +163,60 @@ msgstr ""
 msgid "Upload Error"
 msgstr ""
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr ""
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr ""
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr ""
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr ""
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -276,7 +273,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -291,6 +288,10 @@ msgstr ""
 msgid "Download"
 msgstr ""
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr ""
diff --git a/l10n/sw_KE/files_encryption.po b/l10n/sw_KE/files_encryption.po
index f168cce6dbb950fa0cdc3e671263c89a383cab28..210f1a0455645b7515be7ff18031addc99970243 100644
--- a/l10n/sw_KE/files_encryption.po
+++ b/l10n/sw_KE/files_encryption.po
@@ -7,9 +7,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:09+0100\n"
-"PO-Revision-Date: 2012-08-12 22:33+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Language: sw_KE\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr ""
diff --git a/l10n/sw_KE/lib.po b/l10n/sw_KE/lib.po
index 2934a40eb6cc38150b26134a1d23b4af5837861b..239e879ce360575f859711a17928defd87f17ef6 100644
--- a/l10n/sw_KE/lib.po
+++ b/l10n/sw_KE/lib.po
@@ -7,9 +7,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2012-07-27 22:23+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -17,27 +17,27 @@ msgstr ""
 "Language: sw_KE\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:313
+#: app.php:339
 msgid "Help"
 msgstr ""
 
-#: app.php:320
+#: app.php:346
 msgid "Personal"
 msgstr ""
 
-#: app.php:325
+#: app.php:351
 msgid "Settings"
 msgstr ""
 
-#: app.php:330
+#: app.php:356
 msgid "Users"
 msgstr ""
 
-#: app.php:337
+#: app.php:363
 msgid "Apps"
 msgstr ""
 
-#: app.php:339
+#: app.php:365
 msgid "Admin"
 msgstr ""
 
@@ -85,6 +85,17 @@ msgstr ""
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr ""
diff --git a/l10n/sw_KE/settings.po b/l10n/sw_KE/settings.po
index ebfabb7d98e6788a149ef15564f38da5040652ab..d01fd6408bc847ef9552a6f1c0f21bc0993094e8 100644
--- a/l10n/sw_KE/settings.po
+++ b/l10n/sw_KE/settings.po
@@ -7,9 +7,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2011-07-25 16:05+0000\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Swahili (Kenya) (http://www.transifex.com/projects/p/owncloud/language/sw_KE/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -21,12 +21,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr ""
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr ""
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -80,7 +80,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -213,10 +213,6 @@ msgstr ""
 msgid "New password"
 msgstr ""
 
-#: templates/personal.php:28
-msgid "show"
-msgstr ""
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr ""
diff --git a/l10n/ta_LK/files.po b/l10n/ta_LK/files.po
index 71d8d03be36f3b3347bf1d2d220e5221dac89054..a6ead449b9345ab2c13392eeecf489cef8ec4792 100644
--- a/l10n/ta_LK/files.po
+++ b/l10n/ta_LK/files.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -79,51 +79,52 @@ msgstr ""
 msgid "Files"
 msgstr "கோப்புகள்"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "பகிரப்படாதது"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "அழிக்க"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "பெயர்மாற்றம்"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "நிலுவையிலுள்ள"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} ஏற்கனவே உள்ளது"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "மாற்றிடுக"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "பெயரை பரிந்துரைக்க"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "இரத்து செய்க"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "மாற்றப்பட்டது {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "முன் செயல் நீக்கம் "
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} ஆனது {old_name} இனால் மாற்றப்பட்டது"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -163,64 +164,60 @@ msgstr "அடைவு அல்லது 0 bytes ஐ கொண்டுள்
 msgid "Upload Error"
 msgstr "பதிவேற்றல் வழு"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "மூடுக"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "நிலுவையிலுள்ள"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 கோப்பு பதிவேற்றப்படுகிறது"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{எண்ணிக்கை} கோப்புகள் பதிவேற்றப்படுகின்றது"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "பதிவேற்றல் இரத்து செய்யப்பட்டுள்ளது"
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "கோப்பு பதிவேற்றம் செயல்பாட்டில் உள்ளது. இந்தப் பக்கத்திலிருந்து வெறியேறுவதானது பதிவேற்றலை இரத்து செய்யும்."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL  வெறுமையாக இருக்கமுடியாது."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "பெயர்"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "அளவு"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "மாற்றப்பட்டது"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 கோப்புறை"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{எண்ணிக்கை} கோப்புறைகள்"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 கோப்பு"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{எண்ணிக்கை} கோப்புகள்"
 
@@ -277,7 +274,7 @@ msgid "From link"
 msgstr "இணைப்பிலிருந்து"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -292,6 +289,10 @@ msgstr "இங்கு ஒன்றும் இல்லை. ஏதாவத
 msgid "Download"
 msgstr "பதிவிறக்குக"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "பகிரப்படாதது"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "பதிவேற்றல் மிகப்பெரியது"
diff --git a/l10n/ta_LK/files_encryption.po b/l10n/ta_LK/files_encryption.po
index dc06118a3e5fd92a145f24a84b04a319ad060c41..fbd878dfe562d7f0eb6e7d1f81782581bc6c2ef1 100644
--- a/l10n/ta_LK/files_encryption.po
+++ b/l10n/ta_LK/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: ta_LK\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "மறைக்குறியீடு"
diff --git a/l10n/ta_LK/lib.po b/l10n/ta_LK/lib.po
index febb5ad3281bdbbfa305ef2cdd3aaea31f2e0600..5817809e5b2c49518791d9b28b6866a41acd8692 100644
--- a/l10n/ta_LK/lib.po
+++ b/l10n/ta_LK/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -18,47 +18,47 @@ msgstr ""
 "Language: ta_LK\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "உதவி"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "தனிப்பட்ட"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "அமைப்புகள்"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "பயனாளர்கள்"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "செயலிகள்"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "நிர்வாகம்"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "வீசொலிப் பூட்டு பதிவிறக்கம் நிறுத்தப்பட்டுள்ளது."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "கோப்புகள்ஒன்றன் பின் ஒன்றாக பதிவிறக்கப்படவேண்டும்."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "கோப்புகளுக்கு செல்க"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "வீ சொலிக் கோப்புகளை உருவாக்குவதற்கு தெரிவுசெய்யப்பட்ட கோப்புகள் மிகப்பெரியவை"
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -86,6 +86,17 @@ msgstr "உரை"
 msgid "Images"
 msgstr "படங்கள்"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "செக்கன்களுக்கு முன்"
diff --git a/l10n/ta_LK/settings.po b/l10n/ta_LK/settings.po
index 6e3983c95c4eb0cafda168283ad167d67ba33809..6fefbd5fc813e8c595df5efecdff2720e31c01ac 100644
--- a/l10n/ta_LK/settings.po
+++ b/l10n/ta_LK/settings.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Tamil (Sri-Lanka) (http://www.transifex.com/projects/p/owncloud/language/ta_LK/)\n"
 "MIME-Version: 1.0\n"
@@ -22,12 +22,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "செயலி சேமிப்பிலிருந்து பட்டியலை ஏற்றமுடியாதுள்ளது"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "அத்தாட்சிப்படுத்தலில் வழு"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -81,7 +81,7 @@ msgstr "குழு %s இல் பயனாளரை சேர்க்க 
 msgid "Unable to remove user from group %s"
 msgstr "குழு %s இலிருந்து பயனாளரை நீக்கமுடியாது"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -214,10 +214,6 @@ msgstr "தற்போதைய கடவுச்சொல்"
 msgid "New password"
 msgstr "புதிய கடவுச்சொல்"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "காட்டு"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "கடவுச்சொல்லை மாற்றுக"
diff --git a/l10n/templates/core.pot b/l10n/templates/core.pot
index 43634de4b387e3f64b6a0a8d2c65d8634a3e5619..e56930e017c555b2526a17ca276481de067a46aa 100644
--- a/l10n/templates/core.pot
+++ b/l10n/templates/core.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -156,59 +156,59 @@ msgstr ""
 msgid "December"
 msgstr ""
 
-#: js/js.js:284
+#: js/js.js:286
 msgid "Settings"
 msgstr ""
 
-#: js/js.js:764
+#: js/js.js:767
 msgid "seconds ago"
 msgstr ""
 
-#: js/js.js:765
+#: js/js.js:768
 msgid "1 minute ago"
 msgstr ""
 
-#: js/js.js:766
+#: js/js.js:769
 msgid "{minutes} minutes ago"
 msgstr ""
 
-#: js/js.js:767
+#: js/js.js:770
 msgid "1 hour ago"
 msgstr ""
 
-#: js/js.js:768
+#: js/js.js:771
 msgid "{hours} hours ago"
 msgstr ""
 
-#: js/js.js:769
+#: js/js.js:772
 msgid "today"
 msgstr ""
 
-#: js/js.js:770
+#: js/js.js:773
 msgid "yesterday"
 msgstr ""
 
-#: js/js.js:771
+#: js/js.js:774
 msgid "{days} days ago"
 msgstr ""
 
-#: js/js.js:772
+#: js/js.js:775
 msgid "last month"
 msgstr ""
 
-#: js/js.js:773
+#: js/js.js:776
 msgid "{months} months ago"
 msgstr ""
 
-#: js/js.js:774
+#: js/js.js:777
 msgid "months ago"
 msgstr ""
 
-#: js/js.js:775
+#: js/js.js:778
 msgid "last year"
 msgstr ""
 
-#: js/js.js:776
+#: js/js.js:779
 msgid "years ago"
 msgstr ""
 
@@ -238,8 +238,8 @@ msgid "The object type is not specified."
 msgstr ""
 
 #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
-#: js/share.js:583
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
 msgid "Error"
 msgstr ""
 
@@ -259,7 +259,7 @@ msgstr ""
 msgid "Shared"
 msgstr ""
 
-#: js/share.js:141 js/share.js:611
+#: js/share.js:141 js/share.js:622
 msgid "Error while sharing"
 msgstr ""
 
@@ -355,23 +355,23 @@ msgstr ""
 msgid "share"
 msgstr ""
 
-#: js/share.js:373 js/share.js:558
+#: js/share.js:373 js/share.js:569
 msgid "Password protected"
 msgstr ""
 
-#: js/share.js:571
+#: js/share.js:582
 msgid "Error unsetting expiration date"
 msgstr ""
 
-#: js/share.js:583
+#: js/share.js:594
 msgid "Error setting expiration date"
 msgstr ""
 
-#: js/share.js:598
+#: js/share.js:609
 msgid "Sending ..."
 msgstr ""
 
-#: js/share.js:609
+#: js/share.js:620
 msgid "Email sent"
 msgstr ""
 
diff --git a/l10n/templates/files.pot b/l10n/templates/files.pot
index 2ac9ac8686db1b3d7c10d8602f9f6569db55d3e7..3d8c84c894042ee9ec1601aa432e116648beb376 100644
--- a/l10n/templates/files.pot
+++ b/l10n/templates/files.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -78,51 +78,52 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr ""
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr ""
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -162,64 +163,60 @@ msgstr ""
 msgid "Upload Error"
 msgstr ""
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr ""
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:948 templates/index.php:67
 msgid "Name"
 msgstr ""
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:949 templates/index.php:78
 msgid "Size"
 msgstr ""
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:950 templates/index.php:80
 msgid "Modified"
 msgstr ""
 
-#: js/files.js:974
+#: js/files.js:969
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:971
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:979
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:981
 msgid "{count} files"
 msgstr ""
 
@@ -276,7 +273,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -291,6 +288,10 @@ msgstr ""
 msgid "Download"
 msgstr ""
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr ""
diff --git a/l10n/templates/files_encryption.pot b/l10n/templates/files_encryption.pot
index e1cc407d59e446b43479dbced2e02c4064c56917..b00f8418bd31957737090528add87813113c208c 100644
--- a/l10n/templates/files_encryption.pot
+++ b/l10n/templates/files_encryption.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to "
-"complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr ""
diff --git a/l10n/templates/files_external.pot b/l10n/templates/files_external.pot
index 0d4d620d98bcaf004122eb8a1e532f08acc5bb20..d2e014c2d7a39c429ce5b106cfba18d50c0e6352 100644
--- a/l10n/templates/files_external.pot
+++ b/l10n/templates/files_external.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -41,13 +41,13 @@ msgstr ""
 msgid "Error configuring Google Drive storage"
 msgstr ""
 
-#: lib/config.php:405
+#: lib/config.php:413
 msgid ""
 "<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
 "is not possible. Please ask your system administrator to install it."
 msgstr ""
 
-#: lib/config.php:406
+#: lib/config.php:414
 msgid ""
 "<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting "
 "of FTP shares is not possible. Please ask your system administrator to "
diff --git a/l10n/templates/files_sharing.pot b/l10n/templates/files_sharing.pot
index bf6ff52b50b0109f33285f3b272996ef0a7beccc..362ecf7353bc24de563e538669571fbf6fe9138a 100644
--- a/l10n/templates/files_sharing.pot
+++ b/l10n/templates/files_sharing.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_trashbin.pot b/l10n/templates/files_trashbin.pot
index 3f59bb32a0f00bf3527989c578e4500b61bbdc54..ab52cbdde868c565857d8bd63e44c0f6b71e28e5 100644
--- a/l10n/templates/files_trashbin.pot
+++ b/l10n/templates/files_trashbin.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/files_versions.pot b/l10n/templates/files_versions.pot
index 80d8fa35cd9fec8e7b6f6c738dcc6ddf7d0cf7f4..6dea4891f9d6d02eb54cc85744a7a67e1328d136 100644
--- a/l10n/templates/files_versions.pot
+++ b/l10n/templates/files_versions.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/lib.pot b/l10n/templates/lib.pot
index 5c9b6e4cb88bfa1a67cb1746fb34aedf82e969ee..4364f233996ff30641e9a1c9b2c61f53973efa25 100644
--- a/l10n/templates/lib.pot
+++ b/l10n/templates/lib.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,27 +17,27 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: app.php:313
+#: app.php:339
 msgid "Help"
 msgstr ""
 
-#: app.php:320
+#: app.php:346
 msgid "Personal"
 msgstr ""
 
-#: app.php:325
+#: app.php:351
 msgid "Settings"
 msgstr ""
 
-#: app.php:330
+#: app.php:356
 msgid "Users"
 msgstr ""
 
-#: app.php:337
+#: app.php:363
 msgid "Apps"
 msgstr ""
 
-#: app.php:339
+#: app.php:365
 msgid "Admin"
 msgstr ""
 
@@ -85,6 +85,17 @@ msgstr ""
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr ""
diff --git a/l10n/templates/settings.pot b/l10n/templates/settings.pot
index 0ed2c65e0db47905cf826e6c8a45cdb312bc9bd6..6191e877aa77d14b46e367d61745f8d3443f38d7 100644
--- a/l10n/templates/settings.pot
+++ b/l10n/templates/settings.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -21,12 +21,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr ""
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr ""
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -80,7 +80,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -214,10 +214,6 @@ msgstr ""
 msgid "New password"
 msgstr ""
 
-#: templates/personal.php:28
-msgid "show"
-msgstr ""
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr ""
diff --git a/l10n/templates/user_ldap.pot b/l10n/templates/user_ldap.pot
index d13915b5b5c8906e6d7ebb8579ab0d917fe6d6bc..bf744d12ba7e49ea52d99ad30b2655ce88480c04 100644
--- a/l10n/templates/user_ldap.pot
+++ b/l10n/templates/user_ldap.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/templates/user_webdavauth.pot b/l10n/templates/user_webdavauth.pot
index 1f3da3f43f9a3db7a2fb460d41c8b232e0b4299c..2db89d566889eba9371e1309055431b93cebcae5 100644
--- a/l10n/templates/user_webdavauth.pot
+++ b/l10n/templates/user_webdavauth.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/l10n/th_TH/files.po b/l10n/th_TH/files.po
index 2b84a1a30083f60bf1f310c88cb7d1011652082c..2104d5cd25f78b43cd13a9e76b5a0b8cc4fb3787 100644
--- a/l10n/th_TH/files.po
+++ b/l10n/th_TH/files.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
 "MIME-Version: 1.0\n"
@@ -22,16 +22,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "ไม่สามารถย้าย %s ได้ - ไฟล์ที่ใช้ชื่อนี้มีอยู่แล้ว"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "ไม่สามารถย้าย %s ได้"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "ไม่สามารถเปลี่ยนชื่อไฟล์ได้"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -70,7 +70,7 @@ msgstr "เขียนข้อมูลลงแผ่นดิสก์ล้
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "เหลือพื้นที่ไม่เพียงสำหรับใช้งาน"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -80,51 +80,52 @@ msgstr "ไดเร็กทอรี่ไม่ถูกต้อง"
 msgid "Files"
 msgstr "ไฟล์"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "ยกเลิกการแชร์ข้อมูล"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "ลบ"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "เปลี่ยนชื่อ"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "อยู่ระหว่างดำเนินการ"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} มีอยู่แล้วในระบบ"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "แทนที่"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "แนะนำชื่อ"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "ยกเลิก"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "แทนที่ {new_name} แล้ว"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "เลิกทำ"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "แทนที่ {new_name} ด้วย {old_name} แล้ว"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "ดำเนินการตามคำสั่งลบ"
 
@@ -164,64 +165,60 @@ msgstr "ไม่สามารถอัพโหลดไฟล์ของค
 msgid "Upload Error"
 msgstr "เกิดข้อผิดพลาดในการอัพโหลด"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "ปิด"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "อยู่ระหว่างดำเนินการ"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "กำลังอัพโหลดไฟล์ 1 ไฟล์"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "กำลังอัพโหลด {count} ไฟล์"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "การอัพโหลดถูกยกเลิก"
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก"
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL ไม่สามารถเว้นว่างได้"
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "ชื่อโฟลเดอร์ไม่ถูกต้อง การใช้งาน 'แชร์' สงวนไว้สำหรับ Owncloud เท่านั้น"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "ชื่อ"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "ขนาด"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "ปรับปรุงล่าสุด"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 โฟลเดอร์"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} โฟลเดอร์"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 ไฟล์"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} ไฟล์"
 
@@ -278,8 +275,8 @@ msgid "From link"
 msgstr "จากลิงก์"
 
 #: templates/index.php:40
-msgid "Trash"
-msgstr "ถังขยะ"
+msgid "Trash bin"
+msgstr ""
 
 #: templates/index.php:46
 msgid "Cancel upload"
@@ -293,6 +290,10 @@ msgstr "ยังไม่มีไฟล์ใดๆอยู่ที่นี
 msgid "Download"
 msgstr "ดาวน์โหลด"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "ยกเลิกการแชร์ข้อมูล"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "ไฟล์ที่อัพโหลดมีขนาดใหญ่เกินไป"
diff --git a/l10n/th_TH/files_encryption.po b/l10n/th_TH/files_encryption.po
index 5131a396a5a5072142e514ba108d1182a0e171ba..0f055b572fb2206003e2cb999e9158c0e1947511 100644
--- a/l10n/th_TH/files_encryption.po
+++ b/l10n/th_TH/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: th_TH\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "กรุณาสลับไปที่โปรแกรมไคลเอนต์ ownCloud ของคุณ แล้วเปลี่ยนรหัสผ่านสำหรับการเข้ารหัสเพื่อแปลงข้อมูลให้เสร็จสมบูรณ์"
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "สลับไปใช้การเข้ารหัสจากโปรแกรมไคลเอนต์"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "เปลี่ยนรหัสผ่านสำหรับเข้ารหัสไปเป็นรหัสผ่านสำหรับการเข้าสู่ระบบ"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "กรุณาตรวจสอบรหัสผ่านของคุณแล้วลองใหม่อีกครั้ง"
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "ไม่สามารถเปลี่ยนรหัสผ่านสำหรับการเข้ารหัสไฟล์ของคุณไปเป็นรหัสผ่านสำหรับการเข้าสู่ระบบของคุณได้"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "การเข้ารหัส"
diff --git a/l10n/th_TH/lib.po b/l10n/th_TH/lib.po
index ab2e313276249719ed72b63e2e6ba36663245257..5e486a7842d3e8b1b87f551a543b2b7bede86e58 100644
--- a/l10n/th_TH/lib.po
+++ b/l10n/th_TH/lib.po
@@ -8,9 +8,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-23 00:05+0100\n"
-"PO-Revision-Date: 2013-01-22 00:44+0000\n"
-"Last-Translator: AriesAnywhere Anywhere <ariesanywhere@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -18,47 +18,47 @@ msgstr ""
 "Language: th_TH\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "ช่วยเหลือ"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "ส่วนตัว"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "ตั้งค่า"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "ผู้ใช้งาน"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "แอปฯ"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "ผู้ดูแล"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "คุณสมบัติการดาวน์โหลด zip ถูกปิดการใช้งานไว้"
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "ไฟล์สามารถดาวน์โหลดได้ทีละครั้งเท่านั้น"
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "กลับไปที่ไฟล์"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "ไฟล์ที่เลือกมีขนาดใหญ่เกินกว่าที่จะสร้างเป็นไฟล์ zip"
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "ไม่สามารถกำหนดได้"
 
@@ -86,6 +86,17 @@ msgstr "ข้อความ"
 msgid "Images"
 msgstr "รูปภาพ"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "วินาทีที่ผ่านมา"
diff --git a/l10n/th_TH/settings.po b/l10n/th_TH/settings.po
index a04a575b536fe78baee0d7a5af3c153caebc4cad..7bcf49a4ff52618fbccce4286b292b3ec1595189 100644
--- a/l10n/th_TH/settings.po
+++ b/l10n/th_TH/settings.po
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Thai (Thailand) (http://www.transifex.com/projects/p/owncloud/language/th_TH/)\n"
 "MIME-Version: 1.0\n"
@@ -24,12 +24,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "ไม่สามารถโหลดรายการจาก App Store ได้"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "เกิดข้อผิดพลาดเกี่ยวกับสิทธิ์การเข้าใช้งาน"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -83,7 +83,7 @@ msgstr "ไม่สามารถเพิ่มผู้ใช้งานเ
 msgid "Unable to remove user from group %s"
 msgstr "ไม่สามารถลบผู้ใช้งานออกจากกลุ่ม %s ได้"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "ไม่สามารถอัพเดทแอปฯ"
 
@@ -216,10 +216,6 @@ msgstr "รหัสผ่านปัจจุบัน"
 msgid "New password"
 msgstr "รหัสผ่านใหม่"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "แสดง"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "เปลี่ยนรหัสผ่าน"
diff --git a/l10n/tr/files.po b/l10n/tr/files.po
index af033c86936c32ce924f6d82cdab727c5c1a191f..611384113cf993d1e1cca2217c633032a4c7d2d0 100644
--- a/l10n/tr/files.po
+++ b/l10n/tr/files.po
@@ -13,8 +13,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
 "MIME-Version: 1.0\n"
@@ -26,16 +26,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "%s taşınamadı. Bu isimde dosya zaten var."
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "%s taşınamadı"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Dosya adı değiştirilemedi"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -84,51 +84,52 @@ msgstr "Geçersiz dizin."
 msgid "Files"
 msgstr "Dosyalar"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Paylaşılmayan"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Sil"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "İsim değiştir."
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Bekliyor"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} zaten mevcut"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "değiştir"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "Öneri ad"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "iptal"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "değiştirilen {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "geri al"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "{new_name} ismi {old_name} ile değiştirildi"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -168,64 +169,60 @@ msgstr "Dosyanızın boyutu 0 byte olduğundan veya bir dizin olduğundan yükle
 msgid "Upload Error"
 msgstr "Yükleme hatası"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Kapat"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Bekliyor"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 dosya yüklendi"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} dosya yükleniyor"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Yükleme iptal edildi."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Dosya yükleme işlemi sürüyor. Şimdi sayfadan ayrılırsanız işleminiz iptal olur."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL boş olamaz."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Geçersiz dizin adı. Shared isminin kullanımı Owncloud tarafından rezerver edilmiştir."
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Ad"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Boyut"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Değiştirilme"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 dizin"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} dizin"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 dosya"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} dosya"
 
@@ -282,7 +279,7 @@ msgid "From link"
 msgstr "Bağlantıdan"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -297,6 +294,10 @@ msgstr "Burada hiçbir şey yok. Birşeyler yükleyin!"
 msgid "Download"
 msgstr "İndir"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Paylaşılmayan"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Yüklemeniz çok büyük"
diff --git a/l10n/tr/files_encryption.po b/l10n/tr/files_encryption.po
index d8297b19c3554156fc4c28ea1e20ec6583d9ebf7..fec3cbfb0bc35a2105461ac550a6e6b0ffd335c0 100644
--- a/l10n/tr/files_encryption.po
+++ b/l10n/tr/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: tr\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Şifreleme"
diff --git a/l10n/tr/lib.po b/l10n/tr/lib.po
index fadb1957cfb9b793a789489d08c230d7c6e53822..524e298ee144712c499b97d46342f25e10751f84 100644
--- a/l10n/tr/lib.po
+++ b/l10n/tr/lib.po
@@ -9,9 +9,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-23 00:05+0100\n"
-"PO-Revision-Date: 2013-01-22 09:28+0000\n"
-"Last-Translator: ismail yenigül <ismail.yenigul@surgate.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Language: tr\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Yardı"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Kişisel"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Ayarlar"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Kullanıcılar"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Uygulamalar"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Yönetici"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIP indirmeleri kapatılmıştır."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Dosyaların birer birer indirilmesi gerekmektedir."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Dosyalara dön"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Seçilen dosyalar bir zip dosyası oluşturmak için fazla büyüktür."
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "tespit edilemedi"
 
@@ -87,6 +87,17 @@ msgstr "Metin"
 msgid "Images"
 msgstr "Resimler"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "saniye önce"
diff --git a/l10n/tr/settings.po b/l10n/tr/settings.po
index 0b51576c5a32beb03cf938152ec80c160a73c011..29f5d1c7327797a9f1cc7ee6f221e4aba5c54a7e 100644
--- a/l10n/tr/settings.po
+++ b/l10n/tr/settings.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Turkish (http://www.transifex.com/projects/p/owncloud/language/tr/)\n"
 "MIME-Version: 1.0\n"
@@ -25,12 +25,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "App Store'dan liste yüklenemiyor"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Eşleşme hata"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -84,7 +84,7 @@ msgstr "Kullanıcı %s grubuna eklenemiyor"
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -217,10 +217,6 @@ msgstr "Mevcut parola"
 msgid "New password"
 msgstr "Yeni parola"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "göster"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Parola değiştir"
diff --git a/l10n/uk/files.po b/l10n/uk/files.po
index 44b18cb87c9a198514e93791fd53e2ad69947e66..fd21387526b0e8bab6113e33e5ba6d326be1c2f9 100644
--- a/l10n/uk/files.po
+++ b/l10n/uk/files.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 "MIME-Version: 1.0\n"
@@ -82,51 +82,52 @@ msgstr "Невірний каталог."
 msgid "Files"
 msgstr "Файли"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Заборонити доступ"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr "Видалити назавжди"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Видалити"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Перейменувати"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Очікування"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} вже існує"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "заміна"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "запропонуйте назву"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "відміна"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "замінено {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "відмінити"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "замінено {new_name} на {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "виконати операцію видалення"
 
@@ -166,64 +167,60 @@ msgstr "Неможливо завантажити ваш файл тому, що
 msgid "Upload Error"
 msgstr "Помилка завантаження"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Закрити"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Очікування"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 файл завантажується"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} файлів завантажується"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Завантаження перервано."
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Виконується завантаження файлу. Закриття цієї сторінки приведе до відміни завантаження."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL не може бути пустим."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "Невірне ім'я теки. Використання \"Shared\" зарезервовано Owncloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Ім'я"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Розмір"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Змінено"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 папка"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} папок"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 файл"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} файлів"
 
@@ -280,8 +277,8 @@ msgid "From link"
 msgstr "З посилання"
 
 #: templates/index.php:40
-msgid "Trash"
-msgstr "Смітник"
+msgid "Trash bin"
+msgstr ""
 
 #: templates/index.php:46
 msgid "Cancel upload"
@@ -295,6 +292,10 @@ msgstr "Тут нічого немає. Відвантажте що-небудь
 msgid "Download"
 msgstr "Завантажити"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Заборонити доступ"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Файл занадто великий"
diff --git a/l10n/uk/files_encryption.po b/l10n/uk/files_encryption.po
index 535f30685532035c8ad7bdad40c2b38e1d8fea5c..1ee566098007cfa9683e6def77bd021d1135d4db 100644
--- a/l10n/uk/files_encryption.po
+++ b/l10n/uk/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: uk\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Шифрування"
diff --git a/l10n/uk/lib.po b/l10n/uk/lib.po
index 8d1708aa24eb38a8c99236a18d7b5eadfd6c6b4d..977f361120ddb0c844520594d84463ca7d414d98 100644
--- a/l10n/uk/lib.po
+++ b/l10n/uk/lib.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-18 00:03+0100\n"
-"PO-Revision-Date: 2013-01-17 13:24+0000\n"
-"Last-Translator: volodya327 <volodya327@gmail.com>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -21,47 +21,47 @@ msgstr ""
 "Language: uk\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Допомога"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Особисте"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Налаштування"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Користувачі"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Додатки"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Адмін"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIP завантаження вимкнено."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Файли повинні бути завантаженні послідовно."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Повернутися до файлів"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Вибрані фали завеликі для генерування zip файлу."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "не може бути визначено"
 
@@ -89,6 +89,17 @@ msgstr "Текст"
 msgid "Images"
 msgstr "Зображення"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "секунди тому"
diff --git a/l10n/uk/settings.po b/l10n/uk/settings.po
index 1646712c6977c6c93e64f13bba385fcffdacefb7..78514de2dc174970c3b7ef70a295b02d31758ea0 100644
--- a/l10n/uk/settings.po
+++ b/l10n/uk/settings.po
@@ -11,9 +11,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 15:20+0000\n"
-"Last-Translator: volodya327 <volodya327@gmail.com>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
+"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Ukrainian (http://www.transifex.com/projects/p/owncloud/language/uk/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -25,12 +25,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Не вдалося завантажити список з App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Помилка автентифікації"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr "Не вдалося змінити зображене ім'я"
 
@@ -84,7 +84,7 @@ msgstr "Не вдалося додати користувача у групу %s
 msgid "Unable to remove user from group %s"
 msgstr "Не вдалося видалити користувача із групи %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "Не вдалося оновити програму. "
 
@@ -217,10 +217,6 @@ msgstr "Поточний пароль"
 msgid "New password"
 msgstr "Новий пароль"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "показати"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Змінити пароль"
diff --git a/l10n/vi/core.po b/l10n/vi/core.po
index 012e1202e95c365c28a786285e32843e4db351c6..24cd51e054dc30775c5583c637dca1729d53f5e3 100644
--- a/l10n/vi/core.po
+++ b/l10n/vi/core.po
@@ -6,15 +6,16 @@
 #   <khanhnd@kenhgiaiphap.vn>, 2012.
 #   <mattheu.9x@gmail.com>, 2012.
 #   <mattheu_9x@yahoo.com>, 2012.
+# sao sang <saosangmo@yahoo.com>, 2013.
 # Son Nguyen <sonnghit@gmail.com>, 2012.
 # Sơn Nguyễn <sonnghit@gmail.com>, 2012-2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 18:20+0000\n"
+"Last-Translator: saosangm <saosangmo@yahoo.com>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -57,7 +58,7 @@ msgstr "Không có danh mục được thêm?"
 #: ajax/vcategories/add.php:37
 #, php-format
 msgid "This category already exists: %s"
-msgstr ""
+msgstr "Danh mục này đã tồn tại: %s"
 
 #: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
 #: ajax/vcategories/favorites.php:24
@@ -161,59 +162,59 @@ msgstr "Tháng 11"
 msgid "December"
 msgstr "Tháng 12"
 
-#: js/js.js:284
+#: js/js.js:286
 msgid "Settings"
 msgstr "Cài đặt"
 
-#: js/js.js:764
+#: js/js.js:766
 msgid "seconds ago"
 msgstr "vài giây trước"
 
-#: js/js.js:765
+#: js/js.js:767
 msgid "1 minute ago"
 msgstr "1 phút trước"
 
-#: js/js.js:766
+#: js/js.js:768
 msgid "{minutes} minutes ago"
 msgstr "{minutes} phút trước"
 
-#: js/js.js:767
+#: js/js.js:769
 msgid "1 hour ago"
 msgstr "1 giờ trước"
 
-#: js/js.js:768
+#: js/js.js:770
 msgid "{hours} hours ago"
 msgstr "{hours} giờ trước"
 
-#: js/js.js:769
+#: js/js.js:771
 msgid "today"
 msgstr "hôm nay"
 
-#: js/js.js:770
+#: js/js.js:772
 msgid "yesterday"
 msgstr "hôm qua"
 
-#: js/js.js:771
+#: js/js.js:773
 msgid "{days} days ago"
 msgstr "{days} ngày trước"
 
-#: js/js.js:772
+#: js/js.js:774
 msgid "last month"
 msgstr "tháng trước"
 
-#: js/js.js:773
+#: js/js.js:775
 msgid "{months} months ago"
 msgstr "{months} tháng trước"
 
-#: js/js.js:774
+#: js/js.js:776
 msgid "months ago"
 msgstr "tháng trước"
 
-#: js/js.js:775
+#: js/js.js:777
 msgid "last year"
 msgstr "năm trước"
 
-#: js/js.js:776
+#: js/js.js:778
 msgid "years ago"
 msgstr "năm trước"
 
@@ -243,8 +244,8 @@ msgid "The object type is not specified."
 msgstr "Loại đối tượng không được chỉ định."
 
 #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
-#: js/share.js:583
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
 msgid "Error"
 msgstr "Lỗi"
 
@@ -262,9 +263,9 @@ msgstr "Chia sẻ"
 
 #: js/share.js:29 js/share.js:43 js/share.js:90 js/share.js:93
 msgid "Shared"
-msgstr ""
+msgstr "Được chia sẻ"
 
-#: js/share.js:141 js/share.js:611
+#: js/share.js:141 js/share.js:622
 msgid "Error while sharing"
 msgstr "Lỗi trong quá trình chia sẻ"
 
@@ -302,7 +303,7 @@ msgstr "Mật khẩu"
 
 #: js/share.js:189
 msgid "Email link to person"
-msgstr ""
+msgstr "Liên kết email tới cá nhân"
 
 #: js/share.js:190
 msgid "Send"
@@ -360,25 +361,25 @@ msgstr "xóa"
 msgid "share"
 msgstr "chia sẻ"
 
-#: js/share.js:373 js/share.js:558
+#: js/share.js:373 js/share.js:569
 msgid "Password protected"
 msgstr "Mật khẩu bảo vệ"
 
-#: js/share.js:571
+#: js/share.js:582
 msgid "Error unsetting expiration date"
 msgstr "Lỗi không thiết lập ngày kết thúc"
 
-#: js/share.js:583
+#: js/share.js:594
 msgid "Error setting expiration date"
 msgstr "Lỗi cấu hình ngày kết thúc"
 
-#: js/share.js:598
+#: js/share.js:609
 msgid "Sending ..."
 msgstr "Đang gởi ..."
 
-#: js/share.js:609
+#: js/share.js:620
 msgid "Email sent"
-msgstr ""
+msgstr "Email đã được gửi"
 
 #: js/update.js:14
 msgid ""
@@ -492,14 +493,14 @@ msgstr "Nếu không có random number generator , Hacker có thể  thiết l
 msgid ""
 "Your data directory and files are probably accessible from the internet "
 "because the .htaccess file does not work."
-msgstr ""
+msgstr "Thư mục và file dữ liệu của bạn có thể được truy cập từ internet bởi vì file .htaccess không hoạt động"
 
 #: templates/installation.php:32
 msgid ""
 "For information how to properly configure your server, please see the <a "
 "href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
 "target=\"_blank\">documentation</a>."
-msgstr ""
+msgstr "Để biết thêm cách cấu hình máy chủ của bạn, xin xem <a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">tài liệu</a>."
 
 #: templates/installation.php:36
 msgid "Create an <strong>admin account</strong>"
@@ -582,7 +583,7 @@ msgstr "Đăng nhập"
 
 #: templates/login.php:49
 msgid "Alternative Logins"
-msgstr ""
+msgstr "Đăng nhập khác"
 
 #: templates/part.pagenavi.php:3
 msgid "prev"
@@ -595,4 +596,4 @@ msgstr "Kế tiếp"
 #: templates/update.php:3
 #, php-format
 msgid "Updating ownCloud to version %s, this may take a while."
-msgstr ""
+msgstr "Cập nhật ownCloud lên phiên bản %s, có thể sẽ mất thời gian"
diff --git a/l10n/vi/files.po b/l10n/vi/files.po
index 131a491428d6768faeba11d1eeb743b6e089641e..eeabcf3ec53e9bc6d1cf48ea57daf46f2cd83260 100644
--- a/l10n/vi/files.po
+++ b/l10n/vi/files.po
@@ -6,13 +6,14 @@
 #   <khanhnd@kenhgiaiphap.vn>, 2012.
 #   <mattheu.9x@gmail.com>, 2012.
 #   <mattheu_9x@yahoo.com>, 2012.
+# sao sang <saosangmo@yahoo.com>, 2013.
 # Sơn Nguyễn <sonnghit@gmail.com>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
@@ -24,16 +25,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "Không thể di chuyển %s - Đã có tên file này trên hệ thống"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "Không thể di chuyển %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "Không thể đổi tên file"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -46,7 +47,7 @@ msgstr "Không có lỗi, các tập tin đã được tải lên thành công"
 #: ajax/upload.php:27
 msgid ""
 "The uploaded file exceeds the upload_max_filesize directive in php.ini: "
-msgstr ""
+msgstr "The uploaded file exceeds the upload_max_filesize directive in php.ini: "
 
 #: ajax/upload.php:29
 msgid ""
@@ -72,71 +73,72 @@ msgstr "Không thể ghi "
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "Không đủ không gian lưu trữ"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
-msgstr ""
+msgstr "Thư mục không hợp lệ"
 
 #: appinfo/app.php:10
 msgid "Files"
 msgstr "Tập tin"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "Không chia sẽ"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
-msgstr ""
+msgstr "Xóa vĩnh vễn"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "Xóa"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "Sửa tên"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Chờ"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} đã tồn tại"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "thay thế"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "tên gợi ý"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "hủy"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "đã thay thế {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "lùi lại"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "đã thay thế {new_name} bằng {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
-msgstr ""
+msgstr "thực hiện việc xóa"
 
 #: js/files.js:52
 msgid "'.' is an invalid file name."
-msgstr ""
+msgstr "'.' là một tên file không hợp lệ"
 
 #: js/files.js:56
 msgid "File name cannot be empty."
-msgstr ""
+msgstr "Tên file không được rỗng"
 
 #: js/files.js:64
 msgid ""
@@ -146,17 +148,17 @@ msgstr "Tên không hợp lệ, '\\', '/', '<', '>', ':', '\"', '|', '?' và '*'
 
 #: js/files.js:78
 msgid "Your storage is full, files can not be updated or synced anymore!"
-msgstr ""
+msgstr "Your storage is full, files can not be updated or synced anymore!"
 
 #: js/files.js:82
 msgid "Your storage is almost full ({usedSpacePercent}%)"
-msgstr ""
+msgstr "Your storage is almost full ({usedSpacePercent}%)"
 
 #: js/files.js:224
 msgid ""
 "Your download is being prepared. This might take some time if the files are "
 "big."
-msgstr ""
+msgstr "Your download is being prepared. This might take some time if the files are big."
 
 #: js/files.js:261
 msgid "Unable to upload your file as it is a directory or has 0 bytes"
@@ -166,64 +168,60 @@ msgstr "Không thể tải lên tập tin này do nó là một thư mục hoặ
 msgid "Upload Error"
 msgstr "Tải lên lỗi"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "Đóng"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Chờ"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 tệp tin đang được tải lên"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} tập tin đang tải lên"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "Hủy tải lên"
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này."
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL không được để trống."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
-msgstr ""
+msgstr "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "Tên"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "Kích cỡ"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "Thay đổi"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 thư mục"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} thư mục"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 tập tin"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} tập tin"
 
@@ -280,7 +278,7 @@ msgid "From link"
 msgstr "Từ liên kết"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -295,6 +293,10 @@ msgstr "Không có gì ở đây .Hãy tải lên một cái gì đó !"
 msgid "Download"
 msgstr "Tải xuống"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "Không chia sẽ"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "Tập tin tải lên quá lớn"
@@ -315,4 +317,4 @@ msgstr "Hiện tại đang quét"
 
 #: templates/upgrade.php:2
 msgid "Upgrading filesystem cache..."
-msgstr ""
+msgstr "Upgrading filesystem cache..."
diff --git a/l10n/vi/files_encryption.po b/l10n/vi/files_encryption.po
index a845b05ea15875b18f4e03e39f173ea5722bd05f..af199ade990ade7f5cff1fc86c3df75d73c53743 100644
--- a/l10n/vi/files_encryption.po
+++ b/l10n/vi/files_encryption.po
@@ -3,13 +3,14 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# sao sang <saosangmo@yahoo.com>, 2013.
 # Sơn Nguyễn <sonnghit@gmail.com>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
@@ -18,43 +19,21 @@ msgstr ""
 "Language: vi\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "Mã hóa"
 
 #: templates/settings-personal.php:7
 msgid "File encryption is enabled."
-msgstr ""
+msgstr "Mã hóa file đã mở"
 
 #: templates/settings-personal.php:11
 msgid "The following file types will not be encrypted:"
-msgstr ""
+msgstr "Loại file sau sẽ không được mã hóa"
 
 #: templates/settings.php:7
 msgid "Exclude the following file types from encryption:"
-msgstr ""
+msgstr "Việc mã hóa không bao gồm loại file sau"
 
 #: templates/settings.php:12
 msgid "None"
diff --git a/l10n/vi/files_external.po b/l10n/vi/files_external.po
index 72b1138b2b2336a7cf1e71a6f5f5911b719321a4..6dbeed35de4a0601a12406135719b6ecfcd9a631 100644
--- a/l10n/vi/files_external.po
+++ b/l10n/vi/files_external.po
@@ -4,14 +4,15 @@
 # 
 # Translators:
 #   <mattheu_9x@yahoo.com>, 2012.
+# sao sang <saosangmo@yahoo.com>, 2013.
 # Sơn Nguyễn <sonnghit@gmail.com>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2012-12-13 00:17+0100\n"
-"PO-Revision-Date: 2012-12-11 23:22+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 18:40+0000\n"
+"Last-Translator: saosangm <saosangmo@yahoo.com>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -43,18 +44,18 @@ msgstr "Xin vui lòng cung cấp một ứng dụng Dropbox hợp lệ và mã b
 msgid "Error configuring Google Drive storage"
 msgstr "Lỗi cấu hình lưu trữ Google Drive"
 
-#: lib/config.php:434
+#: lib/config.php:405
 msgid ""
 "<b>Warning:</b> \"smbclient\" is not installed. Mounting of CIFS/SMB shares "
 "is not possible. Please ask your system administrator to install it."
-msgstr ""
+msgstr "<b>Cảnh báo:</b> \"smbclient\" chưa được cài đặt. Mount CIFS/SMB shares là không thể thực hiện được. Hãy hỏi người quản trị hệ thống để cài đặt nó."
 
-#: lib/config.php:435
+#: lib/config.php:406
 msgid ""
 "<b>Warning:</b> The FTP support in PHP is not enabled or installed. Mounting"
 " of FTP shares is not possible. Please ask your system administrator to "
 "install it."
-msgstr ""
+msgstr "<b>Cảnh báo:</b> FTP trong PHP chưa được cài đặt hoặc chưa được  mở. Mount FTP shares là không thể. Xin hãy yêu cầu quản trị hệ thống của bạn cài đặt nó."
 
 #: templates/settings.php:3
 msgid "External Storage"
@@ -101,7 +102,7 @@ msgid "Users"
 msgstr "Người dùng"
 
 #: templates/settings.php:108 templates/settings.php:109
-#: templates/settings.php:149 templates/settings.php:150
+#: templates/settings.php:144 templates/settings.php:145
 msgid "Delete"
 msgstr "Xóa"
 
@@ -113,10 +114,10 @@ msgstr "Kích hoạt tính năng lưu trữ ngoài"
 msgid "Allow users to mount their own external storage"
 msgstr "Cho phép người dùng kết nối với lưu trữ riêng bên ngoài của họ"
 
-#: templates/settings.php:139
+#: templates/settings.php:136
 msgid "SSL root certificates"
 msgstr "Chứng chỉ SSL root"
 
-#: templates/settings.php:158
+#: templates/settings.php:153
 msgid "Import Root Certificate"
 msgstr "Nhập Root Certificate"
diff --git a/l10n/vi/files_trashbin.po b/l10n/vi/files_trashbin.po
index 3d2b604621fce69e5717c8a972ed3e81393d67fa..9293b13b7dde6bda2ba2317e28a89921603cb5c4 100644
--- a/l10n/vi/files_trashbin.po
+++ b/l10n/vi/files_trashbin.po
@@ -3,13 +3,14 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# sao sang <saosangmo@yahoo.com>, 2013.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 23:11+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 19:10+0000\n"
+"Last-Translator: saosangm <saosangmo@yahoo.com>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,20 +21,20 @@ msgstr ""
 #: ajax/delete.php:22
 #, php-format
 msgid "Couldn't delete %s permanently"
-msgstr ""
+msgstr "Không thể óa %s vĩnh viễn"
 
 #: ajax/undelete.php:41
 #, php-format
 msgid "Couldn't restore %s"
-msgstr ""
+msgstr "Không thể khôi phục %s"
 
 #: js/trash.js:7 js/trash.js:94
 msgid "perform restore operation"
-msgstr ""
+msgstr "thực hiện phục hồi"
 
 #: js/trash.js:33
 msgid "delete file permanently"
-msgstr ""
+msgstr "xóa file vĩnh viễn"
 
 #: js/trash.js:125 templates/index.php:17
 msgid "Name"
@@ -41,7 +42,7 @@ msgstr "Tên"
 
 #: js/trash.js:126 templates/index.php:27
 msgid "Deleted"
-msgstr ""
+msgstr "Đã xóa"
 
 #: js/trash.js:135
 msgid "1 folder"
@@ -61,8 +62,8 @@ msgstr "{count} tập tin"
 
 #: templates/index.php:9
 msgid "Nothing in here. Your trash bin is empty!"
-msgstr ""
+msgstr "Không có gì ở đây. Thùng rác của bạn rỗng!"
 
 #: templates/index.php:20 templates/index.php:22
 msgid "Restore"
-msgstr ""
+msgstr "Khôi phục"
diff --git a/l10n/vi/files_versions.po b/l10n/vi/files_versions.po
index 9ebe3a80d4b568fbde13b19324dbb296b08c19be..86b6d7a99838bcc91be2a5ea0a4eae52c4aa55ac 100644
--- a/l10n/vi/files_versions.po
+++ b/l10n/vi/files_versions.po
@@ -4,14 +4,15 @@
 # 
 # Translators:
 #   <khanhnd@kenhgiaiphap.vn>, 2012.
+# sao sang <saosangmo@yahoo.com>, 2013.
 # Sơn Nguyễn <sonnghit@gmail.com>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 23:11+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 18:30+0000\n"
+"Last-Translator: saosangm <saosangmo@yahoo.com>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -22,33 +23,33 @@ msgstr ""
 #: ajax/rollbackVersion.php:15
 #, php-format
 msgid "Could not revert: %s"
-msgstr ""
+msgstr "Không thể khôi phục: %s"
 
 #: history.php:40
 msgid "success"
-msgstr ""
+msgstr "thành công"
 
 #: history.php:42
 #, php-format
 msgid "File %s was reverted to version %s"
-msgstr ""
+msgstr "File %s đã được khôi phục về phiên bản %s"
 
 #: history.php:49
 msgid "failure"
-msgstr ""
+msgstr "Thất bại"
 
 #: history.php:51
 #, php-format
 msgid "File %s could not be reverted to version %s"
-msgstr ""
+msgstr "File %s không thể khôi phục về phiên bản %s"
 
 #: history.php:68
 msgid "No old versions available"
-msgstr ""
+msgstr "Không có phiên bản cũ nào"
 
 #: history.php:73
 msgid "No path specified"
-msgstr ""
+msgstr "Không chỉ ra đường dẫn rõ ràng"
 
 #: js/versions.js:16
 msgid "History"
@@ -56,7 +57,7 @@ msgstr "Lịch sử"
 
 #: templates/history.php:20
 msgid "Revert a file to a previous version by clicking on its revert button"
-msgstr ""
+msgstr "Khôi phục một file về phiên bản trước đó bằng cách click vào nút Khôi phục tương ứng"
 
 #: templates/settings.php:3
 msgid "Files Versioning"
diff --git a/l10n/vi/lib.po b/l10n/vi/lib.po
index d838960fd97a3d113d073073b0c9558daedace5b..13cc3e0968308d0e3db9f9420c15be23c71aa1a9 100644
--- a/l10n/vi/lib.po
+++ b/l10n/vi/lib.po
@@ -5,13 +5,14 @@
 # Translators:
 #   <mattheu.9x@gmail.com>, 2012.
 #   <mattheu_9x@yahoo.com>, 2012.
+# sao sang <saosangmo@yahoo.com>, 2013.
 # Sơn Nguyễn <sonnghit@gmail.com>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
@@ -20,49 +21,49 @@ msgstr ""
 "Language: vi\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "Giúp đỡ"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "Cá nhân"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "Cài đặt"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "Người dùng"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "Ứng dụng"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "Quản trị"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "Tải về ZIP đã bị tắt."
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "Tập tin cần phải được tải về từng người một."
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "Trở lại tập tin"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "Tập tin được chọn quá lớn để tạo tập tin ZIP."
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
-msgstr ""
+msgstr "không thể phát hiện được"
 
 #: json.php:28
 msgid "Application is not enabled"
@@ -88,6 +89,17 @@ msgstr "Văn bản"
 msgid "Images"
 msgstr "Hình ảnh"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "1 giây trước"
diff --git a/l10n/vi/settings.po b/l10n/vi/settings.po
index a8cdfa2fbb90e1d99cee4a9cf0e6b398fd8e3401..13b84537a44bed6d94df0ece0c52575284ed27ab 100644
--- a/l10n/vi/settings.po
+++ b/l10n/vi/settings.po
@@ -6,6 +6,7 @@
 #   <khanhnd@kenhgiaiphap.vn>, 2012.
 #   <mattheu.9x@gmail.com>, 2012.
 #   <mattheu_9x@yahoo.com>, 2012.
+# sao sang <saosangmo@yahoo.com>, 2013.
 # Son Nguyen <sonnghit@gmail.com>, 2012.
 # Sơn Nguyễn <sonnghit@gmail.com>, 2012.
 #   <vlinhd11@gmail.com>, 2012.
@@ -13,8 +14,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
@@ -27,14 +28,14 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "Không thể tải danh sách ứng dụng từ App Store"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "Lỗi xác thực"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
-msgstr ""
+msgstr "Không thể thay đổi tên hiển thị"
 
 #: ajax/creategroup.php:10
 msgid "Group already exists"
@@ -86,13 +87,13 @@ msgstr "Không thể thêm người dùng vào nhóm %s"
 msgid "Unable to remove user from group %s"
 msgstr "Không thể xóa người dùng từ nhóm %s"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
-msgstr ""
+msgstr "Không thể cập nhật ứng dụng"
 
 #: js/apps.js:30
 msgid "Update to {appversion}"
-msgstr ""
+msgstr "Cập nhật lên {appversion}"
 
 #: js/apps.js:36 js/apps.js:76
 msgid "Disable"
@@ -104,15 +105,15 @@ msgstr "Bật"
 
 #: js/apps.js:55
 msgid "Please wait...."
-msgstr ""
+msgstr "Xin hãy đợi..."
 
 #: js/apps.js:84
 msgid "Updating...."
-msgstr ""
+msgstr "Đang cập nhật..."
 
 #: js/apps.js:87
 msgid "Error while updating app"
-msgstr ""
+msgstr "Lỗi khi cập nhật ứng dụng"
 
 #: js/apps.js:87
 msgid "Error"
@@ -120,7 +121,7 @@ msgstr "Lỗi"
 
 #: js/apps.js:90
 msgid "Updated"
-msgstr ""
+msgstr "Đã cập nhật"
 
 #: js/personal.js:96
 msgid "Saving..."
@@ -156,27 +157,27 @@ msgstr "Cập nhật"
 
 #: templates/help.php:3
 msgid "User Documentation"
-msgstr ""
+msgstr "Tài liệu người sử dụng"
 
 #: templates/help.php:4
 msgid "Administrator Documentation"
-msgstr ""
+msgstr "Tài liệu quản trị"
 
 #: templates/help.php:6
 msgid "Online Documentation"
-msgstr ""
+msgstr "Tài liệu trực tuyến"
 
 #: templates/help.php:7
 msgid "Forum"
-msgstr ""
+msgstr "Diễn đàn"
 
 #: templates/help.php:9
 msgid "Bugtracker"
-msgstr ""
+msgstr "Hệ ghi nhận lỗi"
 
 #: templates/help.php:11
 msgid "Commercial Support"
-msgstr ""
+msgstr "Hỗ trợ có phí"
 
 #: templates/personal.php:8
 #, php-format
@@ -189,15 +190,15 @@ msgstr "Khách hàng"
 
 #: templates/personal.php:13
 msgid "Download Desktop Clients"
-msgstr ""
+msgstr "Download bộ cài trên desktop"
 
 #: templates/personal.php:14
 msgid "Download Android Client"
-msgstr ""
+msgstr "Download bộ cài trên Android"
 
 #: templates/personal.php:15
 msgid "Download iOS Client"
-msgstr ""
+msgstr "Download bộ cài trên iOS"
 
 #: templates/personal.php:23 templates/users.php:23 templates/users.php:81
 msgid "Password"
@@ -219,29 +220,25 @@ msgstr "Mật khẩu cũ"
 msgid "New password"
 msgstr "Mật khẩu mới "
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "Hiện"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "Đổi mật khẩu"
 
 #: templates/personal.php:41 templates/users.php:80
 msgid "Display Name"
-msgstr ""
+msgstr "Tên hiển thị"
 
 #: templates/personal.php:42
 msgid "Your display name was changed"
-msgstr ""
+msgstr "Tên hiển thị của bạn đã được thay đổi"
 
 #: templates/personal.php:43
 msgid "Unable to change your display name"
-msgstr ""
+msgstr "Không thể thay đổi tên hiển thị của bạn"
 
 #: templates/personal.php:46
 msgid "Change display name"
-msgstr ""
+msgstr "Thay đổi tên hiển thị"
 
 #: templates/personal.php:55
 msgid "Email"
@@ -265,15 +262,15 @@ msgstr "Hỗ trợ dịch thuật"
 
 #: templates/personal.php:74
 msgid "WebDAV"
-msgstr ""
+msgstr "WebDAV"
 
 #: templates/personal.php:76
 msgid "Use this address to connect to your ownCloud in your file manager"
-msgstr ""
+msgstr "Sử dụng địa chỉ này để kết nối ownCloud của bạn trong trình quản lý file của bạn"
 
 #: templates/personal.php:85
 msgid "Version"
-msgstr ""
+msgstr "Phiên bản"
 
 #: templates/personal.php:87
 msgid ""
@@ -287,7 +284,7 @@ msgstr "Được phát triển bởi <a href=\"http://ownCloud.org/contact\" tar
 
 #: templates/users.php:21 templates/users.php:79
 msgid "Login Name"
-msgstr ""
+msgstr "Tên đăng nhập"
 
 #: templates/users.php:26 templates/users.php:82 templates/users.php:107
 msgid "Groups"
@@ -299,11 +296,11 @@ msgstr "Tạo"
 
 #: templates/users.php:35
 msgid "Default Storage"
-msgstr ""
+msgstr "Bộ nhớ mặc định"
 
 #: templates/users.php:42 templates/users.php:142
 msgid "Unlimited"
-msgstr ""
+msgstr "Không giới hạn"
 
 #: templates/users.php:60 templates/users.php:157
 msgid "Other"
@@ -315,19 +312,19 @@ msgstr "Nhóm quản trị"
 
 #: templates/users.php:86
 msgid "Storage"
-msgstr ""
+msgstr "Bộ nhớ"
 
 #: templates/users.php:97
 msgid "change display name"
-msgstr ""
+msgstr "Thay đổi tên hiển thị"
 
 #: templates/users.php:101
 msgid "set new password"
-msgstr ""
+msgstr "đặt mật khẩu mới"
 
 #: templates/users.php:137
 msgid "Default"
-msgstr ""
+msgstr "Mặc định"
 
 #: templates/users.php:165
 msgid "Delete"
diff --git a/l10n/vi/user_ldap.po b/l10n/vi/user_ldap.po
index fb97cfd9a49b04b4d14fa777634f436fb5b03d5c..003187cb06d08824e6c9336e1a86ae8a583c1d4d 100644
--- a/l10n/vi/user_ldap.po
+++ b/l10n/vi/user_ldap.po
@@ -4,14 +4,15 @@
 # 
 # Translators:
 #   <mattheu_9x@yahoo.com>, 2012.
+# sao sang <saosangmo@yahoo.com>, 2013.
 # Sơn Nguyễn <sonnghit@gmail.com>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-08 00:10+0100\n"
-"PO-Revision-Date: 2013-02-07 23:11+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 19:00+0000\n"
+"Last-Translator: saosangm <saosangmo@yahoo.com>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -174,7 +175,7 @@ msgstr "mà không giữ chỗ nào, ví dụ như \"objectClass = osixGroup\"."
 
 #: templates/settings.php:31
 msgid "Connection Settings"
-msgstr ""
+msgstr "Connection Settings"
 
 #: templates/settings.php:33
 msgid "Configuration Active"
@@ -200,15 +201,15 @@ msgstr ""
 
 #: templates/settings.php:36
 msgid "Backup (Replica) Port"
-msgstr ""
+msgstr "Cổng sao lưu (Replica)"
 
 #: templates/settings.php:37
 msgid "Disable Main Server"
-msgstr ""
+msgstr "Tắt máy chủ chính"
 
 #: templates/settings.php:37
 msgid "When switched on, ownCloud will only connect to the replica server."
-msgstr ""
+msgstr "When switched on, ownCloud will only connect to the replica server."
 
 #: templates/settings.php:38
 msgid "Use TLS"
@@ -216,7 +217,7 @@ msgstr "Sử dụng TLS"
 
 #: templates/settings.php:38
 msgid "Do not use it additionally for LDAPS connections, it will fail."
-msgstr ""
+msgstr "Do not use it additionally for LDAPS connections, it will fail."
 
 #: templates/settings.php:39
 msgid "Case insensitve LDAP server (Windows)"
@@ -242,7 +243,7 @@ msgstr "trong vài giây. Một sự thay đổi bộ nhớ cache."
 
 #: templates/settings.php:43
 msgid "Directory Settings"
-msgstr ""
+msgstr "Directory Settings"
 
 #: templates/settings.php:45
 msgid "User Display Name Field"
@@ -262,11 +263,11 @@ msgstr ""
 
 #: templates/settings.php:47
 msgid "User Search Attributes"
-msgstr ""
+msgstr "User Search Attributes"
 
 #: templates/settings.php:47 templates/settings.php:50
 msgid "Optional; one attribute per line"
-msgstr ""
+msgstr "Optional; one attribute per line"
 
 #: templates/settings.php:48
 msgid "Group Display Name Field"
@@ -286,7 +287,7 @@ msgstr ""
 
 #: templates/settings.php:50
 msgid "Group Search Attributes"
-msgstr ""
+msgstr "Group Search Attributes"
 
 #: templates/settings.php:51
 msgid "Group-Member association"
@@ -294,7 +295,7 @@ msgstr "Nhóm thành viên Cộng đồng"
 
 #: templates/settings.php:53
 msgid "Special Attributes"
-msgstr ""
+msgstr "Special Attributes"
 
 #: templates/settings.php:56
 msgid "in bytes"
diff --git a/l10n/vi/user_webdavauth.po b/l10n/vi/user_webdavauth.po
index 5442bdaff4254a6f120a189e07b7325d2a1753b5..57c796e00db20b026f43e25794eaf661b5c80f1c 100644
--- a/l10n/vi/user_webdavauth.po
+++ b/l10n/vi/user_webdavauth.po
@@ -3,14 +3,15 @@
 # This file is distributed under the same license as the PACKAGE package.
 # 
 # Translators:
+# sao sang <saosangmo@yahoo.com>, 2013.
 # Sơn Nguyễn <sonnghit@gmail.com>, 2012.
 msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-15 00:03+0100\n"
-"PO-Revision-Date: 2013-01-14 23:04+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 18:30+0000\n"
+"Last-Translator: saosangm <saosangmo@yahoo.com>\n"
 "Language-Team: Vietnamese (http://www.transifex.com/projects/p/owncloud/language/vi/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -20,15 +21,15 @@ msgstr ""
 
 #: templates/settings.php:3
 msgid "WebDAV Authentication"
-msgstr ""
+msgstr "Xác thực WebDAV"
 
 #: templates/settings.php:4
 msgid "URL: http://"
-msgstr ""
+msgstr "URL: http://"
 
-#: templates/settings.php:6
+#: templates/settings.php:7
 msgid ""
 "ownCloud will send the user credentials to this URL. This plugin checks the "
 "response and will interpret the HTTP statuscodes 401 and 403 as invalid "
 "credentials, and all other responses as valid credentials."
-msgstr ""
+msgstr "ownCloud sẽ gửi chứng thư người dùng tới URL này. Tính năng này kiểm tra trả lời và sẽ hiểu mã 401 và 403 của giao thức HTTP là chứng thư không hợp lệ, và mọi trả lời khác được coi là hợp lệ."
diff --git a/l10n/zh_CN.GB2312/files.po b/l10n/zh_CN.GB2312/files.po
index 000f4c3195c2ddaaadaf3a1330fd37b9b1c2c046..009c2cf3629e493a27561f0e72c64026a9e5e847 100644
--- a/l10n/zh_CN.GB2312/files.po
+++ b/l10n/zh_CN.GB2312/files.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
 "MIME-Version: 1.0\n"
@@ -80,51 +80,52 @@ msgstr ""
 msgid "Files"
 msgstr "文件"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "取消共享"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "删除"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "重命名"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "Pending"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} 已存在"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "替换"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "推荐名称"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "取消"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "已替换 {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "撤销"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "已用 {old_name} 替换 {new_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -164,64 +165,60 @@ msgstr "不能上传你指定的文件,可能因为它是个文件夹或者大
 msgid "Upload Error"
 msgstr "上传错误"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "关闭"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "Pending"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 个文件正在上传"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} 个文件正在上传"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "上传取消了"
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "文件正在上传。关闭页面会取消上传。"
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "网址不能为空。"
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "名字"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "大小"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "修改日期"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1 个文件夹"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} 个文件夹"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 个文件"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} 个文件"
 
@@ -278,7 +275,7 @@ msgid "From link"
 msgstr "来自链接"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -293,6 +290,10 @@ msgstr "这里没有东西.上传点什么!"
 msgid "Download"
 msgstr "下载"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "取消共享"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "上传的文件太大了"
diff --git a/l10n/zh_CN.GB2312/files_encryption.po b/l10n/zh_CN.GB2312/files_encryption.po
index bacd5c9294bf010b87536618d4704aae97d64a1d..262bed13b5928d8f3139e8d10f84cf8bf4568cd2 100644
--- a/l10n/zh_CN.GB2312/files_encryption.po
+++ b/l10n/zh_CN.GB2312/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: zh_CN.GB2312\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "加密"
diff --git a/l10n/zh_CN.GB2312/lib.po b/l10n/zh_CN.GB2312/lib.po
index d03b24aa3aa136fca1b9156b048023e51233307e..54a6583f57673a399ff92bd85310bd3597682eef 100644
--- a/l10n/zh_CN.GB2312/lib.po
+++ b/l10n/zh_CN.GB2312/lib.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
 "MIME-Version: 1.0\n"
@@ -18,47 +18,47 @@ msgstr ""
 "Language: zh_CN.GB2312\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "帮助"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "私人"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "设置"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "用户"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "程序"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "管理员"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIP 下载已关闭"
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "需要逐个下载文件。"
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "返回到文件"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "选择的文件太大而不能生成 zip 文件。"
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -86,6 +86,17 @@ msgstr "文本"
 msgid "Images"
 msgstr "图片"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "秒前"
diff --git a/l10n/zh_CN.GB2312/settings.po b/l10n/zh_CN.GB2312/settings.po
index 3335b000123b4bbbafc2caabeaab1221ee2af0c6..55d149d2f082da1d45c9fb856452101c577940ef 100644
--- a/l10n/zh_CN.GB2312/settings.po
+++ b/l10n/zh_CN.GB2312/settings.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (China) (GB2312) (http://www.transifex.com/projects/p/owncloud/language/zh_CN.GB2312/)\n"
 "MIME-Version: 1.0\n"
@@ -23,12 +23,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "不能从App Store 中加载列表"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "认证错误"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -82,7 +82,7 @@ msgstr "未能添加用户到群组 %s"
 msgid "Unable to remove user from group %s"
 msgstr "未能将用户从群组 %s 移除"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -215,10 +215,6 @@ msgstr "现在的密码"
 msgid "New password"
 msgstr "新密码"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "展示"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "改变密码"
diff --git a/l10n/zh_CN/files.po b/l10n/zh_CN/files.po
index 8fe77aaf1159eff114030099c59548563bd6842d..adec54ddf3d85e3a0067a8c84edc456bd6a2ff4d 100644
--- a/l10n/zh_CN/files.po
+++ b/l10n/zh_CN/files.po
@@ -14,8 +14,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
 "MIME-Version: 1.0\n"
@@ -27,16 +27,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "无法移动 %s - 同名文件已存在"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "无法移动 %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "无法重命名文件"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -85,51 +85,52 @@ msgstr "无效文件夹。"
 msgid "Files"
 msgstr "文件"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "取消分享"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "删除"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "重命名"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "操作等待中"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} 已存在"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "替换"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "建议名称"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "取消"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "替换 {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "撤销"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "已将 {old_name}替换成 {new_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -169,64 +170,60 @@ msgstr "无法上传文件,因为它是一个目录或者大小为 0 字节"
 msgid "Upload Error"
 msgstr "上传错误"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "关闭"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "操作等待中"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1个文件上传中"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} 个文件上传中"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "上传已取消"
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "文件正在上传中。现在离开此页会导致上传动作被取消。"
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL不能为空"
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "无效文件夹名。'共享' 是 Owncloud 预留的文件夹名。"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr "名称"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr "大小"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr "修改日期"
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr "1个文件夹"
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr "{count} 个文件夹"
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr "1 个文件"
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr "{count} 个文件"
 
@@ -283,7 +280,7 @@ msgid "From link"
 msgstr "来自链接"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -298,6 +295,10 @@ msgstr "这里还什么都没有。上传些东西吧!"
 msgid "Download"
 msgstr "下载"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "取消分享"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "上传文件过大"
diff --git a/l10n/zh_CN/files_encryption.po b/l10n/zh_CN/files_encryption.po
index f7e50a5ccc18ce250aa8ec336ea1ac954fa90bf9..b9d48e1dcecefccc77e9b7c7921167b32816683f 100644
--- a/l10n/zh_CN/files_encryption.po
+++ b/l10n/zh_CN/files_encryption.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
 "MIME-Version: 1.0\n"
@@ -18,28 +18,6 @@ msgstr ""
 "Language: zh_CN\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "加密"
diff --git a/l10n/zh_CN/lib.po b/l10n/zh_CN/lib.po
index 7dd9eb38371d73e138a1bdf39e8754142021837e..fb9d07ad2c3b190c5155c13577b78929288ff9b6 100644
--- a/l10n/zh_CN/lib.po
+++ b/l10n/zh_CN/lib.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
 "MIME-Version: 1.0\n"
@@ -19,47 +19,47 @@ msgstr ""
 "Language: zh_CN\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "帮助"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "个人"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "设置"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "用户"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "应用"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "管理"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIP 下载已经关闭"
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "需要逐一下载文件"
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "回到文件"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "选择的文件太大,无法生成 zip 文件。"
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -87,6 +87,17 @@ msgstr "文本"
 msgid "Images"
 msgstr "图像"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "几秒前"
diff --git a/l10n/zh_CN/settings.po b/l10n/zh_CN/settings.po
index 51c13db8795c6a14d8bb3083526d8bfb55ec621b..c667c480d313c67ce3f4a83376d129fbc6270994 100644
--- a/l10n/zh_CN/settings.po
+++ b/l10n/zh_CN/settings.po
@@ -13,8 +13,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/owncloud/language/zh_CN/)\n"
 "MIME-Version: 1.0\n"
@@ -27,12 +27,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "无法从应用商店载入列表"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "认证错误"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -86,7 +86,7 @@ msgstr "无法把用户添加到组 %s"
 msgid "Unable to remove user from group %s"
 msgstr "无法从组%s中移除用户"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -219,10 +219,6 @@ msgstr "当前密码"
 msgid "New password"
 msgstr "新密码"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "显示"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "修改密码"
diff --git a/l10n/zh_HK/files.po b/l10n/zh_HK/files.po
index 172bdcbcee43edbfc7069e61a2f1362761500a2d..215528e3273c4cf66dc415abb5787e674e161ffe 100644
--- a/l10n/zh_HK/files.po
+++ b/l10n/zh_HK/files.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
 "MIME-Version: 1.0\n"
@@ -78,51 +78,52 @@ msgstr ""
 msgid "Files"
 msgstr ""
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr ""
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
 msgstr ""
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr ""
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr ""
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr ""
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr ""
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr ""
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr ""
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr ""
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr ""
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr ""
 
@@ -162,64 +163,60 @@ msgstr ""
 msgid "Upload Error"
 msgstr ""
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr ""
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr ""
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr ""
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr ""
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr ""
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr ""
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr ""
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr ""
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:947 templates/index.php:67
 msgid "Name"
 msgstr ""
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:948 templates/index.php:78
 msgid "Size"
 msgstr ""
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:949 templates/index.php:80
 msgid "Modified"
 msgstr ""
 
-#: js/files.js:974
+#: js/files.js:968
 msgid "1 folder"
 msgstr ""
 
-#: js/files.js:976
+#: js/files.js:970
 msgid "{count} folders"
 msgstr ""
 
-#: js/files.js:984
+#: js/files.js:978
 msgid "1 file"
 msgstr ""
 
-#: js/files.js:986
+#: js/files.js:980
 msgid "{count} files"
 msgstr ""
 
@@ -276,7 +273,7 @@ msgid "From link"
 msgstr ""
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr ""
 
 #: templates/index.php:46
@@ -291,6 +288,10 @@ msgstr ""
 msgid "Download"
 msgstr ""
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr ""
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr ""
diff --git a/l10n/zh_HK/files_encryption.po b/l10n/zh_HK/files_encryption.po
index c8652a2cde396b9646644e824223a4469a44d529..b213e0bbd8d8ff36c1f80b4ae1a721cb119c3d3f 100644
--- a/l10n/zh_HK/files_encryption.po
+++ b/l10n/zh_HK/files_encryption.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
 "MIME-Version: 1.0\n"
@@ -17,28 +17,6 @@ msgstr ""
 "Language: zh_HK\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr ""
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr ""
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr ""
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr ""
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr ""
diff --git a/l10n/zh_HK/lib.po b/l10n/zh_HK/lib.po
index f3bc0dc6e13e72d21cd779340b8873ab21fb9b44..f59d6a5279a3836bd7179d2be4b3cb0823b97f45 100644
--- a/l10n/zh_HK/lib.po
+++ b/l10n/zh_HK/lib.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-17 00:26+0100\n"
-"PO-Revision-Date: 2013-01-16 23:26+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:08+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
 "MIME-Version: 1.0\n"
@@ -17,47 +17,47 @@ msgstr ""
 "Language: zh_HK\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr ""
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr ""
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr ""
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr ""
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr ""
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr ""
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr ""
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr ""
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr ""
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr ""
 
-#: helper.php:228
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr ""
 
@@ -85,6 +85,17 @@ msgstr ""
 msgid "Images"
 msgstr ""
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr ""
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr ""
+
 #: template.php:113
 msgid "seconds ago"
 msgstr ""
diff --git a/l10n/zh_HK/settings.po b/l10n/zh_HK/settings.po
index e9501109c5af6fd6e266389f9e746b8ab071ea32..5c055bf08ce286a5ea6f14ed01a30558eca6083b 100644
--- a/l10n/zh_HK/settings.po
+++ b/l10n/zh_HK/settings.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Hong Kong) (http://www.transifex.com/projects/p/owncloud/language/zh_HK/)\n"
 "MIME-Version: 1.0\n"
@@ -21,12 +21,12 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr ""
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr ""
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
 msgstr ""
 
@@ -80,7 +80,7 @@ msgstr ""
 msgid "Unable to remove user from group %s"
 msgstr ""
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr ""
 
@@ -213,10 +213,6 @@ msgstr ""
 msgid "New password"
 msgstr ""
 
-#: templates/personal.php:28
-msgid "show"
-msgstr ""
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr ""
diff --git a/l10n/zh_TW/core.po b/l10n/zh_TW/core.po
index e060611cd6ad30b778120f607f06aa1400e1aa43..183982cbe94c78239635ba38b76ca9934dda295e 100644
--- a/l10n/zh_TW/core.po
+++ b/l10n/zh_TW/core.po
@@ -12,9 +12,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 06:20+0000\n"
+"Last-Translator: pellaeon <nfsmwlin@gmail.com>\n"
 "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -57,7 +57,7 @@ msgstr "沒有可增加的分類?"
 #: ajax/vcategories/add.php:37
 #, php-format
 msgid "This category already exists: %s"
-msgstr ""
+msgstr "分類已經存在: %s"
 
 #: ajax/vcategories/addToFavorites.php:26 ajax/vcategories/delete.php:27
 #: ajax/vcategories/favorites.php:24
@@ -161,59 +161,59 @@ msgstr "十一月"
 msgid "December"
 msgstr "十二月"
 
-#: js/js.js:284
+#: js/js.js:286
 msgid "Settings"
 msgstr "設定"
 
-#: js/js.js:764
+#: js/js.js:767
 msgid "seconds ago"
 msgstr "幾秒前"
 
-#: js/js.js:765
+#: js/js.js:768
 msgid "1 minute ago"
 msgstr "1 分鐘前"
 
-#: js/js.js:766
+#: js/js.js:769
 msgid "{minutes} minutes ago"
 msgstr "{minutes} 分鐘前"
 
-#: js/js.js:767
+#: js/js.js:770
 msgid "1 hour ago"
 msgstr "1 個小時前"
 
-#: js/js.js:768
+#: js/js.js:771
 msgid "{hours} hours ago"
 msgstr "{hours} 小時前"
 
-#: js/js.js:769
+#: js/js.js:772
 msgid "today"
 msgstr "今天"
 
-#: js/js.js:770
+#: js/js.js:773
 msgid "yesterday"
 msgstr "昨天"
 
-#: js/js.js:771
+#: js/js.js:774
 msgid "{days} days ago"
 msgstr "{days} 天前"
 
-#: js/js.js:772
+#: js/js.js:775
 msgid "last month"
 msgstr "上個月"
 
-#: js/js.js:773
+#: js/js.js:776
 msgid "{months} months ago"
 msgstr "{months} 個月前"
 
-#: js/js.js:774
+#: js/js.js:777
 msgid "months ago"
 msgstr "幾個月前"
 
-#: js/js.js:775
+#: js/js.js:778
 msgid "last year"
 msgstr "去年"
 
-#: js/js.js:776
+#: js/js.js:779
 msgid "years ago"
 msgstr "幾年前"
 
@@ -243,8 +243,8 @@ msgid "The object type is not specified."
 msgstr "未指定物件類型。"
 
 #: js/oc-vcategories.js:95 js/oc-vcategories.js:125 js/oc-vcategories.js:136
-#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:571
-#: js/share.js:583
+#: js/oc-vcategories.js:195 js/share.js:152 js/share.js:159 js/share.js:582
+#: js/share.js:594
 msgid "Error"
 msgstr "錯誤"
 
@@ -264,7 +264,7 @@ msgstr "分享"
 msgid "Shared"
 msgstr "已分享"
 
-#: js/share.js:141 js/share.js:611
+#: js/share.js:141 js/share.js:622
 msgid "Error while sharing"
 msgstr "分享時發生錯誤"
 
@@ -360,23 +360,23 @@ msgstr "刪除"
 msgid "share"
 msgstr "分享"
 
-#: js/share.js:373 js/share.js:558
+#: js/share.js:373 js/share.js:569
 msgid "Password protected"
 msgstr "受密碼保護"
 
-#: js/share.js:571
+#: js/share.js:582
 msgid "Error unsetting expiration date"
 msgstr "解除過期日設定失敗"
 
-#: js/share.js:583
+#: js/share.js:594
 msgid "Error setting expiration date"
 msgstr "錯誤的到期日設定"
 
-#: js/share.js:598
+#: js/share.js:609
 msgid "Sending ..."
 msgstr "正在寄出..."
 
-#: js/share.js:609
+#: js/share.js:620
 msgid "Email sent"
 msgstr "Email 已寄出"
 
@@ -492,14 +492,14 @@ msgstr "若沒有安全的亂數產生器,攻擊者可能可以預測密碼重
 msgid ""
 "Your data directory and files are probably accessible from the internet "
 "because the .htaccess file does not work."
-msgstr ""
+msgstr "您的資料目錄看起來可以被 Internet 公開存取,因為 .htaccess 設定並未生效。"
 
 #: templates/installation.php:32
 msgid ""
 "For information how to properly configure your server, please see the <a "
 "href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" "
 "target=\"_blank\">documentation</a>."
-msgstr ""
+msgstr "請參考<a href=\"http://doc.owncloud.org/server/5.0/admin_manual/installation.html\" target=\"_blank\">說明文件</a>以瞭解如何正確設定您的伺服器。"
 
 #: templates/installation.php:36
 msgid "Create an <strong>admin account</strong>"
@@ -582,7 +582,7 @@ msgstr "登入"
 
 #: templates/login.php:49
 msgid "Alternative Logins"
-msgstr ""
+msgstr "替代登入方法"
 
 #: templates/part.pagenavi.php:3
 msgid "prev"
diff --git a/l10n/zh_TW/files.po b/l10n/zh_TW/files.po
index 6f12f19b478eba9ac0c3fed8963ca3d0c0218763..0ff4e1b4dda5d8837d968e368b1fec6a6ba5241b 100644
--- a/l10n/zh_TW/files.po
+++ b/l10n/zh_TW/files.po
@@ -13,9 +13,9 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-09 00:12+0100\n"
-"PO-Revision-Date: 2013-02-08 23:12+0000\n"
-"Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 06:20+0000\n"
+"Last-Translator: pellaeon <nfsmwlin@gmail.com>\n"
 "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -26,16 +26,16 @@ msgstr ""
 #: ajax/move.php:17
 #, php-format
 msgid "Could not move %s - File with this name already exists"
-msgstr ""
+msgstr "無法移動 %s - 同名的檔案已經存在"
 
 #: ajax/move.php:27 ajax/move.php:30
 #, php-format
 msgid "Could not move %s"
-msgstr ""
+msgstr "無法移動 %s"
 
 #: ajax/rename.php:22 ajax/rename.php:25
 msgid "Unable to rename file"
-msgstr ""
+msgstr "無法重新命名檔案"
 
 #: ajax/upload.php:19
 msgid "No file was uploaded. Unknown error"
@@ -74,7 +74,7 @@ msgstr "寫入硬碟失敗"
 
 #: ajax/upload.php:52
 msgid "Not enough storage available"
-msgstr ""
+msgstr "儲存空間不足"
 
 #: ajax/upload.php:83
 msgid "Invalid directory."
@@ -84,51 +84,52 @@ msgstr "無效的資料夾。"
 msgid "Files"
 msgstr "檔案"
 
-#: js/fileactions.js:117 templates/index.php:85 templates/index.php:86
-msgid "Unshare"
-msgstr "取消共享"
-
-#: js/fileactions.js:119
+#: js/fileactions.js:116
 msgid "Delete permanently"
-msgstr ""
+msgstr "永久刪除"
 
-#: js/fileactions.js:121 templates/index.php:91 templates/index.php:92
+#: js/fileactions.js:118 templates/index.php:91 templates/index.php:92
 msgid "Delete"
 msgstr "刪除"
 
-#: js/fileactions.js:187
+#: js/fileactions.js:184
 msgid "Rename"
 msgstr "重新命名"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:49 js/filelist.js:52 js/files.js:291 js/files.js:407
+#: js/files.js:438
+msgid "Pending"
+msgstr "等候中"
+
+#: js/filelist.js:253 js/filelist.js:255
 msgid "{new_name} already exists"
 msgstr "{new_name} 已經存在"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "replace"
 msgstr "取代"
 
-#: js/filelist.js:208
+#: js/filelist.js:253
 msgid "suggest name"
 msgstr "建議檔名"
 
-#: js/filelist.js:208 js/filelist.js:210
+#: js/filelist.js:253 js/filelist.js:255
 msgid "cancel"
 msgstr "取消"
 
-#: js/filelist.js:253
+#: js/filelist.js:295
 msgid "replaced {new_name}"
 msgstr "已取代 {new_name}"
 
-#: js/filelist.js:253 js/filelist.js:255
+#: js/filelist.js:295 js/filelist.js:297
 msgid "undo"
 msgstr "復原"
 
-#: js/filelist.js:255
+#: js/filelist.js:297
 msgid "replaced {new_name} with {old_name}"
 msgstr "使用 {new_name} 取代 {old_name}"
 
-#: js/filelist.js:280
+#: js/filelist.js:322
 msgid "perform delete operation"
 msgstr "進行刪除動作"
 
@@ -168,64 +169,60 @@ msgstr "無法上傳您的檔案因為它可能是一個目錄或檔案大小為
 msgid "Upload Error"
 msgstr "上傳發生錯誤"
 
-#: js/files.js:278
+#: js/files.js:272
 msgid "Close"
 msgstr "關閉"
 
-#: js/files.js:297 js/files.js:413 js/files.js:444
-msgid "Pending"
-msgstr "等候中"
-
-#: js/files.js:317
+#: js/files.js:311
 msgid "1 file uploading"
 msgstr "1 個檔案正在上傳"
 
-#: js/files.js:320 js/files.js:375 js/files.js:390
+#: js/files.js:314 js/files.js:369 js/files.js:384
 msgid "{count} files uploading"
 msgstr "{count} 個檔案正在上傳"
 
-#: js/files.js:393 js/files.js:428
+#: js/files.js:387 js/files.js:422
 msgid "Upload cancelled."
 msgstr "上傳取消"
 
-#: js/files.js:502
+#: js/files.js:496
 msgid ""
 "File upload is in progress. Leaving the page now will cancel the upload."
 msgstr "檔案上傳中。離開此頁面將會取消上傳。"
 
-#: js/files.js:575
+#: js/files.js:569
 msgid "URL cannot be empty."
 msgstr "URL 不能為空白."
 
-#: js/files.js:580
+#: js/files.js:574
 msgid "Invalid folder name. Usage of 'Shared' is reserved by Owncloud"
 msgstr "無效的資料夾名稱,'Shared' 的使用被 Owncloud 保留"
 
-#: js/files.js:953 templates/index.php:67
+#: js/files.js:948 templates/index.php:67
 msgid "Name"
 msgstr "名稱"
 
-#: js/files.js:954 templates/index.php:78
+#: js/files.js:949 templates/index.php:78
 msgid "Size"
 msgstr "大小"
 
-#: js/files.js:955 templates/index.php:80
+#: js/files.js:950 templates/index.php:80
 msgid "Modified"
 msgstr "修改"
 
-#: js/files.js:974
+#: js/files.js:969
 msgid "1 folder"
 msgstr "1 個資料夾"
 
-#: js/files.js:976
+#: js/files.js:971
 msgid "{count} folders"
 msgstr "{count} 個資料夾"
 
-#: js/files.js:984
+#: js/files.js:979
 msgid "1 file"
 msgstr "1 個檔案"
 
-#: js/files.js:986
+#: js/files.js:981
 msgid "{count} files"
 msgstr "{count} 個檔案"
 
@@ -282,7 +279,7 @@ msgid "From link"
 msgstr "從連結"
 
 #: templates/index.php:40
-msgid "Trash"
+msgid "Trash bin"
 msgstr "回收筒"
 
 #: templates/index.php:46
@@ -297,6 +294,10 @@ msgstr "沒有任何東西。請上傳內容!"
 msgid "Download"
 msgstr "下載"
 
+#: templates/index.php:85 templates/index.php:86
+msgid "Unshare"
+msgstr "取消共享"
+
 #: templates/index.php:105
 msgid "Upload too large"
 msgstr "上傳過大"
diff --git a/l10n/zh_TW/files_encryption.po b/l10n/zh_TW/files_encryption.po
index 785876bb0fb3b7127d16ccbb6ccb72dfa556869c..a07b9404ea3eb60d0af2b31b04e35f51b4218119 100644
--- a/l10n/zh_TW/files_encryption.po
+++ b/l10n/zh_TW/files_encryption.po
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-06 00:05+0100\n"
-"PO-Revision-Date: 2013-02-05 23:05+0000\n"
+"POT-Creation-Date: 2013-02-10 00:08+0100\n"
+"PO-Revision-Date: 2013-02-09 23:09+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
 "MIME-Version: 1.0\n"
@@ -19,28 +19,6 @@ msgstr ""
 "Language: zh_TW\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: js/settings-personal.js:17
-msgid ""
-"Please switch to your ownCloud client and change your encryption password to"
-" complete the conversion."
-msgstr "請至您的 ownCloud 客戶端程式修改您的加密密碼以完成轉換。"
-
-#: js/settings-personal.js:17
-msgid "switched to client side encryption"
-msgstr "已切換為客戶端加密"
-
-#: js/settings-personal.js:21
-msgid "Change encryption password to login password"
-msgstr "將加密密碼修改為登入密碼"
-
-#: js/settings-personal.js:25
-msgid "Please check your passwords and try again."
-msgstr "請檢查您的密碼並再試一次。"
-
-#: js/settings-personal.js:25
-msgid "Could not change your file encryption password to your login password"
-msgstr "無法變更您的檔案加密密碼為登入密碼"
-
 #: templates/settings-personal.php:4 templates/settings.php:5
 msgid "Encryption"
 msgstr "加密"
diff --git a/l10n/zh_TW/lib.po b/l10n/zh_TW/lib.po
index 8a76773c0768c4c8e859861b448b507e86af5390..6b309b3bfb5ae38c3fd7b81b413f9ec44ce54851 100644
--- a/l10n/zh_TW/lib.po
+++ b/l10n/zh_TW/lib.po
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-01-24 00:06+0100\n"
-"PO-Revision-Date: 2013-01-23 10:07+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 06:20+0000\n"
 "Last-Translator: pellaeon <nfsmwlin@gmail.com>\n"
 "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
 "MIME-Version: 1.0\n"
@@ -21,47 +21,47 @@ msgstr ""
 "Language: zh_TW\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: app.php:301
+#: app.php:339
 msgid "Help"
 msgstr "說明"
 
-#: app.php:308
+#: app.php:346
 msgid "Personal"
 msgstr "個人"
 
-#: app.php:313
+#: app.php:351
 msgid "Settings"
 msgstr "設定"
 
-#: app.php:318
+#: app.php:356
 msgid "Users"
 msgstr "使用者"
 
-#: app.php:325
+#: app.php:363
 msgid "Apps"
 msgstr "應用程式"
 
-#: app.php:327
+#: app.php:365
 msgid "Admin"
 msgstr "管理"
 
-#: files.php:365
+#: files.php:202
 msgid "ZIP download is turned off."
 msgstr "ZIP 下載已關閉"
 
-#: files.php:366
+#: files.php:203
 msgid "Files need to be downloaded one by one."
 msgstr "檔案需要逐一下載"
 
-#: files.php:366 files.php:391
+#: files.php:203 files.php:228
 msgid "Back to Files"
 msgstr "回到檔案列表"
 
-#: files.php:390
+#: files.php:227
 msgid "Selected files too large to generate zip file."
 msgstr "選擇的檔案太大以致於無法產生壓縮檔"
 
-#: helper.php:229
+#: helper.php:226
 msgid "couldn't be determined"
 msgstr "無法判斷"
 
@@ -89,6 +89,17 @@ msgstr "文字"
 msgid "Images"
 msgstr "圖片"
 
+#: setup.php:624
+msgid ""
+"Your web server is not yet properly setup to allow files synchronization "
+"because the WebDAV interface seems to be broken."
+msgstr "您的網頁伺服器尚未被正確設定來進行檔案同步,因為您的 WebDAV 界面似乎無法使用。"
+
+#: setup.php:625
+#, php-format
+msgid "Please double check the <a href='%s'>installation guides</a>."
+msgstr "請參考<a href='%s'>安裝指南</a>。"
+
 #: template.php:113
 msgid "seconds ago"
 msgstr "幾秒前"
diff --git a/l10n/zh_TW/settings.po b/l10n/zh_TW/settings.po
index b1edf5e53938f333ecc32278693ccfd1657e6cdf..4eef5b37e42b8d7b0a37dc9e148f3b6e5930a558 100644
--- a/l10n/zh_TW/settings.po
+++ b/l10n/zh_TW/settings.po
@@ -15,8 +15,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: ownCloud\n"
 "Report-Msgid-Bugs-To: http://bugs.owncloud.org/\n"
-"POT-Creation-Date: 2013-02-07 00:07+0100\n"
-"PO-Revision-Date: 2013-02-06 23:08+0000\n"
+"POT-Creation-Date: 2013-02-11 00:03+0100\n"
+"PO-Revision-Date: 2013-02-10 23:03+0000\n"
 "Last-Translator: I Robot <owncloud-bot@tmit.eu>\n"
 "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/owncloud/language/zh_TW/)\n"
 "MIME-Version: 1.0\n"
@@ -29,14 +29,14 @@ msgstr ""
 msgid "Unable to load list from App Store"
 msgstr "無法從 App Store 讀取清單"
 
-#: ajax/changedisplayname.php:19 ajax/removeuser.php:15 ajax/setquota.php:15
+#: ajax/changedisplayname.php:23 ajax/removeuser.php:15 ajax/setquota.php:15
 #: ajax/togglegroups.php:18
 msgid "Authentication error"
 msgstr "認證錯誤"
 
-#: ajax/changedisplayname.php:28
+#: ajax/changedisplayname.php:32
 msgid "Unable to change display name"
-msgstr ""
+msgstr "無法更改顯示名稱"
 
 #: ajax/creategroup.php:10
 msgid "Group already exists"
@@ -88,7 +88,7 @@ msgstr "使用者加入群組%s錯誤"
 msgid "Unable to remove user from group %s"
 msgstr "使用者移出群組%s錯誤"
 
-#: ajax/updateapp.php:13
+#: ajax/updateapp.php:14
 msgid "Couldn't update app."
 msgstr "無法更新應用程式"
 
@@ -221,10 +221,6 @@ msgstr "目前密碼"
 msgid "New password"
 msgstr "新密碼"
 
-#: templates/personal.php:28
-msgid "show"
-msgstr "顯示"
-
 #: templates/personal.php:29
 msgid "Change password"
 msgstr "變更密碼"
@@ -235,15 +231,15 @@ msgstr "顯示名稱"
 
 #: templates/personal.php:42
 msgid "Your display name was changed"
-msgstr ""
+msgstr "已更改顯示名稱"
 
 #: templates/personal.php:43
 msgid "Unable to change your display name"
-msgstr ""
+msgstr "無法更改您的顯示名稱"
 
 #: templates/personal.php:46
 msgid "Change display name"
-msgstr ""
+msgstr "更改顯示名稱"
 
 #: templates/personal.php:55
 msgid "Email"
diff --git a/lib/app.php b/lib/app.php
index ca256ed1aaaf36748b3f4fedaef99fdd2cddb74a..901a8171ef34c545fb0ebb44030ff55d3647d8b1 100644
--- a/lib/app.php
+++ b/lib/app.php
@@ -709,10 +709,10 @@ class OC_App{
 	 * @return array, multi-dimensional array of apps. Keys: id, name, type, typename, personid, license, detailpage, preview, changed, description
 	 */
 	public static function getAppstoreApps( $filter = 'approved' ) {
-		$catagoryNames = OC_OCSClient::getCategories();
-		if ( is_array( $catagoryNames ) ) {
+		$categoryNames = OC_OCSClient::getCategories();
+		if ( is_array( $categoryNames ) ) {
 			// Check that categories of apps were retrieved correctly
-			if ( ! $categories = array_keys( $catagoryNames ) ) {
+			if ( ! $categories = array_keys( $categoryNames ) ) {
 				return false;
 			}
 
diff --git a/lib/connector/sabre/directory.php b/lib/connector/sabre/directory.php
index b210602bbf48f2a5cfd1697af349fec0713c94c0..c4062170d5e106d354387892f9dddd67c53bff10 100644
--- a/lib/connector/sabre/directory.php
+++ b/lib/connector/sabre/directory.php
@@ -121,7 +121,7 @@ class OC_Connector_Sabre_Directory extends OC_Connector_Sabre_Node implements Sa
 		$paths = array();
 		foreach($folder_content as $info) {
 			$paths[] = $this->path.'/'.$info['name'];
-			$properties[$this->path.'/'.$info['name']][self::GETETAG_PROPERTYNAME] = $info['etag'];
+			$properties[$this->path.'/'.$info['name']][self::GETETAG_PROPERTYNAME] = '"' . $info['etag'] . '"';
 		}
 		if(count($paths)>0) {
 			//
diff --git a/lib/connector/sabre/file.php b/lib/connector/sabre/file.php
index 1c18a391742aabbc87519310b6a7b57ae1a364c8..521c5f0571de39d6a6d202e43df1fee92ce66689 100644
--- a/lib/connector/sabre/file.php
+++ b/lib/connector/sabre/file.php
@@ -45,7 +45,13 @@ class OC_Connector_Sabre_File extends OC_Connector_Sabre_Node implements Sabre_D
 	 */
 	public function put($data) {
 
-		\OC\Files\Filesystem::file_put_contents($this->path,$data);
+		// mark file as partial while uploading (ignored by the scanner)
+		$partpath = $this->path . '.part';
+		
+		\OC\Files\Filesystem::file_put_contents($partpath, $data);
+		
+		// rename to correct path
+		\OC\Files\Filesystem::rename($partpath, $this->path);
 
 		return OC_Connector_Sabre_Node::getETagPropertyForPath($this->path);
 	}
diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
index 9a5546dce3f59db5221755ac06eba3219352da67..5a9a119458e4c3822a669369a340a87bd5851c14 100644
--- a/lib/files/cache/scanner.php
+++ b/lib/files/cache/scanner.php
@@ -97,7 +97,7 @@ class Scanner {
 		if ($this->storage->is_dir($path) && ($dh = $this->storage->opendir($path))) {
 			\OC_DB::beginTransaction();
 			while ($file = readdir($dh)) {
-				if ($file !== '.' and $file !== '..') {
+				if (!$this->isIgnoredFile($file)) {
 					$child = ($path) ? $path . '/' . $file : $file;
 					$data = $this->scanFile($child);
 					if ($data) {
@@ -133,6 +133,22 @@ class Scanner {
 		}
 		return $size;
 	}
+	
+	/**
+	 * @brief check if the file should be ignored when scanning
+	 * NOTE: files with a '.part' extension are ignored as well!
+	 *       prevents unfinished put requests to be scanned
+	 * @param String $file
+	 * @return boolean
+	 */
+	private function isIgnoredFile($file) {
+		if ($file === '.' || $file === '..'
+		 || pathinfo($file,PATHINFO_EXTENSION) === 'part')
+		{
+			return true;
+		}
+		return false;
+	}
 
 	/**
 	 * walk over any folders that are not fully scanned yet and scan them
diff --git a/lib/files/mapper.php b/lib/files/mapper.php
index 90e4e1ca669a9f44d6f2ffc850924001fc2ee9a1..71b665e49bb8f715d0fe3d03b8ab9d24777b240d 100644
--- a/lib/files/mapper.php
+++ b/lib/files/mapper.php
@@ -114,8 +114,8 @@ class Mapper
 
 	private function resolveLogicPath($logicPath) {
 		$logicPath = $this->stripLast($logicPath);
-		$query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `logic_path` = ?');
-		$result = $query->execute(array($logicPath));
+		$query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `logic_path_hash` = ?');
+		$result = $query->execute(array(md5($logicPath)));
 		$result = $result->fetchRow();
 
 		return $result['physic_path'];
@@ -123,8 +123,8 @@ class Mapper
 
 	private function resolvePhysicalPath($physicalPath) {
 		$physicalPath = $this->stripLast($physicalPath);
-		$query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `physic_path` = ?');
-		$result = $query->execute(array($physicalPath));
+		$query = \OC_DB::prepare('SELECT * FROM `*PREFIX*file_map` WHERE `physic_path_hash` = ?');
+		$result = $query->execute(array(md5($physicalPath)));
 		$result = $result->fetchRow();
 
 		return $result['logic_path'];
@@ -151,8 +151,8 @@ class Mapper
 	}
 
 	private function insert($logicPath, $physicalPath) {
-		$query = \OC_DB::prepare('INSERT INTO `*PREFIX*file_map`(`logic_path`,`physic_path`) VALUES(?,?)');
-		$query->execute(array($logicPath, $physicalPath));
+		$query = \OC_DB::prepare('INSERT INTO `*PREFIX*file_map`(`logic_path`, `physic_path`, `logic_path_hash`, `physic_path_hash`) VALUES(?, ?, ?, ?)');
+		$query->execute(array($logicPath, $physicalPath, md5($logicPath), md5($physicalPath)));
 	}
 
 	private function slugifyPath($path, $index=null) {
diff --git a/lib/files/storage/common.php b/lib/files/storage/common.php
index 591803f0440988895b1aed1daf1e1475396d70bd..ce9e7ead6d153251763cb76856034df28abec375 100644
--- a/lib/files/storage/common.php
+++ b/lib/files/storage/common.php
@@ -277,4 +277,27 @@ abstract class Common implements \OC\Files\Storage\Storage {
 			return uniqid();
 		}
 	}
+	
+	/**
+	 * clean a path, i.e. remove all redundant '.' and '..'
+	 * making sure that it can't point to higher than '/'
+	 * @param $path The path to clean
+	 * @return string cleaned path
+	 */
+	public function cleanPath($path) {
+		if (strlen($path) == 0 or $path[0] != '/') {
+			$path = '/' . $path;
+		}
+		
+		$output = array();
+		foreach (explode('/', $path) as $chunk) {
+			if ($chunk == '..') {
+				array_pop($output);
+			} else if ($chunk == '.') {
+			} else {
+				$output[] = $chunk;
+			}
+		}
+		return implode('/', $output);
+	}
 }
diff --git a/lib/helper.php b/lib/helper.php
index a0fbdd10394f3e904d71fe0d24b62d76cb22aa05..2713ffed4513e0355a02e495eae4cbcab89db01d 100644
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -436,8 +436,9 @@ class OC_Helper {
 	//FIXME: should also check for value validation (i.e. the email is an email).
 	public static function init_var($s, $d="") {
 		$r = $d;
-		if(isset($_REQUEST[$s]) && !empty($_REQUEST[$s]))
-			$r = stripslashes(htmlspecialchars($_REQUEST[$s]));
+		if(isset($_REQUEST[$s]) && !empty($_REQUEST[$s])) {
+			$r = OC_Util::sanitizeHTML($_REQUEST[$s]);
+		}
 
 		return $r;
 	}
diff --git a/lib/l10n/bg_BG.php b/lib/l10n/bg_BG.php
index 31f37458b8124d6b764aac7a58f4b40585bf071e..fed7f29cbb23e90fb33f9c80740f7802ecaa9f3f 100644
--- a/lib/l10n/bg_BG.php
+++ b/lib/l10n/bg_BG.php
@@ -9,6 +9,7 @@
 "Files need to be downloaded one by one." => "Файловете трябва да се изтеглят един по един.",
 "Back to Files" => "Назад към файловете",
 "Selected files too large to generate zip file." => "Избраните файлове са прекалено големи за генерирането на ZIP архив.",
+"couldn't be determined" => "не може да се определи",
 "Application is not enabled" => "Приложението не е включено.",
 "Authentication error" => "Възникна проблем с идентификацията",
 "Token expired. Please reload page." => "Ключът е изтекъл, моля презаредете страницата",
diff --git a/lib/l10n/ca.php b/lib/l10n/ca.php
index f6401fa39b6061907862d857f6c9a5b1dae54b07..d34220f8f5ca7cb987c81bb4af7fb3614920a6c7 100644
--- a/lib/l10n/ca.php
+++ b/lib/l10n/ca.php
@@ -16,6 +16,8 @@
 "Files" => "Fitxers",
 "Text" => "Text",
 "Images" => "Imatges",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament.",
+"Please double check the <a href='%s'>installation guides</a>." => "Comproveu les <a href='%s'>guies d'instal·lació</a>.",
 "seconds ago" => "segons enrere",
 "1 minute ago" => "fa 1 minut",
 "%d minutes ago" => "fa %d minuts",
diff --git a/lib/l10n/cs_CZ.php b/lib/l10n/cs_CZ.php
index 2c823194b9612cd7c234fc4879b9193493ab3028..f3fd1a24819e767ceaa21ea39aa0c3b14e67700f 100644
--- a/lib/l10n/cs_CZ.php
+++ b/lib/l10n/cs_CZ.php
@@ -16,6 +16,8 @@
 "Files" => "Soubory",
 "Text" => "Text",
 "Images" => "Obrázky",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Váš webový server není správně nastaven pro umožnění synchronizace, protože rozhraní WebDAV je rozbité.",
+"Please double check the <a href='%s'>installation guides</a>." => "Zkonzultujte, prosím, <a href='%s'>průvodce instalací</a>.",
 "seconds ago" => "před vteřinami",
 "1 minute ago" => "před 1 minutou",
 "%d minutes ago" => "před %d minutami",
diff --git a/lib/l10n/es.php b/lib/l10n/es.php
index 8bbc8a8f7b40946c4b29e6b89b15fc71fce0420b..f3b03b566521c90a97f6088b814b711e628800a8 100644
--- a/lib/l10n/es.php
+++ b/lib/l10n/es.php
@@ -16,6 +16,8 @@
 "Files" => "Archivos",
 "Text" => "Texto",
 "Images" => "Imágenes",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.",
+"Please double check the <a href='%s'>installation guides</a>." => "Por favor, vuelva a comprobar las <a href='%s'>guías de instalación</a>.",
 "seconds ago" => "hace segundos",
 "1 minute ago" => "hace 1 minuto",
 "%d minutes ago" => "hace %d minutos",
diff --git a/lib/l10n/fi_FI.php b/lib/l10n/fi_FI.php
index b8d4b137431cb08e0dc1764d2099333cb476494d..fb94dd8404c27f21b509711c9635dc43aa84f189 100644
--- a/lib/l10n/fi_FI.php
+++ b/lib/l10n/fi_FI.php
@@ -16,6 +16,7 @@
 "Files" => "Tiedostot",
 "Text" => "Teksti",
 "Images" => "Kuvat",
+"Please double check the <a href='%s'>installation guides</a>." => "Lue tarkasti <a href='%s'>asennusohjeet</a>.",
 "seconds ago" => "sekuntia sitten",
 "1 minute ago" => "1 minuutti sitten",
 "%d minutes ago" => "%d minuuttia sitten",
diff --git a/lib/l10n/fr.php b/lib/l10n/fr.php
index c6bf8f7f9c34b9e0e8e49feaea2ef8941af8f1d4..852fe1ddc4a920c17b1f2f7cca7dc454a94c2f81 100644
--- a/lib/l10n/fr.php
+++ b/lib/l10n/fr.php
@@ -16,6 +16,8 @@
 "Files" => "Fichiers",
 "Text" => "Texte",
 "Images" => "Images",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Votre serveur web, n'est pas correctement configuré pour permettre la synchronisation des fichiers, car l'interface WebDav ne fonctionne pas comme il faut.",
+"Please double check the <a href='%s'>installation guides</a>." => "Veuillez vous référer au <a href='%s'>guide d'installation</a>.",
 "seconds ago" => "à l'instant",
 "1 minute ago" => "il y a 1 minute",
 "%d minutes ago" => "il y a %d minutes",
diff --git a/lib/l10n/it.php b/lib/l10n/it.php
index eb404db7fb55c09b47c72d1d90337a4a9eac31f7..d339bd5b1cad3d7a66794d411bcf474cc7d05c5e 100644
--- a/lib/l10n/it.php
+++ b/lib/l10n/it.php
@@ -16,6 +16,8 @@
 "Files" => "File",
 "Text" => "Testo",
 "Images" => "Immagini",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata.",
+"Please double check the <a href='%s'>installation guides</a>." => "Leggi attentamente le <a href='%s'>guide d'installazione</a>.",
 "seconds ago" => "secondi fa",
 "1 minute ago" => "1 minuto fa",
 "%d minutes ago" => "%d minuti fa",
diff --git a/lib/l10n/lv.php b/lib/l10n/lv.php
index 9f2a0dea7494e9c07a8788a95d0b8962d00f73d7..cc70f760a22494265ae1522ebad9a2696e19b659 100644
--- a/lib/l10n/lv.php
+++ b/lib/l10n/lv.php
@@ -16,6 +16,8 @@
 "Files" => "Datnes",
 "Text" => "Teksts",
 "Images" => "Attēli",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "Jūsu serveris vēl nav pareizi iestatīts, lai ļautu sinhronizēt datnes, jo izskatās, ka WebDAV saskarne ir salauzta.",
+"Please double check the <a href='%s'>installation guides</a>." => "Lūdzu, vēlreiz pārbaudiet <a href='%s'>instalēšanas palīdzību</a>.",
 "seconds ago" => "sekundes atpakaļ",
 "1 minute ago" => "pirms 1 minūtes",
 "%d minutes ago" => "pirms %d minūtēm",
diff --git a/lib/l10n/pt_PT.php b/lib/l10n/pt_PT.php
index e35bb489c49f300eb5ec102ca4dc23faeecbfc47..67b8078ddfa476bd013a877a4b701e506c1e11b2 100644
--- a/lib/l10n/pt_PT.php
+++ b/lib/l10n/pt_PT.php
@@ -16,6 +16,8 @@
 "Files" => "Ficheiros",
 "Text" => "Texto",
 "Images" => "Imagens",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas.",
+"Please double check the <a href='%s'>installation guides</a>." => "Por favor verifique <a href='%s'>installation guides</a>.",
 "seconds ago" => "há alguns segundos",
 "1 minute ago" => "há 1 minuto",
 "%d minutes ago" => "há %d minutos",
diff --git a/lib/l10n/vi.php b/lib/l10n/vi.php
index 8b7242ae6111cda61f8394d8d3a4272b1fd256c7..ea9660093aee1e4b6c070b94d0034968dc832791 100644
--- a/lib/l10n/vi.php
+++ b/lib/l10n/vi.php
@@ -9,6 +9,7 @@
 "Files need to be downloaded one by one." => "Tập tin cần phải được tải về từng người một.",
 "Back to Files" => "Trở lại tập tin",
 "Selected files too large to generate zip file." => "Tập tin được chọn quá lớn để tạo tập tin ZIP.",
+"couldn't be determined" => "không thể phát hiện được",
 "Application is not enabled" => "Ứng dụng không được BẬT",
 "Authentication error" => "Lỗi xác thực",
 "Token expired. Please reload page." => "Mã Token đã hết hạn. Hãy tải lại trang.",
diff --git a/lib/l10n/zh_TW.php b/lib/l10n/zh_TW.php
index 62ab8fedd52150c8f73a7e9c8442338286809041..91b0329e246be3ae94a149187bbbe8ba216f4f37 100644
--- a/lib/l10n/zh_TW.php
+++ b/lib/l10n/zh_TW.php
@@ -16,6 +16,8 @@
 "Files" => "檔案",
 "Text" => "文字",
 "Images" => "圖片",
+"Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." => "您的網頁伺服器尚未被正確設定來進行檔案同步,因為您的 WebDAV 界面似乎無法使用。",
+"Please double check the <a href='%s'>installation guides</a>." => "請參考<a href='%s'>安裝指南</a>。",
 "seconds ago" => "幾秒前",
 "1 minute ago" => "1 分鐘前",
 "%d minutes ago" => "%d 分鐘前",
diff --git a/lib/user.php b/lib/user.php
index 9dc8cca97a66e8a9c2c0b5f375643477441d6de5..37b461188896fa85d4af25d38d391ef8d87b031d 100644
--- a/lib/user.php
+++ b/lib/user.php
@@ -445,10 +445,12 @@ class OC_User {
 	 * Check whether a specified user can change his display name
 	 */
 	public static function canUserChangeDisplayName($uid) {
-		foreach(self::$_usedBackends as $backend) {
-			if($backend->implementsActions(OC_USER_BACKEND_SET_DISPLAYNAME)) {
-				if($backend->userExists($uid)) {
-					return true;
+		if (OC_Config::getValue('allow_user_to_change_display_name', true)) {
+			foreach(self::$_usedBackends as $backend) {
+				if($backend->implementsActions(OC_USER_BACKEND_SET_DISPLAYNAME)) {
+					if($backend->userExists($uid)) {
+						return true;
+					}
 				}
 			}
 		}
diff --git a/lib/util.php b/lib/util.php
index 54a3f634041b2eac863c3e44d7a86ffc92a3dde3..81ad2df3ac6fc35e23084b35660a6b8ef7f10d8c 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -74,7 +74,7 @@ class OC_Util {
 	 */
 	public static function getVersion() {
 		// hint: We only can count up. So the internal version number of ownCloud 4.5 will be 4.90.0. This is not visible to the user
-		return array(4, 91, 9);
+		return array(4, 91, 10);
 	}
 
 	/**
diff --git a/settings/ajax/apps/ocs.php b/settings/ajax/apps/ocs.php
index d0205a1ba34a0b0229bcc2621c70e2378376deaf..9bf3ccc34d2cb5bdcd30548a3c03d9f032edc851 100644
--- a/settings/ajax/apps/ocs.php
+++ b/settings/ajax/apps/ocs.php
@@ -23,9 +23,9 @@ if(is_null($enabledApps)) {
 $apps=array();
 
 // apps from external repo via OCS
-$catagoryNames=OC_OCSClient::getCategories();
-if(is_array($catagoryNames)) {
-	$categories=array_keys($catagoryNames);
+$categoryNames=OC_OCSClient::getCategories();
+if(is_array($categoryNames)) {
+	$categories=array_keys($categoryNames);
 	$page=0;
 	$filter='approved';
 	$externalApps=OC_OCSClient::getApplications($categories, $page, $filter);
diff --git a/settings/ajax/changedisplayname.php b/settings/ajax/changedisplayname.php
index 8f2ff865bd5f0d3ad4f89d7c1372c87b0b1b1968..69462330765f0a6766a90be1a68d714b9697313c 100644
--- a/settings/ajax/changedisplayname.php
+++ b/settings/ajax/changedisplayname.php
@@ -15,6 +15,10 @@ if(OC_SubAdmin::isUserAccessible(OC_User::getUser(), $username)) {
 	$userstatus = 'subadmin';
 }
 
+if ($username == OC_User::getUser() && OC_User::canUserChangeDisplayName($username)) {
+	$userstatus = 'changeOwnDisplayName';
+}
+
 if(is_null($userstatus)) {
 	OC_JSON::error( array( "data" => array( "message" => $l->t("Authentication error") )));
 	exit();
diff --git a/settings/ajax/updateapp.php b/settings/ajax/updateapp.php
index 9367a3b5a3bf9e76645583fc53b7b9967e470233..300e864251532615fabf271c2776fd92446a6139 100644
--- a/settings/ajax/updateapp.php
+++ b/settings/ajax/updateapp.php
@@ -12,7 +12,4 @@ if($result !== false) {
 } else {
 	$l = OC_L10N::get('settings');	
 	OC_JSON::error(array("data" => array( "message" => $l->t("Couldn't update app.") )));
-}
-
-
-
+}
\ No newline at end of file
diff --git a/settings/l10n/ar.php b/settings/l10n/ar.php
index 499c237eb7b9b3c4c3617fd0383f510dfafe0e7e..37fd713257d7256c833f3612f61ff35a81508a6e 100644
--- a/settings/l10n/ar.php
+++ b/settings/l10n/ar.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "لم يتم تعديل كلمة السر بنجاح",
 "Current password" => "كلمات السر الحالية",
 "New password" => "كلمات سر جديدة",
-"show" => "أظهر",
 "Change password" => "عدل كلمة السر",
 "Email" => "العنوان البريدي",
 "Your email address" => "عنوانك البريدي",
diff --git a/settings/l10n/bg_BG.php b/settings/l10n/bg_BG.php
index 1cbbd5321c1db947a81a2ea174498220412d6000..6849f1f4c3acd79c7f1ce702c0f639b90b9b53b3 100644
--- a/settings/l10n/bg_BG.php
+++ b/settings/l10n/bg_BG.php
@@ -1,11 +1,24 @@
 <?php $TRANSLATIONS = array(
 "Authentication error" => "Възникна проблем с идентификацията",
+"Language changed" => "Езикът е променен",
 "Invalid request" => "Невалидна заявка",
 "Enable" => "Включено",
 "Error" => "Грешка",
+"__language_name__" => "__language_name__",
+"Add your App" => "Добавете Ваше приложение",
+"Select an App" => "Изберете приложение",
 "Update" => "Обновяване",
 "Password" => "Парола",
+"Unable to change your password" => "Промяната на паролата не беше извършена",
+"Current password" => "Текуща парола",
+"New password" => "Нова парола",
+"Change password" => "Промяна на паролата",
 "Email" => "E-mail",
+"Your email address" => "Вашия email адрес",
+"Language" => "Език",
+"Help translate" => "Помогнете с превода",
 "Groups" => "Групи",
+"Create" => "Създаване",
+"Other" => "Други",
 "Delete" => "Изтриване"
 );
diff --git a/settings/l10n/bn_BD.php b/settings/l10n/bn_BD.php
index fc90036536a60c8ff525b07911fc8728647a1aab..1de264d13e37c86bdcdd2bb19292570f6b9b21b6 100644
--- a/settings/l10n/bn_BD.php
+++ b/settings/l10n/bn_BD.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "আপনার কূটশব্দটি পরিবর্তন করতে সক্ষম নয়",
 "Current password" => "বর্তমান কূটশব্দ",
 "New password" => "নতুন কূটশব্দ",
-"show" => "প্রদর্শন",
 "Change password" => "কূটশব্দ পরিবর্তন করুন",
 "Email" => "ই-মেইল ",
 "Your email address" => "আপনার ই-মেইল ঠিকানা",
diff --git a/settings/l10n/ca.php b/settings/l10n/ca.php
index 301ead2802d240e1f51dc101a36b0c47d5b52150..552a2f4e5aea5671b57fa7a5897f2f585870ee8c 100644
--- a/settings/l10n/ca.php
+++ b/settings/l10n/ca.php
@@ -47,7 +47,6 @@
 "Unable to change your password" => "No s'ha pogut canviar la contrasenya",
 "Current password" => "Contrasenya actual",
 "New password" => "Contrasenya nova",
-"show" => "mostra",
 "Change password" => "Canvia la contrasenya",
 "Display Name" => "Nom a mostrar",
 "Your display name was changed" => "El vostre nom a mostrar ha canviat",
diff --git a/settings/l10n/cs_CZ.php b/settings/l10n/cs_CZ.php
index 30f44dfefc6b3c4519018cb149abfa5a3e6c41c8..68c68f779b7bd2b3fb012ac1d74748b5a82b5363 100644
--- a/settings/l10n/cs_CZ.php
+++ b/settings/l10n/cs_CZ.php
@@ -47,7 +47,6 @@
 "Unable to change your password" => "Vaše heslo nelze změnit",
 "Current password" => "Současné heslo",
 "New password" => "Nové heslo",
-"show" => "zobrazit",
 "Change password" => "Změnit heslo",
 "Display Name" => "Zobrazované jméno",
 "Your display name was changed" => "Vaše zobrazované jméno bylo změněno",
diff --git a/settings/l10n/da.php b/settings/l10n/da.php
index 294bd918213d020833257119a07cfb3285bdfca0..ed577d9aa320cc411f27b6ae76e9a2bcdffb1b39 100644
--- a/settings/l10n/da.php
+++ b/settings/l10n/da.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "Ude af stand til at ændre dit kodeord",
 "Current password" => "Nuværende adgangskode",
 "New password" => "Ny adgangskode",
-"show" => "vis",
 "Change password" => "Skift kodeord",
 "Email" => "Email",
 "Your email address" => "Din emailadresse",
diff --git a/settings/l10n/de.php b/settings/l10n/de.php
index b7ace81cf5968ff83c14f1c10e6730d0987ce204..3c377a563624185264d2c7a8bad68d52857e7f4f 100644
--- a/settings/l10n/de.php
+++ b/settings/l10n/de.php
@@ -41,7 +41,6 @@
 "Unable to change your password" => "Passwort konnte nicht geändert werden",
 "Current password" => "Aktuelles Passwort",
 "New password" => "Neues Passwort",
-"show" => "zeigen",
 "Change password" => "Passwort ändern",
 "Display Name" => "Anzeigename",
 "Email" => "E-Mail",
diff --git a/settings/l10n/de_DE.php b/settings/l10n/de_DE.php
index ab8c791bbe0e208132941f5221dc273c7e00e7a8..f80917165f77ae779c88b556f4408939d845ae79 100644
--- a/settings/l10n/de_DE.php
+++ b/settings/l10n/de_DE.php
@@ -47,7 +47,6 @@
 "Unable to change your password" => "Das Passwort konnte nicht geändert werden",
 "Current password" => "Aktuelles Passwort",
 "New password" => "Neues Passwort",
-"show" => "zeigen",
 "Change password" => "Passwort ändern",
 "Display Name" => "Anzeigename",
 "Your display name was changed" => "Dein Anzeigename wurde geändert",
diff --git a/settings/l10n/el.php b/settings/l10n/el.php
index 925ecf695aaa54b93d7a163ed13ebcbc66a95043..3698cfd4d5958051898d9d544e53016b8fe1136d 100644
--- a/settings/l10n/el.php
+++ b/settings/l10n/el.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "Δεν ήταν δυνατή η αλλαγή του κωδικού πρόσβασης",
 "Current password" => "Τρέχων συνθηματικό",
 "New password" => "Νέο συνθηματικό",
-"show" => "εμφάνιση",
 "Change password" => "Αλλαγή συνθηματικού",
 "Email" => "Email",
 "Your email address" => "Η διεύθυνση ηλεκτρονικού ταχυδρομείου σας",
diff --git a/settings/l10n/eo.php b/settings/l10n/eo.php
index f84526c3c916771f801d4e56e177797972fbc6b8..c4673f3a31c6ff5afd0d513c91f3fc4a2d88dab1 100644
--- a/settings/l10n/eo.php
+++ b/settings/l10n/eo.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "Ne eblis ŝanĝi vian pasvorton",
 "Current password" => "Nuna pasvorto",
 "New password" => "Nova pasvorto",
-"show" => "montri",
 "Change password" => "Ŝanĝi la pasvorton",
 "Email" => "Retpoŝto",
 "Your email address" => "Via retpoŝta adreso",
diff --git a/settings/l10n/es.php b/settings/l10n/es.php
index 1b4fd6ac7a69a69464b1ede7e939e7ccba5a7480..ffbe94bd83aabc600eaa1df227c3f5be16b5459e 100644
--- a/settings/l10n/es.php
+++ b/settings/l10n/es.php
@@ -47,7 +47,6 @@
 "Unable to change your password" => "No se ha podido cambiar tu contraseña",
 "Current password" => "Contraseña actual",
 "New password" => "Nueva contraseña:",
-"show" => "mostrar",
 "Change password" => "Cambiar contraseña",
 "Display Name" => "Nombre a mostrar",
 "Your display name was changed" => "Su nombre fue cambiado",
diff --git a/settings/l10n/es_AR.php b/settings/l10n/es_AR.php
index a33d9e8063d47543a4fef58f0f2a4e29b5599fab..102ca8f5364f5cdf6ade3e64950516f2c59c3783 100644
--- a/settings/l10n/es_AR.php
+++ b/settings/l10n/es_AR.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "No fue posible cambiar tu contraseña",
 "Current password" => "Contraseña actual",
 "New password" => "Nueva contraseña:",
-"show" => "mostrar",
 "Change password" => "Cambiar contraseña",
 "Display Name" => "Nombre a mostrar",
 "Email" => "Correo electrónico",
diff --git a/settings/l10n/et_EE.php b/settings/l10n/et_EE.php
index df5b707fcd5ae85324b6dda6a2554baf52a4e57b..bcdfd8dc9579af10221ab20a3eb2cc21deafd862 100644
--- a/settings/l10n/et_EE.php
+++ b/settings/l10n/et_EE.php
@@ -29,7 +29,6 @@
 "Unable to change your password" => "Sa ei saa oma parooli muuta",
 "Current password" => "Praegune parool",
 "New password" => "Uus parool",
-"show" => "näita",
 "Change password" => "Muuda parooli",
 "Email" => "E-post",
 "Your email address" => "Sinu e-posti aadress",
diff --git a/settings/l10n/eu.php b/settings/l10n/eu.php
index 1be2c7940bce405d65b524fa531591305f7bd7fa..d7df03616d3d3fa8982a73ace3fcf14270cf35c8 100644
--- a/settings/l10n/eu.php
+++ b/settings/l10n/eu.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "Ezin izan da zure pasahitza aldatu",
 "Current password" => "Uneko pasahitza",
 "New password" => "Pasahitz berria",
-"show" => "erakutsi",
 "Change password" => "Aldatu pasahitza",
 "Display Name" => "Bistaratze Izena",
 "Email" => "E-Posta",
diff --git a/settings/l10n/fa.php b/settings/l10n/fa.php
index d4290f6dee712105d33510c2bfc081a7af50ba6d..48f9e9a45c9c23057b089754fe4633c608876fb2 100644
--- a/settings/l10n/fa.php
+++ b/settings/l10n/fa.php
@@ -29,7 +29,6 @@
 "Unable to change your password" => "ناتوان در تغییر گذرواژه",
 "Current password" => "گذرواژه کنونی",
 "New password" => "گذرواژه جدید",
-"show" => "نمایش",
 "Change password" => "تغییر گذر واژه",
 "Email" => "پست الکترونیکی",
 "Your email address" => "پست الکترونیکی شما",
diff --git a/settings/l10n/fi_FI.php b/settings/l10n/fi_FI.php
index 9f1feb74a11584ae9c3e461d2704fd944bc41ecc..6619c116d32541ecafd1642a505b47a83814f861 100644
--- a/settings/l10n/fi_FI.php
+++ b/settings/l10n/fi_FI.php
@@ -1,6 +1,7 @@
 <?php $TRANSLATIONS = array(
 "Unable to load list from App Store" => "Ei pystytä lataamaan listaa sovellusvarastosta (App Store)",
 "Authentication error" => "Todennusvirhe",
+"Unable to change display name" => "Näyttönimen muuttaminen epäonnistui",
 "Group already exists" => "Ryhmä on jo olemassa",
 "Unable to add group" => "Ryhmän lisäys epäonnistui",
 "Could not enable app. " => "Sovelluksen käyttöönotto epäonnistui.",
@@ -46,9 +47,11 @@
 "Unable to change your password" => "Salasanaasi ei voitu vaihtaa",
 "Current password" => "Nykyinen salasana",
 "New password" => "Uusi salasana",
-"show" => "näytä",
 "Change password" => "Vaihda salasana",
 "Display Name" => "Näyttönimi",
+"Your display name was changed" => "Näyttönimesi muutettiin",
+"Unable to change your display name" => "Näyttönimen muuttaminen epäonnistui",
+"Change display name" => "Muuta näyttönimeä",
 "Email" => "Sähköposti",
 "Your email address" => "Sähköpostiosoitteesi",
 "Fill in an email address to enable password recovery" => "Anna sähköpostiosoitteesi, jotta unohdettu salasana on mahdollista palauttaa",
diff --git a/settings/l10n/fr.php b/settings/l10n/fr.php
index a47acb6435f0c525e242c420c1416f4e6d64cc5c..67f80063b54722d0dd1bddca9275157abc34d95f 100644
--- a/settings/l10n/fr.php
+++ b/settings/l10n/fr.php
@@ -47,7 +47,6 @@
 "Unable to change your password" => "Impossible de changer votre mot de passe",
 "Current password" => "Mot de passe actuel",
 "New password" => "Nouveau mot de passe",
-"show" => "Afficher",
 "Change password" => "Changer de mot de passe",
 "Display Name" => "Nom affiché",
 "Your display name was changed" => "Votre nom d'affichage a bien été modifié",
diff --git a/settings/l10n/gl.php b/settings/l10n/gl.php
index 997ac53de7ee59209944cc4a900a1c167e219a24..c4f6e6595329041c800238e05d2d6acd3816719f 100644
--- a/settings/l10n/gl.php
+++ b/settings/l10n/gl.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "Non é posíbel cambiar o seu contrasinal",
 "Current password" => "Contrasinal actual",
 "New password" => "Novo contrasinal",
-"show" => "amosar",
 "Change password" => "Cambiar o contrasinal",
 "Email" => "Correo",
 "Your email address" => "O seu enderezo de correo",
diff --git a/settings/l10n/he.php b/settings/l10n/he.php
index be776d4fa2eaea5bbbfd32d4166f1bfc0fc875e6..13f2b6853477ae24fe2ca57ca56db7b8288b24f7 100644
--- a/settings/l10n/he.php
+++ b/settings/l10n/he.php
@@ -39,7 +39,6 @@
 "Unable to change your password" => "לא ניתן לשנות את הססמה שלך",
 "Current password" => "ססמה נוכחית",
 "New password" => "ססמה חדשה",
-"show" => "הצגה",
 "Change password" => "שינוי ססמה",
 "Email" => "דוא״ל",
 "Your email address" => "כתובת הדוא״ל שלך",
diff --git a/settings/l10n/hr.php b/settings/l10n/hr.php
index f55cdcc687a08ad201baa39db2041f185695890b..4b8a48b4f2a1a18cd58e63567762dabc1b4c041e 100644
--- a/settings/l10n/hr.php
+++ b/settings/l10n/hr.php
@@ -18,7 +18,6 @@
 "Unable to change your password" => "Nemoguće promijeniti lozinku",
 "Current password" => "Trenutna lozinka",
 "New password" => "Nova lozinka",
-"show" => "prikaz",
 "Change password" => "Izmjena lozinke",
 "Email" => "e-mail adresa",
 "Your email address" => "Vaša e-mail adresa",
diff --git a/settings/l10n/hu_HU.php b/settings/l10n/hu_HU.php
index 23d6c3f5f7873dc7c4bee8e9c55fdb452c0eba7a..a97ff41ffdf48af8f23dedbba1f84df0bf7c0c4e 100644
--- a/settings/l10n/hu_HU.php
+++ b/settings/l10n/hu_HU.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "A jelszó nem változtatható meg",
 "Current password" => "A jelenlegi jelszó",
 "New password" => "Az új jelszó",
-"show" => "lássam",
 "Change password" => "A jelszó megváltoztatása",
 "Email" => "Email",
 "Your email address" => "Az Ön email címe",
diff --git a/settings/l10n/ia.php b/settings/l10n/ia.php
index fe26eea5e2805b58a178638b16403b98b7cbd109..220db7b957a6f115d411607e212ef58448e78786 100644
--- a/settings/l10n/ia.php
+++ b/settings/l10n/ia.php
@@ -10,7 +10,6 @@
 "Unable to change your password" => "Non pote cambiar tu contrasigno",
 "Current password" => "Contrasigno currente",
 "New password" => "Nove contrasigno",
-"show" => "monstrar",
 "Change password" => "Cambiar contrasigno",
 "Email" => "E-posta",
 "Your email address" => "Tu adresse de e-posta",
diff --git a/settings/l10n/id.php b/settings/l10n/id.php
index 181450e58bad6ab7bff998765ac7c73e879356dc..ce1a1581a867b1d0a61a773638962b1fa75967a2 100644
--- a/settings/l10n/id.php
+++ b/settings/l10n/id.php
@@ -18,7 +18,6 @@
 "Unable to change your password" => "Tidak dapat merubah password anda",
 "Current password" => "Password saat ini",
 "New password" => "kata kunci baru",
-"show" => "perlihatkan",
 "Change password" => "Rubah password",
 "Email" => "Email",
 "Your email address" => "Alamat email anda",
diff --git a/settings/l10n/is.php b/settings/l10n/is.php
index 75f46a01925049e987a811a36887700fbcc04a15..3afe88b5d83f3a6e491968cf398b0d5b918ac683 100644
--- a/settings/l10n/is.php
+++ b/settings/l10n/is.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "Ekki tókst að breyta lykilorðinu þínu",
 "Current password" => "Núverandi lykilorð",
 "New password" => "Nýtt lykilorð",
-"show" => "sýna",
 "Change password" => "Breyta lykilorði",
 "Email" => "Netfang",
 "Your email address" => "Netfangið þitt",
diff --git a/settings/l10n/it.php b/settings/l10n/it.php
index 7f860f69edcb010a73e2f4861f44cc8f2b2abc70..934816be02223bd4eb6652b68e16ff5ca0f1eb7d 100644
--- a/settings/l10n/it.php
+++ b/settings/l10n/it.php
@@ -47,7 +47,6 @@
 "Unable to change your password" => "Modifica password non riuscita",
 "Current password" => "Password attuale",
 "New password" => "Nuova password",
-"show" => "mostra",
 "Change password" => "Modifica password",
 "Display Name" => "Nome visualizzato",
 "Your display name was changed" => "Il tuo nome visualizzato è stato cambiato",
diff --git a/settings/l10n/ja_JP.php b/settings/l10n/ja_JP.php
index d255b6703378bbd3f6ba77576637f64dd3aa1f12..abd1dd2d0545b0a09cb063b38effad3b0ec73b2f 100644
--- a/settings/l10n/ja_JP.php
+++ b/settings/l10n/ja_JP.php
@@ -47,7 +47,6 @@
 "Unable to change your password" => "パスワードを変更することができません",
 "Current password" => "現在のパスワード",
 "New password" => "新しいパスワード",
-"show" => "表示",
 "Change password" => "パスワードを変更",
 "Display Name" => "表示名",
 "Your display name was changed" => "あなたの表示名を変更しました",
diff --git a/settings/l10n/ka_GE.php b/settings/l10n/ka_GE.php
index 0fc42d427284711dac136c2c31803d2b27184f1f..bb4e4a82fe5f5ab540aba9644af07a627d434388 100644
--- a/settings/l10n/ka_GE.php
+++ b/settings/l10n/ka_GE.php
@@ -29,7 +29,6 @@
 "Unable to change your password" => "თქვენი პაროლი არ შეიცვალა",
 "Current password" => "მიმდინარე პაროლი",
 "New password" => "ახალი პაროლი",
-"show" => "გამოაჩინე",
 "Change password" => "პაროლის შეცვლა",
 "Email" => "იმეილი",
 "Your email address" => "თქვენი იმეილ მისამართი",
diff --git a/settings/l10n/ko.php b/settings/l10n/ko.php
index a542b35feec05667595ffb80bbd11385a6601195..7c8071048deb4fc69fb519e745e61a78006023f9 100644
--- a/settings/l10n/ko.php
+++ b/settings/l10n/ko.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "암호를 변경할 수 없음",
 "Current password" => "현재 암호",
 "New password" => "새 암호",
-"show" => "보이기",
 "Change password" => "암호 변경",
 "Display Name" => "표시 이름",
 "Email" => "이메일",
diff --git a/settings/l10n/lb.php b/settings/l10n/lb.php
index 5ef88f27891e36c7099b080cbdea9e2089fa6057..c78052fddee6172ec7e061b0927114cb0d23e1ca 100644
--- a/settings/l10n/lb.php
+++ b/settings/l10n/lb.php
@@ -18,7 +18,6 @@
 "Unable to change your password" => "Konnt däin Passwuert net änneren",
 "Current password" => "Momentan 't Passwuert",
 "New password" => "Neit Passwuert",
-"show" => "weisen",
 "Change password" => "Passwuert änneren",
 "Email" => "Email",
 "Your email address" => "Deng Email Adress",
diff --git a/settings/l10n/lt_LT.php b/settings/l10n/lt_LT.php
index e514e7f775896a922e7e5f7baa1a76fdb83eef7b..e676699477a9edcb0d8082c72f927e71c8e7734c 100644
--- a/settings/l10n/lt_LT.php
+++ b/settings/l10n/lt_LT.php
@@ -22,7 +22,6 @@
 "Unable to change your password" => "Neįmanoma pakeisti slaptažodžio",
 "Current password" => "Dabartinis slaptažodis",
 "New password" => "Naujas slaptažodis",
-"show" => "rodyti",
 "Change password" => "Pakeisti slaptažodį",
 "Email" => "El. paštas",
 "Your email address" => "Jūsų el. pašto adresas",
diff --git a/settings/l10n/lv.php b/settings/l10n/lv.php
index 03977206f77bfbd4865c5e9c3a6ed77cbd0cb6c2..0870c75a3429d69dcbc07ca531c1936dff24afee 100644
--- a/settings/l10n/lv.php
+++ b/settings/l10n/lv.php
@@ -47,7 +47,6 @@
 "Unable to change your password" => "Nevar nomainīt jūsu paroli",
 "Current password" => "Pašreizējā parole",
 "New password" => "Jauna parole",
-"show" => "parādīt",
 "Change password" => "Mainīt paroli",
 "Display Name" => "Redzamais vārds",
 "Your display name was changed" => "Jūsu redzamais vārds tika mainīts",
diff --git a/settings/l10n/mk.php b/settings/l10n/mk.php
index aba63bc0575739f07ed516af73f569729c82e321..4268f35bbd094c388b27f273da474facc6d42dd3 100644
--- a/settings/l10n/mk.php
+++ b/settings/l10n/mk.php
@@ -39,7 +39,6 @@
 "Unable to change your password" => "Вашата лозинка неможе да се смени",
 "Current password" => "Моментална лозинка",
 "New password" => "Нова лозинка",
-"show" => "прикажи",
 "Change password" => "Смени лозинка",
 "Email" => "Е-пошта",
 "Your email address" => "Вашата адреса за е-пошта",
diff --git a/settings/l10n/ms_MY.php b/settings/l10n/ms_MY.php
index 95c1d01e3b51f01f7c7fe1b0257212dc9624e619..0af06d65a6e7f32adbf3ca6e77814ef2e7b3c017 100644
--- a/settings/l10n/ms_MY.php
+++ b/settings/l10n/ms_MY.php
@@ -18,7 +18,6 @@
 "Unable to change your password" => "Gagal mengubah kata laluan anda ",
 "Current password" => "Kata laluan semasa",
 "New password" => "Kata laluan baru",
-"show" => "Papar",
 "Change password" => "Ubah kata laluan",
 "Email" => "Emel",
 "Your email address" => "Alamat emel anda",
diff --git a/settings/l10n/nb_NO.php b/settings/l10n/nb_NO.php
index caf0a5518632155c001eb91d827957df8c691e59..2969cdc17fdb5a50e59443d28635d249d9203ef1 100644
--- a/settings/l10n/nb_NO.php
+++ b/settings/l10n/nb_NO.php
@@ -35,7 +35,6 @@
 "Unable to change your password" => "Kunne ikke endre passordet ditt",
 "Current password" => "Nåværende passord",
 "New password" => "Nytt passord",
-"show" => "vis",
 "Change password" => "Endre passord",
 "Email" => "E-post",
 "Your email address" => "Din e-postadresse",
diff --git a/settings/l10n/nl.php b/settings/l10n/nl.php
index 6c256b9388db5f0878469a2d20c17ec7b45621f5..3bddff822291f70f27f35d64d7a5c70ef2843e3b 100644
--- a/settings/l10n/nl.php
+++ b/settings/l10n/nl.php
@@ -47,7 +47,6 @@
 "Unable to change your password" => "Niet in staat om uw wachtwoord te wijzigen",
 "Current password" => "Huidig wachtwoord",
 "New password" => "Nieuw wachtwoord",
-"show" => "weergeven",
 "Change password" => "Wijzig wachtwoord",
 "Display Name" => "Weergavenaam",
 "Your display name was changed" => "Uw weergavenaam is gewijzigd",
diff --git a/settings/l10n/nn_NO.php b/settings/l10n/nn_NO.php
index 8faa2d02caaf5d3d76c10cde40d8405d255cb0b7..1fb1d0763ab3e213373d9dd934c6eac06d19d1f7 100644
--- a/settings/l10n/nn_NO.php
+++ b/settings/l10n/nn_NO.php
@@ -16,7 +16,6 @@
 "Unable to change your password" => "Klarte ikkje å endra passordet",
 "Current password" => "Passord",
 "New password" => "Nytt passord",
-"show" => "vis",
 "Change password" => "Endra passord",
 "Email" => "Epost",
 "Your email address" => "Din epost addresse",
diff --git a/settings/l10n/oc.php b/settings/l10n/oc.php
index 9accb3acbabdd83fb1d2bde1c4792c8b82f8ba54..662b16fd165f3636cdbe78b9f480476b94dabfcc 100644
--- a/settings/l10n/oc.php
+++ b/settings/l10n/oc.php
@@ -27,7 +27,6 @@
 "Unable to change your password" => "Pas possible de cambiar ton senhal",
 "Current password" => "Senhal en cors",
 "New password" => "Senhal novèl",
-"show" => "mòstra",
 "Change password" => "Cambia lo senhal",
 "Email" => "Corrièl",
 "Your email address" => "Ton adreiça de corrièl",
diff --git a/settings/l10n/pl.php b/settings/l10n/pl.php
index a06b39e7bd2ba687463fd87f5aad84eabc9413ca..d3675061c88f8914c142b30404e38108cee0deb6 100644
--- a/settings/l10n/pl.php
+++ b/settings/l10n/pl.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "Nie można zmienić hasła",
 "Current password" => "Bieżące hasło",
 "New password" => "Nowe hasło",
-"show" => "Wyświetlanie",
 "Change password" => "Zmień hasło",
 "Email" => "E-mail",
 "Your email address" => "Adres e-mail użytkownika",
diff --git a/settings/l10n/pt_BR.php b/settings/l10n/pt_BR.php
index 5a8281446db402115b330e082318c9ae177e2361..4b7f088d39589fd0e36cc015b91597151b7673c5 100644
--- a/settings/l10n/pt_BR.php
+++ b/settings/l10n/pt_BR.php
@@ -39,7 +39,6 @@
 "Unable to change your password" => "Não é possivel alterar a sua senha",
 "Current password" => "Senha atual",
 "New password" => "Nova senha",
-"show" => "mostrar",
 "Change password" => "Alterar senha",
 "Display Name" => "Nome de Exibição",
 "Email" => "E-mail",
diff --git a/settings/l10n/pt_PT.php b/settings/l10n/pt_PT.php
index 03982fd5e8eec005bbc796370d0c426deffba228..fe0c225d0acd040db6a898746f6f07f0507b8a0a 100644
--- a/settings/l10n/pt_PT.php
+++ b/settings/l10n/pt_PT.php
@@ -1,6 +1,7 @@
 <?php $TRANSLATIONS = array(
 "Unable to load list from App Store" => "Incapaz de carregar a lista da App Store",
 "Authentication error" => "Erro de autenticação",
+"Unable to change display name" => "Não foi possível alterar o nome",
 "Group already exists" => "O grupo já existe",
 "Unable to add group" => "Impossível acrescentar o grupo",
 "Could not enable app. " => "Não foi possível activar a app.",
@@ -46,9 +47,11 @@
 "Unable to change your password" => "Não foi possivel alterar a sua palavra-chave",
 "Current password" => "Palavra-chave actual",
 "New password" => "Nova palavra-chave",
-"show" => "mostrar",
 "Change password" => "Alterar palavra-chave",
 "Display Name" => "Nome público",
+"Your display name was changed" => "O seu nome foi alterado",
+"Unable to change your display name" => "Não foi possível alterar o seu nome",
+"Change display name" => "Alterar nome",
 "Email" => "endereço de email",
 "Your email address" => "O seu endereço de email",
 "Fill in an email address to enable password recovery" => "Preencha com o seu endereço de email para ativar a recuperação da palavra-chave",
diff --git a/settings/l10n/ro.php b/settings/l10n/ro.php
index dcc55a843dc93673e9d030996726c10e0e6d2d45..beb1b3611845550cd8f65b18a945d9320feff81c 100644
--- a/settings/l10n/ro.php
+++ b/settings/l10n/ro.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "Imposibil de-ați schimbat parola",
 "Current password" => "Parola curentă",
 "New password" => "Noua parolă",
-"show" => "afișează",
 "Change password" => "Schimbă parola",
 "Email" => "Email",
 "Your email address" => "Adresa ta de email",
diff --git a/settings/l10n/ru.php b/settings/l10n/ru.php
index 4c01951c5080e0c6b7bf84bc3b329fb218b9e337..c5b1043419806765a98a2f94452fca3b24b62c8f 100644
--- a/settings/l10n/ru.php
+++ b/settings/l10n/ru.php
@@ -47,7 +47,6 @@
 "Unable to change your password" => "Невозможно сменить пароль",
 "Current password" => "Текущий пароль",
 "New password" => "Новый пароль",
-"show" => "показать",
 "Change password" => "Сменить пароль",
 "Display Name" => "Отображаемое имя",
 "Your display name was changed" => "Ваше отображаемое имя было изменено",
diff --git a/settings/l10n/ru_RU.php b/settings/l10n/ru_RU.php
index 7dde545e2ed63c555dcc94818cd0bf5eafed036b..f0183e971216fdc01689bd5c74ae780490ad1a73 100644
--- a/settings/l10n/ru_RU.php
+++ b/settings/l10n/ru_RU.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "Невозможно изменить Ваш пароль",
 "Current password" => "Текущий пароль",
 "New password" => "Новый пароль",
-"show" => "показать",
 "Change password" => "Изменить пароль",
 "Email" => "Электронная почта",
 "Your email address" => "Адрес Вашей электронной почты",
diff --git a/settings/l10n/si_LK.php b/settings/l10n/si_LK.php
index b2613290f91e922cc1c4f772320d984b28ffd62d..80b37054fe26a3782f6d21fffaf10e72599b6f63 100644
--- a/settings/l10n/si_LK.php
+++ b/settings/l10n/si_LK.php
@@ -25,7 +25,6 @@
 "Unable to change your password" => "මුර පදය වෙනස් කළ නොහැකි විය",
 "Current password" => "වත්මන් මුරපදය",
 "New password" => "නව මුරපදය",
-"show" => "ප්‍රදර්ශනය කිරීම",
 "Change password" => "මුරපදය වෙනස් කිරීම",
 "Email" => "විද්‍යුත් තැපෑල",
 "Your email address" => "ඔබගේ විද්‍යුත් තැපෑල",
diff --git a/settings/l10n/sk_SK.php b/settings/l10n/sk_SK.php
index 162e4d3d01416422d0034adb975515196d08c5cd..bed91d109037a45a4b9a2c0f41110ffbfe802b7a 100644
--- a/settings/l10n/sk_SK.php
+++ b/settings/l10n/sk_SK.php
@@ -46,7 +46,6 @@
 "Unable to change your password" => "Nie je možné zmeniť vaše heslo",
 "Current password" => "Aktuálne heslo",
 "New password" => "Nové heslo",
-"show" => "zobraziť",
 "Change password" => "Zmeniť heslo",
 "Display Name" => "Zobrazované meno",
 "Email" => "Email",
diff --git a/settings/l10n/sl.php b/settings/l10n/sl.php
index 8f4fb9435e813f1e3db099b70c6c2473e965129e..f91615c9ab984edf3205b28ced70e57d9cfab62d 100644
--- a/settings/l10n/sl.php
+++ b/settings/l10n/sl.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "Gesla ni mogoče spremeniti.",
 "Current password" => "Trenutno geslo",
 "New password" => "Novo geslo",
-"show" => "pokaži",
 "Change password" => "Spremeni geslo",
 "Email" => "Elektronska pošta",
 "Your email address" => "Vaš elektronski poštni naslov",
diff --git a/settings/l10n/sr.php b/settings/l10n/sr.php
index 1b12a0178ddd4755da8a4061116af58e20b1dddd..d26d63eec4897847dd32cf13d5a2c248e3000caa 100644
--- a/settings/l10n/sr.php
+++ b/settings/l10n/sr.php
@@ -31,7 +31,6 @@
 "Unable to change your password" => "Не могу да изменим вашу лозинку",
 "Current password" => "Тренутна лозинка",
 "New password" => "Нова лозинка",
-"show" => "прикажи",
 "Change password" => "Измени лозинку",
 "Email" => "Е-пошта",
 "Your email address" => "Ваша адреса е-поште",
diff --git a/settings/l10n/sr@latin.php b/settings/l10n/sr@latin.php
index 942594eb0286794687bc6c70d795d49aa765d95f..0dadb667c748dcc5d480eda97549d2513ce5c085 100644
--- a/settings/l10n/sr@latin.php
+++ b/settings/l10n/sr@latin.php
@@ -8,7 +8,6 @@
 "Unable to change your password" => "Ne mogu da izmenim vašu lozinku",
 "Current password" => "Trenutna lozinka",
 "New password" => "Nova lozinka",
-"show" => "prikaži",
 "Change password" => "Izmeni lozinku",
 "Email" => "E-mail",
 "Language" => "Jezik",
diff --git a/settings/l10n/sv.php b/settings/l10n/sv.php
index fb8c7854e9ba4cf1c852e3f480c5c61069891c2c..801e9a018f23a89c3eb5beafb9fd77c11e13974d 100644
--- a/settings/l10n/sv.php
+++ b/settings/l10n/sv.php
@@ -46,7 +46,6 @@
 "Unable to change your password" => "Kunde inte ändra ditt lösenord",
 "Current password" => "Nuvarande lösenord",
 "New password" => "Nytt lösenord",
-"show" => "visa",
 "Change password" => "Ändra lösenord",
 "Display Name" => "Visat namn",
 "Email" => "E-post",
diff --git a/settings/l10n/ta_LK.php b/settings/l10n/ta_LK.php
index 5e94df0dfb270a59fc721da1c9e2728599244192..c834626bd8e12835dddea2d7d711d991a2577df9 100644
--- a/settings/l10n/ta_LK.php
+++ b/settings/l10n/ta_LK.php
@@ -30,7 +30,6 @@
 "Unable to change your password" => "உங்களுடைய கடவுச்சொல்லை மாற்றமுடியாது",
 "Current password" => "தற்போதைய கடவுச்சொல்",
 "New password" => "புதிய கடவுச்சொல்",
-"show" => "காட்டு",
 "Change password" => "கடவுச்சொல்லை மாற்றுக",
 "Email" => "மின்னஞ்சல்",
 "Your email address" => "உங்களுடைய மின்னஞ்சல் முகவரி",
diff --git a/settings/l10n/th_TH.php b/settings/l10n/th_TH.php
index 309dbc2657cbbfd7d54925826402240c089ebdeb..324680c18765a30b6e5a17edc8f25540131b4399 100644
--- a/settings/l10n/th_TH.php
+++ b/settings/l10n/th_TH.php
@@ -46,7 +46,6 @@
 "Unable to change your password" => "ไม่สามารถเปลี่ยนรหัสผ่านของคุณได้",
 "Current password" => "รหัสผ่านปัจจุบัน",
 "New password" => "รหัสผ่านใหม่",
-"show" => "แสดง",
 "Change password" => "เปลี่ยนรหัสผ่าน",
 "Display Name" => "ชื่อที่ต้องการแสดง",
 "Email" => "อีเมล์",
diff --git a/settings/l10n/tr.php b/settings/l10n/tr.php
index db55491612e2dacaeccda51f7cd2704d127419b5..8c0b98bf99334086b8a1bb1211d840679fe33037 100644
--- a/settings/l10n/tr.php
+++ b/settings/l10n/tr.php
@@ -36,7 +36,6 @@
 "Unable to change your password" => "Parolanız değiştirilemiyor",
 "Current password" => "Mevcut parola",
 "New password" => "Yeni parola",
-"show" => "göster",
 "Change password" => "Parola değiştir",
 "Email" => "Eposta",
 "Your email address" => "Eposta adresiniz",
diff --git a/settings/l10n/uk.php b/settings/l10n/uk.php
index 7186b2684eb59e0598acf5aa634274e760cb1f39..ff882df18ecbf88819de6db33a7c6c6e89503442 100644
--- a/settings/l10n/uk.php
+++ b/settings/l10n/uk.php
@@ -47,7 +47,6 @@
 "Unable to change your password" => "Не вдалося змінити Ваш пароль",
 "Current password" => "Поточний пароль",
 "New password" => "Новий пароль",
-"show" => "показати",
 "Change password" => "Змінити пароль",
 "Display Name" => "Показати Ім'я",
 "Your display name was changed" => "Ваше ім'я було змінене",
diff --git a/settings/l10n/vi.php b/settings/l10n/vi.php
index a7682e7ed0eb44d4a8455be734e4721fea4342d0..f660b078bf6d34a0ac60ca1c757032685a12f5c6 100644
--- a/settings/l10n/vi.php
+++ b/settings/l10n/vi.php
@@ -1,6 +1,7 @@
 <?php $TRANSLATIONS = array(
 "Unable to load list from App Store" => "Không thể tải danh sách ứng dụng từ App Store",
 "Authentication error" => "Lỗi xác thực",
+"Unable to change display name" => "Không thể thay đổi tên hiển thị",
 "Group already exists" => "Nhóm đã tồn tại",
 "Unable to add group" => "Không thể thêm nhóm",
 "Could not enable app. " => "không thể kích hoạt ứng dụng.",
@@ -13,9 +14,15 @@
 "Admins can't remove themself from the admin group" => "Quản trị viên không thể loại bỏ chính họ khỏi nhóm quản lý",
 "Unable to add user to group %s" => "Không thể thêm người dùng vào nhóm %s",
 "Unable to remove user from group %s" => "Không thể xóa người dùng từ nhóm %s",
+"Couldn't update app." => "Không thể cập nhật ứng dụng",
+"Update to {appversion}" => "Cập nhật lên {appversion}",
 "Disable" => "Tắt",
 "Enable" => "Bật",
+"Please wait...." => "Xin hãy đợi...",
+"Updating...." => "Đang cập nhật...",
+"Error while updating app" => "Lỗi khi cập nhật ứng dụng",
 "Error" => "Lỗi",
+"Updated" => "Đã cập nhật",
 "Saving..." => "Đang tiến hành lưu ...",
 "__language_name__" => "__Ngôn ngữ___",
 "Add your App" => "Thêm ứng dụng của bạn",
@@ -24,24 +31,46 @@
 "See application page at apps.owncloud.com" => "Xem nhiều ứng dụng hơn tại apps.owncloud.com",
 "<span class=\"licence\"></span>-licensed by <span class=\"author\"></span>" => "<span class=\"licence\"></span>-Giấy phép được cấp bởi  <span class=\"author\"></span>",
 "Update" => "Cập nhật",
+"User Documentation" => "Tài liệu người sử dụng",
+"Administrator Documentation" => "Tài liệu quản trị",
+"Online Documentation" => "Tài liệu trực tuyến",
+"Forum" => "Diễn đàn",
+"Bugtracker" => "Hệ ghi nhận lỗi",
+"Commercial Support" => "Hỗ trợ có phí",
 "You have used <strong>%s</strong> of the available <strong>%s</strong>" => "Bạn đã sử dụng <strong>%s </ strong> có sẵn <strong> %s </ strong>",
 "Clients" => "Khách hàng",
+"Download Desktop Clients" => "Download bộ cài trên desktop",
+"Download Android Client" => "Download bộ cài trên Android",
+"Download iOS Client" => "Download bộ cài trên iOS",
 "Password" => "Mật khẩu",
 "Your password was changed" => "Mật khẩu của bạn đã được thay đổi.",
 "Unable to change your password" => "Không thể đổi mật khẩu",
 "Current password" => "Mật khẩu cũ",
 "New password" => "Mật khẩu mới ",
-"show" => "Hiện",
 "Change password" => "Đổi mật khẩu",
+"Display Name" => "Tên hiển thị",
+"Your display name was changed" => "Tên hiển thị của bạn đã được thay đổi",
+"Unable to change your display name" => "Không thể thay đổi tên hiển thị của bạn",
+"Change display name" => "Thay đổi tên hiển thị",
 "Email" => "Email",
 "Your email address" => "Email của bạn",
 "Fill in an email address to enable password recovery" => "Nhập địa chỉ email của bạn để khôi phục lại mật khẩu",
 "Language" => "Ngôn ngữ",
 "Help translate" => "Hỗ trợ dịch thuật",
+"WebDAV" => "WebDAV",
+"Use this address to connect to your ownCloud in your file manager" => "Sử dụng địa chỉ này để kết nối ownCloud của bạn trong trình quản lý file của bạn",
+"Version" => "Phiên bản",
 "Developed by the <a href=\"http://ownCloud.org/contact\" target=\"_blank\">ownCloud community</a>, the <a href=\"https://github.com/owncloud\" target=\"_blank\">source code</a> is licensed under the <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>." => "Được phát triển bởi <a href=\"http://ownCloud.org/contact\" target=\"_blank\">cộng đồng ownCloud</a>, <a href=\"https://github.com/owncloud\" target=\"_blank\">mã nguồn </a> đã được cấp phép theo chuẩn <a href=\"http://www.gnu.org/licenses/agpl-3.0.html\" target=\"_blank\"><abbr title=\"Affero General Public License\">AGPL</abbr></a>.",
+"Login Name" => "Tên đăng nhập",
 "Groups" => "Nhóm",
 "Create" => "Tạo",
+"Default Storage" => "Bộ nhớ mặc định",
+"Unlimited" => "Không giới hạn",
 "Other" => "Khác",
 "Group Admin" => "Nhóm quản trị",
+"Storage" => "Bộ nhớ",
+"change display name" => "Thay đổi tên hiển thị",
+"set new password" => "đặt mật khẩu mới",
+"Default" => "Mặc định",
 "Delete" => "Xóa"
 );
diff --git a/settings/l10n/zh_CN.GB2312.php b/settings/l10n/zh_CN.GB2312.php
index c7d73ae2ded89b5a4036c92bd829669c9e40b606..95a79e467c91a14a0ce629af92460f21bdfca5fc 100644
--- a/settings/l10n/zh_CN.GB2312.php
+++ b/settings/l10n/zh_CN.GB2312.php
@@ -29,7 +29,6 @@
 "Unable to change your password" => "不能改变你的密码",
 "Current password" => "现在的密码",
 "New password" => "新密码",
-"show" => "展示",
 "Change password" => "改变密码",
 "Email" => "Email",
 "Your email address" => "你的email地址",
diff --git a/settings/l10n/zh_CN.php b/settings/l10n/zh_CN.php
index 40c571a876319fca345a411f901340cd228cd0e4..df0e11dd1574d217d44e88237cc854f14e5b96b1 100644
--- a/settings/l10n/zh_CN.php
+++ b/settings/l10n/zh_CN.php
@@ -40,7 +40,6 @@
 "Unable to change your password" => "无法修改密码",
 "Current password" => "当前密码",
 "New password" => "新密码",
-"show" => "显示",
 "Change password" => "修改密码",
 "Email" => "电子邮件",
 "Your email address" => "您的电子邮件",
diff --git a/settings/l10n/zh_TW.php b/settings/l10n/zh_TW.php
index ecff21604f3591fa9ae6681f1a90ea730d66f6de..b1037f084932a81e04936885ad0e5dd5cebb514a 100644
--- a/settings/l10n/zh_TW.php
+++ b/settings/l10n/zh_TW.php
@@ -1,6 +1,7 @@
 <?php $TRANSLATIONS = array(
 "Unable to load list from App Store" => "無法從 App Store 讀取清單",
 "Authentication error" => "認證錯誤",
+"Unable to change display name" => "無法更改顯示名稱",
 "Group already exists" => "群組已存在",
 "Unable to add group" => "群組增加失敗",
 "Could not enable app. " => "未能啟動此app",
@@ -46,9 +47,11 @@
 "Unable to change your password" => "無法變更你的密碼",
 "Current password" => "目前密碼",
 "New password" => "新密碼",
-"show" => "顯示",
 "Change password" => "變更密碼",
 "Display Name" => "顯示名稱",
+"Your display name was changed" => "已更改顯示名稱",
+"Unable to change your display name" => "無法更改您的顯示名稱",
+"Change display name" => "更改顯示名稱",
 "Email" => "電子郵件",
 "Your email address" => "你的電子郵件信箱",
 "Fill in an email address to enable password recovery" => "請填入電子郵件信箱以便回復密碼",
diff --git a/settings/templates/personal.php b/settings/templates/personal.php
index 398e65c008686ba330736dc87bbf430ca7f4c4cf..6ccb607e6325b6178ec9f3198333b5b582d538a3 100644
--- a/settings/templates/personal.php
+++ b/settings/templates/personal.php
@@ -24,8 +24,8 @@ if($_['passwordChangeSupported']) {
 		<div id="passwordchanged"><?php echo $l->t('Your password was changed');?></div>
 		<div id="passworderror"><?php echo $l->t('Unable to change your password');?></div>
 		<input type="password" id="pass1" name="oldpassword" placeholder="<?php echo $l->t('Current password');?>" />
-		<input type="password" id="pass2" name="password" placeholder="<?php echo $l->t('New password');?>" data-typetoggle="#show" />
-		<input type="checkbox" id="show" name="show" /><label for="show"> <?php echo $l->t('show');?></label>
+		<input type="password" id="pass2" name="personal-password" placeholder="<?php echo $l->t('New password');?>" data-typetoggle="#personal-show" />
+		<input type="checkbox" id="personal-show" name="show" /><label for="personal-show"></label>
 		<input id="passwordbutton" type="submit" value="<?php echo $l->t('Change password');?>" />
 	</fieldset>
 </form>