From db1a87cd6c506f2afbd1a37c64cb56ae11120b49 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Fri, 17 Dec 2010 10:07:04 -0500
Subject: [PATCH] Update branch for 0.5-rc release

---
 program/lib/Mail/mime.php                      |   57 
 program/localization/bg_BG/labels.inc          |    9 
 INSTALL                                        |    3 
 bin/update.sh                                  |    2 
 program/localization/cy_GB/labels.inc          |   26 
 program/localization/fr_FR/labels.inc          |   19 
 program/include/main.inc                       |  180 +
 program/localization/hy_AM/labels.inc          |    3 
 program/localization/de_CH/messages.inc        |   15 
 skins/default/mail.css                         |   22 
 skins/default/templates/folderedit.html        |   24 
 program/localization/it_IT/labels.inc          |   13 
 program/localization/ko_KR/messages.inc        |    3 
 program/localization/ca_ES/labels.inc          |    3 
 program/localization/sr_CS/messages.inc        |    1 
 program/localization/el_GR/messages.inc        |    3 
 program/localization/es_AR/messages.inc        |    3 
 program/localization/ka_GE/labels.inc          |    3 
 program/localization/is_IS/labels.inc          |    3 
 program/localization/ast/messages.inc          |    3 
 program/localization/da_DK/labels.inc          |    3 
 program/localization/ja_JP/labels.inc          |  280 -
 plugins/password/drivers/ldap.php              |   38 
 program/localization/eu_ES/messages.inc        |    1 
 program/localization/cs_CZ/labels.inc          |    3 
 program/localization/fa/labels.inc             |    4 
 program/localization/kh_KH/messages.inc        |    3 
 program/localization/de_DE/messages.inc        |   15 
 plugins/new_user_dialog/localization/es_ES.inc |    4 
 program/localization/nb_NO/messages.inc        |    3 
 program/localization/az_AZ/labels.inc          |    3 
 program/localization/pt_BR/messages.inc        |    3 
 plugins/managesieve/localization/ru_RU.inc     |   33 
 program/include/rcube_user.php                 |    8 
 UPGRADING                                      |    5 
 program/localization/nl_NL/labels.inc          |   15 
 program/localization/sv_SE/messages.inc        |   15 
 program/localization/es_AR/labels.inc          |    3 
 program/localization/lt_LT/labels.inc          |   34 
 program/steps/mail/copy.inc                    |    4 
 program/steps/mail/move_del.inc                |   10 
 program/localization/ka_GE/messages.inc        |    3 
 program/steps/mail/list.inc                    |    3 
 skins/default/templates/folders.html           |   62 
 program/localization/nb_NO/labels.inc          |    3 
 program/localization/en_US/messages.inc        |   15 
 program/localization/sk_SK/messages.inc        |    3 
 program/js/app.js                              |  329 -
 program/localization/pt_PT/messages.inc        |   14 
 program/localization/bn_BD/labels.inc          |    5 
 program/localization/sl_SI/messages.inc        |    3 
 program/localization/fr_FR/messages.inc        |   19 
 program/localization/nl_BE/labels.inc          |    3 
 program/localization/ko_KR/labels.inc          |    3 
 plugins/managesieve/localization/fr_FR.inc     |    2 
 program/localization/id_ID/messages.inc        |   21 
 program/localization/az_AZ/messages.inc        |    3 
 program/localization/nn_NO/messages.inc        |    3 
 program/localization/sk_SK/labels.inc          |    3 
 program/localization/ta_IN/labels.inc          |    3 
 program/localization/ro_RO/labels.inc          |    3 
 program/localization/es_ES/labels.inc          |   21 
 skins/default/iehacks.css                      |    8 
 program/localization/en_GB/labels.inc          |   24 
 program/localization/ja_JP/messages.inc        |   46 
 program/localization/ps/labels.inc             |    3 
 program/localization/zh_TW/messages.inc        |    4 
 program/localization/cy_GB/messages.inc        |   29 
 program/localization/ne_NP/labels.inc          |    3 
 program/localization/ms_MY/labels.inc          |    3 
 program/localization/cs_CZ/messages.inc        |   23 
 program/localization/fa/messages.inc           |    3 
 program/localization/ga_IE/labels.inc          |    3 
 program/localization/ku/messages.inc           |    1 
 program/localization/mr_IN/messages.inc        |    3 
 program/localization/ru_RU/labels.inc          |   13 
 program/localization/nn_NO/labels.inc          |    3 
 program/localization/ca_ES/messages.inc        |    3 
 program/localization/et_EE/messages.inc        |   18 
 plugins/password/package.xml                   |    4 
 program/localization/en_GB/messages.inc        |   29 
 program/js/list.js                             |    9 
 program/localization/br/labels.inc             |    3 
 program/localization/gl_ES/messages.inc        |   27 
 program/localization/lt_LT/messages.inc        |   30 
 program/steps/settings/folders.inc             |  377 +++
 program/localization/mr_IN/labels.inc          |    3 
 program/localization/he_IL/messages.inc        |   17 
 program/localization/ro_RO/messages.inc        |    3 
 program/include/rcube_message.php              |    6 
 program/localization/gl_ES/labels.inc          |   41 
 plugins/password/drivers/chpasswd.php          |    2 
 program/steps/mail/sendmail.inc                |   69 
 program/localization/uk_UA/labels.inc          |   16 
 program/localization/eu_ES/labels.inc          |    3 
 program/localization/hu_HU/messages.inc        |    3 
 program/localization/et_EE/labels.inc          |   16 
 program/localization/pt_PT/labels.inc          |   18 
 README                                         |    3 
 skins/default/templates/identityedit.html      |    2 
 plugins/password/drivers/ldap_simple.php       |   35 
 program/localization/bg_BG/messages.inc        |    5 
 program/localization/pl_PL/messages.inc        |   15 
 skins/default/functions.js                     |    2 
 program/localization/el_GR/labels.inc          |    3 
 program/localization/hy_AM/messages.inc        |    3 
 program/localization/ru_RU/messages.inc        |    3 
 program/localization/uk_UA/messages.inc        |   16 
 plugins/new_user_dialog/new_user_dialog.php    |    1 
 program/localization/ar_SA/labels.inc          |   92 
 program/localization/hr_HR/labels.inc          |   88 
 program/localization/id_ID/labels.inc          |   25 
 program/steps/mail/compose.inc                 |   22 
 program/js/editor.js                           |    4 
 program/steps/mail/show.inc                    |    7 
 program/localization/de_CH/labels.inc          |   16 
 program/localization/ast/labels.inc            |    3 
 program/localization/mk_MK/labels.inc          |    3 
 program/localization/de_DE/labels.inc          |   16 
 skins/default/splitter.js                      |    6 
 index.php                                      |   27 
 program/localization/fa_AF/messages.inc        |    3 
 program/steps/utils/html2text.inc              |    7 
 program/localization/si_LK/messages.inc        |    1 
 program/localization/tr_TR/messages.inc        |    3 
 program/localization/pl_PL/labels.inc          |   21 
 program/localization/vi_VN/labels.inc          |    3 
 program/steps/mail/mark.inc                    |    6 
 program/localization/ms_MY/messages.inc        |    1 
 program/localization/sv_SE/labels.inc          |   12 
 CHANGELOG                                      |   24 
 program/localization/sr_CS/labels.inc          |    3 
 program/localization/he_IL/labels.inc          |   21 
 config/main.inc.php.dist                       |   10 
 program/lib/Mail/mimePart.php                  |  104 
 program/localization/sq_AL/messages.inc        |    1 
 program/localization/zh_CN/messages.inc        |    3 
 program/localization/bn_BD/messages.inc        |    3 
 program/localization/bs_BA/labels.inc          |    3 
 program/localization/sl_SI/labels.inc          |   13 
 program/steps/settings/save_folder.inc         |  176 +
 program/localization/es_ES/messages.inc        |   17 
 program/steps/mail/getunread.inc               |   15 
 program/localization/ku/labels.inc             |    3 
 program/localization/th_TH/labels.inc          |    3 
 plugins/emoticons/emoticons.php                |   63 
 program/localization/hi_IN/labels.inc          |    3 
 skins/default/templates/compose.html           |   18 
 program/localization/eo/labels.inc             |    3 
 program/localization/sq_AL/labels.inc          |    3 
 skins/default/common.css                       |   19 
 program/localization/ps/messages.inc           |    3 
 program/localization/nl_NL/messages.inc        |    3 
 plugins/new_user_dialog/package.xml            |   26 
 program/localization/nl_BE/messages.inc        |    3 
 program/localization/mk_MK/messages.inc        |    3 
 program/include/iniset.php                     |    2 
 program/localization/da_DK/messages.inc        |    3 
 program/steps/settings/edit_folder.inc         |  294 ++
 program/localization/lv_LV/messages.inc        |    3 
 program/localization/pt_BR/labels.inc          |    3 
 program/steps/mail/folders.inc                 |   84 
 program/localization/zh_TW/labels.inc          |    9 
 program/steps/mail/func.inc                    |   93 
 program/localization/fa_AF/labels.inc          |    3 
 program/localization/it_IT/messages.inc        |    3 
 plugins/password/config.inc.php.dist           |    2 
 program/localization/ar_SA/messages.inc        |   28 
 program/localization/ta_IN/messages.inc        |    3 
 program/localization/kh_KH/labels.inc          |    3 
 program/localization/eo/messages.inc           |    1 
 plugins/password/drivers/sql.php               |    8 
 program/localization/fi_FI/messages.inc        |    3 
 program/localization/hr_HR/messages.inc        |    3 
 program/steps/settings/edit_identity.inc       |    3 
 /dev/null                                      |   41 
 program/localization/fi_FI/labels.inc          |    3 
 program/steps/mail/search.inc                  |    3 
 program/include/rcube_imap.php                 |  331 +-
 program/localization/hu_HU/labels.inc          |   13 
 program/localization/lv_LV/labels.inc          |    3 
 skins/default/settings.css                     |  118 
 program/include/rcmail.php                     |   32 
 program/localization/si_LK/labels.inc          |    3 
 program/localization/en_US/labels.inc          |   21 
 program/localization/tr_TR/labels.inc          |    3 
 program/include/rcube_template.php             |   20 
 program/localization/zh_CN/labels.inc          |    3 
 program/include/rcube_imap_generic.php         | 2725 ++++++++++++----------
 189 files changed, 4,206 insertions(+), 2,936 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 988c97b..12ada23 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,30 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Plugin API: Add 'pass' argument in 'authenticate' hook (#1487134)
+- Fix attachments of type message/rfc822 are not listed on attachments list
+- Add 'login_lc' config option for case-insensitive authentication (#1487113)
+- Fix window is blur'ed in IE when selecting a message (#1487316)
+- Fix cursor position on compose form in Webkit browsers (#1486674)
+- Fix setting charset of attachment filenames (#1487122)
+- Allow setting autocomplete attribute for all inputs separately (#1487313)
+- New Folder Manager UI
+- Fix invalid Request when creating a folder (#1487443)
+- Add folder size and quota indicator in folder manager (#1485780)
+- Add possibility to move a subfolder into root folder (#1486791)
+- Fix copying all messages in a folder copies only messages from current page
+- Improve performance of moving or copying of all messages in a folder
+- Fix plaintext versions of HTML messages don't contain placeholders for emotions (#1485206)
+- Improve performance of folder rename and delete actions
+- Better support for READ-ONLY and NOPERM responses handling (#1487083)
+- Add confirmation message on purge/expunge command response
+- Fix handling of untagged responses for AUTHENTICATE command (#1487450)
+- Add username and IP address to log message on unsuccessful login (#1487626)
+- Improved Mail-Followup-To and Mail-Reply-To headers handling
+- Fix charset conversion for text attachments without charset specification (#1487634)
+
+RELEASE 0.5-BETA
+----------------
 - Make session data storage more robust against garbage session data (#1487136)
 - Config option for autocomplete on login screen
 - Allow plugin templates to include local files (#1487133)
diff --git a/INSTALL b/INSTALL
index 534eac6..eb83997 100644
--- a/INSTALL
+++ b/INSTALL
@@ -17,8 +17,9 @@
    - mbstring, fileinfo, mcrypt (optional)
 * PEAR packages distributed with Roundcube or external:
    - MDB2 2.5.0 or newer
-   - Mail_Mime 1.7.0 or newer
+   - Mail_Mime 1.8.1 or newer
    - Net_SMTP 1.4.2 or newer
+   - Auth_SASL 1.0.3 or newer
 * php.ini options (see .htaccess file):
    - error_reporting E_ALL & ~E_NOTICE (or lower)
    - memory_limit > 16MB (increase as suitable to support large attachments)
diff --git a/README b/README
index 06530b2..a4e661a 100644
--- a/README
+++ b/README
@@ -25,9 +25,6 @@
 For detailed instructions on how to install Roundcube webmail on your server,
 please refer to the INSTALL document in the same directory as this document.
 
-If you're updating an older version of Roundcube please follow the steps
-described in the UPGRADING file.
-
 
 Licensing:
 ----------
diff --git a/UPGRADING b/UPGRADING
index 1cc8902..e98fd16 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -22,6 +22,7 @@
    ./SQL/[yourdbtype].update.sql that are superscribed with the
    currently installed version number.
 5. Make sure 'enable_installer' is set to false again.
-6. IMPORTANT: clear all records from the sessions table in your database.
-   The session storage format has changed so all existing data cannot be read anymore.
+6. IMPORTANT (when upgrading from 0.4.x): clear all records from the sessions
+   table in your database. The session storage format has changed so all
+   existing data cannot be read anymore.
 
diff --git a/bin/update.sh b/bin/update.sh
index 5f4e3f2..a298887 100755
--- a/bin/update.sh
+++ b/bin/update.sh
@@ -80,7 +80,7 @@
         // Success!
         if ($write1 && $write2) {
           echo "Done.\n";
-          echo "Your configuration files are now up-tp-date!\n";
+          echo "Your configuration files are now up-to-date!\n";
         }
         else {
           echo "Failed to write config files!\n";
diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist
index 2b18da3..e2f9aea 100644
--- a/config/main.inc.php.dist
+++ b/config/main.inc.php.dist
@@ -83,6 +83,7 @@
 // set these options. All can be strings or arrays of strings.
 // Folders need to be ended with directory separator, e.g. "INBOX."
 // (special directory "~" is an exception to this rule)
+// These can be used also to overwrite server's namespaces
 $rcmail_config['imap_ns_personal'] = null;
 $rcmail_config['imap_ns_other']    = null;
 $rcmail_config['imap_ns_shared']   = null;
@@ -180,8 +181,13 @@
 // set the port for the ssl connection as value of this option if it differs from the default 443
 $rcmail_config['force_https'] = false;
 
-// Allow browser-autocompletion on login form
-$rcmail_config['login_autocomplete'] = false;
+// Allow browser-autocompletion on login form.
+// 0 - disabled, 1 - username and host only, 2 - username, host, password
+$rcmail_config['login_autocomplete'] = 0;
+
+// If users authentication is not case sensitive this must be enabled.
+// You can also use it to force conversion of logins to lower case.
+$rcmail_config['login_lc'] = false;
 
 // automatically create a new Roundcube user when log-in the first time.
 // a new user will be created once the IMAP login succeeds.
diff --git a/index.php b/index.php
index 0da3c12..ff9b008 100644
--- a/index.php
+++ b/index.php
@@ -2,7 +2,7 @@
 /*
  +-------------------------------------------------------------------------+
  | Roundcube Webmail IMAP Client                                           |
- | Version 0.5-beta                                                        |
+ | Version 0.5-rc                                                          |
  |                                                                         |
  | Copyright (C) 2005-2010, Roundcube Dev. - Switzerland                   |
  |                                                                         |
@@ -77,16 +77,14 @@
 if ($RCMAIL->task == 'login' && $RCMAIL->action == 'login') {
   // purge the session in case of new login when a session already exists 
   $RCMAIL->kill_session();
-  
+
   $auth = $RCMAIL->plugins->exec_hook('authenticate', array(
     'host' => $RCMAIL->autoselect_host(),
     'user' => trim(get_input_value('_user', RCUBE_INPUT_POST)),
+    'pass' => get_input_value('_pass', RCUBE_INPUT_POST, true,
+       $RCMAIL->config->get('password_charset', 'ISO-8859-1')),
     'cookiecheck' => true,
   ));
-  
-  if (!isset($auth['pass']))
-    $auth['pass'] = get_input_value('_pass', RCUBE_INPUT_POST, true,
-        $RCMAIL->config->get('password_charset', 'ISO-8859-1'));
 
   // check if client supports cookies
   if ($auth['cookiecheck'] && empty($_COOKIE)) {
@@ -220,16 +218,15 @@
     'group-addmembers' => 'groups.inc',
     'group-delmembers' => 'groups.inc',
   ),
-  
+
   'settings' => array(
-    'folders'       => 'manage_folders.inc',
-    'create-folder' => 'manage_folders.inc',
-    'rename-folder' => 'manage_folders.inc',
-    'delete-folder' => 'manage_folders.inc',
-    'subscribe'     => 'manage_folders.inc',
-    'unsubscribe'   => 'manage_folders.inc',
-    'enable-threading'  => 'manage_folders.inc',
-    'disable-threading' => 'manage_folders.inc',
+    'folders'       => 'folders.inc',
+    'rename-folder' => 'folders.inc',
+    'delete-folder' => 'folders.inc',
+    'subscribe'     => 'folders.inc',
+    'unsubscribe'   => 'folders.inc',
+    'purge'         => 'folders.inc',
+    'folder-size'   => 'folders.inc',
     'add-identity'  => 'edit_identity.inc',
   )
 );
diff --git a/plugins/emoticons/emoticons.php b/plugins/emoticons/emoticons.php
index e929c9f..95f5ecf 100644
--- a/plugins/emoticons/emoticons.php
+++ b/plugins/emoticons/emoticons.php
@@ -5,7 +5,7 @@
  *
  * Sample plugin to replace emoticons in plain text message body with real icons
  *
- * @version 1.2.0
+ * @version 1.3
  * @author Thomas Bruederli
  * @author Aleksander Machniak
  * @website http://roundcube.net
@@ -35,38 +35,30 @@
 
         // map of emoticon replacements
         $map = array(
-            '/:\)/' => html::img(array(
-                'src'   => './program/js/tiny_mce/plugins/emotions/img/smiley-smile.gif',
-                'title' => ':)'
-            )),
-            '/:-\)/' => html::img(array(
-                'src'   => './program/js/tiny_mce/plugins/emotions/img/smiley-smile.gif',
-                'title' => ':-)'
-            )),
-            '/(?<!mailto):D/' => html::img(array(
-                'src'   => './program/js/tiny_mce/plugins/emotions/img/smiley-laughing.gif',
-                'title' => ':D'
-            )),
-            '/:-D/' => html::img(array(
-                'src'   => './program/js/tiny_mce/plugins/emotions/img/smiley-laughing.gif',
-                'title' => ':-D'
-            )),
-            '/:\(/' => html::img(array(
-                'src'   => './program/js/tiny_mce/plugins/emotions/img/smiley-frown.gif',
-                'title' => ':('
-            )),
-            '/:-\(/' => html::img(array(
-                'src'   => './program/js/tiny_mce/plugins/emotions/img/smiley-frown.gif',
-                'title' => ':-('
-            )),
-            '/'.$entity.';\)/' => html::img(array(
-                'src'   => './program/js/tiny_mce/plugins/emotions/img/smiley-wink.gif',
-                'title' => ';)'
-            )),
-            '/'.$entity.';-\)/' => html::img(array(
-                'src'   => './program/js/tiny_mce/plugins/emotions/img/smiley-wink.gif',
-                'title' => ';-)'
-            )),
+            '/:\)/'             => $this->img_tag('smiley-smile.gif',       ':)'    ),
+            '/:-\)/'            => $this->img_tag('smiley-smile.gif',       ':-)'   ),
+            '/(?<!mailto):D/'   => $this->img_tag('smiley-laughing.gif',    ':D'    ),
+            '/:-D/'             => $this->img_tag('smiley-laughing.gif',    ':-D'   ),
+            '/:\(/'             => $this->img_tag('smiley-frown.gif',       ':('    ),
+            '/:-\(/'            => $this->img_tag('smiley-frown.gif',       ':-('   ),
+            '/'.$entity.';\)/'  => $this->img_tag('smiley-wink.gif',        ';)'    ),
+            '/'.$entity.';-\)/' => $this->img_tag('smiley-wink.gif',        ';-)'   ),
+            '/8\)/'             => $this->img_tag('smiley-cool.gif',        '8)'    ),
+            '/8-\)/'            => $this->img_tag('smiley-cool.gif',        '8-)'   ),
+            '/(?<!mailto):O/i'  => $this->img_tag('smiley-surprised.gif',   ':O'    ),
+            '/(?<!mailto):-O/i' => $this->img_tag('smiley-surprised.gif',   ':-O'   ),
+            '/(?<!mailto):P/i'  => $this->img_tag('smiley-tongue-out.gif',  ':P'    ),
+            '/(?<!mailto):-P/i' => $this->img_tag('smiley-tongue-out.gif',  ':-P'   ),
+            '/(?<!mailto):@/i'  => $this->img_tag('smiley-yell.gif',        ':@'    ),
+            '/(?<!mailto):-@/i' => $this->img_tag('smiley-yell.gif',        ':-@'   ),
+            '/O:\)/i'           => $this->img_tag('smiley-innocent.gif',    'O:)'   ),
+            '/O:-\)/i'          => $this->img_tag('smiley-innocent.gif',    'O:-)'  ),
+            '/(?<!mailto):$/'   => $this->img_tag('smiley-embarassed.gif',  ':$'    ),
+            '/(?<!mailto):-$/'  => $this->img_tag('smiley-embarassed.gif',  ':-$'   ),
+            '/(?<!mailto):\*/i'  => $this->img_tag('smiley-kiss.gif',       ':*'    ),
+            '/(?<!mailto):-\*/i' => $this->img_tag('smiley-kiss.gif',       ':-*'   ),
+            '/(?<!mailto):S/i'  => $this->img_tag('smiley-undecided.gif',   ':S'    ),
+            '/(?<!mailto):-S/i' => $this->img_tag('smiley-undecided.gif',   ':-S'   ),
         );
 
         if ($args['type'] == 'plain') {
@@ -77,4 +69,9 @@
         return $args;
     }
 
+    private function img_tag($ico, $title)
+    { 
+        $path = './program/js/tiny_mce/plugins/emotions/img/';
+        return html::img(array('src' => $path.$ico, 'title' => $title));
+    }
 }
diff --git a/plugins/managesieve/localization/fr_FR.inc b/plugins/managesieve/localization/fr_FR.inc
index e7d0994..0b494f0 100644
--- a/plugins/managesieve/localization/fr_FR.inc
+++ b/plugins/managesieve/localization/fr_FR.inc
@@ -26,6 +26,8 @@
 $labels['messagereply'] = 'Répondre avec le message';
 $labels['messagedelete'] = 'Supprimer le message';
 $labels['messagediscard'] = 'Rejeter avec le message';
+$labels['messagecopyto'] = 'Copier le message vers';
+$labels['messagesendcopy'] = 'Envoyer une copie du message à';
 $labels['messagesrules'] = 'Pour les mails entrants:';
 $labels['messagesactions'] = '...exécuter les actions suivantes:';
 $labels['add'] = 'Ajouter';
diff --git a/plugins/managesieve/localization/ru_RU.inc b/plugins/managesieve/localization/ru_RU.inc
index 95f3028..d485f0e 100644
--- a/plugins/managesieve/localization/ru_RU.inc
+++ b/plugins/managesieve/localization/ru_RU.inc
@@ -1,4 +1,22 @@
 <?php
+/*
+
++-----------------------------------------------------------------------+
+| plugins/managesieve/localization/ru_RU.inc                            |
+|                                                                       |
+| Russian translation for roundcube/managesieve plugin                  |
+| Copyright (C) 2008-2010                                               |
+| Licensed under the GNU GPL                                            |
+|                                                                       |
++-----------------------------------------------------------------------+
+| Author:                                                               |
+| Updates: Sergey Dukachev <iam@dukess.ru>                              |
++-----------------------------------------------------------------------+
+
+@version 2010-10-11
+
+*/
+
 $labels['filters'] = 'Фильтры';
 $labels['managefilters'] = 'Управление фильтрами для входящей почты';
 $labels['filtername'] = 'Название фильтра';
@@ -21,7 +39,9 @@
 $labels['addrule'] = 'Добавить правило';
 $labels['delrule'] = 'Удалить правило';
 $labels['messagemoveto'] = 'Переместить сообщение в';
-$labels['messageredirect'] = 'Перенаправить сообщение на ';
+$labels['messageredirect'] = 'Перенаправить сообщение на';
+$labels['messagecopyto'] = 'Скопировать сообщение в';
+$labels['messagesendcopy'] = 'Отправить копию сообщения на';
 $labels['messagereply'] = 'Ответить с сообщением';
 $labels['messagedelete'] = 'Удалить сообщение';
 $labels['messagediscard'] = 'Отбросить с сообщением';
@@ -38,12 +58,13 @@
 $labels['filterset'] = 'Набор фильтров';
 $labels['filtersetadd'] = 'Добавить набор фильтров';
 $labels['filtersetdel'] = 'Удалить текущий набор фильтров';
-$labels['filtersetact'] = 'Активировать текущий набор фильтров';
+$labels['filtersetact'] = 'Включить текущий набор фильтров';
+$labels['filtersetdeact'] = 'Отключить текущий набор фильтров';
 $labels['filtersetget'] = 'Скачать набор фильтров в виде текста';
 $labels['filterdef'] = 'Описание фильтра';
 $labels['filtersetname'] = 'Название набора фильтров';
 $labels['newfilterset'] = 'Новый набор фильтров';
-$labels['active'] = 'активный';
+$labels['active'] = 'используется';
 $labels['none'] = 'пустой';
 $labels['fromset'] = 'из набора';
 $labels['fromfile'] = 'из файла';
@@ -61,9 +82,11 @@
 $messages['actiondeleteconfirm'] = 'Вы уверенны, что хотите удалить это действие?';
 $messages['forbiddenchars'] = 'Недопустимые символы в поле';
 $messages['cannotbeempty'] = 'Поле не может быть пустым';
-$messages['setactivateerror'] = 'Невозможно активировать выбранный набор фильтров. Ошибка сервера';
+$messages['setactivateerror'] = 'Невозможно включить выбранный набор фильтров. Ошибка сервера';
+$messages['setdeactivateerror'] = 'Невозможно отключить выбранный набор фильтров. Ошибка сервера';
 $messages['setdeleteerror'] = 'Невозможно удалить выбранный набор фильтров. Ошибка сервера';
-$messages['setactivated'] = 'Набор фильтров успешно активирован';
+$messages['setactivated'] = 'Набор фильтров успешно включён';
+$messages['setdeactivated'] = 'Набор фильтров успешно отключён';
 $messages['setdeleted'] = 'Набор фильтров успешно удалён';
 $messages['setdeleteconfirm'] = 'Вы уверены в том, что хотите удалить выбранный набор фильтров?';
 $messages['setcreateerror'] = 'Невозможно создать набор фильтров. Ошибка сервера';
diff --git a/plugins/new_user_dialog/localization/es_ES.inc b/plugins/new_user_dialog/localization/es_ES.inc
index 73f47f2..2d2ccfe 100644
--- a/plugins/new_user_dialog/localization/es_ES.inc
+++ b/plugins/new_user_dialog/localization/es_ES.inc
@@ -1,7 +1,7 @@
 <?php
 
 $labels = array();
-$labels['identitydialogtitle'] = 'Por favor completa tus datos';
-$labels['identitydialoghint'] = 'Este diálogo sólo aparece la primera vez que te conectas.';
+$labels['identitydialogtitle'] = 'Por favor, complete sus datos personales';
+$labels['identitydialoghint'] = 'Este diálogo sólo aparecerá la primera vez que se conecte al correo.';
 
 ?>
diff --git a/plugins/new_user_dialog/new_user_dialog.php b/plugins/new_user_dialog/new_user_dialog.php
index 9b773be..96cd0da 100644
--- a/plugins/new_user_dialog/new_user_dialog.php
+++ b/plugins/new_user_dialog/new_user_dialog.php
@@ -85,6 +85,7 @@
         "$(document).ready(function () {
           rcmail.message_list.key_press = function(){};
           rcmail.message_list.key_down = function(){};
+          $('input[name=_name]').focus();
           });", 'foot');
 
       $this->include_stylesheet('newuserdialog.css');
diff --git a/plugins/new_user_dialog/package.xml b/plugins/new_user_dialog/package.xml
index 7caa87c..198a9fa 100644
--- a/plugins/new_user_dialog/package.xml
+++ b/plugins/new_user_dialog/package.xml
@@ -13,10 +13,10 @@
 		<email>roundcube@gmail.com</email>
 		<active>yes</active>
 	</lead>
-	<date>2010-05-27</date>
+	<date>2010-12-02</date>
 	<time>12:00:00</time>
 	<version>
-		<release>1.2</release>
+		<release>1.3</release>
 		<api>1.0</api>
 	</version>
 	<stability>
@@ -25,8 +25,8 @@
 	</stability>
 	<license uri="http://www.gnu.org/licenses/gpl-2.0.html">GNU GPLv2</license>
 	<notes>
-- Add overlay box only to mail task main template
-- Fix possible error on form submission (#1486103)
+- Added setting of focus on name input
+- Added gl_ES translation
     </notes>
 	<contents>
 		<dir baseinstalldir="/" name="/">
@@ -45,6 +45,7 @@
 				<file name="de_DE.inc" role="data" />
 				<file name="es_ES.inc" role="data" />
 				<file name="et_EE.inc" role="data" />
+				<file name="gl_ES.inc" role="data" />
 				<file name="it_IT.inc" role="data" />
 				<file name="ja_JP.inc" role="data" />
 				<file name="nl_NL.inc" role="data" />
@@ -101,5 +102,22 @@
 - Fix space bar and backspace buttons not working (#1486726)
             </notes>
         </release>
+        <release>
+	        <date>2010-05-27</date>
+	        <time>12:00:00</time>
+	        <version>
+		        <release>1.2</release>
+		        <api>1.0</api>
+	        </version>
+	        <stability>
+		        <release>stable</release>
+		        <api>stable</api>
+	        </stability>
+	        <license uri="http://www.gnu.org/licenses/gpl-2.0.html">GNU GPLv2</license>
+	        <notes>
+- Add overlay box only to mail task main template
+- Fix possible error on form submission (#1486103)
+            </notes>
+        </release>
     </changelog>
 </package>
diff --git a/plugins/password/config.inc.php.dist b/plugins/password/config.inc.php.dist
index b412663..10a659d 100644
--- a/plugins/password/config.inc.php.dist
+++ b/plugins/password/config.inc.php.dist
@@ -127,6 +127,7 @@
 // '%login' will be replaced by the current roundcube user's login
 // '%name' will be replaced by the current roundcube user's name part
 // '%domain' will be replaced by the current roundcube user's domain part
+// '%dc' will be replaced by domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
 // Exemple: 'uid=%login,ou=people,dc=exemple,dc=com'
 $rcmail_config['password_ldap_userDN_mask'] = 'uid=%login,ou=people,dc=exemple,dc=com';
 
@@ -164,6 +165,7 @@
 // '%login' will be replaced by the current roundcube user's login
 // '%name' will be replaced by the current roundcube user's name part
 // '%domain' will be replaced by the current roundcube user's domain part
+// '%dc' will be replaced by domain name hierarchal string e.g. "dc=test,dc=domain,dc=com"
 // Example: '(uid=%login)'
 // Example: '(&(objectClass=posixAccount)(uid=%login))'
 $rcmail_config['password_ldap_search_filter'] = '(uid=%login)';
diff --git a/plugins/password/drivers/chpasswd.php b/plugins/password/drivers/chpasswd.php
index 8450af1..28c3e5d 100644
--- a/plugins/password/drivers/chpasswd.php
+++ b/plugins/password/drivers/chpasswd.php
@@ -18,7 +18,7 @@
     $username = $_SESSION['username'];
 
     $handle = popen($cmd, "w");
-    fwrite($handle, "$username:$newpass");
+    fwrite($handle, "$username:$newpass\n");
 
     if (pclose($handle) == 0) {
         return PASSWORD_SUCCESS;
diff --git a/plugins/password/drivers/ldap.php b/plugins/password/drivers/ldap.php
index c5cb232..98b6636 100644
--- a/plugins/password/drivers/ldap.php
+++ b/plugins/password/drivers/ldap.php
@@ -18,18 +18,18 @@
 {
     $rcmail = rcmail::get_instance();
     require_once ('Net/LDAP2.php');
-    
+
     // Building user DN
     if ($userDN = $rcmail->config->get('password_ldap_userDN_mask')) {
         $userDN = substitute_vars($userDN);
     } else {
         $userDN = search_userdn($rcmail);
     }
-    
+
     if (empty($userDN)) {
         return PASSWORD_CONNECT_ERROR;
     }
-    
+
     // Connection Method
     switch($rcmail->config->get('password_ldap_method')) {
         case 'admin':
@@ -42,7 +42,7 @@
             $bindpw = $curpass;
             break;
     }
-    
+
     // Configuration array
     $ldapConfig = array (
         'binddn'    => $binddn,
@@ -53,27 +53,27 @@
         'starttls'  => $rcmail->config->get('password_ldap_starttls'),
         'version'   => $rcmail->config->get('password_ldap_version'),
     );
-    
+
     // Connecting using the configuration array
     $ldap = Net_LDAP2::connect($ldapConfig);
-    
+
     // Checking for connection error
     if (PEAR::isError($ldap)) {
         return PASSWORD_CONNECT_ERROR;
     }
-    
+
     // Crypting new password
     $newCryptedPassword = hashPassword($passwd, $rcmail->config->get('password_ldap_encodage'));
     if (!$newCryptedPassword) {
         return PASSWORD_CRYPT_ERROR;
     }
-    
+
     // Writing new crypted password to LDAP
     $userEntry = $ldap->getEntry($userDN);
     if (Net_LDAP2::isError($userEntry)) {
         return PASSWORD_CONNECT_ERROR;
     }
-    
+
     $pwattr = $rcmail->config->get('password_ldap_pwattr');
     $force = $rcmail->config->get('password_ldap_force_replace');
 
@@ -132,25 +132,30 @@
     if (PEAR::isError($result) || ($result->count() != 1)) {
         return '';
     }
-        
+
     return $result->current()->dn();
 }
 
 /**
- * Substitute %login, %name and %domain in $str.
+ * Substitute %login, %name, %domain, %dc in $str.
  * See plugin config for details.
  */
 function substitute_vars($str)
 {
     $rcmail = rcmail::get_instance();
+    $domain = $rcmail->user->get_username('domain');
+    $dc     = 'dc='.strtr($domain, array('.' => ',dc=')); // hierarchal domain string
+
     $str = str_replace(array(
             '%login',
             '%name',
             '%domain',
+            '%dc',
         ), array(
             $_SESSION['username'],
             $rcmail->user->get_username('local'),
-            $rcmail->user->get_username('domain'),
+            $domain,
+            $dc,
         ), $str
     );
 
@@ -178,7 +183,7 @@
         case 'crypt': 
             $cryptedPassword = '{CRYPT}' . crypt($passwordClear,randomSalt(2)); 
             break;
-            
+
         case 'ext_des':
             // extended des crypt. see OpenBSD crypt man page.
             if ( ! defined( 'CRYPT_EXT_DES' ) || CRYPT_EXT_DES == 0 ) {
@@ -263,8 +268,7 @@
  * @param int $length The length of the salt string to generate.
  * @return string The generated salt string.
  */
- 
-function randomSalt( $length ) 
+function randomSalt( $length )
 {
     $possible = '0123456789'.
         'abcdefghijklmnopqrstuvwxyz'.
@@ -273,8 +277,8 @@
     $str = '';
 //    mt_srand((double)microtime() * 1000000);
 
-    while( strlen( $str ) < $length )
-        $str .= substr( $possible, ( rand() % strlen( $possible ) ), 1 );
+    while (strlen($str) < $length)
+        $str .= substr($possible, (rand() % strlen($possible)), 1);
 
     return $str;
 }
diff --git a/plugins/password/drivers/ldap_simple.php b/plugins/password/drivers/ldap_simple.php
index 541afa9..38db9f1 100644
--- a/plugins/password/drivers/ldap_simple.php
+++ b/plugins/password/drivers/ldap_simple.php
@@ -20,7 +20,7 @@
 		return PASSWORD_CONNECT_ERROR;
 	}
 
-	/* Set protocol version */	
+	/* Set protocol version */
 	if (!ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, $rcmail->config->get('password_ldap_version'))) {
 		ldap_unbind($ds);
 		return PASSWORD_CONNECT_ERROR;
@@ -40,12 +40,12 @@
 	} else {
 		$user_dn = ldap_simple_search_userdn($rcmail, $ds);
 	}
-	
+
 	if (empty($user_dn)) {
 		ldap_unbind($ds);
 		return PASSWORD_CONNECT_ERROR;
 	}
-	
+
 	/* Connection method */
 	switch ($rcmail->config->get('password_ldap_method')) {
 		case 'admin':
@@ -64,27 +64,27 @@
 		ldap_unbind($ds);
 		return PASSWORD_CONNECT_ERROR;
 	}
-	
+
 	/* Crypting new password */
 	$passwd = ldap_simple_hash_password($passwd, $rcmail->config->get('password_ldap_encodage'));
 	if (!$passwd) {
 		ldap_unbind($ds);
 		return PASSWORD_CRYPT_ERROR;
 	}
-	
+
 	$entree[$rcmail->config->get('password_ldap_pwattr')] = $passwd;
 
 	/* Updating PasswordLastChange Attribute if desired */
 	if ($lchattr = $rcmail->config->get('password_ldap_lchattr')) {
-		$entree[$lchattr] = (int)(time() / 86400)
+		$entree[$lchattr] = (int)(time() / 86400);
 	}
 
-	
+
 	if (!ldap_modify($ds, $user_dn, $entree)) {
 		ldap_unbind($ds);
 		return PASSWORD_CONNECT_ERROR;
 	}
-	
+
 	/* All done, no error */
 	ldap_unbind($ds);
 	return PASSWORD_SUCCESS;
@@ -101,34 +101,37 @@
 	if (!ldap_bind($ds, $rcmail->config->get('password_ldap_searchDN'), $rcmail->config->get('password_ldap_searchPW'))) {
 		return false;
 	}
-	
+
 	/* Search for the DN */
 	if (!$sr = ldap_search($ds, $rcmail->config->get('password_ldap_search_base'), ldap_simple_substitute_vars($rcmail->config->get('password_ldap_search_filter')))) {
 		return false;
 	}
-	
+
 	/* If no or more entries were found, return false */
 	if (ldap_count_entries($ds, $sr) != 1) {
 		return false;
 	}
-	
+
 	return ldap_get_dn($ds, ldap_first_entry($ds, $sr));
 }
 
 /**
- * Substitute %login, %name and %domain in $str
+ * Substitute %login, %name, %domain, %dc in $str
  * See plugin config for details
  */
 function ldap_simple_substitute_vars($str)
 {
 	$str = str_replace('%login', $_SESSION['username'], $str);
 	$str = str_replace('%l', $_SESSION['username'], $str);
-	
+
 	$parts = explode('@', $_SESSION['username']);
+
 	if (count($parts) == 2) {
+        $dc = 'dc='.strtr($parts[1], array('.' => ',dc=')); // hierarchal domain string
+
 		$str = str_replace('%name', $parts[0], $str);
-		$str = str_replace('%n', $parts[0], $str);
-		
+        $str = str_replace('%n', $parts[0], $str);
+        $str = str_replace('%dc', $dc, $str);
 		$str = str_replace('%domain', $parts[1], $str);
 		$str = str_replace('%d', $parts[1], $str);
 	}
@@ -228,6 +231,6 @@
 	while (strlen($str) < $length) {
 		$str .= substr($possible, (rand() % strlen($possible)), 1);
 	}
-	
+
 	return $str;
 }
diff --git a/plugins/password/drivers/sql.php b/plugins/password/drivers/sql.php
index 70e5643..33469ec 100644
--- a/plugins/password/drivers/sql.php
+++ b/plugins/password/drivers/sql.php
@@ -33,7 +33,7 @@
 
     if ($err = $db->is_error())
         return PASSWORD_ERROR;
-    
+
     // crypted password
     if (strpos($sql, '%c') !== FALSE) {
         $salt = '';
@@ -56,7 +56,11 @@
             $dovecotpw = 'dovecotpw';
         if (!($method = $rcmail->config->get('password_dovecotpw_method')))
             $method = 'CRAM-MD5';
-        $tmpfile = tempnam('/tmp', 'roundcube-');
+
+        // use common temp dir
+        $tmp_dir = $rcmail->config->get('temp_dir');
+        $tmpfile = tempnam($tmp_dir, 'roundcube-');
+
         $pipe = popen("'$dovecotpw' -s '$method' > '$tmpfile'", "w");
         if (!$pipe) {
             unlink($tmpfile);
diff --git a/plugins/password/package.xml b/plugins/password/package.xml
index 1fe49fb..381783b 100644
--- a/plugins/password/package.xml
+++ b/plugins/password/package.xml
@@ -29,6 +29,10 @@
 	<notes>
 - hMail driver: add username_domain detection (#1487100)
 - hMail driver: HTML tags in logged messages should be stripped off (#1487099)
+- Chpasswd driver: add newline at end of input to chpasswd binary (#1487141)
+- Fix usage of configured temp_dir instead of /tmp (#1487447)
+- ldap_simple driver: fix parse error
+- ldap/ldap_simple drivers: support %dc variable in config
     </notes>
 	<contents>
 		<dir baseinstalldir="/" name="/">
diff --git a/program/include/iniset.php b/program/include/iniset.php
index a48ca9e..8ccef8a 100755
--- a/program/include/iniset.php
+++ b/program/include/iniset.php
@@ -36,7 +36,7 @@
 }
 
 // application constants
-define('RCMAIL_VERSION', '0.5-beta');
+define('RCMAIL_VERSION', '0.5-rc');
 define('RCMAIL_CHARSET', 'UTF-8');
 define('JS_OBJECT_NAME', 'rcmail');
 define('RCMAIL_START', microtime(true));
diff --git a/program/include/main.inc b/program/include/main.inc
index 7ea4ae2..b61f8ae 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -1193,21 +1193,33 @@
   if (!$RCMAIL->config->get('log_logins') || !$RCMAIL->user)
     return;
 
-  $address = $_SERVER['REMOTE_ADDR'];
-  // append the NGINX X-Real-IP header, if set
-  if (!empty($_SERVER['HTTP_X_REAL_IP'])) {
-    $remote_ip[] = 'X-Real-IP: ' . $_SERVER['HTTP_X_REAL_IP'];
-  }
-  // append the X-Forwarded-For header, if set
-  if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
-    $remote_ip[] = 'X-Forwarded-For: ' . $_SERVER['HTTP_X_FORWARDED_FOR'];
-  }
-
-  if (!empty($remote_ip))
-    $address .= '(' . implode(',', $remote_ip) . ')';
-
   write_log('userlogins', sprintf('Successful login for %s (ID: %d) from %s',
-    $RCMAIL->user->get_username(), $RCMAIL->user->ID, $address));
+    $RCMAIL->user->get_username(), $RCMAIL->user->ID, rcmail_remote_ip()));
+}
+
+
+/**
+ * Returns remote IP address and forwarded addresses if found
+ *
+ * @return string Remote IP address(es)
+ */
+function rcmail_remote_ip()
+{
+    $address = $_SERVER['REMOTE_ADDR'];
+
+    // append the NGINX X-Real-IP header, if set
+    if (!empty($_SERVER['HTTP_X_REAL_IP'])) {
+        $remote_ip[] = 'X-Real-IP: ' . $_SERVER['HTTP_X_REAL_IP'];
+    }
+    // append the X-Forwarded-For header, if set
+    if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
+        $remote_ip[] = 'X-Forwarded-For: ' . $_SERVER['HTTP_X_FORWARDED_FOR'];
+    }
+
+    if (!empty($remote_ip))
+        $address .= '(' . implode(',', $remote_ip) . ')';
+
+    return $address;
 }
 
 
@@ -1219,7 +1231,7 @@
 {
   return microtime(true);
 }
-  
+
 
 /**
  * @access private
@@ -1314,8 +1326,13 @@
   
   $p += array('maxlength' => 100, 'realnames' => false);
   $a_mailboxes = array();
-  
-  foreach ($RCMAIL->imap->list_mailboxes() as $folder)
+
+  if ($p['unsubscribed'])
+    $list = $RCMAIL->imap->list_unsubscribed();
+  else
+    $list = $RCMAIL->imap->list_mailboxes();
+
+  foreach ($list as $folder)
     if (empty($p['exceptions']) || !in_array($folder, $p['exceptions']))
       rcmail_build_folder_tree($a_mailboxes, $folder, $RCMAIL->imap->get_hierarchy_delimiter());
 
@@ -1551,6 +1568,97 @@
 }
 
 
+function rcmail_quota_display($attrib)
+{
+  global $OUTPUT;
+
+  if (!$attrib['id'])
+    $attrib['id'] = 'rcmquotadisplay';
+
+  if(isset($attrib['display']))
+    $_SESSION['quota_display'] = $attrib['display'];
+
+  $OUTPUT->add_gui_object('quotadisplay', $attrib['id']);
+
+  $quota = rcmail_quota_content($attrib);
+
+  $OUTPUT->add_script('$(document).ready(function(){
+	rcmail.set_quota('.json_serialize($quota).')});', 'foot');
+
+  return html::span($attrib, '');
+}
+
+
+function rcmail_quota_content($attrib=NULL)
+{
+  global $RCMAIL;
+
+  $quota = $RCMAIL->imap->get_quota();
+  $quota = $RCMAIL->plugins->exec_hook('quota', $quota);
+
+  $quota_result = (array) $quota;
+  $quota_result['type'] = isset($_SESSION['quota_display']) ? $_SESSION['quota_display'] : '';
+
+  if (!$quota['total'] && $RCMAIL->config->get('quota_zero_as_unlimited')) {
+    $quota_result['title'] = rcube_label('unlimited');
+    $quota_result['percent'] = 0;
+  }
+  else if ($quota['total']) {
+    if (!isset($quota['percent']))
+      $quota_result['percent'] = min(100, round(($quota['used']/max(1,$quota['total']))*100));
+
+    $title = sprintf('%s / %s (%.0f%%)',
+        show_bytes($quota['used'] * 1024), show_bytes($quota['total'] * 1024),
+        $quota_result['percent']);
+
+    $quota_result['title'] = $title;
+
+    if ($attrib['width'])
+      $quota_result['width'] = $attrib['width'];
+    if ($attrib['height'])
+      $quota_result['height']	= $attrib['height'];
+  }
+  else {
+    $quota_result['title'] = rcube_label('unknown');
+    $quota_result['percent'] = 0;
+  }
+
+  return $quota_result;
+}
+
+
+/**
+ * Outputs error message according to server error/response codes
+ *
+ * @param string Fallback message label
+ * @param string Fallback message label arguments
+ *
+ * @return void
+ */
+function rcmail_display_server_error($fallback=null, $fallback_args=null)
+{
+    global $RCMAIL;
+
+    $err_code = $RCMAIL->imap->get_error_code();
+    $res_code = $RCMAIL->imap->get_response_code();
+
+    if ($res_code == rcube_imap::NOPERM) {
+        $RCMAIL->output->show_message('errornoperm', 'error');
+    }
+    else if ($res_code == rcube_imap::READONLY) {
+        $RCMAIL->output->show_message('errorreadonly', 'error');
+    }
+    else if ($err_code && ($err_str = $RCMAIL->imap->get_error_str())) {
+        $RCMAIL->output->show_message('servererrormsg', 'error', array('msg' => $err_str));
+    }
+    else if ($fallback) {
+        $RCMAIL->output->show_message($fallback, 'error', $fallback_args);
+    }
+
+    return true;
+}
+
+
 /**
  * Output HTML editor scripts
  *
@@ -1579,6 +1687,43 @@
   $RCMAIL->output->add_script(sprintf("rcmail_editor_init('\$__skin_path', '%s', %d, '%s');",
     JQ($lang), intval($CONFIG['enable_spellcheck']), $mode),
     'foot');
+}
+
+
+/**
+ * Replaces TinyMCE's emoticon images with plain-text representation
+ *
+ * @param string HTML content
+ * @return string HTML content
+ */
+function rcmail_replace_emoticons($html)
+{
+  $emoticons = array(
+    '8-)' => 'smiley-cool',
+    ':-#' => 'smiley-foot-in-mouth',
+    ':-*' => 'smiley-kiss',
+    ':-X' => 'smiley-sealed',
+    ':-P' => 'smiley-tongue-out',
+    ':-@' => 'smiley-yell',
+    ":'(" => 'smiley-cry',
+    ':-(' => 'smiley-frown',
+    ':-D' => 'smiley-laughing',
+    ':-)' => 'smiley-smile',
+    ':-S' => 'smiley-undecided',
+    ':-$' => 'smiley-embarassed',
+    'O:-)' => 'smiley-innocent',
+    ':-|' => 'smiley-money-mouth',
+    ':-O' => 'smiley-surprised',
+    ';-)' => 'smiley-wink',
+  );
+
+  foreach ($emoticons as $idx => $file) {
+    // <img title="Cry" src="http://.../program/js/tiny_mce/plugins/emotions/img/smiley-cry.gif" border="0" alt="Cry" />
+    $search[]  = '/<img title="[a-z ]+" src="https?:\/\/[a-z0-9_.\/-]+\/tiny_mce\/plugins\/emotions\/img\/'.$file.'.gif"[^>]+\/>/i';
+    $replace[] = $idx;
+  }
+
+  return preg_replace($search, $replace, $html);
 }
 
 
@@ -1817,3 +1962,4 @@
         flush();
     }
 }
+
diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index e76b142..0eecd8d 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -678,10 +678,16 @@
         $username .= '@'.rcube_parse_host($config['username_domain']);
     }
 
+    // Convert username to lowercase. If IMAP backend
+    // is case-insensitive we need to store always the same username (#1487113)
+    if ($config['login_lc']) {
+      $username = mb_strtolower($username);
+    }
+
     // try to resolve email address from virtuser table
-    if (strpos($username, '@'))
-      if ($virtuser = rcube_user::email2user($username))
-        $username = $virtuser;
+    if (strpos($username, '@') && ($virtuser = rcube_user::email2user($username))) {
+      $username = $virtuser;
+    }
 
     // Here we need IDNA ASCII
     // Only rcube_contacts class is using domain names in Unicode
@@ -704,8 +710,14 @@
     if (!($imap_login = $this->imap->connect($host, $username, $pass, $imap_port, $imap_ssl))) {
       // try with lowercase
       $username_lc = mb_strtolower($username);
-      if ($username_lc != $username && ($imap_login = $this->imap->connect($host, $username_lc, $pass, $imap_port, $imap_ssl)))
-        $username = $username_lc;
+      if ($username_lc != $username) {
+        // try to find user record again -> overwrite username
+        if (!$user && ($user = rcube_user::query($username_lc, $host)))
+          $username_lc = $user->data['username'];
+
+        if ($imap_login = $this->imap->connect($host, $username_lc, $pass, $imap_port, $imap_ssl))
+          $username = $username_lc;
+      }
     }
 
     // exit if IMAP login failed
@@ -1203,8 +1215,14 @@
     if (function_exists('mcrypt_module_open') &&
         ($td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_CBC, "")))
     {
-      $iv = substr($cipher, 0, mcrypt_enc_get_iv_size($td));
-      $cipher = substr($cipher, mcrypt_enc_get_iv_size($td));
+      $iv_size = mcrypt_enc_get_iv_size($td);
+      $iv = substr($cipher, 0, $iv_size);
+
+      // session corruption? (#1485970)
+      if (strlen($iv) < $iv_size)
+        return '';
+
+      $cipher = substr($cipher, $iv_size);
       mcrypt_generic_init($td, $this->config->get_crypto_key($key), $iv);
       $clear = mdecrypt_generic($td, $cipher);
       mcrypt_generic_deinit($td);
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 212e886..5715459 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -100,6 +100,16 @@
         'RETURN-PATH',
     );
 
+    const UNKNOWN       = 0;
+    const NOPERM        = 1;
+    const READONLY      = 2;
+    const TRYCREATE     = 3;
+    const INUSE         = 4;
+    const OVERQUOTA     = 5;
+    const ALREADYEXISTS = 6;
+    const NONEXISTENT   = 7;
+    const CONTACTADMIN  = 8;
+
 
     /**
      * Object constructor
@@ -156,21 +166,20 @@
         $this->ssl  = $use_ssl;
 
         if ($this->conn->connected()) {
-            // print trace messages
-            if ($this->conn->message && ($this->debug_level & 8)) {
-                console($this->conn->message);
-            }
             // get namespace and delimiter
             $this->set_env();
-
             return true;
         }
         // write error log
         else if ($this->conn->error) {
-            if ($pass && $user)
+            if ($pass && $user) {
+                $message = sprintf("Login failed for %s from %s. %s",
+                    $user, rcmail_remote_ip(), $this->conn->error);
+
                 raise_error(array('code' => 403, 'type' => 'imap',
                     'file' => __FILE__, 'line' => __LINE__,
-                    'message' => $this->conn->error), true, false);
+                    'message' => $message), true, false);
+            }
         }
 
         return false;
@@ -185,7 +194,7 @@
      */
     function close()
     {
-        $this->conn->close();
+        $this->conn->closeConnection();
         $this->write_cache();
     }
 
@@ -198,11 +207,11 @@
      */
     function reconnect()
     {
-        $this->close();
-        $this->connect($this->host, $this->user, $this->pass, $this->port, $this->ssl);
+        $this->conn->closeConnection();
+        $connected = $this->connect($this->host, $this->user, $this->pass, $this->port, $this->ssl);
 
         // issue SELECT command to restore connection status
-        if ($this->mailbox)
+        if ($connected && strlen($this->mailbox))
             $this->conn->select($this->mailbox);
     }
 
@@ -225,7 +234,51 @@
      */
     function get_error_str()
     {
-        return ($this->conn) ? $this->conn->error : '';
+        return ($this->conn) ? $this->conn->error : null;
+    }
+
+
+    /**
+     * Returns code of last command response
+     *
+     * @return int Response code
+     */
+    function get_response_code()
+    {
+        if (!$this->conn)
+            return self::UNKNOWN;
+
+        switch ($this->conn->resultcode) {
+            case 'NOPERM':
+                return self::NOPERM;
+            case 'READ-ONLY':
+                return self::READONLY;
+            case 'TRYCREATE':
+                return self::TRYCREATE;
+            case 'INUSE':
+                return self::INUSE;
+            case 'OVERQUOTA':
+                return self::OVERQUOTA;
+            case 'ALREADYEXISTS':
+                return self::ALREADYEXISTS;
+            case 'NONEXISTENT':
+                return self::NONEXISTENT;
+            case 'CONTACTADMIN':
+                return self::CONTACTADMIN;
+            default:
+                return self::UNKNOWN;
+        }
+    }
+
+
+    /**
+     * Returns last command response
+     *
+     * @return string Response
+     */
+    function get_response_str()
+    {
+        return ($this->conn) ? $this->conn->result : null;
     }
 
 
@@ -300,9 +353,9 @@
      * @param  string $mailbox Mailbox/Folder name
      * @access public
      */
-    function select_mailbox($mailbox)
+    function select_mailbox($mailbox=null)
     {
-        $mailbox = $this->mod_mailbox($mailbox);
+        $mailbox = strlen($mailbox) ? $this->mod_mailbox($mailbox) : $this->mailbox;
 
         $selected = $this->conn->select($mailbox);
 
@@ -493,56 +546,56 @@
         $imap_shared    = $config->get('imap_ns_shared');
         $imap_delimiter = $config->get('imap_delimiter');
 
-        if ($imap_delimiter) {
-            $this->delimiter = $imap_delimiter;
-        }
-
         if (!$this->conn)
             return;
 
         $ns = $this->conn->getNamespace();
 
-        // NAMESPACE supported
+        // Set namespaces (NAMESPACE supported)
         if (is_array($ns)) {
             $this->namespace = $ns;
-
-            if (empty($this->delimiter))
-                $this->delimiter = $ns['personal'][0][1];
-            if (empty($this->delimiter))
-                $this->delimiter = $this->conn->getHierarchyDelimiter();
-            if (empty($this->delimiter))
-                $this->delimiter = '/';
         }
-        // not supported, get namespace from config
-        else if ($imap_personal !== null || $imap_shared !== null || $imap_other !== null) {
-            if (empty($this->delimiter))
-                $this->delimiter = $this->conn->getHierarchyDelimiter();
-            if (empty($this->delimiter))
-                $this->delimiter = '/';
-
+        else {
             $this->namespace = array(
                 'personal' => NULL,
                 'other'    => NULL,
                 'shared'   => NULL,
             );
+        }
 
-            if ($imap_personal !== null) {
-                foreach ((array)$imap_personal as $dir) {
-                    $this->namespace['personal'][] = array($dir, $this->delimiter);
+        if ($imap_delimiter) {
+            $this->delimiter = $imap_delimiter;
+        }
+        if (empty($this->delimiter)) {
+            $this->delimiter = $this->namespace['personal'][0][1];
+        }
+        if (empty($this->delimiter)) {
+            $this->delimiter = $this->conn->getHierarchyDelimiter();
+        }
+        if (empty($this->delimiter)) {
+            $this->delimiter = '/';
+        }
+
+        // Overwrite namespaces
+        if ($imap_personal !== null) {
+            $this->namespace['personal'] = NULL;
+            foreach ((array)$imap_personal as $dir) {
+                $this->namespace['personal'][] = array($dir, $this->delimiter);
+            }
+        }
+        if ($imap_other !== null) {
+            $this->namespace['other'] = NULL;
+            foreach ((array)$imap_other as $dir) {
+                if ($dir) {
+                    $this->namespace['other'][] = array($dir, $this->delimiter);
                 }
             }
-            if ($imap_other !== null) {
-                foreach ((array)$imap_other as $dir) {
-                    if ($dir) {
-                        $this->namespace['other'][] = array($dir, $this->delimiter);
-                    }
-                }
-            }
-            if ($imap_shared !== null) {
-                foreach ((array)$imap_shared as $dir) {
-                    if ($dir) {
-                        $this->namespace['shared'][] = array($dir, $this->delimiter);
-                    }
+        }
+        if ($imap_shared !== null) {
+            $this->namespace['shared'] = NULL;
+            foreach ((array)$imap_shared as $dir) {
+                if ($dir) {
+                    $this->namespace['shared'][] = array($dir, $this->delimiter);
                 }
             }
         }
@@ -617,7 +670,7 @@
         }
         // RECENT count is fetched a bit different
         else if ($mode == 'RECENT') {
-            $count = $this->conn->checkForRecent($mailbox);
+            $count = $this->conn->countRecent($mailbox);
         }
         // use SEARCH for message counting
         else if ($this->skip_deleted) {
@@ -2376,20 +2429,21 @@
 
         // TODO: Add caching for message parts
 
-        if (!$part) $part = 'TEXT';
+        if (!$part) {
+            $part = 'TEXT';
+        }
 
         $body = $this->conn->handlePartBody($this->mailbox, $uid, true, $part,
             $o_part->encoding, $print, $fp);
 
-        if ($fp || $print)
+        if ($fp || $print) {
             return true;
+        }
 
-        // convert charset (if text or message part)
-        if ($body && ($o_part->ctype_primary == 'text' || $o_part->ctype_primary == 'message')) {
-            // assume default if no charset specified
-            if (empty($o_part->charset) || strtolower($o_part->charset) == 'us-ascii')
-                $o_part->charset = $this->default_charset;
-
+        // convert charset (if text or message part) and part's charset is specified
+        if ($body && $o_part->charset
+            && preg_match('/^(text|message)$/', $o_part->ctype_primary)
+        ) {
             $body = rcube_charset_convert($body, $o_part->charset);
         }
 
@@ -2552,6 +2606,9 @@
         $tbox = $to_mbox;
         $to_mbox = $this->mod_mailbox($to_mbox);
         $from_mbox = strlen($from_mbox) ? $this->mod_mailbox($from_mbox) : $this->mailbox;
+
+        if ($to_mbox === $from_mbox)
+            return false;
 
         list($uids, $all_mode) = $this->_parse_uids($uids, $from_mbox);
 
@@ -2771,7 +2828,23 @@
         else
             $a_uids = NULL;
 
-        $result = $this->conn->expunge($mailbox, $a_uids);
+        // force mailbox selection and check if mailbox is writeable
+        // to prevent a situation when CLOSE is executed on closed
+        // or EXPUNGE on read-only mailbox
+        $result = $this->conn->select($mailbox);
+        if (!$result) {
+            return false;
+        }
+        if (!$this->conn->data['READ-WRITE']) {
+            $this->conn->setError(rcube_imap_generic::ERROR_READONLY, "Mailbox is read-only");
+            return false;
+        }
+
+        // CLOSE(+SELECT) should be faster than EXPUNGE
+        if (empty($a_uids) || $a_uids == '1:*')
+            $result = $this->conn->close();
+        else
+            $result = $this->conn->expunge($mailbox, $a_uids);
 
         if ($result && $clear_cache) {
             $this->clear_message_cache($mailbox.'.msg');
@@ -3009,6 +3082,26 @@
 
 
     /**
+     * Get mailbox size (size of all messages in a mailbox)
+     *
+     * @param string $name Mailbox name
+     * @return int Mailbox size in bytes, False on error
+     */
+    function get_mailbox_size($name)
+    {
+        $name = $this->mod_mailbox($name);
+
+        // @TODO: could we try to use QUOTA here?
+        $result = $this->conn->fetchHeaderIndex($name, '1:*', 'SIZE', false);
+
+        if (is_array($result))
+            $result = array_sum($result);
+
+        return $result;
+    }
+
+
+    /**
      * Subscribe to a specific mailbox(es)
      *
      * @param array $a_mboxes Mailbox name(s)
@@ -3043,130 +3136,120 @@
     /**
      * Create a new mailbox on the server and register it in local cache
      *
-     * @param string  $name      New mailbox name (as utf-7 string)
+     * @param string  $name      New mailbox name
      * @param boolean $subscribe True if the new mailbox should be subscribed
-     * @param string  Name of the created mailbox, false on error
+     * @param boolean True on success
      */
     function create_mailbox($name, $subscribe=false)
     {
-        $result = false;
-
-        // reduce mailbox name to 100 chars
-        $name = substr($name, 0, 100);
+        $result   = false;
         $abs_name = $this->mod_mailbox($name);
-        $result = $this->conn->createFolder($abs_name);
+        $result   = $this->conn->createFolder($abs_name);
 
         // try to subscribe it
         if ($result && $subscribe)
             $this->subscribe($name);
 
-        return $result ? $name : false;
+        return $result;
     }
 
 
     /**
      * Set a new name to an existing mailbox
      *
-     * @param string $mbox_name Mailbox to rename (as utf-7 string)
-     * @param string $new_name  New mailbox name (as utf-7 string)
-     * @return string Name of the renames mailbox, False on error
+     * @param string $mbox_name Mailbox to rename
+     * @param string $new_name  New mailbox name
+     *
+     * @return boolean True on success
      */
     function rename_mailbox($mbox_name, $new_name)
     {
         $result = false;
 
-        // encode mailbox name and reduce it to 100 chars
-        $name = substr($new_name, 0, 100);
-
         // make absolute path
-        $mailbox = $this->mod_mailbox($mbox_name);
-        $abs_name = $this->mod_mailbox($name);
+        $mailbox  = $this->mod_mailbox($mbox_name);
+        $abs_name = $this->mod_mailbox($new_name);
+        $delm     = $this->get_hierarchy_delimiter();
 
-        // check if mailbox is subscribed
-        $a_subscribed = $this->_list_mailboxes();
-        $subscribed = in_array($mailbox, $a_subscribed);
-
-        // unsubscribe folder
-        if ($subscribed)
-            $this->conn->unsubscribe($mailbox);
+        // get list of subscribed folders
+        if ((strpos($mailbox, '%') === false) && (strpos($mailbox, '*') === false)) {
+            $a_subscribed = $this->_list_mailboxes('', $mbox_name . $delm . '*');
+            $subscribed   = $this->mailbox_exists($mbox_name, true);
+        }
+        else {
+            $a_subscribed = $this->_list_mailboxes();
+            $subscribed   = in_array($mailbox, $a_subscribed);
+        }
 
         if (strlen($abs_name))
             $result = $this->conn->renameFolder($mailbox, $abs_name);
 
         if ($result) {
-            $delm = $this->get_hierarchy_delimiter();
+            // unsubscribe the old folder, subscribe the new one
+            if ($subscribed) {
+                $this->conn->unsubscribe($mailbox);
+                $this->conn->subscribe($abs_name);
+            }
 
             // check if mailbox children are subscribed
-            foreach ($a_subscribed as $c_subscribed)
+            foreach ($a_subscribed as $c_subscribed) {
                 if (preg_match('/^'.preg_quote($mailbox.$delm, '/').'/', $c_subscribed)) {
                     $this->conn->unsubscribe($c_subscribed);
                     $this->conn->subscribe(preg_replace('/^'.preg_quote($mailbox, '/').'/',
                         $abs_name, $c_subscribed));
                 }
+            }
 
             // clear cache
             $this->clear_message_cache($mailbox.'.msg');
             $this->clear_cache('mailboxes');
         }
 
-        // try to subscribe it
-        if ($result && $subscribed)
-            $this->conn->subscribe($abs_name);
-
-        return $result ? $name : false;
+        return $result;
     }
 
 
     /**
-     * Remove mailboxes from server
+     * Remove mailbox from server
      *
-     * @param string|array $mbox_name sMailbox name(s) string/array
+     * @param string $mbox_name Mailbox name
+     *
      * @return boolean True on success
      */
     function delete_mailbox($mbox_name)
     {
-        $deleted = false;
+        $result  = false;
+        $mailbox = $this->mod_mailbox($mbox_name);
+        $delm    = $this->get_hierarchy_delimiter();
 
-        if (is_array($mbox_name))
-            $a_mboxes = $mbox_name;
-        else if (is_string($mbox_name) && strlen($mbox_name))
-            $a_mboxes = explode(',', $mbox_name);
+        // get list of folders
+        if ((strpos($mailbox, '%') === false) && (strpos($mailbox, '*') === false))
+            $sub_mboxes = $this->list_unsubscribed('', $mailbox . $delm . '*');
+        else
+            $sub_mboxes = $this->list_unsubscribed();
 
-        if (is_array($a_mboxes)) {
-            $delimiter = $this->get_hierarchy_delimiter();
-        
-            foreach ($a_mboxes as $mbox_name) {
-                $mailbox = $this->mod_mailbox($mbox_name);
-                $sub_mboxes = $this->conn->listMailboxes('', $mbox_name . $delimiter . '*');
+        // send delete command to server
+        $result = $this->conn->deleteFolder($mailbox);
 
-                // unsubscribe mailbox before deleting
-                $this->conn->unsubscribe($mailbox);
+        if ($result) {
+            // unsubscribe mailbox
+            $this->conn->unsubscribe($mailbox);
 
-                // send delete command to server
-                $result = $this->conn->deleteFolder($mailbox);
-                if ($result) {
-                    $deleted = true;
-                    $this->clear_message_cache($mailbox.'.msg');
-	            }
-
-                foreach ($sub_mboxes as $c_mbox) {
-                    if ($c_mbox != 'INBOX') {
-                        $this->conn->unsubscribe($c_mbox);
-                        $result = $this->conn->deleteFolder($c_mbox);
-                        if ($result) {
-                            $deleted = true;
-    	                    $this->clear_message_cache($c_mbox.'.msg');
-                        }
+            foreach ($sub_mboxes as $c_mbox) {
+                if (preg_match('/^'.preg_quote($mailbox.$delm, '/').'/', $c_mbox)) {
+                    $this->conn->unsubscribe($c_mbox);
+                    if ($this->conn->deleteFolder($c_mbox)) {
+	                    $this->clear_message_cache($c_mbox.'.msg');
                     }
                 }
             }
+
+            // clear mailbox-related cache
+            $this->clear_message_cache($mailbox.'.msg');
+            $this->clear_cache('mailboxes');
         }
 
-        // clear mailboxlist cache
-        if ($deleted)
-            $this->clear_cache('mailboxes');
-
-        return $deleted;
+        return $result;
     }
 
 
@@ -3208,7 +3291,7 @@
         }
         else {
             $a_folders = $this->conn->listMailboxes('', $mbox);
-       }
+        }
 
         if (is_array($a_folders) && in_array($mbox, $a_folders)) {
             $this->icache[$key][] = $mbox;
diff --git a/program/include/rcube_imap_generic.php b/program/include/rcube_imap_generic.php
index 16c9d4a..e5e06c4 100644
--- a/program/include/rcube_imap_generic.php
+++ b/program/include/rcube_imap_generic.php
@@ -1,6 +1,6 @@
 <?php
 
-/*
+/**
  +-----------------------------------------------------------------------+
  | program/include/rcube_imap_generic.php                                |
  |                                                                       |
@@ -29,45 +29,45 @@
 /**
  * Struct representing an e-mail message header
  *
- * @package    Mail
- * @author     Aleksander Machniak <alec@alec.pl>
+ * @package Mail
+ * @author  Aleksander Machniak <alec@alec.pl>
  */
 class rcube_mail_header
 {
-	public $id;
-	public $uid;
-	public $subject;
-	public $from;
-	public $to;
-	public $cc;
-	public $replyto;
-	public $in_reply_to;
-	public $date;
-	public $messageID;
-	public $size;
-	public $encoding;
-	public $charset;
-	public $ctype;
-	public $flags;
-	public $timestamp;
-	public $body_structure;
-	public $internaldate;
-	public $references;
-	public $priority;
-	public $mdn_to;
-	public $mdn_sent = false;
-	public $is_draft = false;
-	public $seen = false;
-	public $deleted = false;
-	public $recent = false;
-	public $answered = false;
-	public $forwarded = false;
-	public $junk = false;
-	public $flagged = false;
-	public $has_children = false;
-	public $depth = 0;
-	public $unread_children = 0;
-	public $others = array();
+    public $id;
+    public $uid;
+    public $subject;
+    public $from;
+    public $to;
+    public $cc;
+    public $replyto;
+    public $in_reply_to;
+    public $date;
+    public $messageID;
+    public $size;
+    public $encoding;
+    public $charset;
+    public $ctype;
+    public $flags;
+    public $timestamp;
+    public $body_structure;
+    public $internaldate;
+    public $references;
+    public $priority;
+    public $mdn_to;
+    public $mdn_sent = false;
+    public $is_draft = false;
+    public $seen = false;
+    public $deleted = false;
+    public $recent = false;
+    public $answered = false;
+    public $forwarded = false;
+    public $junk = false;
+    public $flagged = false;
+    public $has_children = false;
+    public $depth = 0;
+    public $unread_children = 0;
+    public $others = array();
 }
 
 // For backward compatibility with cached messages (#1486602)
@@ -78,14 +78,15 @@
 /**
  * PHP based wrapper class to connect to an IMAP server
  *
- * @package    Mail
- * @author     Aleksander Machniak <alec@alec.pl>
+ * @package Mail
+ * @author  Aleksander Machniak <alec@alec.pl>
  */
 class rcube_imap_generic
 {
     public $error;
     public $errornum;
-	public $message;
+    public $result;
+    public $resultcode;
     public $data = array();
     public $flags = array(
         'SEEN'     => '\\Seen',
@@ -100,11 +101,11 @@
     );
 
     private $selected;
-	private $fp;
-	private $host;
-	private $logged = false;
-	private $capability = array();
-	private $capability_readed = false;
+    private $fp;
+    private $host;
+    private $logged = false;
+    private $capability = array();
+    private $capability_readed = false;
     private $prefs;
     private $cmd_tag;
     private $cmd_num = 0;
@@ -113,8 +114,9 @@
     const ERROR_NO = -1;
     const ERROR_BAD = -2;
     const ERROR_BYE = -3;
-    const ERROR_COMMAND = -5;
     const ERROR_UNKNOWN = -4;
+    const ERROR_COMMAND = -5;
+    const ERROR_READONLY = -6;
 
     const COMMAND_NORESPONSE = 1;
     const COMMAND_CAPABILITY = 2;
@@ -140,16 +142,16 @@
         if (!$this->fp)
             return false;
 
-		if (!empty($this->prefs['debug_mode'])) {
-    		write_log('imap', 'C: '. rtrim($string));
-	    }
+        if (!empty($this->prefs['debug_mode'])) {
+            write_log('imap', 'C: '. rtrim($string));
+        }
 
         $res = fwrite($this->fp, $string . ($endln ? "\r\n" : ''));
 
-   		if ($res === false) {
-           	@fclose($this->fp);
-           	$this->fp = null;
-   		}
+        if ($res === false) {
+            @fclose($this->fp);
+            $this->fp = null;
+        }
 
         return $res;
     }
@@ -168,161 +170,174 @@
         if (!$this->fp)
             return false;
 
-	    if ($endln)
-		    $string .= "\r\n";
+        if ($endln)
+            $string .= "\r\n";
 
-	    $res = 0;
-	    if ($parts = preg_split('/(\{[0-9]+\}\r\n)/m', $string, -1, PREG_SPLIT_DELIM_CAPTURE)) {
-		    for ($i=0, $cnt=count($parts); $i<$cnt; $i++) {
-			    if (preg_match('/^\{[0-9]+\}\r\n$/', $parts[$i+1])) {
+        $res = 0;
+        if ($parts = preg_split('/(\{[0-9]+\}\r\n)/m', $string, -1, PREG_SPLIT_DELIM_CAPTURE)) {
+            for ($i=0, $cnt=count($parts); $i<$cnt; $i++) {
+                if (preg_match('/^\{[0-9]+\}\r\n$/', $parts[$i+1])) {
                     // LITERAL+ support
                     if ($this->prefs['literal+'])
                         $parts[$i+1] = preg_replace('/([0-9]+)/', '\\1+', $parts[$i+1]);
 
-				    $bytes = $this->putLine($parts[$i].$parts[$i+1], false);
+                    $bytes = $this->putLine($parts[$i].$parts[$i+1], false);
                     if ($bytes === false)
                         return false;
                     $res += $bytes;
 
                     // don't wait if server supports LITERAL+ capability
                     if (!$this->prefs['literal+']) {
-				        $line = $this->readLine(1000);
-				        // handle error in command
-				        if ($line[0] != '+')
-					        return false;
-				    }
+                        $line = $this->readLine(1000);
+                        // handle error in command
+                        if ($line[0] != '+')
+                            return false;
+                    }
                     $i++;
-			    }
-			    else {
-				    $bytes = $this->putLine($parts[$i], false);
+                }
+                else {
+                    $bytes = $this->putLine($parts[$i], false);
                     if ($bytes === false)
                         return false;
                     $res += $bytes;
                 }
-		    }
-	    }
+            }
+        }
 
-	    return $res;
+        return $res;
     }
 
     function readLine($size=1024)
     {
-		$line = '';
+        $line = '';
 
-	    if (!$this->fp) {
-    		return NULL;
-	    }
+        if (!$this->fp) {
+            return NULL;
+        }
 
-	    if (!$size) {
-		    $size = 1024;
-	    }
+        if (!$size) {
+            $size = 1024;
+        }
 
-	    do {
-		    if (feof($this->fp)) {
-			    return $line ? $line : NULL;
-		    }
+        do {
+            if (feof($this->fp)) {
+                return $line ? $line : NULL;
+            }
 
-    		$buffer = fgets($this->fp, $size);
+            $buffer = fgets($this->fp, $size);
 
-    		if ($buffer === false) {
-            	@fclose($this->fp);
-            	$this->fp = null;
-        		break;
-    		}
-		    if (!empty($this->prefs['debug_mode'])) {
-			    write_log('imap', 'S: '. rtrim($buffer));
-    		}
+            if ($buffer === false) {
+                @fclose($this->fp);
+                $this->fp = null;
+                break;
+            }
+            if (!empty($this->prefs['debug_mode'])) {
+                write_log('imap', 'S: '. rtrim($buffer));
+            }
             $line .= $buffer;
-	    } while ($buffer[strlen($buffer)-1] != "\n");
+        } while ($buffer[strlen($buffer)-1] != "\n");
 
-	    return $line;
+        return $line;
     }
 
     function multLine($line, $escape=false)
     {
-	    $line = rtrim($line);
-	    if (preg_match('/\{[0-9]+\}$/', $line)) {
-		    $out = '';
+        $line = rtrim($line);
+        if (preg_match('/\{[0-9]+\}$/', $line)) {
+            $out = '';
 
-		    preg_match_all('/(.*)\{([0-9]+)\}$/', $line, $a);
-		    $bytes = $a[2][0];
-		    while (strlen($out) < $bytes) {
-			    $line = $this->readBytes($bytes);
-			    if ($line === NULL)
-				    break;
-			    $out .= $line;
-		    }
+            preg_match_all('/(.*)\{([0-9]+)\}$/', $line, $a);
+            $bytes = $a[2][0];
+            while (strlen($out) < $bytes) {
+                $line = $this->readBytes($bytes);
+                if ($line === NULL)
+                    break;
+                $out .= $line;
+            }
 
-		    $line = $a[1][0] . ($escape ? $this->escape($out) : $out);
-	    }
+            $line = $a[1][0] . ($escape ? $this->escape($out) : $out);
+        }
 
         return $line;
     }
 
     function readBytes($bytes)
     {
-	    $data = '';
-	    $len  = 0;
-	    while ($len < $bytes && !feof($this->fp))
-	    {
-		    $d = fread($this->fp, $bytes-$len);
-		    if (!empty($this->prefs['debug_mode'])) {
-			    write_log('imap', 'S: '. $d);
+        $data = '';
+        $len  = 0;
+        while ($len < $bytes && !feof($this->fp))
+        {
+            $d = fread($this->fp, $bytes-$len);
+            if (!empty($this->prefs['debug_mode'])) {
+                write_log('imap', 'S: '. $d);
             }
             $data .= $d;
-		    $data_len = strlen($data);
-		    if ($len == $data_len) {
-    		    break; // nothing was read -> exit to avoid apache lockups
-    		}
-    		$len = $data_len;
-	    }
+            $data_len = strlen($data);
+            if ($len == $data_len) {
+                break; // nothing was read -> exit to avoid apache lockups
+            }
+            $len = $data_len;
+        }
 
-	    return $data;
+        return $data;
     }
 
-    // don't use it in loops, until you exactly know what you're doing
     function readReply(&$untagged=null)
     {
-	    do {
-		    $line = trim($this->readLine(1024));
+        do {
+            $line = trim($this->readLine(1024));
             // store untagged response lines
-		    if ($line[0] == '*')
+            if ($line[0] == '*')
                 $untagged[] = $line;
-	    } while ($line[0] == '*');
+        } while ($line[0] == '*');
 
         if ($untagged)
             $untagged = join("\n", $untagged);
 
-	    return $line;
+        return $line;
     }
 
     function parseResult($string, $err_prefix='')
     {
-	    if (preg_match('/^[a-z0-9*]+ (OK|NO|BAD|BYE)(.*)$/i', trim($string), $matches)) {
-		    $res = strtoupper($matches[1]);
+        if (preg_match('/^[a-z0-9*]+ (OK|NO|BAD|BYE)(.*)$/i', trim($string), $matches)) {
+            $res = strtoupper($matches[1]);
             $str = trim($matches[2]);
 
-		    if ($res == 'OK') {
-			    return $this->errornum = self::ERROR_OK;
-		    } else if ($res == 'NO') {
+            if ($res == 'OK') {
+                $this->errornum = self::ERROR_OK;
+            } else if ($res == 'NO') {
                 $this->errornum = self::ERROR_NO;
-		    } else if ($res == 'BAD') {
-			    $this->errornum = self::ERROR_BAD;
-		    } else if ($res == 'BYE') {
+            } else if ($res == 'BAD') {
+                $this->errornum = self::ERROR_BAD;
+            } else if ($res == 'BYE') {
                 @fclose($this->fp);
                 $this->fp = null;
-			    $this->errornum = self::ERROR_BYE;
-		    }
+                $this->errornum = self::ERROR_BYE;
+            }
 
-            if ($str)
-                $this->error = $err_prefix ? $err_prefix.$str : $str;
+            if ($str) {
+                $str = trim($str);
+                // get response string and code (RFC5530)
+                if (preg_match("/^\[([a-z-]+)\]/i", $str, $m)) {
+                    $this->resultcode = strtoupper($m[1]);
+                    $str = trim(substr($str, strlen($m[1]) + 2));
+                }
+                else {
+                    $this->resultcode = null;
+                }
+                $this->result = $str;
 
-	        return $this->errornum;
-	    }
-	    return self::ERROR_UNKNOWN;
+                if ($this->errornum != self::ERROR_OK) {
+                    $this->error = $err_prefix ? $err_prefix.$str : $str;
+                }
+            }
+
+            return $this->errornum;
+        }
+        return self::ERROR_UNKNOWN;
     }
 
-    private function setError($code, $msg='')
+    function setError($code, $msg='')
     {
         $this->errornum = $code;
         $this->error    = $msg;
@@ -331,59 +346,59 @@
     // check if $string starts with $match (or * BYE/BAD)
     function startsWith($string, $match, $error=false, $nonempty=false)
     {
-	    $len = strlen($match);
-	    if ($len == 0) {
-		    return false;
-	    }
+        $len = strlen($match);
+        if ($len == 0) {
+            return false;
+        }
         if (!$this->fp) {
             return true;
         }
-	    if (strncmp($string, $match, $len) == 0) {
-		    return true;
-	    }
-	    if ($error && preg_match('/^\* (BYE|BAD) /i', $string, $m)) {
+        if (strncmp($string, $match, $len) == 0) {
+            return true;
+        }
+        if ($error && preg_match('/^\* (BYE|BAD) /i', $string, $m)) {
             if (strtoupper($m[1]) == 'BYE') {
                 @fclose($this->fp);
                 $this->fp = null;
             }
-		    return true;
-	    }
+            return true;
+        }
         if ($nonempty && !strlen($string)) {
             return true;
         }
-	    return false;
+        return false;
     }
 
     function getCapability($name)
     {
-	    if (in_array($name, $this->capability)) {
-		    return true;
-	    }
-	    else if ($this->capability_readed) {
-		    return false;
-	    }
+        if (in_array($name, $this->capability)) {
+            return true;
+        }
+        else if ($this->capability_readed) {
+            return false;
+        }
 
-	    // get capabilities (only once) because initial
-	    // optional CAPABILITY response may differ
+        // get capabilities (only once) because initial
+        // optional CAPABILITY response may differ
         $result = $this->execute('CAPABILITY');
 
         if ($result[0] == self::ERROR_OK) {
             $this->parseCapability($result[1]);
         }
 
-	    $this->capability_readed = true;
+        $this->capability_readed = true;
 
-	    if (in_array($name, $this->capability)) {
-		    return true;
-	    }
+        if (in_array($name, $this->capability)) {
+            return true;
+        }
 
-	    return false;
+        return false;
     }
 
     function clearCapability()
     {
-	    $this->capability = array();
-	    $this->capability_readed = false;
+        $this->capability = array();
+        $this->capability_readed = false;
     }
 
     /**
@@ -401,18 +416,18 @@
             if ($type == 'DIGEST-MD5' && !class_exists('Auth_SASL')) {
                 $this->setError(self::ERROR_BYE,
                     "The Auth_SASL package is required for DIGEST-MD5 authentication");
-			    return self::ERROR_BAD;
+                return self::ERROR_BAD;
             }
 
-		    $this->putLine($this->nextTag() . " AUTHENTICATE $type");
-		    $line = trim($this->readLine(1024));
+            $this->putLine($this->nextTag() . " AUTHENTICATE $type");
+            $line = trim($this->readReply());
 
-		    if ($line[0] == '+') {
-			    $challenge = substr($line, 2);
+            if ($line[0] == '+') {
+                $challenge = substr($line, 2);
             }
             else {
                 return $this->parseResult($line);
-		    }
+            }
 
             if ($type == 'CRAM-MD5') {
                 // RFC2195: CRAM-MD5
@@ -455,10 +470,10 @@
 
                 // send result
                 $this->putLine($reply);
-                $line = $this->readLine(1024);
+                $line = trim($this->readReply());
 
                 if ($line[0] == '+') {
-			        $challenge = substr($line, 2);
+                    $challenge = substr($line, 2);
                 }
                 else {
                     return $this->parseResult($line);
@@ -475,7 +490,7 @@
                 $this->putLine('');
             }
 
-            $line = $this->readLine(1024);
+            $line = $this->readReply();
             $result = $this->parseResult($line);
         }
         else { // PLAIN
@@ -496,29 +511,29 @@
                     self::COMMAND_LASTLINE | self::COMMAND_CAPABILITY);
             }
             else {
-    		    $this->putLine($this->nextTag() . " AUTHENTICATE PLAIN");
-	    	    $line = trim($this->readLine(1024));
+                $this->putLine($this->nextTag() . " AUTHENTICATE PLAIN");
+                $line = trim($this->readReply());
 
-		        if ($line[0] != '+') {
-    			    return $this->parseResult($line);
-	    	    }
+                if ($line[0] != '+') {
+                    return $this->parseResult($line);
+                }
 
                 // send result, get reply and process it
                 $this->putLine($reply);
-                $line = $this->readLine(1024);
+                $line = $this->readReply();
                 $result = $this->parseResult($line);
             }
         }
 
         if ($result == self::ERROR_OK) {
-    	    // optional CAPABILITY response
-	        if ($line && preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)) {
-		        $this->parseCapability($matches[1], true);
-	        }
+            // optional CAPABILITY response
+            if ($line && preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)) {
+                $this->parseCapability($matches[1], true);
+            }
             return $this->fp;
         }
         else {
-            $this->setError($result, "Unable to authenticate user ($type): $line");
+            $this->setError($result, "AUTHENTICATE $type: $line");
         }
 
         return $result;
@@ -538,9 +553,9 @@
             $this->escape($user), $this->escape($password)), self::COMMAND_CAPABILITY);
 
         // re-set capabilities list if untagged CAPABILITY response provided
-	    if (preg_match('/\* CAPABILITY (.+)/i', $response, $matches)) {
-		    $this->parseCapability($matches[1], true);
-	    }
+        if (preg_match('/\* CAPABILITY (.+)/i', $response, $matches)) {
+            $this->parseCapability($matches[1], true);
+        }
 
         if ($code == self::ERROR_OK) {
             return $this->fp;
@@ -556,21 +571,21 @@
      */
     function getHierarchyDelimiter()
     {
-	    if ($this->prefs['delimiter']) {
-    		return $this->prefs['delimiter'];
-	    }
+        if ($this->prefs['delimiter']) {
+            return $this->prefs['delimiter'];
+        }
 
-	    // try (LIST "" ""), should return delimiter (RFC2060 Sec 6.3.8)
-	    list($code, $response) = $this->execute('LIST',
-	        array($this->escape(''), $this->escape('')));
+        // try (LIST "" ""), should return delimiter (RFC2060 Sec 6.3.8)
+        list($code, $response) = $this->execute('LIST',
+            array($this->escape(''), $this->escape('')));
 
         if ($code == self::ERROR_OK) {
             $args = $this->tokenizeResponse($response, 4);
             $delimiter = $args[3];
 
-	        if (strlen($delimiter) > 0) {
-	            return ($this->prefs['delimiter'] = $delimiter);
-	        }
+            if (strlen($delimiter) > 0) {
+                return ($this->prefs['delimiter'] = $delimiter);
+            }
         }
 
         return NULL;
@@ -588,18 +603,18 @@
         }
 
         if (!$this->getCapability('NAMESPACE')) {
-	        return self::ERROR_BAD;
-	    }
+            return self::ERROR_BAD;
+        }
 
-	    list($code, $response) = $this->execute('NAMESPACE');
+        list($code, $response) = $this->execute('NAMESPACE');
 
-		if ($code == self::ERROR_OK && preg_match('/^\* NAMESPACE /', $response)) {
-	        $data = $this->tokenizeResponse(substr($response, 11));
-		}
+        if ($code == self::ERROR_OK && preg_match('/^\* NAMESPACE /', $response)) {
+            $data = $this->tokenizeResponse(substr($response, 11));
+        }
 
-	    if (!is_array($data)) {
-	        return $code;
-	    }
+        if (!is_array($data)) {
+            return $code;
+        }
 
         $this->prefs['namespace'] = array(
             'personal' => $data[0],
@@ -612,134 +627,132 @@
 
     function connect($host, $user, $password, $options=null)
     {
-	    // set options
-	    if (is_array($options)) {
+        // set options
+        if (is_array($options)) {
             $this->prefs = $options;
         }
         // set auth method
         if (!empty($this->prefs['auth_method'])) {
             $auth_method = strtoupper($this->prefs['auth_method']);
-	    } else {
-    		$auth_method = 'CHECK';
+        } else {
+            $auth_method = 'CHECK';
         }
 
-	    $result = false;
+        $result = false;
 
-	    // initialize connection
-	    $this->error    = '';
-	    $this->errornum = self::ERROR_OK;
-	    $this->selected = '';
-	    $this->user     = $user;
-	    $this->host     = $host;
+        // initialize connection
+        $this->error    = '';
+        $this->errornum = self::ERROR_OK;
+        $this->selected = '';
+        $this->user     = $user;
+        $this->host     = $host;
         $this->logged   = false;
 
-	    // check input
-	    if (empty($host)) {
-		    $this->setError(self::ERROR_BAD, "Empty host");
-		    return false;
-	    }
+        // check input
+        if (empty($host)) {
+            $this->setError(self::ERROR_BAD, "Empty host");
+            return false;
+        }
         if (empty($user)) {
-    		$this->setError(self::ERROR_NO, "Empty user");
-	    	return false;
-	    }
-	    if (empty($password)) {
-	    	$this->setError(self::ERROR_NO, "Empty password");
-		    return false;
-	    }
+            $this->setError(self::ERROR_NO, "Empty user");
+            return false;
+        }
+        if (empty($password)) {
+            $this->setError(self::ERROR_NO, "Empty password");
+            return false;
+        }
 
-	    if (!$this->prefs['port']) {
-		    $this->prefs['port'] = 143;
-	    }
-	    // check for SSL
-	    if ($this->prefs['ssl_mode'] && $this->prefs['ssl_mode'] != 'tls') {
-		    $host = $this->prefs['ssl_mode'] . '://' . $host;
-	    }
+        if (!$this->prefs['port']) {
+            $this->prefs['port'] = 143;
+        }
+        // check for SSL
+        if ($this->prefs['ssl_mode'] && $this->prefs['ssl_mode'] != 'tls') {
+            $host = $this->prefs['ssl_mode'] . '://' . $host;
+        }
 
         // Connect
         if ($this->prefs['timeout'] > 0)
-	        $this->fp = @fsockopen($host, $this->prefs['port'], $errno, $errstr, $this->prefs['timeout']);
-	    else
-	        $this->fp = @fsockopen($host, $this->prefs['port'], $errno, $errstr);
+            $this->fp = @fsockopen($host, $this->prefs['port'], $errno, $errstr, $this->prefs['timeout']);
+        else
+            $this->fp = @fsockopen($host, $this->prefs['port'], $errno, $errstr);
 
-	    if (!$this->fp) {
-    		$this->setError(self::ERROR_BAD, sprintf("Could not connect to %s:%d: %s", $host, $this->prefs['port'], $errstr));
-		    return false;
-	    }
-
-        if ($this->prefs['timeout'] > 0)
-	        stream_set_timeout($this->fp, $this->prefs['timeout']);
-
-	    $line = trim(fgets($this->fp, 8192));
-
-	    if ($this->prefs['debug_mode'] && $line) {
-		    write_log('imap', 'S: '. $line);
+        if (!$this->fp) {
+            $this->setError(self::ERROR_BAD, sprintf("Could not connect to %s:%d: %s", $host, $this->prefs['port'], $errstr));
+            return false;
         }
 
-	    // Connected to wrong port or connection error?
-	    if (!preg_match('/^\* (OK|PREAUTH)/i', $line)) {
-		    if ($line)
-			    $error = sprintf("Wrong startup greeting (%s:%d): %s", $host, $this->prefs['port'], $line);
-		    else
-			    $error = sprintf("Empty startup greeting (%s:%d)", $host, $this->prefs['port']);
+        if ($this->prefs['timeout'] > 0)
+            stream_set_timeout($this->fp, $this->prefs['timeout']);
 
-	        $this->setError(self::ERROR_BAD, $error);
-            $this->close();
-	        return false;
-	    }
+        $line = trim(fgets($this->fp, 8192));
 
-	    // RFC3501 [7.1] optional CAPABILITY response
-	    if (preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)) {
-		    $this->parseCapability($matches[1], true);
-	    }
+        if ($this->prefs['debug_mode'] && $line) {
+            write_log('imap', 'S: '. $line);
+        }
 
-	    $this->message = $line;
+        // Connected to wrong port or connection error?
+        if (!preg_match('/^\* (OK|PREAUTH)/i', $line)) {
+            if ($line)
+                $error = sprintf("Wrong startup greeting (%s:%d): %s", $host, $this->prefs['port'], $line);
+            else
+                $error = sprintf("Empty startup greeting (%s:%d)", $host, $this->prefs['port']);
 
-	    // TLS connection
-	    if ($this->prefs['ssl_mode'] == 'tls' && $this->getCapability('STARTTLS')) {
-        	if (version_compare(PHP_VERSION, '5.1.0', '>=')) {
-               	$res = $this->execute('STARTTLS');
+            $this->setError(self::ERROR_BAD, $error);
+            $this->closeConnection();
+            return false;
+        }
+
+        // RFC3501 [7.1] optional CAPABILITY response
+        if (preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)) {
+            $this->parseCapability($matches[1], true);
+        }
+
+        // TLS connection
+        if ($this->prefs['ssl_mode'] == 'tls' && $this->getCapability('STARTTLS')) {
+            if (version_compare(PHP_VERSION, '5.1.0', '>=')) {
+                $res = $this->execute('STARTTLS');
 
                 if ($res[0] != self::ERROR_OK) {
-                    $this->close();
+                    $this->closeConnection();
                     return false;
                 }
 
-			    if (!stream_socket_enable_crypto($this->fp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) {
-				    $this->setError(self::ERROR_BAD, "Unable to negotiate TLS");
-                    $this->close();
-				    return false;
-			    }
+                if (!stream_socket_enable_crypto($this->fp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) {
+                    $this->setError(self::ERROR_BAD, "Unable to negotiate TLS");
+                    $this->closeConnection();
+                    return false;
+                }
 
-			    // Now we're secure, capabilities need to be reread
-			    $this->clearCapability();
-        	}
-	    }
+                // Now we're secure, capabilities need to be reread
+                $this->clearCapability();
+            }
+        }
 
-	    $auth_methods = array();
+        $auth_methods = array();
         $result       = null;
 
-	    // check for supported auth methods
-	    if ($auth_method == 'CHECK') {
-		    if ($this->getCapability('AUTH=DIGEST-MD5')) {
-			    $auth_methods[] = 'DIGEST-MD5';
-		    }
-		    if ($this->getCapability('AUTH=CRAM-MD5') || $this->getCapability('AUTH=CRAM_MD5')) {
-			    $auth_methods[] = 'CRAM-MD5';
-		    }
-		    if ($this->getCapability('AUTH=PLAIN')) {
-			    $auth_methods[] = 'PLAIN';
-		    }
+        // check for supported auth methods
+        if ($auth_method == 'CHECK') {
+            if ($this->getCapability('AUTH=DIGEST-MD5')) {
+                $auth_methods[] = 'DIGEST-MD5';
+            }
+            if ($this->getCapability('AUTH=CRAM-MD5') || $this->getCapability('AUTH=CRAM_MD5')) {
+                $auth_methods[] = 'CRAM-MD5';
+            }
+            if ($this->getCapability('AUTH=PLAIN')) {
+                $auth_methods[] = 'PLAIN';
+            }
             // RFC 2595 (LOGINDISABLED) LOGIN disabled when connection is not secure
-		    if (!$this->getCapability('LOGINDISABLED')) {
-			    $auth_methods[] = 'LOGIN';
-		    }
-	    }
+            if (!$this->getCapability('LOGINDISABLED')) {
+                $auth_methods[] = 'LOGIN';
+            }
+        }
         else {
             // Prevent from sending credentials in plain text when connection is not secure
-		    if ($auth_method == 'LOGIN' && $this->getCapability('LOGINDISABLED')) {
-			    $this->setError(self::ERROR_BAD, "Login disabled by IMAP server");
-                $this->close();
-			    return false;
+            if ($auth_method == 'LOGIN' && $this->getCapability('LOGINDISABLED')) {
+                $this->setError(self::ERROR_BAD, "Login disabled by IMAP server");
+                $this->closeConnection();
+                return false;
             }
             // replace AUTH with CRAM-MD5 for backward compat.
             $auth_methods[] = $auth_method == 'AUTH' ? 'CRAM-MD5' : $auth_method;
@@ -753,61 +766,68 @@
             switch ($method) {
             case 'DIGEST-MD5':
             case 'CRAM-MD5':
-	        case 'PLAIN':
-			    $result = $this->authenticate($user, $password, $method);
-		        break;
+            case 'PLAIN':
+                $result = $this->authenticate($user, $password, $method);
+                break;
             case 'LOGIN':
-       	        $result = $this->login($user, $password);
+                $result = $this->login($user, $password);
                 break;
             default:
                 $this->setError(self::ERROR_BAD, "Configuration error. Unknown auth method: $method");
             }
 
-		    if (is_resource($result)) {
-			    break;
-		    }
-	    }
+            if (is_resource($result)) {
+                break;
+            }
+        }
 
         // Connected and authenticated
-	    if (is_resource($result)) {
+        if (is_resource($result)) {
             if ($this->prefs['force_caps']) {
-			    $this->clearCapability();
+                $this->clearCapability();
             }
             $this->logged = true;
 
-		    return true;
+            return true;
         }
 
-        // Close connection
-        $this->close();
+        $this->closeConnection();
 
         return false;
     }
 
     function connected()
     {
-		return ($this->fp && $this->logged) ? true : false;
+        return ($this->fp && $this->logged) ? true : false;
     }
 
-    function close()
+    function closeConnection()
     {
-	    if ($this->putLine($this->nextTag() . ' LOGOUT')) {
-    	    $this->readReply();
+        if ($this->putLine($this->nextTag() . ' LOGOUT')) {
+            $this->readReply();
         }
 
-		@fclose($this->fp);
-		$this->fp = false;
+        @fclose($this->fp);
+        $this->fp = false;
     }
 
+    /**
+     * Executes SELECT command (if mailbox is already not in selected state)
+     *
+     * @param string $mailbox Mailbox name
+     *
+     * @return boolean True on success, false on error
+     * @access public
+     */
     function select($mailbox)
     {
-	    if (!strlen($mailbox)) {
-		    return false;
-	    }
+        if (!strlen($mailbox)) {
+            return false;
+        }
 
-	    if ($this->selected == $mailbox) {
-		    return true;
-	    }
+        if ($this->selected == $mailbox) {
+            return true;
+        }
 /*
     Temporary commented out because Courier returns \Noselect for INBOX
     Requires more investigation
@@ -823,26 +843,28 @@
         if ($code == self::ERROR_OK) {
             $response = explode("\r\n", $response);
             foreach ($response as $line) {
-    			if (preg_match('/^\* ([0-9]+) (EXISTS|RECENT)$/i', $line, $m)) {
-	    		    $this->data[strtoupper($m[2])] = (int) $m[1];
-		    	}
-			    else if (preg_match('/^\* OK \[(UIDNEXT|UIDVALIDITY|UNSEEN) ([0-9]+)\]/i', $line, $match)) {
-			        $this->data[strtoupper($match[1])] = (int) $match[2];
-			    }
-			    else if (preg_match('/^\* OK \[PERMANENTFLAGS \(([^\)]+)\)\]/iU', $line, $match)) {
-			        $this->data['PERMANENTFLAGS'] = explode(' ', $match[1]);
-			    }
+                if (preg_match('/^\* ([0-9]+) (EXISTS|RECENT)$/i', $line, $m)) {
+                    $this->data[strtoupper($m[2])] = (int) $m[1];
+                }
+                else if (preg_match('/^\* OK \[(UIDNEXT|UIDVALIDITY|UNSEEN) ([0-9]+)\]/i', $line, $match)) {
+                    $this->data[strtoupper($match[1])] = (int) $match[2];
+                }
+                else if (preg_match('/^\* OK \[PERMANENTFLAGS \(([^\)]+)\)\]/iU', $line, $match)) {
+                    $this->data['PERMANENTFLAGS'] = explode(' ', $match[1]);
+                }
             }
 
-		    $this->selected = $mailbox;
-			return true;
-		}
+            $this->data['READ-WRITE'] = $this->resultcode != 'READ-ONLY';
+
+            $this->selected = $mailbox;
+            return true;
+        }
 
         return false;
     }
 
     /**
-     * Executes STATUS comand
+     * Executes STATUS command
      *
      * @param string $mailbox Mailbox name
      * @param array  $items   Additional requested item names. By default
@@ -855,9 +877,9 @@
      */
     function status($mailbox, $items=array())
     {
-	    if (!strlen($mailbox)) {
-		    return false;
-	    }
+        if (!strlen($mailbox)) {
+            return false;
+        }
 
         if (!in_array('MESSAGES', $items)) {
             $items[] = 'MESSAGES';
@@ -881,36 +903,157 @@
 
             $this->data['STATUS:'.$mailbox] = $result;
 
-			return $result;
-		}
+            return $result;
+        }
 
         return false;
     }
 
-    function checkForRecent($mailbox)
+    /**
+     * Executes EXPUNGE command
+     *
+     * @param string $mailbox  Mailbox name
+     * @param string $messages Message UIDs to expunge
+     *
+     * @return boolean True on success, False on error
+     * @access public
+     */
+    function expunge($mailbox, $messages=NULL)
     {
-	    if (!strlen($mailbox)) {
-		    $mailbox = 'INBOX';
-	    }
+        if (!$this->select($mailbox)) {
+            return false;
+        }
 
-	    $this->select($mailbox);
+        if (!$this->data['READ-WRITE']) {
+            $this->setError(self::ERROR_READONLY, "Mailbox is read-only", 'EXPUNGE');
+            return false;
+        }
 
-	    if ($this->selected == $mailbox) {
-		    return $this->data['RECENT'];
-	    }
+        // Clear internal status cache
+        unset($this->data['STATUS:'.$mailbox]);
 
-	    return false;
+        if ($messages)
+            $result = $this->execute('UID EXPUNGE', array($messages), self::COMMAND_NORESPONSE);
+        else
+            $result = $this->execute('EXPUNGE', null, self::COMMAND_NORESPONSE);
+
+        if ($result == self::ERROR_OK) {
+            $this->selected = ''; // state has changed, need to reselect
+            return true;
+        }
+
+        return false;
     }
 
+    /**
+     * Executes CLOSE command
+     *
+     * @return boolean True on success, False on error
+     * @access public
+     * @since 0.5
+     */
+    function close()
+    {
+        $result = $this->execute('CLOSE', NULL, self::COMMAND_NORESPONSE);
+
+        if ($result == self::ERROR_OK) {
+            $this->selected = '';
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Executes SUBSCRIBE command
+     *
+     * @param string $mailbox Mailbox name
+     *
+     * @return boolean True on success, False on error
+     * @access public
+     */
+    function subscribe($mailbox)
+    {
+        $result = $this->execute('SUBSCRIBE', array($this->escape($mailbox)),
+            self::COMMAND_NORESPONSE);
+
+        return ($result == self::ERROR_OK);
+    }
+
+    /**
+     * Executes UNSUBSCRIBE command
+     *
+     * @param string $mailbox Mailbox name
+     *
+     * @return boolean True on success, False on error
+     * @access public
+     */
+    function unsubscribe($mailbox)
+    {
+        $result = $this->execute('UNSUBSCRIBE', array($this->escape($mailbox)),
+            self::COMMAND_NORESPONSE);
+
+        return ($result == self::ERROR_OK);
+    }
+
+    /**
+     * Executes DELETE command
+     *
+     * @param string $mailbox Mailbox name
+     *
+     * @return boolean True on success, False on error
+     * @access public
+     */
+    function deleteFolder($mailbox)
+    {
+        $result = $this->execute('DELETE', array($this->escape($mailbox)),
+            self::COMMAND_NORESPONSE);
+
+        return ($result == self::ERROR_OK);
+    }
+
+    /**
+     * Removes all messages in a folder
+     *
+     * @param string $mailbox Mailbox name
+     *
+     * @return boolean True on success, False on error
+     * @access public
+     */
+    function clearFolder($mailbox)
+    {
+        $num_in_trash = $this->countMessages($mailbox);
+        if ($num_in_trash > 0) {
+            $res = $this->delete($mailbox, '1:*');
+        }
+
+        if ($res) {
+            if ($this->selected == $mailbox)
+                $res = $this->close();
+            else
+                $res = $this->expunge($mailbox);
+        }
+
+        return $res;
+    }
+
+    /**
+     * Returns count of all messages in a folder
+     *
+     * @param string $mailbox Mailbox name
+     *
+     * @return int Number of messages, False on error
+     * @access public
+     */
     function countMessages($mailbox, $refresh = false)
     {
-	    if ($refresh) {
-		    $this->selected = '';
-	    }
+        if ($refresh) {
+            $this->selected = '';
+        }
 
-	    if ($this->selected == $mailbox) {
-		    return $this->data['EXISTS'];
-	    }
+        if ($this->selected == $mailbox) {
+            return $this->data['EXISTS'];
+        }
 
         // Check internal cache
         $cache = $this->data['STATUS:'.$mailbox];
@@ -922,6 +1065,29 @@
         $counts = $this->status($mailbox);
         if (is_array($counts)) {
             return (int) $counts['MESSAGES'];
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns count of messages with \Recent flag in a folder
+     *
+     * @param string $mailbox Mailbox name
+     *
+     * @return int Number of messages, False on error
+     * @access public
+     */
+    function countRecent($mailbox)
+    {
+        if (!strlen($mailbox)) {
+            $mailbox = 'INBOX';
+        }
+
+        $this->select($mailbox);
+
+        if ($this->selected == $mailbox) {
+            return $this->data['RECENT'];
         }
 
         return false;
@@ -960,218 +1126,218 @@
 
     function sort($mailbox, $field, $add='', $is_uid=FALSE, $encoding = 'US-ASCII')
     {
-	    $field = strtoupper($field);
-	    if ($field == 'INTERNALDATE') {
-	        $field = 'ARRIVAL';
-	    }
+        $field = strtoupper($field);
+        if ($field == 'INTERNALDATE') {
+            $field = 'ARRIVAL';
+        }
 
-	    $fields = array('ARRIVAL' => 1,'CC' => 1,'DATE' => 1,
+        $fields = array('ARRIVAL' => 1,'CC' => 1,'DATE' => 1,
             'FROM' => 1, 'SIZE' => 1, 'SUBJECT' => 1, 'TO' => 1);
 
-	    if (!$fields[$field]) {
-	        return false;
-	    }
+        if (!$fields[$field]) {
+            return false;
+        }
 
-	    if (!$this->select($mailbox)) {
-	        return false;
-	    }
+        if (!$this->select($mailbox)) {
+            return false;
+        }
 
-	    // message IDs
-	    if (!empty($add))
-		    $add = $this->compressMessageSet($add);
+        // message IDs
+        if (!empty($add))
+            $add = $this->compressMessageSet($add);
 
-	    list($code, $response) = $this->execute($is_uid ? 'UID SORT' : 'SORT',
-	        array("($field)", $encoding, 'ALL' . (!empty($add) ? ' '.$add : '')));
+        list($code, $response) = $this->execute($is_uid ? 'UID SORT' : 'SORT',
+            array("($field)", $encoding, 'ALL' . (!empty($add) ? ' '.$add : '')));
 
-	    if ($code == self::ERROR_OK) {
-	        // remove prefix and \r\n from raw response
+        if ($code == self::ERROR_OK) {
+            // remove prefix and \r\n from raw response
             $response = str_replace("\r\n", '', substr($response, 7));
-	        return preg_split('/\s+/', $response, -1, PREG_SPLIT_NO_EMPTY);
-	    }
+            return preg_split('/\s+/', $response, -1, PREG_SPLIT_NO_EMPTY);
+        }
 
         return false;
     }
 
     function fetchHeaderIndex($mailbox, $message_set, $index_field='', $skip_deleted=true, $uidfetch=false)
     {
-	    if (is_array($message_set)) {
-		    if (!($message_set = $this->compressMessageSet($message_set)))
-			    return false;
-	    } else {
-		    list($from_idx, $to_idx) = explode(':', $message_set);
-		    if (empty($message_set) ||
-			    (isset($to_idx) && $to_idx != '*' && (int)$from_idx > (int)$to_idx)) {
-			    return false;
-		    }
-	    }
-
-	    $index_field = empty($index_field) ? 'DATE' : strtoupper($index_field);
-
-    	$fields_a['DATE']         = 1;
-	    $fields_a['INTERNALDATE'] = 4;
-    	$fields_a['ARRIVAL'] 	  = 4;
-	    $fields_a['FROM']         = 1;
-    	$fields_a['REPLY-TO']     = 1;
-	    $fields_a['SENDER']       = 1;
-    	$fields_a['TO']           = 1;
-	    $fields_a['CC']           = 1;
-    	$fields_a['SUBJECT']      = 1;
-	    $fields_a['UID']          = 2;
-    	$fields_a['SIZE']         = 2;
-	    $fields_a['SEEN']         = 3;
-    	$fields_a['RECENT']       = 3;
-	    $fields_a['DELETED']      = 3;
-
-    	if (!($mode = $fields_a[$index_field])) {
-	    	return false;
-	    }
-
-    	/*  Do "SELECT" command */
-	    if (!$this->select($mailbox)) {
-		    return false;
-	    }
-
-    	// build FETCH command string
-	    $key     = $this->nextTag();
-	    $cmd     = $uidfetch ? 'UID FETCH' : 'FETCH';
-	    $deleted = $skip_deleted ? ' FLAGS' : '';
-
-	    if ($mode == 1 && $index_field == 'DATE')
-		    $request = " $cmd $message_set (INTERNALDATE BODY.PEEK[HEADER.FIELDS (DATE)]$deleted)";
-	    else if ($mode == 1)
-		    $request = " $cmd $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)]$deleted)";
-	    else if ($mode == 2) {
-		    if ($index_field == 'SIZE')
-			    $request = " $cmd $message_set (RFC822.SIZE$deleted)";
-		    else
-			    $request = " $cmd $message_set ($index_field$deleted)";
-	    } else if ($mode == 3)
-		    $request = " $cmd $message_set (FLAGS)";
-	    else // 4
-		    $request = " $cmd $message_set (INTERNALDATE$deleted)";
-
-	    $request = $key . $request;
-
-	    if (!$this->putLine($request)) {
-            $this->setError(self::ERROR_COMMAND, "Unable to send command: $request");
-		    return false;
+        if (is_array($message_set)) {
+            if (!($message_set = $this->compressMessageSet($message_set)))
+                return false;
+        } else {
+            list($from_idx, $to_idx) = explode(':', $message_set);
+            if (empty($message_set) ||
+                (isset($to_idx) && $to_idx != '*' && (int)$from_idx > (int)$to_idx)) {
+                return false;
+            }
         }
 
-	    $result = array();
+        $index_field = empty($index_field) ? 'DATE' : strtoupper($index_field);
 
-	    do {
-		    $line = rtrim($this->readLine(200));
-		    $line = $this->multLine($line);
+        $fields_a['DATE']         = 1;
+        $fields_a['INTERNALDATE'] = 4;
+        $fields_a['ARRIVAL']      = 4;
+        $fields_a['FROM']         = 1;
+        $fields_a['REPLY-TO']     = 1;
+        $fields_a['SENDER']       = 1;
+        $fields_a['TO']           = 1;
+        $fields_a['CC']           = 1;
+        $fields_a['SUBJECT']      = 1;
+        $fields_a['UID']          = 2;
+        $fields_a['SIZE']         = 2;
+        $fields_a['SEEN']         = 3;
+        $fields_a['RECENT']       = 3;
+        $fields_a['DELETED']      = 3;
 
-		    if (preg_match('/^\* ([0-9]+) FETCH/', $line, $m)) {
-            	$id     = $m[1];
-			    $flags  = NULL;
+        if (!($mode = $fields_a[$index_field])) {
+            return false;
+        }
 
-			    if ($skip_deleted && preg_match('/FLAGS \(([^)]+)\)/', $line, $matches)) {
-				    $flags = explode(' ', strtoupper($matches[1]));
-				    if (in_array('\\DELETED', $flags)) {
-					    $deleted[$id] = $id;
-					    continue;
-				    }
-			    }
+        /*  Do "SELECT" command */
+        if (!$this->select($mailbox)) {
+            return false;
+        }
 
-			    if ($mode == 1 && $index_field == 'DATE') {
-				    if (preg_match('/BODY\[HEADER\.FIELDS \("*DATE"*\)\] (.*)/', $line, $matches)) {
-					    $value = preg_replace(array('/^"*[a-z]+:/i'), '', $matches[1]);
-					    $value = trim($value);
-					    $result[$id] = $this->strToTime($value);
-				    }
-				    // non-existent/empty Date: header, use INTERNALDATE
-				    if (empty($result[$id])) {
-					    if (preg_match('/INTERNALDATE "([^"]+)"/', $line, $matches))
-						    $result[$id] = $this->strToTime($matches[1]);
-					    else
-						    $result[$id] = 0;
-				    }
-			    } else if ($mode == 1) {
-				    if (preg_match('/BODY\[HEADER\.FIELDS \("?(FROM|REPLY-TO|SENDER|TO|SUBJECT)"?\)\] (.*)/', $line, $matches)) {
-					    $value = preg_replace(array('/^"*[a-z]+:/i', '/\s+$/sm'), array('', ''), $matches[2]);
-					    $result[$id] = trim($value);
-				    } else {
-					    $result[$id] = '';
-				    }
-			    } else if ($mode == 2) {
-				    if (preg_match('/\((UID|RFC822\.SIZE) ([0-9]+)/', $line, $matches)) {
-					    $result[$id] = trim($matches[2]);
-				    } else {
-					    $result[$id] = 0;
-				    }
-			    } else if ($mode == 3) {
-				    if (!$flags && preg_match('/FLAGS \(([^)]+)\)/', $line, $matches)) {
-					    $flags = explode(' ', $matches[1]);
-				    }
-				    $result[$id] = in_array('\\'.$index_field, $flags) ? 1 : 0;
-			    } else if ($mode == 4) {
-				    if (preg_match('/INTERNALDATE "([^"]+)"/', $line, $matches)) {
-					    $result[$id] = $this->strToTime($matches[1]);
-				    } else {
-					    $result[$id] = 0;
-				    }
-			    }
-		    }
-	    } while (!$this->startsWith($line, $key, true, true));
+        // build FETCH command string
+        $key     = $this->nextTag();
+        $cmd     = $uidfetch ? 'UID FETCH' : 'FETCH';
+        $deleted = $skip_deleted ? ' FLAGS' : '';
 
-	    return $result;
+        if ($mode == 1 && $index_field == 'DATE')
+            $request = " $cmd $message_set (INTERNALDATE BODY.PEEK[HEADER.FIELDS (DATE)]$deleted)";
+        else if ($mode == 1)
+            $request = " $cmd $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)]$deleted)";
+        else if ($mode == 2) {
+            if ($index_field == 'SIZE')
+                $request = " $cmd $message_set (RFC822.SIZE$deleted)";
+            else
+                $request = " $cmd $message_set ($index_field$deleted)";
+        } else if ($mode == 3)
+            $request = " $cmd $message_set (FLAGS)";
+        else // 4
+            $request = " $cmd $message_set (INTERNALDATE$deleted)";
+
+        $request = $key . $request;
+
+        if (!$this->putLine($request)) {
+            $this->setError(self::ERROR_COMMAND, "Unable to send command: $request");
+            return false;
+        }
+
+        $result = array();
+
+        do {
+            $line = rtrim($this->readLine(200));
+            $line = $this->multLine($line);
+
+            if (preg_match('/^\* ([0-9]+) FETCH/', $line, $m)) {
+                $id     = $m[1];
+                $flags  = NULL;
+
+                if ($skip_deleted && preg_match('/FLAGS \(([^)]+)\)/', $line, $matches)) {
+                    $flags = explode(' ', strtoupper($matches[1]));
+                    if (in_array('\\DELETED', $flags)) {
+                        $deleted[$id] = $id;
+                        continue;
+                    }
+                }
+
+                if ($mode == 1 && $index_field == 'DATE') {
+                    if (preg_match('/BODY\[HEADER\.FIELDS \("*DATE"*\)\] (.*)/', $line, $matches)) {
+                        $value = preg_replace(array('/^"*[a-z]+:/i'), '', $matches[1]);
+                        $value = trim($value);
+                        $result[$id] = $this->strToTime($value);
+                    }
+                    // non-existent/empty Date: header, use INTERNALDATE
+                    if (empty($result[$id])) {
+                        if (preg_match('/INTERNALDATE "([^"]+)"/', $line, $matches))
+                            $result[$id] = $this->strToTime($matches[1]);
+                        else
+                            $result[$id] = 0;
+                    }
+                } else if ($mode == 1) {
+                    if (preg_match('/BODY\[HEADER\.FIELDS \("?(FROM|REPLY-TO|SENDER|TO|SUBJECT)"?\)\] (.*)/', $line, $matches)) {
+                        $value = preg_replace(array('/^"*[a-z]+:/i', '/\s+$/sm'), array('', ''), $matches[2]);
+                        $result[$id] = trim($value);
+                    } else {
+                        $result[$id] = '';
+                    }
+                } else if ($mode == 2) {
+                    if (preg_match('/\((UID|RFC822\.SIZE) ([0-9]+)/', $line, $matches)) {
+                        $result[$id] = trim($matches[2]);
+                    } else {
+                        $result[$id] = 0;
+                    }
+                } else if ($mode == 3) {
+                    if (!$flags && preg_match('/FLAGS \(([^)]+)\)/', $line, $matches)) {
+                        $flags = explode(' ', $matches[1]);
+                    }
+                    $result[$id] = in_array('\\'.$index_field, $flags) ? 1 : 0;
+                } else if ($mode == 4) {
+                    if (preg_match('/INTERNALDATE "([^"]+)"/', $line, $matches)) {
+                        $result[$id] = $this->strToTime($matches[1]);
+                    } else {
+                        $result[$id] = 0;
+                    }
+                }
+            }
+        } while (!$this->startsWith($line, $key, true, true));
+
+        return $result;
     }
 
     static function compressMessageSet($messages, $force=false)
     {
-	    // given a comma delimited list of independent mid's,
-	    // compresses by grouping sequences together
+        // given a comma delimited list of independent mid's,
+        // compresses by grouping sequences together
 
         if (!is_array($messages)) {
-	        // if less than 255 bytes long, let's not bother
-	        if (!$force && strlen($messages)<255) {
-	            return $messages;
-	        }
+            // if less than 255 bytes long, let's not bother
+            if (!$force && strlen($messages)<255) {
+                return $messages;
+           }
 
-    	    // see if it's already been compressed
-	        if (strpos($messages, ':') !== false) {
-	            return $messages;
-	        }
+            // see if it's already been compressed
+            if (strpos($messages, ':') !== false) {
+                return $messages;
+            }
 
-	        // separate, then sort
-	        $messages = explode(',', $messages);
+            // separate, then sort
+            $messages = explode(',', $messages);
         }
 
-	    sort($messages);
+        sort($messages);
 
-	    $result = array();
-	    $start  = $prev = $messages[0];
+        $result = array();
+        $start  = $prev = $messages[0];
 
-	    foreach ($messages as $id) {
-		    $incr = $id - $prev;
-		    if ($incr > 1) {			//found a gap
-			    if ($start == $prev) {
-			        $result[] = $prev;	//push single id
-			    } else {
-			        $result[] = $start . ':' . $prev;   //push sequence as start_id:end_id
-			    }
-        		$start = $id;			//start of new sequence
-		    }
-		    $prev = $id;
-	    }
+        foreach ($messages as $id) {
+            $incr = $id - $prev;
+            if ($incr > 1) { // found a gap
+                if ($start == $prev) {
+                    $result[] = $prev; // push single id
+                } else {
+                    $result[] = $start . ':' . $prev; // push sequence as start_id:end_id
+                }
+                $start = $id; // start of new sequence
+            }
+            $prev = $id;
+        }
 
-	    // handle the last sequence/id
-	    if ($start == $prev) {
-	        $result[] = $prev;
-	    } else {
-    	    $result[] = $start.':'.$prev;
-	    }
+        // handle the last sequence/id
+        if ($start == $prev) {
+            $result[] = $prev;
+        } else {
+            $result[] = $start.':'.$prev;
+        }
 
-	    // return as comma separated string
-	    return implode(',', $result);
+        // return as comma separated string
+        return implode(',', $result);
     }
 
     static function uncompressMessageSet($messages)
     {
-	    $result   = array();
-	    $messages = explode(',', $messages);
+        $result   = array();
+        $messages = explode(',', $messages);
 
         foreach ($messages as $part) {
             $items = explode(':', $part);
@@ -1196,13 +1362,13 @@
      */
     function UID2ID($mailbox, $uid)
     {
-	    if ($uid > 0) {
-    		$id_a = $this->search($mailbox, "UID $uid");
-	    	if (is_array($id_a) && count($id_a) == 1) {
-		    	return (int) $id_a[0];
-		    }
-	    }
-	    return null;
+        if ($uid > 0) {
+            $id_a = $this->search($mailbox, "UID $uid");
+            if (is_array($id_a) && count($id_a) == 1) {
+                return (int) $id_a[0];
+            }
+        }
+        return null;
     }
 
     /**
@@ -1216,417 +1382,408 @@
      */
     function ID2UID($mailbox, $id)
     {
-	    if (empty($id) || $id < 0) {
-	        return 	null;
-	    }
+        if (empty($id) || $id < 0) {
+            return 	null;
+        }
 
-    	if (!$this->select($mailbox)) {
+        if (!$this->select($mailbox)) {
             return null;
         }
 
         list($code, $response) = $this->execute('FETCH', array($id, '(UID)'));
 
         if ($code == self::ERROR_OK && preg_match("/^\* $id FETCH \(UID (.*)\)/i", $response, $m)) {
-			return (int) $m[1];
+            return (int) $m[1];
         }
 
-    	return null;
+        return null;
     }
 
     function fetchUIDs($mailbox, $message_set=null)
     {
-	    if (is_array($message_set))
-		    $message_set = join(',', $message_set);
+        if (is_array($message_set))
+            $message_set = join(',', $message_set);
         else if (empty($message_set))
-		    $message_set = '1:*';
+            $message_set = '1:*';
 
-	    return $this->fetchHeaderIndex($mailbox, $message_set, 'UID', false);
+        return $this->fetchHeaderIndex($mailbox, $message_set, 'UID', false);
     }
 
     function fetchHeaders($mailbox, $message_set, $uidfetch=false, $bodystr=false, $add='')
     {
-	    $result = array();
+        $result = array();
 
-	    if (!$this->select($mailbox)) {
-		    return false;
-	    }
+        if (!$this->select($mailbox)) {
+            return false;
+        }
 
-	    $message_set = $this->compressMessageSet($message_set);
+        $message_set = $this->compressMessageSet($message_set);
 
-	    if ($add)
-		    $add = ' '.trim($add);
+        if ($add)
+            $add = ' '.trim($add);
 
-	    /* FETCH uid, size, flags and headers */
-	    $key  	  = $this->nextTag();
-	    $request  = $key . ($uidfetch ? ' UID' : '') . " FETCH $message_set ";
-	    $request .= "(UID RFC822.SIZE FLAGS INTERNALDATE ";
-	    if ($bodystr)
-		    $request .= "BODYSTRUCTURE ";
-	    $request .= "BODY.PEEK[HEADER.FIELDS (DATE FROM TO SUBJECT CONTENT-TYPE ";
-	    $request .= "LIST-POST DISPOSITION-NOTIFICATION-TO".$add.")])";
+        /* FETCH uid, size, flags and headers */
+        $key      = $this->nextTag();
+        $request  = $key . ($uidfetch ? ' UID' : '') . " FETCH $message_set ";
+        $request .= "(UID RFC822.SIZE FLAGS INTERNALDATE ";
+        if ($bodystr)
+            $request .= "BODYSTRUCTURE ";
+        $request .= "BODY.PEEK[HEADER.FIELDS (DATE FROM TO SUBJECT CONTENT-TYPE ";
+        $request .= "LIST-POST DISPOSITION-NOTIFICATION-TO".$add.")])";
 
-	    if (!$this->putLine($request)) {
+        if (!$this->putLine($request)) {
             $this->setError(self::ERROR_COMMAND, "Unable to send command: $request");
-		    return false;
-	    }
-	    do {
-		    $line = $this->readLine(4096);
-		    $line = $this->multLine($line);
+            return false;
+        }
+        do {
+            $line = $this->readLine(4096);
+            $line = $this->multLine($line);
 
             if (!$line)
                 break;
 
-		    if (preg_match('/^\* ([0-9]+) FETCH/', $line, $m)) {
-			    $id = intval($m[1]);
+            if (preg_match('/^\* ([0-9]+) FETCH/', $line, $m)) {
+                $id = intval($m[1]);
 
-			    $result[$id]            = new rcube_mail_header;
-			    $result[$id]->id        = $id;
-			    $result[$id]->subject   = '';
-			    $result[$id]->messageID = 'mid:' . $id;
+                $result[$id]            = new rcube_mail_header;
+                $result[$id]->id        = $id;
+                $result[$id]->subject   = '';
+                $result[$id]->messageID = 'mid:' . $id;
 
-			    $lines = array();
-			    $ln = 0;
+                $lines = array();
+                $ln = 0;
 
-			    // Sample reply line:
-			    // * 321 FETCH (UID 2417 RFC822.SIZE 2730 FLAGS (\Seen)
-			    // INTERNALDATE "16-Nov-2008 21:08:46 +0100" BODYSTRUCTURE (...)
-			    // BODY[HEADER.FIELDS ...
+                // Sample reply line:
+                // * 321 FETCH (UID 2417 RFC822.SIZE 2730 FLAGS (\Seen)
+                // INTERNALDATE "16-Nov-2008 21:08:46 +0100" BODYSTRUCTURE (...)
+                // BODY[HEADER.FIELDS ...
 
-			    if (preg_match('/^\* [0-9]+ FETCH \((.*) BODY/s', $line, $matches)) {
-				    $str = $matches[1];
+                if (preg_match('/^\* [0-9]+ FETCH \((.*) BODY/s', $line, $matches)) {
+                    $str = $matches[1];
 
-				    // swap parents with quotes, then explode
-				    $str = preg_replace('/[()]/', '"', $str);
-				    $a = rcube_explode_quoted_string(' ', $str);
+                    // swap parents with quotes, then explode
+                    $str = preg_replace('/[()]/', '"', $str);
+                    $a = rcube_explode_quoted_string(' ', $str);
 
-				    // did we get the right number of replies?
-				    $parts_count = count($a);
-				    if ($parts_count>=6) {
-					    for ($i=0; $i<$parts_count; $i=$i+2) {
-						    if ($a[$i] == 'UID')
-							    $result[$id]->uid = intval($a[$i+1]);
-						    else if ($a[$i] == 'RFC822.SIZE')
-							    $result[$id]->size = intval($a[$i+1]);
-    						else if ($a[$i] == 'INTERNALDATE')
-	    						$time_str = $a[$i+1];
-		    				else if ($a[$i] == 'FLAGS')
-			    				$flags_str = $a[$i+1];
-				    	}
+                    // did we get the right number of replies?
+                    $parts_count = count($a);
+                    if ($parts_count>=6) {
+                        for ($i=0; $i<$parts_count; $i=$i+2) {
+                            if ($a[$i] == 'UID') {
+                                $result[$id]->uid = intval($a[$i+1]);
+                            }
+                            else if ($a[$i] == 'RFC822.SIZE') {
+                                $result[$id]->size = intval($a[$i+1]);
+                            }
+                            else if ($a[$i] == 'INTERNALDATE') {
+                                $time_str = $a[$i+1];
+                            }
+                            else if ($a[$i] == 'FLAGS') {
+                                $flags_str = $a[$i+1];
+                            }
+                        }
 
-					    $time_str = str_replace('"', '', $time_str);
+                        $time_str = str_replace('"', '', $time_str);
 
-					    // if time is gmt...
-		                $time_str = str_replace('GMT','+0000',$time_str);
+                        // if time is gmt...
+                        $time_str = str_replace('GMT','+0000',$time_str);
 
-					    $result[$id]->internaldate = $time_str;
-    					$result[$id]->timestamp = $this->StrToTime($time_str);
-	    				$result[$id]->date = $time_str;
-		    		}
+                        $result[$id]->internaldate = $time_str;
+                        $result[$id]->timestamp    = $this->StrToTime($time_str);
+                        $result[$id]->date         = $time_str;
+                    }
 
-			    	// BODYSTRUCTURE
-				    if($bodystr) {
-					    while (!preg_match('/ BODYSTRUCTURE (.*) BODY\[HEADER.FIELDS/s', $line, $m)) {
-						    $line2 = $this->readLine(1024);
-    						$line .= $this->multLine($line2, true);
-	    				}
-		    			$result[$id]->body_structure = $m[1];
-			    	}
+                    // BODYSTRUCTURE
+                    if ($bodystr) {
+                        while (!preg_match('/ BODYSTRUCTURE (.*) BODY\[HEADER.FIELDS/s', $line, $m)) {
+                            $line2 = $this->readLine(1024);
+                            $line .= $this->multLine($line2, true);
+                        }
+                        $result[$id]->body_structure = $m[1];
+                    }
 
-    				// the rest of the result
-	    			preg_match('/ BODY\[HEADER.FIELDS \(.*?\)\]\s*(.*)$/s', $line, $m);
-		    		$reslines = explode("\n", trim($m[1], '"'));
-			    	// re-parse (see below)
-				    foreach ($reslines as $resln) {
-		    			if (ord($resln[0])<=32) {
-			    			$lines[$ln] .= (empty($lines[$ln])?'':"\n").trim($resln);
-				    	} else {
-					    	$lines[++$ln] = trim($resln);
-					    }
-    				}
-	    		}
+                    // the rest of the result
+                    if (preg_match('/ BODY\[HEADER.FIELDS \(.*?\)\]\s*(.*)$/s', $line, $m)) {
+                        $reslines = explode("\n", trim($m[1], '"'));
+                        // re-parse (see below)
+                        foreach ($reslines as $resln) {
+                            if (ord($resln[0])<=32) {
+                                $lines[$ln] .= (empty($lines[$ln])?'':"\n").trim($resln);
+                            } else {
+                                $lines[++$ln] = trim($resln);
+                            }
+                        }
+                    }
+                }
 
-				// Start parsing headers.  The problem is, some header "lines" take up multiple lines.
-				// So, we'll read ahead, and if the one we're reading now is a valid header, we'll
-				// process the previous line.  Otherwise, we'll keep adding the strings until we come
-				// to the next valid header line.
+                // Start parsing headers.  The problem is, some header "lines" take up multiple lines.
+                // So, we'll read ahead, and if the one we're reading now is a valid header, we'll
+                // process the previous line.  Otherwise, we'll keep adding the strings until we come
+                // to the next valid header line.
 
-			    do {
-				    $line = rtrim($this->readLine(300), "\r\n");
+                do {
+                    $line = rtrim($this->readLine(300), "\r\n");
 
-    				// The preg_match below works around communigate imap, which outputs " UID <number>)".
-	    			// Without this, the while statement continues on and gets the "FH0 OK completed" message.
-		    		// If this loop gets the ending message, then the outer loop does not receive it from radline on line 1249.
-			    	// This in causes the if statement on line 1278 to never be true, which causes the headers to end up missing
-				    // If the if statement was changed to pick up the fh0 from this loop, then it causes the outer loop to spin
-    				// An alternative might be:
-	    			// if (!preg_match("/:/",$line) && preg_match("/\)$/",$line)) break;
-		    		// however, unsure how well this would work with all imap clients.
-			    	if (preg_match("/^\s*UID [0-9]+\)$/", $line)) {
-				        break;
-				    }
+                    // The preg_match below works around communigate imap, which outputs " UID <number>)".
+                    // Without this, the while statement continues on and gets the "FH0 OK completed" message.
+                    // If this loop gets the ending message, then the outer loop does not receive it from radline on line 1249.
+                    // This in causes the if statement on line 1278 to never be true, which causes the headers to end up missing
+                    // If the if statement was changed to pick up the fh0 from this loop, then it causes the outer loop to spin
+                    // An alternative might be:
+                    // if (!preg_match("/:/",$line) && preg_match("/\)$/",$line)) break;
+                    // however, unsure how well this would work with all imap clients.
+                    if (preg_match("/^\s*UID [0-9]+\)$/", $line)) {
+                        break;
+                    }
 
-    				// handle FLAGS reply after headers (AOL, Zimbra?)
-	    			if (preg_match('/\s+FLAGS \((.*)\)\)$/', $line, $matches)) {
-		    			$flags_str = $matches[1];
-			    		break;
-				    }
+                    // handle FLAGS reply after headers (AOL, Zimbra?)
+                    if (preg_match('/\s+FLAGS \((.*)\)\)$/', $line, $matches)) {
+                        $flags_str = $matches[1];
+                        break;
+                    }
 
-    				if (ord($line[0])<=32) {
-	    				$lines[$ln] .= (empty($lines[$ln])?'':"\n").trim($line);
-		    		} else {
-			    		$lines[++$ln] = trim($line);
-				    }
-    			// patch from "Maksim Rubis" <siburny@hotmail.com>
-	    		} while ($line[0] != ')' && !$this->startsWith($line, $key, true));
+                    if (ord($line[0])<=32) {
+                        $lines[$ln] .= (empty($lines[$ln])?'':"\n").trim($line);
+                    } else {
+                        $lines[++$ln] = trim($line);
+                    }
+                // patch from "Maksim Rubis" <siburny@hotmail.com>
+                } while ($line[0] != ')' && !$this->startsWith($line, $key, true));
 
-    			if (strncmp($line, $key, strlen($key))) {
-	    			// process header, fill rcube_mail_header obj.
-		    		// initialize
-			    	if (is_array($headers)) {
-				    	reset($headers);
-					    while (list($k, $bar) = each($headers)) {
-    						$headers[$k] = '';
-	    				}
-		    		}
+                if (strncmp($line, $key, strlen($key))) {
+                    // process header, fill rcube_mail_header obj.
+                    // initialize
+                    if (is_array($headers)) {
+                        reset($headers);
+                        while (list($k, $bar) = each($headers)) {
+                            $headers[$k] = '';
+                        }
+                    }
 
-			    	// create array with header field:data
-    				while ( list($lines_key, $str) = each($lines) ) {
-	    				list($field, $string) = $this->splitHeaderLine($str);
+                    // create array with header field:data
+                    while (list($lines_key, $str) = each($lines)) {
+                        list($field, $string) = $this->splitHeaderLine($str);
 
-			    		$field  = strtolower($field);
-				    	$string = preg_replace('/\n\s*/', ' ', $string);
+                        $field  = strtolower($field);
+                        $string = preg_replace('/\n\s*/', ' ', $string);
 
-    					switch ($field) {
-	        			case 'date';
-			    			$result[$id]->date = $string;
-				    		$result[$id]->timestamp = $this->strToTime($string);
-		    		    	break;
-    					case 'from':
-	    					$result[$id]->from = $string;
-		    				break;
-			    		case 'to':
-				    		$result[$id]->to = preg_replace('/undisclosed-recipients:[;,]*/', '', $string);
-					    	break;
-    					case 'subject':
-	    					$result[$id]->subject = $string;
-		    				break;
-			    		case 'reply-to':
-				    		$result[$id]->replyto = $string;
-					    	break;
-    					case 'cc':
-	    					$result[$id]->cc = $string;
-		    				break;
-    					case 'bcc':
-	    					$result[$id]->bcc = $string;
-		    				break;
-			    		case 'content-transfer-encoding':
-				    		$result[$id]->encoding = $string;
-					    	break;
-    					case 'content-type':
-	    					$ctype_parts = preg_split('/[; ]/', $string);
-		    				$result[$id]->ctype = array_shift($ctype_parts);
-			    			if (preg_match('/charset\s*=\s*"?([a-z0-9\-\.\_]+)"?/i', $string, $regs)) {
-				    			$result[$id]->charset = $regs[1];
-					    	}
-        					break;
-					    case 'in-reply-to':
-			    			$result[$id]->in_reply_to = str_replace(array("\n", '<', '>'), '', $string);
-				    		break;
-    					case 'references':
-	    					$result[$id]->references = $string;
-		    				break;
-			    		case 'return-receipt-to':
-				    	case 'disposition-notification-to':
-					    case 'x-confirm-reading-to':
-    						$result[$id]->mdn_to = $string;
-	    					break;
-		    			case 'message-id':
-			    			$result[$id]->messageID = $string;
-				    		break;
-					    case 'x-priority':
-    						if (preg_match('/^(\d+)/', $string, $matches))
-	    						$result[$id]->priority = intval($matches[1]);
-		    				break;
-			    		default:
-				    		if (strlen($field) > 2)
-					    		$result[$id]->others[$field] = $string;
-						    break;
-    					} // end switch ()
-	    			} // end while ()
-			    }
+                        switch ($field) {
+                        case 'date';
+                            $result[$id]->date = $string;
+                            $result[$id]->timestamp = $this->strToTime($string);
+                            break;
+                        case 'from':
+                            $result[$id]->from = $string;
+                            break;
+                        case 'to':
+                            $result[$id]->to = preg_replace('/undisclosed-recipients:[;,]*/', '', $string);
+                            break;
+                        case 'subject':
+                            $result[$id]->subject = $string;
+                            break;
+                        case 'reply-to':
+                            $result[$id]->replyto = $string;
+                            break;
+                        case 'cc':
+                            $result[$id]->cc = $string;
+                            break;
+                        case 'bcc':
+                            $result[$id]->bcc = $string;
+                            break;
+                        case 'content-transfer-encoding':
+                            $result[$id]->encoding = $string;
+                        break;
+                        case 'content-type':
+                            $ctype_parts = preg_split('/[; ]/', $string);
+                            $result[$id]->ctype = array_shift($ctype_parts);
+                            if (preg_match('/charset\s*=\s*"?([a-z0-9\-\.\_]+)"?/i', $string, $regs)) {
+                                $result[$id]->charset = $regs[1];
+                            }
+                            break;
+                        case 'in-reply-to':
+                            $result[$id]->in_reply_to = str_replace(array("\n", '<', '>'), '', $string);
+                            break;
+                        case 'references':
+                            $result[$id]->references = $string;
+                            break;
+                        case 'return-receipt-to':
+                        case 'disposition-notification-to':
+                        case 'x-confirm-reading-to':
+                            $result[$id]->mdn_to = $string;
+                            break;
+                        case 'message-id':
+                            $result[$id]->messageID = $string;
+                            break;
+                        case 'x-priority':
+                            if (preg_match('/^(\d+)/', $string, $matches)) {
+                                $result[$id]->priority = intval($matches[1]);
+                            }
+                            break;
+                        default:
+                            if (strlen($field) > 2) {
+                                $result[$id]->others[$field] = $string;
+                            }
+                            break;
+                        } // end switch ()
+                    } // end while ()
+                }
 
-    			// process flags
-	    		if (!empty($flags_str)) {
-		    		$flags_str = preg_replace('/[\\\"]/', '', $flags_str);
-			    	$flags_a   = explode(' ', $flags_str);
+                // process flags
+                if (!empty($flags_str)) {
+                    $flags_str = preg_replace('/[\\\"]/', '', $flags_str);
+                    $flags_a   = explode(' ', $flags_str);
 
-				    if (is_array($flags_a)) {
-	    				foreach($flags_a as $flag) {
-		    				$flag = strtoupper($flag);
-			    			if ($flag == 'SEEN') {
-				    		    $result[$id]->seen = true;
-					    	} else if ($flag == 'DELETED') {
-    						    $result[$id]->deleted = true;
-	    					} else if ($flag == 'RECENT') {
-		    				    $result[$id]->recent = true;
-			    			} else if ($flag == 'ANSWERED') {
-				    			$result[$id]->answered = true;
-					    	} else if ($flag == '$FORWARDED') {
-						    	$result[$id]->forwarded = true;
-    						} else if ($flag == 'DRAFT') {
-	    						$result[$id]->is_draft = true;
-		    				} else if ($flag == '$MDNSENT') {
-			    				$result[$id]->mdn_sent = true;
-				    		} else if ($flag == 'FLAGGED') {
-					    	         $result[$id]->flagged = true;
-						    }
-    					}
-	    				$result[$id]->flags = $flags_a;
-		    		}
-			    }
-    		}
-	    } while (!$this->startsWith($line, $key, true));
+                    if (is_array($flags_a)) {
+                        foreach($flags_a as $flag) {
+                            $flag = strtoupper($flag);
+                            if ($flag == 'SEEN') {
+                                $result[$id]->seen = true;
+                            } else if ($flag == 'DELETED') {
+                                $result[$id]->deleted = true;
+                            } else if ($flag == 'RECENT') {
+                                $result[$id]->recent = true;
+                            } else if ($flag == 'ANSWERED') {
+                                $result[$id]->answered = true;
+                            } else if ($flag == '$FORWARDED') {
+                                $result[$id]->forwarded = true;
+                            } else if ($flag == 'DRAFT') {
+                                $result[$id]->is_draft = true;
+                            } else if ($flag == '$MDNSENT') {
+                                $result[$id]->mdn_sent = true;
+                            } else if ($flag == 'FLAGGED') {
+                                 $result[$id]->flagged = true;
+                            }
+                        }
+                        $result[$id]->flags = $flags_a;
+                    }
+                }
+            }
+        } while (!$this->startsWith($line, $key, true));
 
-    	return $result;
+        return $result;
     }
 
     function fetchHeader($mailbox, $id, $uidfetch=false, $bodystr=false, $add='')
     {
-	    $a  = $this->fetchHeaders($mailbox, $id, $uidfetch, $bodystr, $add);
-	    if (is_array($a)) {
-		    return array_shift($a);
-	    }
-	    return false;
+        $a  = $this->fetchHeaders($mailbox, $id, $uidfetch, $bodystr, $add);
+        if (is_array($a)) {
+            return array_shift($a);
+        }
+        return false;
     }
 
     function sortHeaders($a, $field, $flag)
     {
-	    if (empty($field)) {
-	        $field = 'uid';
-	    }
+        if (empty($field)) {
+            $field = 'uid';
+        }
         else {
-    	    $field = strtolower($field);
+            $field = strtolower($field);
         }
 
-	    if ($field == 'date' || $field == 'internaldate') {
-	        $field = 'timestamp';
-	    }
-
-    	if (empty($flag)) {
-	        $flag = 'ASC';
-	    } else {
-        	$flag = strtoupper($flag);
+        if ($field == 'date' || $field == 'internaldate') {
+            $field = 'timestamp';
         }
 
-	    $c = count($a);
-	    if ($c > 0) {
-			// Strategy:
-			// First, we'll create an "index" array.
-			// Then, we'll use sort() on that array,
-			// and use that to sort the main array.
+        if (empty($flag)) {
+            $flag = 'ASC';
+        } else {
+            $flag = strtoupper($flag);
+        }
 
-		    // create "index" array
-		    $index = array();
-		    reset($a);
-		    while (list($key, $val) = each($a)) {
-			    if ($field == 'timestamp') {
-				    $data = $this->strToTime($val->date);
-				    if (!$data) {
-					    $data = $val->timestamp;
-            		}
-			    } else {
-				    $data = $val->$field;
-				    if (is_string($data)) {
-				        $data = str_replace('"', '', $data);
-                	    if ($field == 'subject') {
-				            $data = preg_replace('/^(Re: \s*|Fwd:\s*|Fw:\s*)+/i', '', $data);
+        $c = count($a);
+        if ($c > 0) {
+            // Strategy:
+            // First, we'll create an "index" array.
+            // Then, we'll use sort() on that array,
+            // and use that to sort the main array.
+
+            // create "index" array
+            $index = array();
+            reset($a);
+            while (list($key, $val) = each($a)) {
+                if ($field == 'timestamp') {
+                    $data = $this->strToTime($val->date);
+                    if (!$data) {
+                        $data = $val->timestamp;
+                    }
+                } else {
+                    $data = $val->$field;
+                    if (is_string($data)) {
+                        $data = str_replace('"', '', $data);
+                        if ($field == 'subject') {
+                            $data = preg_replace('/^(Re: \s*|Fwd:\s*|Fw:\s*)+/i', '', $data);
                         }
-					    $data = strtoupper($data);
-            		}
-			    }
-    			$index[$key] = $data;
-	    	}
+                        $data = strtoupper($data);
+                    }
+                }
+                $index[$key] = $data;
+            }
 
-		    // sort index
-	    	if ($flag == 'ASC') {
-		    	asort($index);
-    		} else {
-        	    arsort($index);
-		    }
+            // sort index
+            if ($flag == 'ASC') {
+                asort($index);
+            } else {
+                arsort($index);
+            }
 
-    		// form new array based on index
-	    	$result = array();
-		    reset($index);
-    		while (list($key, $val) = each($index)) {
-	    		$result[$key] = $a[$key];
-		    }
-	    }
-
-	    return $result;
-    }
-
-    function expunge($mailbox, $messages=NULL)
-    {
-	    if (!$this->select($mailbox)) {
-            return false;
+            // form new array based on index
+            $result = array();
+            reset($index);
+            while (list($key, $val) = each($index)) {
+                $result[$key] = $a[$key];
+            }
         }
 
-        // Clear internal status cache
-        unset($this->data['STATUS:'.$mailbox]);
-
-		if ($messages)
-			$result = $this->execute('UID EXPUNGE', array($messages), self::COMMAND_NORESPONSE);
-		else
-			$result = $this->execute('EXPUNGE', null, self::COMMAND_NORESPONSE);
-
-		if ($result == self::ERROR_OK) {
-			$this->selected = ''; // state has changed, need to reselect
-			return true;
-		}
-
-	    return false;
+        return $result;
     }
+
 
     function modFlag($mailbox, $messages, $flag, $mod)
     {
-	    if ($mod != '+' && $mod != '-') {
+        if ($mod != '+' && $mod != '-') {
             $mod = '+';
-	    }
+        }
 
-	    if (!$this->select($mailbox)) {
-	        return false;
-	    }
+        if (!$this->select($mailbox)) {
+            return false;
+        }
+
+        if (!$this->data['READ-WRITE']) {
+            $this->setError(self::ERROR_READONLY, "Mailbox is read-only", 'STORE');
+            return false;
+        }
 
         // Clear internal status cache
         if ($flag == 'SEEN') {
             unset($this->data['STATUS:'.$mailbox]['UNSEEN']);
         }
 
-	    $flag   = $this->flags[strtoupper($flag)];
+        $flag   = $this->flags[strtoupper($flag)];
         $result = $this->execute('UID STORE', array(
             $this->compressMessageSet($messages), $mod . 'FLAGS.SILENT', "($flag)"),
             self::COMMAND_NORESPONSE);
 
-	    return ($result == self::ERROR_OK);
+        return ($result == self::ERROR_OK);
     }
 
     function flag($mailbox, $messages, $flag) {
-	    return $this->modFlag($mailbox, $messages, $flag, '+');
+        return $this->modFlag($mailbox, $messages, $flag, '+');
     }
 
     function unflag($mailbox, $messages, $flag) {
-	    return $this->modFlag($mailbox, $messages, $flag, '-');
+        return $this->modFlag($mailbox, $messages, $flag, '-');
     }
 
     function delete($mailbox, $messages) {
-	    return $this->modFlag($mailbox, $messages, 'DELETED', '+');
+        return $this->modFlag($mailbox, $messages, 'DELETED', '+');
     }
 
     function copy($messages, $from, $to)
     {
-	    if (!$this->select($from)) {
-	        return false;
-	    }
+        if (!$this->select($from)) {
+            return false;
+        }
 
         // Clear internal status cache
         unset($this->data['STATUS:'.$to]);
@@ -1635,11 +1792,20 @@
             $this->compressMessageSet($messages), $this->escape($to)),
             self::COMMAND_NORESPONSE);
 
-	    return ($result == self::ERROR_OK);
+        return ($result == self::ERROR_OK);
     }
 
     function move($messages, $from, $to)
     {
+        if (!$this->select($from)) {
+            return false;
+        }
+
+        if (!$this->data['READ-WRITE']) {
+            $this->setError(self::ERROR_READONLY, "Mailbox is read-only", 'STORE');
+            return false;
+        }
+
         $r = $this->copy($messages, $from, $to);
 
         if ($r) {
@@ -1656,76 +1822,76 @@
     // http://derickrethans.nl/files/phparch-php-variables-article.pdf
     private function parseThread($str, $begin, $end, $root, $parent, $depth, &$depthmap, &$haschildren)
     {
-	    $node = array();
-	    if ($str[$begin] != '(') {
-		    $stop = $begin + strspn($str, '1234567890', $begin, $end - $begin);
-		    $msg = substr($str, $begin, $stop - $begin);
-		    if ($msg == 0)
-		        return $node;
-		    if (is_null($root))
-			    $root = $msg;
-		    $depthmap[$msg] = $depth;
-		    $haschildren[$msg] = false;
-		    if (!is_null($parent))
-			    $haschildren[$parent] = true;
-		    if ($stop + 1 < $end)
-			    $node[$msg] = $this->parseThread($str, $stop + 1, $end, $root, $msg, $depth + 1, $depthmap, $haschildren);
-		    else
-			    $node[$msg] = array();
-	    } else {
-		    $off = $begin;
-		    while ($off < $end) {
-			    $start = $off;
-    			$off++;
-	    		$n = 1;
-		    	while ($n > 0) {
-			    	$p = strpos($str, ')', $off);
-				    if ($p === false) {
-					    error_log('Mismatched brackets parsing IMAP THREAD response:');
-    					error_log(substr($str, ($begin < 10) ? 0 : ($begin - 10), $end - $begin + 20));
-	    				error_log(str_repeat(' ', $off - (($begin < 10) ? 0 : ($begin - 10))));
-		    			return $node;
-			    	}
-				    $p1 = strpos($str, '(', $off);
-    				if ($p1 !== false && $p1 < $p) {
-	    				$off = $p1 + 1;
-		    			$n++;
-			    	} else {
-				    	$off = $p + 1;
-					    $n--;
-    				}
-	    		}
-		    	$node += $this->parseThread($str, $start + 1, $off - 1, $root, $parent, $depth, $depthmap, $haschildren);
-		    }
-	    }
+        $node = array();
+        if ($str[$begin] != '(') {
+            $stop = $begin + strspn($str, '1234567890', $begin, $end - $begin);
+            $msg = substr($str, $begin, $stop - $begin);
+            if ($msg == 0)
+                return $node;
+            if (is_null($root))
+                $root = $msg;
+            $depthmap[$msg] = $depth;
+            $haschildren[$msg] = false;
+            if (!is_null($parent))
+                $haschildren[$parent] = true;
+            if ($stop + 1 < $end)
+                $node[$msg] = $this->parseThread($str, $stop + 1, $end, $root, $msg, $depth + 1, $depthmap, $haschildren);
+            else
+                $node[$msg] = array();
+        } else {
+            $off = $begin;
+            while ($off < $end) {
+                $start = $off;
+                $off++;
+                $n = 1;
+                while ($n > 0) {
+                    $p = strpos($str, ')', $off);
+                    if ($p === false) {
+                        error_log("Mismatched brackets parsing IMAP THREAD response:");
+                        error_log(substr($str, ($begin < 10) ? 0 : ($begin - 10), $end - $begin + 20));
+                        error_log(str_repeat(' ', $off - (($begin < 10) ? 0 : ($begin - 10))));
+                        return $node;
+                    }
+                    $p1 = strpos($str, '(', $off);
+                    if ($p1 !== false && $p1 < $p) {
+                        $off = $p1 + 1;
+                        $n++;
+                    } else {
+                        $off = $p + 1;
+                        $n--;
+                    }
+                }
+                $node += $this->parseThread($str, $start + 1, $off - 1, $root, $parent, $depth, $depthmap, $haschildren);
+            }
+        }
 
-	    return $node;
+        return $node;
     }
 
     function thread($mailbox, $algorithm='REFERENCES', $criteria='', $encoding='US-ASCII')
     {
         $old_sel = $this->selected;
 
-	    if (!$this->select($mailbox)) {
-    		return false;
-	    }
+        if (!$this->select($mailbox)) {
+            return false;
+        }
 
         // return empty result when folder is empty and we're just after SELECT
         if ($old_sel != $mailbox && !$this->data['EXISTS']) {
             return array(array(), array(), array());
-	    }
+        }
 
-    	$encoding  = $encoding ? trim($encoding) : 'US-ASCII';
-	    $algorithm = $algorithm ? trim($algorithm) : 'REFERENCES';
-	    $criteria  = $criteria ? 'ALL '.trim($criteria) : 'ALL';
+        $encoding  = $encoding ? trim($encoding) : 'US-ASCII';
+        $algorithm = $algorithm ? trim($algorithm) : 'REFERENCES';
+        $criteria  = $criteria ? 'ALL '.trim($criteria) : 'ALL';
         $data      = '';
 
         list($code, $response) = $this->execute('THREAD', array(
             $algorithm, $encoding, $criteria));
 
-	    if ($code == self::ERROR_OK && preg_match('/^\* THREAD /i', $response)) {
-	        // remove prefix and \r\n from raw response
-	        $response    = str_replace("\r\n", '', substr($response, 9));
+        if ($code == self::ERROR_OK && preg_match('/^\* THREAD /i', $response)) {
+            // remove prefix and \r\n from raw response
+            $response    = str_replace("\r\n", '', substr($response, 9));
             $depthmap    = array();
             $haschildren = array();
 
@@ -1733,9 +1899,9 @@
                 null, null, 0, $depthmap, $haschildren);
 
             return array($tree, $depthmap, $haschildren);
-	    }
+        }
 
-	    return false;
+        return false;
     }
 
     /**
@@ -1752,9 +1918,9 @@
     {
         $old_sel = $this->selected;
 
-	    if (!$this->select($mailbox)) {
-    		return false;
-	    }
+        if (!$this->select($mailbox)) {
+            return false;
+        }
 
         // return empty result when folder is empty and we're just after SELECT
         if ($old_sel != $mailbox && !$this->data['EXISTS']) {
@@ -1762,7 +1928,7 @@
                 return array_combine($items, array_fill(0, count($items), 0));
             else
                 return array();
-	    }
+        }
 
         $esearch  = empty($items) ? false : $this->getCapability('ESEARCH');
         $criteria = trim($criteria);
@@ -1779,13 +1945,13 @@
             $params .= 'ALL';
         }
 
-	    list($code, $response) = $this->execute($return_uid ? 'UID SEARCH' : 'SEARCH',
-	        array($params));
+        list($code, $response) = $this->execute($return_uid ? 'UID SEARCH' : 'SEARCH',
+            array($params));
 
-	    if ($code == self::ERROR_OK) {
-	        // remove prefix and \r\n from raw response
+        if ($code == self::ERROR_OK) {
+            // remove prefix and \r\n from raw response
             $response = substr($response, $esearch ? 10 : 9);
-	        $response = str_replace("\r\n", '', $response);
+            $response = str_replace("\r\n", '', $response);
 
             if ($esearch) {
                 // Skip prefix: ... (TAG "A285") UID ...
@@ -1803,29 +1969,33 @@
 
                 return $result;
             }
-	        else {
+            else {
                 $response = preg_split('/\s+/', $response, -1, PREG_SPLIT_NO_EMPTY);
 
                 if (!empty($items)) {
                     $result = array();
-                    if (in_array('COUNT', $items))
+                    if (in_array('COUNT', $items)) {
                         $result['COUNT'] = count($response);
-                    if (in_array('MIN', $items))
+                    }
+                    if (in_array('MIN', $items)) {
                         $result['MIN'] = !empty($response) ? min($response) : 0;
-                    if (in_array('MAX', $items))
+                    }
+                    if (in_array('MAX', $items)) {
                         $result['MAX'] = !empty($response) ? max($response) : 0;
-                    if (in_array('ALL', $items))
+                    }
+                    if (in_array('ALL', $items)) {
                         $result['ALL'] = $this->compressMessageSet($response, true);
+                    }
 
                     return $result;
                 }
                 else {
                     return $response;
                 }
-	        }
+            }
         }
 
-	    return false;
+        return false;
     }
 
     /**
@@ -1879,9 +2049,9 @@
     private function _listMailboxes($ref, $mailbox, $subscribed=false,
         $status_opts=array(), $select_opts=array())
     {
-		if (!strlen($mailbox)) {
-	        $mailbox = '*';
-	    }
+        if (!strlen($mailbox)) {
+            $mailbox = '*';
+        }
 
         $args = array();
 
@@ -1913,7 +2083,7 @@
 
                     // Add to result array
                     if (!$lstatus) {
-           			    $folders[] = $mailbox;
+                        $folders[] = $mailbox;
                     }
                     else {
                         $folders[$mailbox] = array();
@@ -1937,406 +2107,378 @@
                         $folders[$mailbox][$name] = $value;
                     }
                 }
-		    }
+            }
 
             return $folders;
         }
 
-    	return false;
+        return false;
     }
 
     function fetchMIMEHeaders($mailbox, $id, $parts, $mime=true)
     {
-	    if (!$this->select($mailbox)) {
-		    return false;
-	    }
+        if (!$this->select($mailbox)) {
+            return false;
+        }
 
-    	$result = false;
-	    $parts  = (array) $parts;
-    	$key    = $this->nextTag();
-	    $peeks  = '';
-    	$idx    = 0;
+        $result = false;
+        $parts  = (array) $parts;
+        $key    = $this->nextTag();
+        $peeks  = '';
+        $idx    = 0;
         $type   = $mime ? 'MIME' : 'HEADER';
 
-	    // format request
-	    foreach($parts as $part)
-		    $peeks[] = "BODY.PEEK[$part.$type]";
+        // format request
+        foreach($parts as $part) {
+            $peeks[] = "BODY.PEEK[$part.$type]";
+        }
 
-	    $request = "$key FETCH $id (" . implode(' ', $peeks) . ')';
+        $request = "$key FETCH $id (" . implode(' ', $peeks) . ')';
 
-	    // send request
-	    if (!$this->putLine($request)) {
+        // send request
+        if (!$this->putLine($request)) {
             $this->setError(self::ERROR_COMMAND, "Unable to send command: $request");
-	        return false;
-	    }
+            return false;
+        }
 
-	    do {
-        	$line = $this->readLine(1024);
-        	$line = $this->multLine($line);
+        do {
+            $line = $this->readLine(1024);
+            $line = $this->multLine($line);
 
-		    if (preg_match('/BODY\[([0-9\.]+)\.'.$type.'\]/', $line, $matches)) {
-			    $idx = $matches[1];
-    			$result[$idx] = preg_replace('/^(\* '.$id.' FETCH \()?\s*BODY\['.$idx.'\.'.$type.'\]\s+/', '', $line);
-	    		$result[$idx] = trim($result[$idx], '"');
-	        	$result[$idx] = rtrim($result[$idx], "\t\r\n\0\x0B");
-    		}
-	    } while (!$this->startsWith($line, $key, true));
+            if (preg_match('/BODY\[([0-9\.]+)\.'.$type.'\]/', $line, $matches)) {
+                $idx = $matches[1];
+                $result[$idx] = preg_replace('/^(\* '.$id.' FETCH \()?\s*BODY\['.$idx.'\.'.$type.'\]\s+/', '', $line);
+                $result[$idx] = trim($result[$idx], '"');
+                $result[$idx] = rtrim($result[$idx], "\t\r\n\0\x0B");
+            }
+        } while (!$this->startsWith($line, $key, true));
 
-	    return $result;
+        return $result;
     }
 
     function fetchPartHeader($mailbox, $id, $is_uid=false, $part=NULL)
     {
-	    $part = empty($part) ? 'HEADER' : $part.'.MIME';
+        $part = empty($part) ? 'HEADER' : $part.'.MIME';
 
         return $this->handlePartBody($mailbox, $id, $is_uid, $part);
     }
 
     function handlePartBody($mailbox, $id, $is_uid=false, $part='', $encoding=NULL, $print=NULL, $file=NULL)
     {
-    	if (!$this->select($mailbox)) {
+        if (!$this->select($mailbox)) {
             return false;
         }
 
-	    switch ($encoding) {
-		    case 'base64':
-			    $mode = 1;
-    		break;
-	    	case 'quoted-printable':
-		    	$mode = 2;
-    		break;
-	    	case 'x-uuencode':
-		    case 'x-uue':
-    		case 'uue':
-	    	case 'uuencode':
-		    	$mode = 3;
-    		break;
-	    	default:
-		    	$mode = 0;
-	    }
+        switch ($encoding) {
+        case 'base64':
+            $mode = 1;
+            break;
+        case 'quoted-printable':
+            $mode = 2;
+            break;
+        case 'x-uuencode':
+        case 'x-uue':
+        case 'uue':
+        case 'uuencode':
+            $mode = 3;
+            break;
+        default:
+            $mode = 0;
+        }
 
-    	// format request
-   		$reply_key = '* ' . $id;
-		$key       = $this->nextTag();
-		$request   = $key . ($is_uid ? ' UID' : '') . " FETCH $id (BODY.PEEK[$part])";
+        // format request
+        $reply_key = '* ' . $id;
+        $key       = $this->nextTag();
+        $request   = $key . ($is_uid ? ' UID' : '') . " FETCH $id (BODY.PEEK[$part])";
 
-    	// send request
-		if (!$this->putLine($request)) {
+        // send request
+        if (!$this->putLine($request)) {
             $this->setError(self::ERROR_COMMAND, "Unable to send command: $request");
-		    return false;
-   		}
+            return false;
+        }
 
-   		// receive reply line
-   		do {
-       		$line = rtrim($this->readLine(1024));
-       		$a    = explode(' ', $line);
-   		} while (!($end = $this->startsWith($line, $key, true)) && $a[2] != 'FETCH');
+        // receive reply line
+        do {
+            $line = rtrim($this->readLine(1024));
+            $a    = explode(' ', $line);
+        } while (!($end = $this->startsWith($line, $key, true)) && $a[2] != 'FETCH');
 
-   		$len    = strlen($line);
-    	$result = false;
+        $len    = strlen($line);
+        $result = false;
 
-		// handle empty "* X FETCH ()" response
-    	if ($line[$len-1] == ')' && $line[$len-2] != '(') {
-        	// one line response, get everything between first and last quotes
-			if (substr($line, -4, 3) == 'NIL') {
-				// NIL response
-				$result = '';
-			} else {
-			    $from = strpos($line, '"') + 1;
-        		$to   = strrpos($line, '"');
-		        $len  = $to - $from;
-				$result = substr($line, $from, $len);
-			}
+        // handle empty "* X FETCH ()" response
+        if ($line[$len-1] == ')' && $line[$len-2] != '(') {
+            // one line response, get everything between first and last quotes
+            if (substr($line, -4, 3) == 'NIL') {
+                // NIL response
+                $result = '';
+            } else {
+                $from = strpos($line, '"') + 1;
+                $to   = strrpos($line, '"');
+                $len  = $to - $from;
+                $result = substr($line, $from, $len);
+            }
 
-        	if ($mode == 1)
-				$result = base64_decode($result);
-			else if ($mode == 2)
-				$result = quoted_printable_decode($result);
-			else if ($mode == 3)
-				$result = convert_uudecode($result);
+            if ($mode == 1) {
+                $result = base64_decode($result);
+            }
+            else if ($mode == 2) {
+                $result = quoted_printable_decode($result);
+            }
+            else if ($mode == 3) {
+                $result = convert_uudecode($result);
+            }
 
-    	} else if ($line[$len-1] == '}') {
-	        // multi-line request, find sizes of content and receive that many bytes
-        	$from     = strpos($line, '{') + 1;
-	        $to       = strrpos($line, '}');
-        	$len      = $to - $from;
-	        $sizeStr  = substr($line, $from, $len);
-        	$bytes    = (int)$sizeStr;
-			$prev	  = '';
+        } else if ($line[$len-1] == '}') {
+            // multi-line request, find sizes of content and receive that many bytes
+            $from     = strpos($line, '{') + 1;
+            $to       = strrpos($line, '}');
+            $len      = $to - $from;
+            $sizeStr  = substr($line, $from, $len);
+            $bytes    = (int)$sizeStr;
+            $prev     = '';
 
-        	while ($bytes > 0) {
-    		    $line = $this->readLine(4096);
+            while ($bytes > 0) {
+                $line = $this->readLine(4096);
 
-    		    if ($line === NULL)
-    		        break;
+                if ($line === NULL) {
+                    break;
+                }
 
-            	$len  = strlen($line);
+                $len  = strlen($line);
 
-		        if ($len > $bytes) {
-            		$line = substr($line, 0, $bytes);
-					$len = strlen($line);
-		        }
-            	$bytes -= $len;
+                if ($len > $bytes) {
+                    $line = substr($line, 0, $bytes);
+                    $len = strlen($line);
+                }
+                $bytes -= $len;
 
                 // BASE64
-		        if ($mode == 1) {
-					$line = rtrim($line, "\t\r\n\0\x0B");
-					// create chunks with proper length for base64 decoding
-					$line = $prev.$line;
-					$length = strlen($line);
-					if ($length % 4) {
-						$length = floor($length / 4) * 4;
-						$prev = substr($line, $length);
-						$line = substr($line, 0, $length);
-					}
-					else
-						$prev = '';
-					$line = base64_decode($line);
+                if ($mode == 1) {
+                    $line = rtrim($line, "\t\r\n\0\x0B");
+                    // create chunks with proper length for base64 decoding
+                    $line = $prev.$line;
+                    $length = strlen($line);
+                    if ($length % 4) {
+                        $length = floor($length / 4) * 4;
+                        $prev = substr($line, $length);
+                        $line = substr($line, 0, $length);
+                    }
+                    else
+                        $prev = '';
+                    $line = base64_decode($line);
                 // QUOTED-PRINTABLE
-				} else if ($mode == 2) {
-					$line = rtrim($line, "\t\r\0\x0B");
+                } else if ($mode == 2) {
+                    $line = rtrim($line, "\t\r\0\x0B");
                     $line = quoted_printable_decode($line);
                     // Remove NULL characters (#1486189)
                     $line = str_replace("\x00", '', $line);
                 // UUENCODE
-				} else if ($mode == 3) {
-					$line = rtrim($line, "\t\r\n\0\x0B");
-					if ($line == 'end' || preg_match('/^begin\s+[0-7]+\s+.+$/', $line))
-						continue;
+                } else if ($mode == 3) {
+                    $line = rtrim($line, "\t\r\n\0\x0B");
+                    if ($line == 'end' || preg_match('/^begin\s+[0-7]+\s+.+$/', $line))
+                        continue;
                     $line = convert_uudecode($line);
                 // default
-				} else {
-					$line = rtrim($line, "\t\r\n\0\x0B") . "\n";
-				}
+                } else {
+                    $line = rtrim($line, "\t\r\n\0\x0B") . "\n";
+                }
 
-    			if ($file)
-					fwrite($file, $line);
-           		else if ($print)
-					echo $line;
-				else
-					$result .= $line;
-        	}
-    	}
+                if ($file)
+                    fwrite($file, $line);
+                else if ($print)
+                    echo $line;
+                else
+                    $result .= $line;
+            }
+        }
 
         // read in anything up until last line
-		if (!$end)
-			do {
-        			$line = $this->readLine(1024);
-			} while (!$this->startsWith($line, $key, true));
+        if (!$end)
+            do {
+                $line = $this->readLine(1024);
+            } while (!$this->startsWith($line, $key, true));
 
-   		if ($result !== false) {
-	    	if ($file) {
-		    	fwrite($file, $result);
-   			} else if ($print) {
-    			echo $result;
-	    	} else
-		    	return $result;
-   			return true;
-   		}
+        if ($result !== false) {
+            if ($file) {
+                fwrite($file, $result);
+            } else if ($print) {
+                echo $result;
+            } else
+                return $result;
+            return true;
+        }
 
-	    return false;
+        return false;
     }
 
     function createFolder($mailbox)
     {
         $result = $this->execute('CREATE', array($this->escape($mailbox)),
-	        self::COMMAND_NORESPONSE);
+            self::COMMAND_NORESPONSE);
 
-	    return ($result == self::ERROR_OK);
+        return ($result == self::ERROR_OK);
     }
 
     function renameFolder($from, $to)
     {
         $result = $this->execute('RENAME', array($this->escape($from), $this->escape($to)),
-	        self::COMMAND_NORESPONSE);
+            self::COMMAND_NORESPONSE);
 
-		return ($result == self::ERROR_OK);
-    }
-
-    function deleteFolder($mailbox)
-    {
-        $result = $this->execute('DELETE', array($this->escape($mailbox)),
-	        self::COMMAND_NORESPONSE);
-
-	    return ($result == self::ERROR_OK);
-    }
-
-    function clearFolder($mailbox)
-    {
-	    $num_in_trash = $this->countMessages($mailbox);
-	    if ($num_in_trash > 0) {
-		    $this->delete($mailbox, '1:*');
-	    }
-	    return ($this->expunge($mailbox) >= 0);
-    }
-
-    function subscribe($mailbox)
-    {
-	    $result = $this->execute('SUBSCRIBE', array($this->escape($mailbox)),
-	        self::COMMAND_NORESPONSE);
-
-	    return ($result == self::ERROR_OK);
-    }
-
-    function unsubscribe($mailbox)
-    {
-	    $result = $this->execute('UNSUBSCRIBE', array($this->escape($mailbox)),
-	        self::COMMAND_NORESPONSE);
-
-	    return ($result == self::ERROR_OK);
+        return ($result == self::ERROR_OK);
     }
 
     function append($mailbox, &$message)
     {
-	    if (!$mailbox) {
-		    return false;
-	    }
+        if (!$mailbox) {
+            return false;
+        }
 
-    	$message = str_replace("\r", '', $message);
-	    $message = str_replace("\n", "\r\n", $message);
+        $message = str_replace("\r", '', $message);
+        $message = str_replace("\n", "\r\n", $message);
 
-    	$len = strlen($message);
-	    if (!$len) {
-		    return false;
-	    }
+        $len = strlen($message);
+        if (!$len) {
+            return false;
+        }
 
         $key = $this->nextTag();
-	    $request = sprintf("$key APPEND %s (\\Seen) {%d%s}", $this->escape($mailbox),
+        $request = sprintf("$key APPEND %s (\\Seen) {%d%s}", $this->escape($mailbox),
             $len, ($this->prefs['literal+'] ? '+' : ''));
 
-	    if ($this->putLine($request)) {
+        if ($this->putLine($request)) {
             // Don't wait when LITERAL+ is supported
             if (!$this->prefs['literal+']) {
-                $line = $this->readLine(512);
+                $line = $this->readReply();
 
-    		    if ($line[0] != '+') {
-	    		    $this->parseResult($line, 'APPEND: ');
-			        return false;
-    		    }
+                if ($line[0] != '+') {
+                    $this->parseResult($line, 'APPEND: ');
+                    return false;
+                }
             }
 
-	    	if (!$this->putLine($message)) {
+            if (!$this->putLine($message)) {
                 return false;
             }
 
-		    do {
-			    $line = $this->readLine();
-    		} while (!$this->startsWith($line, $key, true, true));
+            do {
+                $line = $this->readLine();
+            } while (!$this->startsWith($line, $key, true, true));
 
             // Clear internal status cache
             unset($this->data['STATUS:'.$mailbox]);
 
-    		return ($this->parseResult($line, 'APPEND: ') == self::ERROR_OK);
-	    }
+            return ($this->parseResult($line, 'APPEND: ') == self::ERROR_OK);
+        }
         else {
             $this->setError(self::ERROR_COMMAND, "Unable to send command: $request");
         }
 
-	    return false;
+        return false;
     }
 
     function appendFromFile($mailbox, $path, $headers=null)
     {
-	    if (!$mailbox) {
-	        return false;
-	    }
+        if (!$mailbox) {
+            return false;
+        }
 
-	    // open message file
-	    $in_fp = false;
-	    if (file_exists(realpath($path))) {
-		    $in_fp = fopen($path, 'r');
-	    }
-	    if (!$in_fp) {
-		    $this->setError(self::ERROR_UNKNOWN, "Couldn't open $path for reading");
-		    return false;
-	    }
+        // open message file
+        $in_fp = false;
+        if (file_exists(realpath($path))) {
+            $in_fp = fopen($path, 'r');
+        }
+        if (!$in_fp) {
+            $this->setError(self::ERROR_UNKNOWN, "Couldn't open $path for reading");
+            return false;
+        }
 
         $body_separator = "\r\n\r\n";
-	    $len = filesize($path);
+        $len = filesize($path);
 
-	    if (!$len) {
-		    return false;
-	    }
+        if (!$len) {
+            return false;
+        }
 
         if ($headers) {
             $headers = preg_replace('/[\r\n]+$/', '', $headers);
             $len += strlen($headers) + strlen($body_separator);
         }
 
-    	// send APPEND command
-    	$key = $this->nextTag();
-	    $request = sprintf("$key APPEND %s (\\Seen) {%d%s}", $this->escape($mailbox),
+        // send APPEND command
+        $key = $this->nextTag();
+        $request = sprintf("$key APPEND %s (\\Seen) {%d%s}", $this->escape($mailbox),
             $len, ($this->prefs['literal+'] ? '+' : ''));
 
-	    if ($this->putLine($request)) {
+        if ($this->putLine($request)) {
             // Don't wait when LITERAL+ is supported
             if (!$this->prefs['literal+']) {
-    		    $line = $this->readLine(512);
+                $line = $this->readReply();
 
-	    	    if ($line[0] != '+') {
-		    	    $this->parseResult($line, 'APPEND: ');
-			        return false;
-		        }
+                if ($line[0] != '+') {
+                    $this->parseResult($line, 'APPEND: ');
+                    return false;
+                }
             }
 
             // send headers with body separator
             if ($headers) {
-			    $this->putLine($headers . $body_separator, false);
+                $this->putLine($headers . $body_separator, false);
             }
 
-		    // send file
-		    while (!feof($in_fp) && $this->fp) {
-			    $buffer = fgets($in_fp, 4096);
-			    $this->putLine($buffer, false);
-		    }
-		    fclose($in_fp);
+            // send file
+            while (!feof($in_fp) && $this->fp) {
+                $buffer = fgets($in_fp, 4096);
+                $this->putLine($buffer, false);
+            }
+            fclose($in_fp);
 
-		    if (!$this->putLine('')) { // \r\n
+            if (!$this->putLine('')) { // \r\n
                 return false;
             }
 
-		    // read response
-		    do {
-			    $line = $this->readLine();
-		    } while (!$this->startsWith($line, $key, true, true));
+            // read response
+            do {
+                $line = $this->readLine();
+            } while (!$this->startsWith($line, $key, true, true));
 
             // Clear internal status cache
             unset($this->data['STATUS:'.$mailbox]);
 
-		    return ($this->parseResult($line, 'APPEND: ') == self::ERROR_OK);
-	    }
+            return ($this->parseResult($line, 'APPEND: ') == self::ERROR_OK);
+        }
         else {
             $this->setError(self::ERROR_COMMAND, "Unable to send command: $request");
         }
 
-	    return false;
+        return false;
     }
 
     function fetchStructureString($mailbox, $id, $is_uid=false)
     {
-	    if (!$this->select($mailbox)) {
+        if (!$this->select($mailbox)) {
             return false;
         }
 
-		$key = $this->nextTag();
-    	$result = false;
+        $key = $this->nextTag();
+        $result = false;
         $command = $key . ($is_uid ? ' UID' : '') ." FETCH $id (BODYSTRUCTURE)";
 
-		if ($this->putLine($command)) {
-			do {
-				$line = $this->readLine(5000);
-				$line = $this->multLine($line, true);
-				if (!preg_match("/^$key /", $line))
-					$result .= $line;
-			} while (!$this->startsWith($line, $key, true, true));
+        if ($this->putLine($command)) {
+            do {
+                $line = $this->readLine(5000);
+                $line = $this->multLine($line, true);
+                if (!preg_match("/^$key /", $line))
+                    $result .= $line;
+            } while (!$this->startsWith($line, $key, true, true));
 
-			$result = trim(substr($result, strpos($result, 'BODYSTRUCTURE')+13, -1));
-		}
+            $result = trim(substr($result, strpos($result, 'BODYSTRUCTURE')+13, -1));
+        }
         else {
             $this->setError(self::ERROR_COMMAND, "Unable to send command: $command");
         }
 
-    	return $result;
+        return $result;
     }
 
     function getQuota()
@@ -2347,49 +2489,50 @@
          * QUOTA user/rchijiiwa1 (STORAGE 654 9765)
          * OK Completed
          */
-	    $result      = false;
-	    $quota_lines = array();
-	    $key         = $this->nextTag();
+        $result      = false;
+        $quota_lines = array();
+        $key         = $this->nextTag();
         $command     = $key . ' GETQUOTAROOT INBOX';
 
-	    // get line(s) containing quota info
-	    if ($this->putLine($command)) {
-		    do {
-			    $line = rtrim($this->readLine(5000));
-			    if (preg_match('/^\* QUOTA /', $line)) {
-				    $quota_lines[] = $line;
-        		}
-		    } while (!$this->startsWith($line, $key, true, true));
-	    }
+        // get line(s) containing quota info
+        if ($this->putLine($command)) {
+            do {
+                $line = rtrim($this->readLine(5000));
+                if (preg_match('/^\* QUOTA /', $line)) {
+                    $quota_lines[] = $line;
+                }
+            } while (!$this->startsWith($line, $key, true, true));
+        }
         else {
             $this->setError(self::ERROR_COMMAND, "Unable to send command: $command");
         }
 
-	    // return false if not found, parse if found
-	    $min_free = PHP_INT_MAX;
-	    foreach ($quota_lines as $key => $quota_line) {
-		    $quota_line   = str_replace(array('(', ')'), '', $quota_line);
-		    $parts        = explode(' ', $quota_line);
-		    $storage_part = array_search('STORAGE', $parts);
+        // return false if not found, parse if found
+        $min_free = PHP_INT_MAX;
+        foreach ($quota_lines as $key => $quota_line) {
+            $quota_line   = str_replace(array('(', ')'), '', $quota_line);
+            $parts        = explode(' ', $quota_line);
+            $storage_part = array_search('STORAGE', $parts);
 
-		    if (!$storage_part)
+            if (!$storage_part) {
                 continue;
+            }
 
-		    $used  = intval($parts[$storage_part+1]);
-		    $total = intval($parts[$storage_part+2]);
-		    $free  = $total - $used;
+            $used  = intval($parts[$storage_part+1]);
+            $total = intval($parts[$storage_part+2]);
+            $free  = $total - $used;
 
-		    // return lowest available space from all quotas
-		    if ($free < $min_free) {
-		        $min_free          = $free;
-			    $result['used']    = $used;
-			    $result['total']   = $total;
-			    $result['percent'] = min(100, round(($used/max(1,$total))*100));
-			    $result['free']    = 100 - $result['percent'];
-		    }
-	    }
+            // return lowest available space from all quotas
+            if ($free < $min_free) {
+                $min_free          = $free;
+                $result['used']    = $used;
+                $result['total']   = $total;
+                $result['percent'] = min(100, round(($used/max(1,$total))*100));
+                $result['free']    = 100 - $result['percent'];
+            }
+        }
 
-	    return $result;
+        return $result;
     }
 
     /**
@@ -2414,7 +2557,7 @@
             $this->escape($mailbox), $this->escape($user), strtolower($acl)),
             self::COMMAND_NORESPONSE);
 
-	    return ($result == self::ERROR_OK);
+        return ($result == self::ERROR_OK);
     }
 
     /**
@@ -2434,7 +2577,7 @@
             $this->escape($mailbox), $this->escape($user)),
             self::COMMAND_NORESPONSE);
 
-	    return ($result == self::ERROR_OK);
+        return ($result == self::ERROR_OK);
     }
 
     /**
@@ -2554,11 +2697,12 @@
         }
 
         foreach ($entries as $name => $value) {
-            if ($value === null)
+            if ($value === null) {
                 $value = 'NIL';
-            else
+            }
+            else {
                 $value = sprintf("{%d}\r\n%s", strlen($value), $value);
-
+            }
             $entries[$name] = $this->escape($name) . ' ' . $value;
         }
 
@@ -2583,16 +2727,18 @@
      */
     function deleteMetadata($mailbox, $entries)
     {
-        if (!is_array($entries) && !empty($entries))
+        if (!is_array($entries) && !empty($entries)) {
             $entries = explode(' ', $entries);
+        }
 
         if (empty($entries)) {
             $this->setError(self::ERROR_COMMAND, "Wrong argument for SETMETADATA command");
             return false;
         }
 
-        foreach ($entries as $entry)
+        foreach ($entries as $entry) {
             $data[$entry] = NULL;
+        }
 
         return $this->setMetadata($mailbox, $data);
     }
@@ -2628,13 +2774,16 @@
             $options = array_change_key_case($options, CASE_UPPER);
             $opts = array();
 
-            if (!empty($options['MAXSIZE']))
+            if (!empty($options['MAXSIZE'])) {
                 $opts[] = 'MAXSIZE '.intval($options['MAXSIZE']);
-            if (!empty($options['DEPTH']))
+            }
+            if (!empty($options['DEPTH'])) {
                 $opts[] = 'DEPTH '.intval($options['DEPTH']);
+            }
 
-            if ($opts)
+            if ($opts) {
                 $optlist = '(' . implode(' ', $opts) . ')';
+            }
         }
 
         $optlist .= ($optlist ? ' ' : '') . $entlist;
@@ -2701,10 +2850,12 @@
             $attr  = $entry[1];
             $value = $entry[2];
 
-            if ($value === null)
+            if ($value === null) {
                 $value = 'NIL';
-            else
+            }
+            else {
                 $value = sprintf("{%d}\r\n%s", strlen($value), $value);
+            }
 
             $entries[] = sprintf('%s (%s %s)',
                 $this->escape($name), $this->escape($attr), $value);
@@ -2796,10 +2947,12 @@
                         for ($x=0, $len=count($attribs); $x<$len;) {
                             $attr  = $attribs[$x++];
                             $value = $attribs[$x++];
-                            if ($attr == 'value.priv')
+                            if ($attr == 'value.priv') {
                                 $res['/private' . $entry] = $value;
-                            else if ($attr == 'value.shared')
+                            }
+                            else if ($attr == 'value.shared') {
                                 $res['/shared' . $entry] = $value;
+                            }
                         }
                     }
                     $last_entry = $entry;
@@ -2847,43 +3000,45 @@
         $noresp   = ($options & self::COMMAND_NORESPONSE);
         $response = $noresp ? null : '';
 
-        if (!empty($arguments))
+        if (!empty($arguments)) {
             $query .= ' ' . implode(' ', $arguments);
+        }
 
         // Send command
-	    if (!$this->putLineC($query)) {
+        if (!$this->putLineC($query)) {
             $this->setError(self::ERROR_COMMAND, "Unable to send command: $query");
-		    return $noresp ? self::ERROR_COMMAND : array(self::ERROR_COMMAND, '');
-	    }
+            return $noresp ? self::ERROR_COMMAND : array(self::ERROR_COMMAND, '');
+        }
 
         // Parse response
-    	do {
-	    	$line = $this->readLine(4096);
-	    	if ($response !== null)
-	    	    $response .= $line;
-    	} while (!$this->startsWith($line, $tag . ' ', true, true));
+        do {
+            $line = $this->readLine(4096);
+            if ($response !== null) {
+                $response .= $line;
+            }
+        } while (!$this->startsWith($line, $tag . ' ', true, true));
 
-	    $code = $this->parseResult($line, $command . ': ');
+        $code = $this->parseResult($line, $command . ': ');
 
         // Remove last line from response
-    	if ($response) {
-    	    $line_len = min(strlen($response), strlen($line) + 2);
+        if ($response) {
+            $line_len = min(strlen($response), strlen($line) + 2);
             $response = substr($response, 0, -$line_len);
         }
 
-   	    // optional CAPABILITY response
-	    if (($options & self::COMMAND_CAPABILITY) && $code == self::ERROR_OK
+        // optional CAPABILITY response
+        if (($options & self::COMMAND_CAPABILITY) && $code == self::ERROR_OK
             && preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)
         ) {
-		    $this->parseCapability($matches[1], true);
-	    }
-
-        // return last line only (without command tag and result)
-        if ($line && ($options & self::COMMAND_LASTLINE)) {
-            $response = preg_replace("/^$tag (OK|NO|BAD|BYE|PREAUTH)?\s*/i", '', trim($line));
+            $this->parseCapability($matches[1], true);
         }
 
-	    return $noresp ? $code : array($code, $response);
+        // return last line only (without command tag, result and response code)
+        if ($line && ($options & self::COMMAND_LASTLINE)) {
+            $response = preg_replace("/^$tag (OK|NO|BAD|BYE|PREAUTH)?\s*(\[[a-z-]+\])?\s*/i", '', trim($line));
+        }
+
+        return $noresp ? $code : array($code, $response);
     }
 
     /**
@@ -2917,7 +3072,7 @@
                 $result[] = substr($str, $epos + 3, $bytes);
                 // Advance the string
                 $str = substr($str, $epos + 3 + $bytes);
-            break;
+                break;
 
             // Quoted string
             case '"':
@@ -2939,17 +3094,17 @@
                 // we need to strip slashes for a quoted string
                 $result[] = stripslashes(substr($str, 1, $pos - 1));
                 $str      = substr($str, $pos + 1);
-            break;
+                break;
 
             // Parenthesized list
             case '(':
                 $str = substr($str, 1);
                 $result[] = self::tokenizeResponse($str);
-            break;
+                break;
             case ')':
                 $str = substr($str, 1);
                 return $result;
-            break;
+                break;
 
             // String atom, number, NIL, *, %
             default:
@@ -2968,7 +3123,7 @@
                     $result[] = $m[1] == 'NIL' ? NULL : $m[1];
                     $str = substr($str, strlen($m[1]));
                 }
-            break;
+                break;
             }
         }
 
@@ -2977,12 +3132,14 @@
 
     private function _xor($string, $string2)
     {
-	    $result = '';
-	    $size = strlen($string);
-	    for ($i=0; $i<$size; $i++) {
-    		$result .= chr(ord($string[$i]) ^ ord($string2[$i]));
-	    }
-	    return $result;
+        $result = '';
+        $size   = strlen($string);
+
+        for ($i=0; $i<$size; $i++) {
+            $result .= chr(ord($string[$i]) ^ ord($string2[$i]));
+        }
+
+        return $result;
     }
 
     /**
@@ -2994,31 +3151,33 @@
      */
     private function strToTime($date)
     {
-	    // support non-standard "GMTXXXX" literal
-	    $date = preg_replace('/GMT\s*([+-][0-9]+)/', '\\1', $date);
+        // support non-standard "GMTXXXX" literal
+        $date = preg_replace('/GMT\s*([+-][0-9]+)/', '\\1', $date);
         // if date parsing fails, we have a date in non-rfc format.
-	    // remove token from the end and try again
-	    while ((($ts = @strtotime($date))===false) || ($ts < 0)) {
-	        $d = explode(' ', $date);
-		    array_pop($d);
-		    if (!$d) break;
-		    $date = implode(' ', $d);
-	    }
+        // remove token from the end and try again
+        while ((($ts = @strtotime($date))===false) || ($ts < 0)) {
+            $d = explode(' ', $date);
+            array_pop($d);
+            if (!$d) {
+                break;
+            }
+            $date = implode(' ', $d);
+        }
 
-	    $ts = (int) $ts;
+        $ts = (int) $ts;
 
-	    return $ts < 0 ? 0 : $ts;
+        return $ts < 0 ? 0 : $ts;
     }
 
     private function splitHeaderLine($string)
     {
-	    $pos = strpos($string, ':');
-	    if ($pos>0) {
-		    $res[0] = substr($string, 0, $pos);
-		    $res[1] = trim(substr($string, $pos+1));
-		    return $res;
-	    }
-    	return $string;
+        $pos = strpos($string, ':');
+        if ($pos>0) {
+            $res[0] = substr($string, 0, $pos);
+            $res[1] = trim(substr($string, $pos+1));
+            return $res;
+        }
+        return $string;
     }
 
     private function parseCapability($str, $trusted=false)
@@ -3046,17 +3205,15 @@
      */
     static function escape($string)
     {
-        // NIL
         if ($string === null) {
             return 'NIL';
         }
-        // empty string
         else if ($string === '') {
             return '""';
         }
-        // string: special chars: SP, CTL, (, ), {, %, *, ", \, ]
         else if (preg_match('/([\x00-\x20\x28-\x29\x7B\x25\x2A\x22\x5C\x5D\x7F]+)/', $string)) {
-	        return '"' . strtr($string, array('"'=>'\\"', '\\' => '\\\\')) . '"';
+            // string: special chars: SP, CTL, (, ), {, %, *, ", \, ]
+            return '"' . strtr($string, array('"'=>'\\"', '\\' => '\\\\')) . '"';
         }
 
         // atom
@@ -3065,7 +3222,7 @@
 
     static function unEscape($string)
     {
-	    return strtr($string, array('\\"'=>'"', '\\\\' => '\\'));
+        return strtr($string, array('\\"'=>'"', '\\\\' => '\\'));
     }
 
 }
diff --git a/program/include/rcube_message.php b/program/include/rcube_message.php
index 790f8d9..b6c865d 100644
--- a/program/include/rcube_message.php
+++ b/program/include/rcube_message.php
@@ -426,7 +426,7 @@
                         $mail_part->type = 'content';
                         $this->parts[] = $mail_part;
                     }
-          
+
                     // list as attachment as well
                     if (!empty($mail_part->filename))
                         $this->attachments[] = $mail_part;
@@ -473,6 +473,10 @@
                     // attachment encapsulated within message/rfc822 part needs further decoding (#1486743)
                     else if ($part_orig_mimetype == 'message/rfc822') {
                         $this->parse_structure($mail_part, true);
+
+                        // list as attachment as well (mostly .eml)
+                        if (!empty($mail_part->filename))
+                            $this->attachments[] = $mail_part;
                     }
                     // is a regular attachment (content-type name regexp according to RFC4288.4.2)
                     else if (preg_match('/^[a-z0-9!#$&.+^_-]+\/[a-z0-9!#$&.+^_-]+$/i', $part_mimetype)) {
diff --git a/program/include/rcube_template.php b/program/include/rcube_template.php
index 8a9eff4..d6ea3dc 100755
--- a/program/include/rcube_template.php
+++ b/program/include/rcube_template.php
@@ -1045,7 +1045,7 @@
     private function login_form($attrib)
     {
         $default_host = $this->config['default_host'];
-        $attrib['autocomplete'] = $this->config['login_autocomplete'] ? null : 'off';
+        $autocomplete = (int) $this->config['login_autocomplete'];
 
         $_SESSION['temp'] = true;
 
@@ -1054,11 +1054,18 @@
         if (empty($url) && !preg_match('/_(task|action)=logout/', $_SERVER['QUERY_STRING']))
             $url = $_SERVER['QUERY_STRING'];
 
-        $input_user   = new html_inputfield(array('name' => '_user', 'id' => 'rcmloginuser') + $attrib);
-        $input_pass   = new html_passwordfield(array('name' => '_pass', 'id' => 'rcmloginpwd') + $attrib);
+        // set atocomplete attribute
+        $user_attrib = $autocomplete > 0 ? array() : array('autocomplete' => 'off');
+        $host_attrib = $autocomplete > 0 ? array() : array('autocomplete' => 'off');
+        $pass_attrib = $autocomplete > 1 ? array() : array('autocomplete' => 'off');
+
         $input_action = new html_hiddenfield(array('name' => '_action', 'value' => 'login'));
         $input_tzone  = new html_hiddenfield(array('name' => '_timezone', 'id' => 'rcmlogintz', 'value' => '_default_'));
         $input_url    = new html_hiddenfield(array('name' => '_url', 'id' => 'rcmloginurl', 'value' => $url));
+        $input_user   = new html_inputfield(array('name' => '_user', 'id' => 'rcmloginuser')
+            + $attrib + $user_attrib);
+        $input_pass   = new html_passwordfield(array('name' => '_pass', 'id' => 'rcmloginpwd')
+            + $attrib + $pass_attrib);
         $input_host   = null;
 
         if (is_array($default_host) && count($default_host) > 1) {
@@ -1080,7 +1087,8 @@
                 'name' => '_host', 'id' => 'rcmloginhost', 'value' => $host) + $attrib);
         }
         else if (empty($default_host)) {
-            $input_host = new html_inputfield(array('name' => '_host', 'id' => 'rcmloginhost') + $attrib);
+            $input_host = new html_inputfield(array('name' => '_host', 'id' => 'rcmloginhost')
+                + $attrib + $host_attrib);
         }
 
         $form_name  = !empty($attrib['form']) ? $attrib['form'] : 'form';
@@ -1090,7 +1098,7 @@
         $table = new html_table(array('cols' => 2));
 
         $table->add('title', html::label('rcmloginuser', Q(rcube_label('username'))));
-        $table->add(null, $input_user->show(get_input_value('_user', RCUBE_INPUT_POST)));
+        $table->add(null, $input_user->show(get_input_value('_user', RCUBE_INPUT_GPC)));
 
         $table->add('title', html::label('rcmloginpwd', Q(rcube_label('password'))));
         $table->add(null, $input_pass->show());
@@ -1098,7 +1106,7 @@
         // add host selection row
         if (is_object($input_host) && !$hide_host) {
             $table->add('title', html::label('rcmloginhost', Q(rcube_label('server'))));
-            $table->add(null, $input_host->show(get_input_value('_host', RCUBE_INPUT_POST)));
+            $table->add(null, $input_host->show(get_input_value('_host', RCUBE_INPUT_GPC)));
         }
 
         $out = $input_action->show();
diff --git a/program/include/rcube_user.php b/program/include/rcube_user.php
index e4506cf..ee6db77 100644
--- a/program/include/rcube_user.php
+++ b/program/include/rcube_user.php
@@ -358,13 +358,17 @@
     {
         $dbh = rcmail::get_instance()->get_dbh();
 
+        // use BINARY (case-sensitive) comparison on MySQL, other engines are case-sensitive
+        $prefix = preg_match('/^mysql/', $dbh->db_provider) ? 'BINARY ' : '';
+
         // query for matching user name
         $query = "SELECT * FROM ".get_table_name('users')." WHERE mail_host = ? AND %s = ?";
-        $sql_result = $dbh->query(sprintf($query, 'username'), $host, $user);
+
+        $sql_result = $dbh->query(sprintf($query, $prefix.'username'), $host, $user);
 
         // query for matching alias
         if (!($sql_arr = $dbh->fetch_assoc($sql_result))) {
-            $sql_result = $dbh->query(sprintf($query, 'alias'), $host, $user);
+            $sql_result = $dbh->query(sprintf($query, $prefix.'alias'), $host, $user);
             $sql_arr = $dbh->fetch_assoc($sql_result);
         }
 
diff --git a/program/js/app.js b/program/js/app.js
index 7ab31cb..90c18b6 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -148,7 +148,7 @@
     this.init_buttons();
 
     // tell parent window that this frame is loaded
-    if (this.env.framed && parent.rcmail && parent.rcmail.set_busy) {
+    if (this.is_framed()) {
       parent.rcmail.set_busy(false, null, parent.rcmail.env.frame_lock);
       parent.rcmail.env.frame_lock = null;
     }
@@ -222,7 +222,7 @@
           }
 
           // make preview/message frame visible
-          if (this.env.action == 'preview' && this.env.framed && parent.rcmail) {
+          if (this.env.action == 'preview' && this.is_framed()) {
             this.enable_command('compose', 'add-contact', false);
             parent.rcmail.show_contentframe(true);
           }
@@ -343,8 +343,15 @@
           this.enable_command('add', this.env.identities_level < 2);
           this.enable_command('save', 'delete', 'edit', 'toggle-editor', true);
         }
-        else if (this.env.action=='folders')
-          this.enable_command('subscribe', 'unsubscribe', 'create-folder', 'rename-folder', 'delete-folder', 'enable-threading', 'disable-threading', true);
+        else if (this.env.action=='folders') {
+          this.enable_command('subscribe', 'unsubscribe', 'create-folder', 'rename-folder', true);
+        }
+        else if (this.env.action == 'edit-folder' && this.gui_objects.editform) {
+          this.enable_command('save', 'folder-size', true);
+          parent.rcmail.env.messagecount = this.env.messagecount;
+          parent.rcmail.enable_command('purge', this.env.messagecount);
+          $("input[type='text']").first().select();
+        }
 
         if (this.gui_objects.identitieslist) {
           this.identity_list = new rcube_list_widget(this.gui_objects.identitieslist, {multiselect:false, draggable:false, keyboard:false});
@@ -435,7 +442,7 @@
     // command not supported or allowed
     if (!this.commands[command]) {
       // pass command to parent window
-      if (this.env.framed && parent.rcmail && parent.rcmail.command)
+      if (this.is_framed())
         parent.rcmail.command(command, props);
 
       return false;
@@ -1120,12 +1127,12 @@
 
   this.reload = function(delay)
   {
-    if (this.env.framed && parent.rcmail)
+    if (this.is_framed())
       parent.rcmail.reload(delay);
     else if (delay)
       window.setTimeout(function(){ rcmail.reload(); }, delay);
     else if (window.location)
-      location.href = this.env.comm_path;
+      location.href = this.env.comm_path + (this.env.action ? '&_action='+this.env.action : '');
   };
 
   // Add variable to GET string, replace old value if exists
@@ -1148,6 +1155,12 @@
     else
       return url + '?' + name + '=' + value;
   };
+
+  this.is_framed = function()
+  {
+    return (this.env.framed && parent.rcmail);
+  };
+
 
   /*********************************************************/
   /*********        event handling methods         *********/
@@ -1528,7 +1541,7 @@
     if (this.task == 'mail')
       allow = (this.env.mailboxes[id] && this.env.mailboxes[id].id != this.env.mailbox && !this.env.mailboxes[id].virtual);
     else if (this.task == 'settings')
-      allow = (id != this.env.folder);
+      allow = (id != this.env.mailbox);
     else if (this.task == 'addressbook') {
       if (id != this.env.source && this.env.contactfolders[id]) {
         if (this.env.contactfolders[id].type == 'group') {
@@ -1823,7 +1836,7 @@
       this.show_contentframe(true);
     else {
       if (!this.env.frame_lock) {
-        (parent.rcmail ? parent.rcmail : this).env.frame_lock = this.set_busy(true, 'loading');
+        (this.is_framed() ? parent.rcmail : this).env.frame_lock = this.set_busy(true, 'loading');
       }
       target.location.href = this.env.comm_path+url;
 
@@ -2373,8 +2386,10 @@
       }
     }
 
+    add_url += '&_uid='+this.uids_to_list(a_uids);
+
     // send request to server
-    this.http_post('copy', '_uid='+a_uids.join(',')+'&_mbox='+urlencode(this.env.mailbox)+add_url, lock);
+    this.http_post('copy', '_mbox='+urlencode(this.env.mailbox)+add_url, lock);
   };
 
   // move selected messages to the specified mailbox
@@ -2387,8 +2402,8 @@
     if (!mbox || mbox == this.env.mailbox || (!this.env.uid && (!this.message_list || !this.message_list.get_selection().length)))
       return;
 
-    var lock = false;
-    var add_url = '&_target_mbox='+urlencode(mbox)+'&_from='+(this.env.action ? this.env.action : '');
+    var lock = false,
+      add_url = '&_target_mbox='+urlencode(mbox)+'&_from='+(this.env.action ? this.env.action : '');
 
     // show wait message
     if (this.env.action == 'show') {
@@ -2729,24 +2744,23 @@
 
   this.expunge_mailbox = function(mbox)
   {
-    var lock = false;
-    var add_url = '';
+    var lock = false,
+      url = '_mbox='+urlencode(mbox);
 
     // lock interface if it's the active mailbox
     if (mbox == this.env.mailbox) {
        lock = this.set_busy(true, 'loading');
-       add_url = '&_reload=1';
+       url += '&_reload=1';
      }
 
     // send request to server
-    var url = '_mbox='+urlencode(mbox);
-    this.http_post('expunge', url+add_url, lock);
+    this.http_post('expunge', url, lock);
   };
 
   this.purge_mailbox = function(mbox)
   {
-    var lock = false;
-    var add_url = '';
+    var lock = false,
+      url = '_mbox='+urlencode(mbox);
 
     if (!confirm(this.get_label('purgefolderconfirm')))
       return false;
@@ -2754,13 +2768,11 @@
     // lock interface if it's the active mailbox
     if (mbox == this.env.mailbox) {
        lock = this.set_busy(true, 'loading');
-       add_url = '&_reload=1';
+       url += '&_reload=1';
      }
 
     // send request to server
-    var url = '_mbox='+urlencode(mbox);
-    this.http_post('purge', url+add_url, lock);
-    return true;
+    this.http_post('purge', url, lock);
   };
 
   // test if purge command is allowed
@@ -2807,7 +2819,7 @@
       input_subject = $("input[name='_subject']"),
       input_message = $("[name='_message']").get(0),
       html_mode = $("input[name='_is_html']").val() == '1',
-      ac_fields = ['cc', 'bcc', 'replyto', 'mailreplyto', 'mailfollowupto'];
+      ac_fields = ['cc', 'bcc', 'replyto', 'followupto'];
 
     // init live search events
     this.init_address_input_events(input_to);
@@ -3974,16 +3986,12 @@
   this.init_subscription_list = function()
   {
     var p = this;
-    this.subscription_list = new rcube_list_widget(this.gui_objects.subscriptionlist, {multiselect:false, draggable:true, keyboard:false, toggleselect:true});
+    this.subscription_list = new rcube_list_widget(this.gui_objects.subscriptionlist,
+      {multiselect:false, draggable:true, keyboard:false, toggleselect:true});
     this.subscription_list.addEventListener('select', function(o){ p.subscription_select(o); });
     this.subscription_list.addEventListener('dragstart', function(o){ p.drag_active = true; });
     this.subscription_list.addEventListener('dragend', function(o){ p.subscription_move_folder(o); });
     this.subscription_list.row_init = function (row) {
-      var anchors = row.obj.getElementsByTagName('a');
-      if (anchors[0])
-        anchors[0].onclick = function() { p.command('rename-folder', row.id); return false; };
-      if (anchors[1])
-        anchors[1].onclick = function() { p.command('delete-folder', row.id); return false; };
       row.obj.onmouseover = function() { p.focus_subscription(row.id); };
       row.obj.onmouseout = function() { p.unfocus_subscription(row.id); };
     };
@@ -4060,18 +4068,18 @@
       delim = RegExp.escape(this.env.delimiter),
       reg = RegExp('['+delim+']?[^'+delim+']+$');
 
-    if (this.drag_active && this.env.folder && (row = document.getElementById(id)))
+    if (this.drag_active && this.env.mailbox && (row = document.getElementById(id)))
       if (this.env.subscriptionrows[id] &&
           (folder = this.env.subscriptionrows[id][0])) {
         if (this.check_droptarget(folder) &&
-            !this.env.subscriptionrows[this.get_folder_row_id(this.env.folder)][2] &&
-            (folder != this.env.folder.replace(reg, '')) &&
-            (!folder.match(new RegExp('^'+RegExp.escape(this.env.folder+this.env.delimiter))))) {
+            !this.env.subscriptionrows[this.get_folder_row_id(this.env.mailbox)][2] &&
+            (folder != this.env.mailbox.replace(reg, '')) &&
+            (!folder.match(new RegExp('^'+RegExp.escape(this.env.mailbox+this.env.delimiter))))) {
           this.set_env('dstfolder', folder);
           $(row).addClass('droptarget');
         }
       }
-      else if (this.env.folder.match(new RegExp(delim))) {
+      else if (this.env.mailbox.match(new RegExp(delim))) {
         this.set_env('dstfolder', this.env.delimiter);
         $(this.subscription_list.frame).addClass('droptarget');
       }
@@ -4091,15 +4099,19 @@
   this.subscription_select = function(list)
   {
     var id, folder;
-    if ((id = list.get_single_selection()) &&
-        this.env.subscriptionrows['rcmrow'+id] &&
-        (folder = this.env.subscriptionrows['rcmrow'+id][0]))
-      this.set_env('folder', folder);
-    else
-      this.set_env('folder', null);
 
-    if (this.gui_objects.createfolderhint)
-      $(this.gui_objects.createfolderhint).html(this.env.folder ? this.get_label('addsubfolderhint') : '');
+    if (list && (id = list.get_single_selection()) &&
+        (folder = this.env.subscriptionrows['rcmrow'+id])
+    ) {
+      this.set_env('mailbox', folder[0]);
+      this.show_folder(folder[0]);
+      this.enable_command('delete-folder', !folder[2]);
+    }
+    else {
+      this.env.mailbox = null;
+      this.show_contentframe(false);
+      this.enable_command('delete-folder', 'purge', false);
+    }
   };
 
   this.subscription_move_folder = function(list)
@@ -4107,129 +4119,35 @@
     var delim = RegExp.escape(this.env.delimiter),
       reg = RegExp('['+delim+']?[^'+delim+']+$');
 
-    if (this.env.folder && this.env.dstfolder && (this.env.dstfolder != this.env.folder) &&
-        (this.env.dstfolder != this.env.folder.replace(reg, ''))) {
-      var reg = new RegExp('[^'+delim+']*['+delim+']', 'g');
-      var basename = this.env.folder.replace(reg, '');
-      var newname = this.env.dstfolder==this.env.delimiter ? basename : this.env.dstfolder+this.env.delimiter+basename;
+    if (this.env.mailbox && this.env.dstfolder && (this.env.dstfolder != this.env.mailbox) &&
+        (this.env.dstfolder != this.env.mailbox.replace(reg, ''))
+    ) {
+      reg = new RegExp('[^'+delim+']*['+delim+']', 'g');
+      var lock = this.set_busy(true, 'foldermoving'),
+        basename = this.env.mailbox.replace(reg, ''),
+        newname = this.env.dstfolder==this.env.delimiter ? basename : this.env.dstfolder+this.env.delimiter+basename;
 
-      var lock = this.set_busy(true, 'foldermoving');
-      this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.folder)+'&_folder_newname='+urlencode(newname), lock);
+      this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.mailbox)+'&_folder_newname='+urlencode(newname), lock);
     }
     this.drag_active = false;
     this.unfocus_subscription(this.get_folder_row_id(this.env.dstfolder));
   };
 
   // tell server to create and subscribe a new mailbox
-  this.create_folder = function(name)
+  this.create_folder = function()
   {
-    if (this.edit_folder)
-      this.reset_folder_rename();
-
-    var form;
-    if ((form = this.gui_objects.editform) && form.elements['_folder_name']) {
-      name = form.elements['_folder_name'].value;
-
-      if (name.indexOf(this.env.delimiter)>=0) {
-        alert(this.get_label('forbiddencharacter')+' ('+this.env.delimiter+')');
-        return false;
-      }
-
-      if (this.env.folder && name != '')
-        name = this.env.folder+this.env.delimiter+name;
-
-      var lock = this.set_busy(true, 'foldercreating');
-      this.http_post('create-folder', '_name='+urlencode(name), lock);
-    }
-    else if (form.elements['_folder_name'])
-      form.elements['_folder_name'].focus();
-  };
-
-  // start renaming the mailbox name.
-  // this will replace the name string with an input field
-  this.rename_folder = function(id)
-  {
-    var temp, row, form;
-
-    // reset current renaming
-    if (temp = this.edit_folder) {
-      this.reset_folder_rename();
-      if (temp == id)
-        return;
-    }
-
-    if (id && this.env.subscriptionrows[id] && (row = document.getElementById(id))) {
-      var delim = RegExp.escape(this.env.delimiter),
-        reg = new RegExp('.*['+delim+']');
-
-      this.name_input = document.createElement('input');
-      this.name_input.type = 'text';
-      this.name_input.value = this.env.subscriptionrows[id][0].replace(reg, '');
-
-      reg = new RegExp('['+delim+']?[^'+delim+']+$');
-      this.name_input.__parent = this.env.subscriptionrows[id][0].replace(reg, '');
-      this.name_input.onkeydown = function(e){ rcmail.name_input_keydown(e); };
-
-      row.cells[0].replaceChild(this.name_input, row.cells[0].firstChild);
-      this.edit_folder = id;
-      this.name_input.select();
-
-      if (form = this.gui_objects.editform)
-        form.onsubmit = function(){ return false; };
-    }
-  };
-
-  // remove the input field and write the current mailbox name to the table cell
-  this.reset_folder_rename = function()
-  {
-    var cell = this.name_input ? this.name_input.parentNode : null;
-
-    if (cell && this.edit_folder && this.env.subscriptionrows[this.edit_folder])
-      $(cell).html(this.env.subscriptionrows[this.edit_folder][1]);
-
-    this.edit_folder = null;
-  };
-
-  // handler for keyboard events on the input field
-  this.name_input_keydown = function(e)
-  {
-    var key = rcube_event.get_keycode(e);
-
-    // enter
-    if (key==13) {
-      var newname = this.name_input ? this.name_input.value : null;
-      if (this.edit_folder && newname) {
-        if (newname.indexOf(this.env.delimiter)>=0) {
-          alert(this.get_label('forbiddencharacter')+' ('+this.env.delimiter+')');
-          return false;
-        }
-
-        if (this.name_input.__parent)
-          newname = this.name_input.__parent + this.env.delimiter + newname;
-
-        var lock = this.set_busy(true, 'folderrenaming');
-        this.http_post('rename-folder', '_folder_oldname='+urlencode(this.env.subscriptionrows[this.edit_folder][0])+'&_folder_newname='+urlencode(newname), lock);
-      }
-    }
-    // escape
-    else if (key==27)
-      this.reset_folder_rename();
+    this.show_folder('', this.env.mailbox);
   };
 
   // delete a specific mailbox with all its messages
-  this.delete_folder = function(id)
+  this.delete_folder = function(name)
   {
-    var folder = this.env.subscriptionrows[id][0];
-
-    if (this.edit_folder)
-      this.reset_folder_rename();
+    var id = this.get_folder_row_id(name ? name : this.env.mailbox),
+      folder = this.env.subscriptionrows[id][0];
 
     if (folder && confirm(this.get_label('deletefolderconfirm'))) {
       var lock = this.set_busy(true, 'folderdeleting');
-      this.http_post('delete-folder', '_mboxes='+urlencode(folder), lock);
-      this.set_env('folder', null);
-
-      $(this.gui_objects.createfolderhint).html('');
+      this.http_post('delete-folder', '_mbox='+urlencode(folder), lock);
     }
   };
 
@@ -4286,18 +4204,8 @@
       // set messages count to zero
       row.cells[1].innerHTML = '*';
 
-      // update subscription/threading checkboxes
+      // update subscription checkbox
       $('input[name="_subscribed[]"]', row).val(name).attr('checked', true);
-      $('input[name="_threaded[]"]', row).val(name).attr('checked', false);
-
-      var elem;
-      // add new folder to rename-folder list and clear input field
-      if (form = this.gui_objects.editform) {
-        if (elem = form.elements['_folder_oldname'])
-          elem.options[elem.options.length] = new Option(name, name);
-        if (elem = form.elements['_folder_name'])
-          elem.value = ''; 
-      }
     }
 
     this.init_subscription_list();
@@ -4311,72 +4219,37 @@
   // replace an existing table row with a new folder line
   this.replace_folder_row = function(oldfolder, newfolder, display_name, before)
   {
-    var form, elm,
-      id = this.get_folder_row_id(oldfolder),
+    var id = this.get_folder_row_id(oldfolder),
       row = document.getElementById(id);
 
     // replace an existing table row (if found)
     this.add_folder_row(newfolder, display_name, row, before);
-
-    // rename folder in rename-folder dropdown
-    if ((form = this.gui_objects.editform) && (elm = form.elements['_folder_oldname'])) {
-      for (var i=0; i<elm.options.length; i++) {
-        if (elm.options[i].value == oldfolder) {
-          elm.options[i].text = display_name;
-          elm.options[i].value = newfolder;
-          break;
-        }
-      }
-
-      form.elements['_folder_newname'].value = '';
-    }
   };
 
   // remove the table row of a specific mailbox from the table
   // (the row will not be removed, just hidden)
   this.remove_folder_row = function(folder)
   {
-    var form, elm, row, id = this.get_folder_row_id(folder);
+    var row, id = this.get_folder_row_id(folder);
 
     if (id && (row = document.getElementById(id)))
       row.style.display = 'none';
-
-    // remove folder from rename-folder list
-    if ((form = this.gui_objects.editform) && (elm = form.elements['_folder_oldname'])) {
-      for (var i=0; i<elm.options.length; i++) {
-        if (elm.options[i].value == folder) {
-          elm.options[i] = null;
-          break;
-        }
-      }
-    }
-
-    if (form && (elm = form.elements['_folder_newname']))
-      elm.value = '';
   };
 
   this.subscribe = function(folder)
   {
-    if (folder)
-      this.http_post('subscribe', '_mbox='+urlencode(folder));
+    if (folder) {
+      var lock = this.display_message(this.get_label('foldersubscribing'), 'loading');
+      this.http_post('subscribe', '_mbox='+urlencode(folder), lock);
+    }
   };
 
   this.unsubscribe = function(folder)
   {
-    if (folder)
-      this.http_post('unsubscribe', '_mbox='+urlencode(folder));
-  };
-
-  this.enable_threading = function(folder)
-  {
-    if (folder)
-      this.http_post('enable-threading', '_mbox='+urlencode(folder));
-  };
-
-  this.disable_threading = function(folder)
-  {
-    if (folder)
-      this.http_post('disable-threading', '_mbox='+urlencode(folder));
+    if (folder) {
+      var lock = this.display_message(this.get_label('folderunsubscribing'), 'loading');
+      this.http_post('unsubscribe', '_mbox='+urlencode(folder), lock);
+    }
   };
 
   // helper method to find a specific mailbox row ID
@@ -4395,7 +4268,7 @@
     var cell, td,
       new_row = document.createElement('tr');
 
-    for(var n=0; n<row.cells.length; n++) {
+    for (var n=0; n<row.cells.length; n++) {
       cell = row.cells[n];
       td = document.createElement('td');
 
@@ -4409,6 +4282,42 @@
     }
 
     return new_row;
+  };
+
+  // when user select a folder in manager
+  this.show_folder = function(folder, path, force)
+  {
+    var target = window,
+      url = '&_action=edit-folder&_mbox='+urlencode(folder);
+
+    if (path)
+      url += '&_path='+urlencode(path);
+
+    if (this.env.contentframe && window.frames && window.frames[this.env.contentframe]) {
+      target = window.frames[this.env.contentframe];
+      url += '&_framed=1';
+    }
+
+    if (String(target.location.href).indexOf(url) >= 0 && !force) {
+      this.show_contentframe(true);
+    }
+    else {
+      if (!this.env.frame_lock) {
+        (parent.rcmail ? parent.rcmail : this).env.frame_lock = this.set_busy(true, 'loading');
+      }
+      target.location.href = this.env.comm_path+url;
+    }
+  };
+
+  this.folder_size = function(folder)
+  {
+    var lock = this.set_busy(true, 'loading');
+    this.http_post('folder-size', '_mbox='+urlencode(folder), lock);
+  };
+
+  this.folder_size_update = function(size)
+  {
+    $('#folder-size').replaceWith(size);
   };
 
 
@@ -4599,7 +4508,7 @@
   this.display_message = function(msg, type)
   {
     // pass command to parent window
-    if (this.env.framed && parent.rcmail)
+    if (this.is_framed())
       return parent.rcmail.display_message(msg, type);
 
     if (!this.gui_objects.message) {
@@ -4647,7 +4556,7 @@
   this.hide_message = function(obj, fade)
   {
     // pass command to parent window
-    if (this.env.framed && parent.rcmail)
+    if (this.is_framed())
       return parent.rcmail.hide_message(obj, fade);
 
     if (typeof(obj) == 'object') {
diff --git a/program/js/editor.js b/program/js/editor.js
index 2ee4ac1..3845e3d 100644
--- a/program/js/editor.js
+++ b/program/js/editor.js
@@ -71,8 +71,10 @@
   if (elem && elem.type == 'select-one') {
     rcmail.change_identity(elem);
     // Focus previously focused element
-    if (fe && fe.id != rcmail.env.composebody)
+    if (fe && fe.id != rcmail.env.composebody) {
+      window.focus(); // for WebKit (#1486674)
       fe.focus();
+    }
   }
 
   // set tabIndex and set focus to element that was focused before
diff --git a/program/js/list.js b/program/js/list.js
index 406590b..ae4890f 100644
--- a/program/js/list.js
+++ b/program/js/list.js
@@ -110,7 +110,7 @@
     // set eventhandlers to table row
     row.onmousedown = function(e){ return self.drag_row(e, this.uid); };
     row.onmouseup = function(e){ return self.click_row(e, this.uid); };
-    
+
     if (bw.iphone || bw.ipad) {
       row.addEventListener('touchstart', function(e) {
         if (e.touches.length == 1) {
@@ -223,7 +223,8 @@
   }
 
   // Un-focus already focused elements
-  $('*:focus').blur();
+  $('*:focus', window).blur();
+  $('iframe').each(function() { this.blur(); });
 
   if (e || (e = window.event))
     rcube_event.cancel(e);
@@ -699,7 +700,7 @@
   var prev_row = this.get_prev_row();
   var new_row = (next_row) ? next_row : prev_row;
   if (new_row)
-    this.select_row(new_row.uid, false, false);  
+    this.select_row(new_row.uid, false, false);
 },
 
 
@@ -728,7 +729,7 @@
   if (row && mod_key) {
     this.shift_select(row, mod_key);
     this.triggerEvent('select');
-    this.scrollto(row);    
+    this.scrollto(row);
   }
   else if (row)
     this.select(row);
diff --git a/program/lib/Mail/mime.php b/program/lib/Mail/mime.php
index 481764a..c5dd305 100644
--- a/program/lib/Mail/mime.php
+++ b/program/lib/Mail/mime.php
@@ -365,30 +365,28 @@
      * Adds a file to the list of attachments.
      *
      * @param string $file        The file name of the file to attach
-     *                            OR the file contents itself
+     *                            or the file contents itself
      * @param string $c_type      The content type
      * @param string $name        The filename of the attachment
      *                            Only use if $file is the contents
-     * @param bool   $isfile      Whether $file is a filename or not
-     *                            Defaults to true
-     * @param string $encoding    The type of encoding to use.
-     *                            Defaults to base64.
-     *                            Possible values: 7bit, 8bit, base64, 
-     *                            or quoted-printable.
+     * @param bool   $isfile      Whether $file is a filename or not. Defaults to true
+     * @param string $encoding    The type of encoding to use. Defaults to base64.
+     *                            Possible values: 7bit, 8bit, base64 or quoted-printable.
      * @param string $disposition The content-disposition of this file
      *                            Defaults to attachment.
      *                            Possible values: attachment, inline.
-     * @param string $charset     The character set used in the filename
-     *                            of this attachment.
+     * @param string $charset     The character set of attachment's content.
      * @param string $language    The language of the attachment
      * @param string $location    The RFC 2557.4 location of the attachment
-     * @param string $n_encoding  Encoding for attachment name (Content-Type)
+     * @param string $n_encoding  Encoding of the attachment's name in Content-Type
      *                            By default filenames are encoded using RFC2231 method
      *                            Here you can set RFC2047 encoding (quoted-printable
      *                            or base64) instead
-     * @param string $f_encoding  Encoding for attachment filename (Content-Disposition)
-     *                            See $n_encoding description
+     * @param string $f_encoding  Encoding of the attachment's filename
+     *                            in Content-Disposition header.
      * @param string $description Content-Description header
+     * @param string $h_charset   The character set of the headers e.g. filename
+     *                            If not specified, $charset will be used
      *
      * @return mixed              True on success or PEAR_Error object
      * @access public
@@ -404,7 +402,8 @@
         $location    = '',
         $n_encoding  = null,
         $f_encoding  = null,
-        $description = ''
+        $description = '',
+        $h_charset   = null
     ) {
         $bodyfile = null;
 
@@ -437,14 +436,15 @@
             'body_file'   => $bodyfile,
             'name'        => $filename,
             'c_type'      => $c_type,
-            'encoding'    => $encoding,
             'charset'     => $charset,
+            'encoding'    => $encoding,
             'language'    => $language,
             'location'    => $location,
             'disposition' => $disposition,
             'description' => $description,
             'name_encoding'     => $n_encoding,
-            'filename_encoding' => $f_encoding
+            'filename_encoding' => $f_encoding,
+            'headers_charset'   => $h_charset,
         );
 
         return true;
@@ -621,7 +621,7 @@
         $params['content_type'] = $value['c_type'];
         $params['encoding']     = 'base64';
         $params['disposition']  = 'inline';
-        $params['dfilename']    = $value['name'];
+        $params['filename']     = $value['name'];
         $params['cid']          = $value['cid'];
         $params['body_file']    = $value['body_file'];
         $params['eol']          = $this->_build_params['eol'];
@@ -650,19 +650,25 @@
     function &_addAttachmentPart(&$obj, $value)
     {
         $params['eol']          = $this->_build_params['eol'];
-        $params['dfilename']    = $value['name'];
+        $params['filename']     = $value['name'];
         $params['encoding']     = $value['encoding'];
         $params['content_type'] = $value['c_type'];
         $params['body_file']    = $value['body_file'];
         $params['disposition']  = isset($value['disposition']) ? 
                                   $value['disposition'] : 'attachment';
-        if ($value['charset']) {
+
+        // content charset
+        if (!empty($value['charset'])) {
             $params['charset'] = $value['charset'];
         }
-        if ($value['language']) {
+        // headers charset (filename, description)
+        if (!empty($value['headers_charset'])) {
+            $params['headers_charset'] = $value['headers_charset'];
+        }
+        if (!empty($value['language'])) {
             $params['language'] = $value['language'];
         }
-        if ($value['location']) {
+        if (!empty($value['location'])) {
             $params['location'] = $value['location'];
         }
         if (!empty($value['name_encoding'])) {
@@ -1387,18 +1393,23 @@
 
         if ($headers['Content-Type'] == 'text/plain') {
             // single-part message: add charset and encoding
+            $charset = 'charset=' . $this->_build_params['text_charset'];
+            // place charset parameter in the same line, if possible
+            // 26 = strlen("Content-Type: text/plain; ")
             $headers['Content-Type']
-                .= ";$eol charset=" . $this->_build_params['text_charset'];
+                .= (strlen($charset) + 26 <= 76) ? "; $charset" : ";$eol $charset";
             $headers['Content-Transfer-Encoding']
                 = $this->_build_params['text_encoding'];
         } else if ($headers['Content-Type'] == 'text/html') {
             // single-part message: add charset and encoding
+            $charset = 'charset=' . $this->_build_params['html_charset'];
+            // place charset parameter in the same line, if possible
             $headers['Content-Type']
-                .= ";$eol charset=" . $this->_build_params['html_charset'];
+                .= (strlen($charset) + 25 <= 76) ? "; $charset" : ";$eol $charset";
             $headers['Content-Transfer-Encoding']
                 = $this->_build_params['html_encoding'];
         } else {
-            // multipart message: add charset and boundary
+            // multipart message: and boundary
             if (!empty($this->_build_params['boundary'])) {
                 $boundary = $this->_build_params['boundary'];
             } else if (!empty($this->_headers['Content-Type'])
diff --git a/program/lib/Mail/mimePart.php b/program/lib/Mail/mimePart.php
index 55ea7a6..60b3601 100644
--- a/program/lib/Mail/mimePart.php
+++ b/program/lib/Mail/mimePart.php
@@ -141,17 +141,19 @@
     *     content_type      - The content type for this part eg multipart/mixed
     *     encoding          - The encoding to use, 7bit, 8bit,
     *                         base64, or quoted-printable
+    *     charset           - Content character set
     *     cid               - Content ID to apply
     *     disposition       - Content disposition, inline or attachment
     *     dfilename         - Filename parameter for content disposition
     *     description       - Content description
-    *     charset           - Character set to use
-    *     name_encoding     - Encoding for attachment name (Content-Type)
+    *     name_encoding     - Encoding of the attachment name (Content-Type)
     *                         By default filenames are encoded using RFC2231
     *                         Here you can set RFC2047 encoding (quoted-printable
     *                         or base64) instead
-    *     filename_encoding - Encoding for attachment filename (Content-Disposition)
+    *     filename_encoding - Encoding of the attachment filename (Content-Disposition)
     *                         See 'name_encoding'
+    *     headers_charset   - Charset of the headers e.g. filename, description.
+    *                         If not set, 'charset' will be used
     *     eol               - End of line sequence. Default: "\r\n"
     *     body_file         - Location of file with part's body (instead of $body)
     *
@@ -165,14 +167,8 @@
             $this->_eol = MAIL_MIMEPART_CRLF;
         }
 
-        $c_type = array();
-        $c_disp = array();
         foreach ($params as $key => $value) {
             switch ($key) {
-            case 'content_type':
-                $c_type['type'] = $value;
-                break;
-
             case 'encoding':
                 $this->_encoding = $value;
                 $headers['Content-Transfer-Encoding'] = $value;
@@ -180,29 +176,6 @@
 
             case 'cid':
                 $headers['Content-ID'] = '<' . $value . '>';
-                break;
-
-            case 'disposition':
-                $c_disp['disp'] = $value;
-                break;
-
-            case 'dfilename':
-                $c_disp['filename'] = $value;
-                $c_type['name'] = $value;
-                break;
-
-            case 'description':
-                $headers['Content-Description'] = $value;
-                break;
-
-            case 'charset':
-                $c_type['charset'] = $value;
-                $c_disp['charset'] = $value;
-                break;
-
-            case 'language':
-                $c_type['language'] = $value;
-                $c_disp['language'] = $value;
                 break;
 
             case 'location':
@@ -216,53 +189,56 @@
         }
 
         // Default content-type
-        if (empty($c_type['type'])) {
-            $c_type['type'] = 'text/plain';
+        if (empty($params['content_type'])) {
+            $params['content_type'] = 'text/plain';
         }
 
         // Content-Type
-        if (!empty($c_type['type'])) {
-            $headers['Content-Type'] = $c_type['type'];
-            if (!empty($c_type['charset'])) {
-                $charset = "charset={$c_type['charset']}";
-                // place charset parameter in the same line, if possible
-                if ((strlen($headers['Content-Type']) + strlen($charset) + 16) <= 76) {
-                    $headers['Content-Type'] .= '; ';
-                } else {
-                    $headers['Content-Type'] .= ';' . $this->_eol . ' ';
-                }
-                $headers['Content-Type'] .= $charset;
+        $headers['Content-Type'] = $params['content_type'];
+        if (!empty($params['charset'])) {
+            $charset = "charset={$params['charset']}";
+            // place charset parameter in the same line, if possible
+            if ((strlen($headers['Content-Type']) + strlen($charset) + 16) <= 76) {
+                $headers['Content-Type'] .= '; ';
+            } else {
+                $headers['Content-Type'] .= ';' . $this->_eol . ' ';
             }
-            if (!empty($c_type['name'])) {
-                $headers['Content-Type'] .= ';' . $this->_eol;
-                $headers['Content-Type'] .= $this->_buildHeaderParam(
-                    'name', $c_type['name'],
-                    isset($c_type['charset']) ? $c_type['charset'] : 'US-ASCII',
-                    isset($c_type['language']) ? $c_type['language'] : null,
-                    isset($params['name_encoding']) ?  $params['name_encoding'] : null
-                );
+            $headers['Content-Type'] .= $charset;
+
+            // Default headers charset
+            if (!isset($params['headers_charset'])) {
+                $params['headers_charset'] = $params['charset'];
             }
+        }
+        if (!empty($params['filename'])) {
+            $headers['Content-Type'] .= ';' . $this->_eol;
+            $headers['Content-Type'] .= $this->_buildHeaderParam(
+                'name', $params['filename'],
+                !empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII',
+                !empty($params['language']) ? $params['language'] : null,
+                !empty($params['name_encoding']) ? $params['name_encoding'] : null
+            );
         }
 
         // Content-Disposition
-        if (!empty($c_disp['disp'])) {
-            $headers['Content-Disposition'] = $c_disp['disp'];
-            if (!empty($c_disp['filename'])) {
+        if (!empty($params['disposition'])) {
+            $headers['Content-Disposition'] = $params['disposition'];
+            if (!empty($params['filename'])) {
                 $headers['Content-Disposition'] .= ';' . $this->_eol;
                 $headers['Content-Disposition'] .= $this->_buildHeaderParam(
-                    'filename', $c_disp['filename'],
-                    isset($c_disp['charset']) ? $c_disp['charset'] : 'US-ASCII',
-                    isset($c_disp['language']) ? $c_disp['language'] : null,
-                    isset($params['filename_encoding']) ?  $params['filename_encoding'] : null
+                    'filename', $params['filename'],
+                    !empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII',
+                    !empty($params['language']) ? $params['language'] : null,
+                    !empty($params['filename_encoding']) ? $params['filename_encoding'] : null
                 );
             }
         }
 
-        if (!empty($headers['Content-Description'])) {
+        if (!empty($params['description'])) {
             $headers['Content-Description'] = $this->encodeHeader(
-                'Content-Description', $headers['Content-Description'],
-                isset($c_type['charset']) ? $c_type['charset'] : 'US-ASCII',
-                isset($params['name_encoding']) ?  $params['name_encoding'] : 'quoted-printable',
+                'Content-Description', $params['description'],
+                !empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII',
+                !empty($params['name_encoding']) ? $params['name_encoding'] : 'quoted-printable',
                 $this->_eol
             );
         }
diff --git a/program/localization/ar_SA/labels.inc b/program/localization/ar_SA/labels.inc
index f54bb52..c2534f1 100644
--- a/program/localization/ar_SA/labels.inc
+++ b/program/localization/ar_SA/labels.inc
@@ -38,14 +38,18 @@
 $labels['cc'] = 'نسخة';
 $labels['bcc'] = 'نسخة مخفية';
 $labels['replyto'] = 'الرد إلى';
+$labels['followupto'] = 'Mail-Followup-To';
 $labels['date'] = 'التاريخ';
 $labels['size'] = 'الحجم';
 $labels['priority'] = 'الأولوية';
 $labels['organization'] = 'المنظمة';
+$labels['readstatus'] = 'حالة القراءة';
 $labels['reply-to'] = 'الرد إلى';
+$labels['mail-reply-to'] = 'Mail-Reply-To';
+$labels['mail-followup-to'] = 'Mail-Followup-To';
 $labels['mailboxlist'] = 'المجلدات';
-$labels['messagesfromto'] = 'الرسالة $from إلى $to من $count';
-$labels['threadsfromto'] = 'المراسلات $from إلى $to من $count';
+$labels['messagesfromto'] = 'الرسالة $from إلى $to من مجموع $count';
+$labels['threadsfromto'] = 'جهات الإتصال $from إلى $to من مجموع $count';
 $labels['messagenrof'] = 'الرسالة $nr من $count';
 $labels['copy'] = 'نسخ';
 $labels['move'] = 'نقل';
@@ -54,13 +58,13 @@
 $labels['filename'] = 'اسم الملف';
 $labels['filesize'] = 'حجم الملف';
 $labels['addtoaddressbook'] = 'إضافة إلى دفتر العناوين';
-$labels['sun'] = 'أح';
-$labels['mon'] = 'إث';
-$labels['tue'] = 'ثل';
-$labels['wed'] = 'أر';
-$labels['thu'] = 'خم';
-$labels['fri'] = 'جم';
-$labels['sat'] = 'سب';
+$labels['sun'] = 'أحد';
+$labels['mon'] = 'إثنين';
+$labels['tue'] = 'ثلاثاء';
+$labels['wed'] = 'أربعاء';
+$labels['thu'] = 'خميس';
+$labels['fri'] = 'جمعة';
+$labels['sat'] = 'سبت';
 $labels['sunday'] = 'الأحد';
 $labels['monday'] = 'الإثنين';
 $labels['tuesday'] = 'الثلاثاء';
@@ -68,22 +72,22 @@
 $labels['thursday'] = 'الخميس';
 $labels['friday'] = 'الجمعة';
 $labels['saturday'] = 'السبت';
-$labels['jan'] = 'ينا';
-$labels['feb'] = 'فبر';
-$labels['mar'] = 'مار';
-$labels['apr'] = 'أبر';
-$labels['may'] = 'ماي';
-$labels['jun'] = 'يون';
-$labels['jul'] = 'يول';
-$labels['aug'] = 'أغس';
-$labels['sep'] = 'سبت';
-$labels['oct'] = 'أكت';
-$labels['nov'] = 'نوف';
-$labels['dec'] = 'ديس';
+$labels['jan'] = 'يناير';
+$labels['feb'] = 'فبراير';
+$labels['mar'] = 'مارس';
+$labels['apr'] = 'أبريل';
+$labels['may'] = 'مايو';
+$labels['jun'] = 'يونيو';
+$labels['jul'] = 'يوليو';
+$labels['aug'] = 'أغسطس';
+$labels['sep'] = 'سبتمبر';
+$labels['oct'] = 'أكتوبر';
+$labels['nov'] = 'نوفمبر';
+$labels['dec'] = 'ديسمبر';
 $labels['longjan'] = 'يناير';
 $labels['longfeb'] = 'فبراير';
 $labels['longmar'] = 'مارس';
-$labels['longapr'] = 'أبريل';
+$labels['longapr'] = 'إبريل';
 $labels['longmay'] = 'مايو';
 $labels['longjun'] = 'يونيو';
 $labels['longjul'] = 'يوليو';
@@ -97,6 +101,8 @@
 $labels['writenewmessage'] = 'إنشاء رسالة جديدة';
 $labels['replytomessage'] = 'الرد على الرسالة';
 $labels['replytoallmessage'] = 'الرد على المرسل وجميع مستقبلي الرسالة';
+$labels['replyall'] = 'الرد على الجميع';
+$labels['replylist'] = 'الرد على القائمة';
 $labels['forwardmessage'] = 'تمرير الرسالة';
 $labels['deletemessage'] = 'حذف الرسالة إلى المهملات';
 $labels['movemessagetotrash'] = 'انقل الرسالة إلى سلة المهملات';
@@ -169,6 +175,8 @@
 $labels['charset'] = 'مجموعة المحارف';
 $labels['editortype'] = 'نوع المُحرّر';
 $labels['returnreceipt'] = 'ايصال استلام';
+$labels['dsn'] = 'تنويه حالة التوصيل';
+$labels['editidents'] = 'تعديل الهويات';
 $labels['checkspelling'] = 'التدقيق الإملائي';
 $labels['resumeediting'] = 'متابعة التحرير';
 $labels['revertto'] = 'استعادة إلى';
@@ -192,6 +200,7 @@
 $labels['addcc'] = 'أضف CC';
 $labels['addbcc'] = 'أضف BCC';
 $labels['addreplyto'] = 'أضيف Reply-To';
+$labels['addfollowupto'] = 'إضافة Mail-Followup-To';
 $labels['mdnrequest'] = 'طلب المرسل إعلامه عند قراءتك لرسالته. هل تود إعلام المرسل؟';
 $labels['receiptread'] = 'إيصال الاستلام )بالقراءة)';
 $labels['yourmessage'] = 'هذا إيصال بقراءة رسالتك';
@@ -203,6 +212,7 @@
 $labels['addcontact'] = 'إضافة المراسل المحدد إلى دفتر عناويني';
 $labels['editcontact'] = 'تحرير بيانات المراسل';
 $labels['contacts'] = 'المراسلين';
+$labels['contactproperties'] = 'خواص جهة الإتصال';
 $labels['edit'] = 'تحرير';
 $labels['cancel'] = 'إلغاء';
 $labels['save'] = 'حفظ';
@@ -246,33 +256,36 @@
 $labels['autodetect'] = 'آلي';
 $labels['language'] = 'اللغة';
 $labels['timezone'] = 'المنطقة الزمنية';
-$labels['pagesize'] = 'أسطر في الصفحة';
+$labels['pagesize'] = 'عدد الرسائل في الصفحة';
 $labels['signature'] = 'التوقيع';
 $labels['dstactive'] = 'التوقيت الصيفي';
 $labels['htmleditor'] = 'إنشاء رسائل بنسق HTML';
+$labels['htmlonreply'] = 'حال الرد على الرسائل بصيغة HTML فقط';
 $labels['htmlsignature'] = 'توقيع HTML';
 $labels['previewpane'] = 'إظهار قسم المعاينة';
 $labels['skin'] = 'شكل الواجهة';
-$labels['logoutclear'] = 'أفرغ المحذوفات عند الخروج';
-$labels['logoutcompact'] = 'اضغط الوارد عن الخروج';
+$labels['logoutclear'] = 'إفراغ سلة المحذوفات عند الخروج';
+$labels['logoutcompact'] = 'ضغط صندوق الوارد عن الخروج';
 $labels['uisettings'] = 'واجهة المستخدم';
 $labels['serversettings'] = 'إعدادات الخادم';
 $labels['mailboxview'] = 'مظهر صندوق البريد';
-$labels['mdnrequests'] = 'تنويهات المُرسِل';
+$labels['mdnrequests'] = 'عند طلب إشعار استلام';
 $labels['askuser'] = 'اسأل المستخدم';
-$labels['autosend'] = 'أأرسلها تلقائياً';
+$labels['autosend'] = 'أرسلها تلقائياً';
+$labels['autosendknown'] = 'أرسل إشعار استلام إلى جهات اتصالي، وإلا اسألني';
+$labels['autosendknownignore'] = 'أرسل إشعار استلام إلى جهات اتصالي، وإلا تجاهل الأمر';
 $labels['ignore'] = 'تجاهلها';
-$labels['readwhendeleted'] = 'حدد الرسالة كمقروءة عند حذفها';
-$labels['flagfordeletion'] = 'ضع علامة على الرسالة لحذفها بدلاً من حذفها';
+$labels['readwhendeleted'] = 'تحديد الرسالة كمقروءة عند حذفها';
+$labels['flagfordeletion'] = 'وضع علامة على الرسالة لحذفها بدلاً من حذفها';
 $labels['skipdeleted'] = 'لا تظهر الرسائل المحذوفة';
 $labels['deletealways'] = 'حذف الرسائل مباشرة، إن تعذر نقلها إلى المهملات';
 $labels['showremoteimages'] = 'إظهار الصور الخارجية المدمجة';
 $labels['fromknownsenders'] = 'للمرسلين المعلومين';
 $labels['always'] = 'دائماً';
-$labels['showinlineimages'] = 'أظهر الصّور المرفقة أسفل الرسالة';
+$labels['showinlineimages'] = 'إظهار الصّور المرفقة أسفل الرسالة';
 $labels['autosavedraft'] = 'حفظ المسودة تلقائياً';
 $labels['everynminutes'] = 'كل $n دقيقة';
-$labels['keepalive'] = 'تحقق من وجود رسائل جديدة عند';
+$labels['keepalive'] = 'التحقق من وجود رسائل جديدة عند';
 $labels['never'] = 'أبداً';
 $labels['immediately'] = 'حالاً';
 $labels['messagesdisplaying'] = 'إظهار الرسائل';
@@ -283,7 +296,7 @@
 $labels['2047folding'] = 'RFC 2047 بأكملها (غيرها)';
 $labels['force7bit'] = 'استخدام ترميز MIME للحروف ذات الثمانية بتّات';
 $labels['advancedoptions'] = 'خيارات متقدّمة';
-$labels['focusonnewmessage'] = 'وجّه نافذة المتصفح عند وجود رسالة جديدة';
+$labels['focusonnewmessage'] = 'التركيز على نافذة المتصفح عند وجود رسالة جديدة';
 $labels['checkallfolders'] = 'التحقق من وجود رسائل جديدة في جميع المجلدات';
 $labels['displaynext'] = 'إظهار الرسالة التالية بعد حذف/نقل الرسالة الحالية';
 $labels['mainoptions'] = 'الخيارات الأساسية';
@@ -305,6 +318,9 @@
 $labels['insertsignature'] = 'إضافة التوقيع';
 $labels['previewpanemarkread'] = 'تحديد الرسائل المُعاينة كمقروءة';
 $labels['afternseconds'] = 'بعد $n ثواني';
+$labels['reqmdn'] = 'طلب إشعار استلام دائماً';
+$labels['reqdsn'] = 'طلب تنويه لحالة التوصيل دائماً';
+$labels['replysamefolder'] = 'وضع الردود في المجلد الذي يحوي الرسالة المردود عليها';
 $labels['folder'] = 'مجلد';
 $labels['folders'] = 'مجلدات';
 $labels['foldername'] = 'اسم المجلد';
@@ -312,11 +328,15 @@
 $labels['messagecount'] = 'الرسائل';
 $labels['create'] = 'أنشئ';
 $labels['createfolder'] = 'أنشئ مجلد جديد';
-$labels['rename'] = 'إعادة التسمية';
-$labels['renamefolder'] = 'إعادة تسمية المجلد';
-$labels['deletefolder'] = 'احذف المجلد';
 $labels['managefolders'] = 'إدارة المجلدات';
 $labels['specialfolders'] = 'المجلّدات المُميّزة';
+$labels['properties'] = 'الخواص';
+$labels['folderproperties'] = 'خواص المجلد';
+$labels['parentfolder'] = 'المجلد الحاوي';
+$labels['location'] = 'الموضع';
+$labels['info'] = 'معلومات';
+$labels['getfoldersize'] = 'اضغط لمعرفة حجم المجلد';
+$labels['changesubscription'] = 'اضغط لتغيير حالة الإشتراك';
 $labels['sortby'] = 'ترتيب بحسب';
 $labels['sortasc'] = 'ترتيب تصاعدي';
 $labels['sortdesc'] = 'ترتيب تنازلي';
@@ -325,7 +345,7 @@
 $labels['MB'] = 'م.ب';
 $labels['GB'] = 'ج.ب';
 $labels['unicode'] = 'يونيكود';
-$labels['english'] = 'الانجليزية';
+$labels['english'] = 'الإنجليزية';
 $labels['westerneuropean'] = 'الغرب أوروبية';
 $labels['easterneuropean'] = 'الشرق أوروبية';
 $labels['southeasterneuropean'] = 'الجنوب شرق أوروبية';
diff --git a/program/localization/ar_SA/messages.inc b/program/localization/ar_SA/messages.inc
index d9b9a90..2d15a21 100644
--- a/program/localization/ar_SA/messages.inc
+++ b/program/localization/ar_SA/messages.inc
@@ -23,9 +23,10 @@
 $messages['sessionerror'] = 'انتهت صلاحية الجلسة الحالية أو أنها غير صالحة';
 $messages['imaperror'] = 'فشل الاتصال بخادم IMAP';
 $messages['servererror'] = 'خطأ في الخادم!';
+$messages['servererrormsg'] = 'خطأ خادم: $msg';
 $messages['invalidrequest'] = 'طلب غير صالح! لم تحفظ أية بيانات.';
 $messages['nomessagesfound'] = 'لم يعثر على أية رسائل في صندوق البريد هذا';
-$messages['loggedout'] = 'لقد قمت بإنهاء هذه الجلسة بنجاح. إلى اللقاء!';
+$messages['loggedout'] = 'قمت بإنهاء هذه الجلسة بنجاح. إلى اللقاء!';
 $messages['mailboxempty'] = 'صندوق البريد فارغ';
 $messages['loading'] = 'جاري العمل...';
 $messages['uploading'] = 'جاري رفع الملف...';
@@ -54,10 +55,10 @@
 $messages['deletemessagesconfirm'] = 'هل تريد حذف الرسائل المحددة؟';
 $messages['deletefolderconfirm'] = 'هل تريد حقاً حذف هذا المجلد؟';
 $messages['purgefolderconfirm'] = 'هل تريد حقاً حذف جميع الرسائل في هذا المجلد؟';
-$messages['foldercreating'] = 'جاري إنشاء المجلد...';
 $messages['folderdeleting'] = 'جاري حذف المجلد...';
-$messages['folderrenaming'] = 'جاري إعادة تسمية المجلد...';
 $messages['foldermoving'] = 'جاري نقل المجلد...';
+$messages['foldersubscribing'] = 'الإشتراك في المجلد...';
+$messages['folderunsubscribing'] = 'إلغاء الإشتراك في المجد...';
 $messages['formincomplete'] = 'لم يتم تعبئة بيانات الاستمارة بالكامل';
 $messages['noemailwarning'] = 'الرجاء إدخال عنوان بريد إلكتروني صالح';
 $messages['nonamewarning'] = 'الرجاء إدخال اسم';
@@ -77,6 +78,9 @@
 $messages['checking'] = 'جاري التحقق...';
 $messages['nospellerrors'] = 'لم يعثر على أية أخطاء إملائية';
 $messages['folderdeleted'] = 'تم حذف المجلد بنجاح';
+$messages['foldersubscribed'] = 'تم الإشتراك في المجلد بنجاح';
+$messages['folderunsubscribed'] = 'تم إلغاء الإشتراك في المجلد بنجاح';
+$messages['folderpurged'] = 'تم تفريغ المجلد بنجاح';
 $messages['deletedsuccessfully'] = 'تم الحذف بنجاح';
 $messages['converting'] = 'إزالة التنسيق من الرسالة...';
 $messages['messageopenerror'] = 'تعذرت قراءة الرسالة من الخادم';
@@ -88,10 +92,11 @@
 $messages['errorsavingcontact'] = 'تعذر حفظ عنوان المراسل';
 $messages['movingmessage'] = 'جاري نقل الرسالة...';
 $messages['copyingmessage'] = 'جاري نسخ الرسالة...';
+$messages['deletingmessage'] = 'جاري حذف الرسائل...';
+$messages['markingmessage'] = 'جاري تحديد الرسائل...';
 $messages['receiptsent'] = 'أرسل إيصال الاستلام بنجاح';
 $messages['errorsendingreceipt'] = 'تعذر إرسال إيصال الاستلام';
 $messages['nodeletelastidentity'] = 'لا يمكن حذف هذا السجل حيث أنه الوحيد المتبقي.';
-$messages['addsubfolderhint'] = 'سيتم إنشاء هذا المجلد كمجلد فرعي للمحدد.';
 $messages['forbiddencharacter'] = 'اسم المجلّد يحتوي حروفاً ممنوعة';
 $messages['selectimportfile'] = 'رجاء اختر ملفاً لرفعه';
 $messages['addresswriterror'] = 'دفتر العناوين المحدد غير قابل للكتابة';
@@ -109,10 +114,25 @@
 $messages['smtpfromerror'] = 'خطأ SMTP ($code): تعذر تحديد المرسل "$from" ($msg)';
 $messages['smtptoerror'] = 'خطأ SMTP ($code): تعذرت إضافة المستلم "$to" ($msg)';
 $messages['smtprecipientserror'] = 'خطأ SMTP: تعذرت قراءة قائمة المرسل إليهم';
+$messages['smtpdsnerror'] = 'خطأ SMTP: لا يوجد دعم لتنويهات حالة التوصيل';
 $messages['smtperror'] = 'خطأ SMTP: $msg';
 $messages['emailformaterror'] = 'عنوان بريد إلكتروني غير صالح: $email';
 $messages['toomanyrecipients'] = 'عدد المرسل إليهم كبير. قلص العدد إلى $max.';
 $messages['maxgroupmembersreached'] = 'عدد أعضاء المجموعة أكثر من $max';
 $messages['internalerror'] = 'حدث خطأ داخلي. الرجاء المحاولة مرة أخرى';
+$messages['contactdelerror'] = 'تعذر حذف أسماء جهات الإتصال';
+$messages['contactdeleted'] = 'تم حذف أسماء جهات الإتصال بنجاح';
+$messages['groupdeleted'] = 'تم حذف المجموعة بنجاح';
+$messages['grouprenamed'] = 'تم تغيير إسم المجموعة بنجاح';
+$messages['groupcreated'] = 'تم إنشاء المجموعة بنجاح';
+$messages['messagedeleted'] = 'تم حذف الرسائل بنجاح';
+$messages['messagemoved'] = 'تم نقل الرسائل بنجاح';
+$messages['messagecopied'] = 'تم نسخ الرسائل بنجاح';
+$messages['messagemarked'] = 'تم تحديد الرسائل بنجاح';
+$messages['autocompletechars'] = 'إكتب $min أحرف على الأقل للحصول على التكملة التلقائية';
+$messages['namecannotbeempty'] = 'لا يمكن ترك الإسم فارغاً';
+$messages['nametoolong'] = 'الإسم طويل جداً';
+$messages['folderupdated'] = 'تم تحديث المجلد بنجاح';
+$messages['foldercreated'] = 'تم إنشاء المجلد بنجاح';
 
 ?>
diff --git a/program/localization/ast/labels.inc b/program/localization/ast/labels.inc
index 752d643..427c7a8 100644
--- a/program/localization/ast/labels.inc
+++ b/program/localization/ast/labels.inc
@@ -265,9 +265,6 @@
 $labels['messagecount'] = 'Mensaxes';
 $labels['create'] = 'Facer';
 $labels['createfolder'] = 'Facer una bandexa nueva';
-$labels['rename'] = 'Renomar';
-$labels['renamefolder'] = 'Renomar bandexa';
-$labels['deletefolder'] = 'Desaniciar bandexa';
 $labels['managefolders'] = 'Alministrar bandexes';
 $labels['specialfolders'] = 'Bandexes especiales';
 $labels['sortby'] = 'Ordenar por';
diff --git a/program/localization/ast/messages.inc b/program/localization/ast/messages.inc
index c292ccf..cbc4276 100644
--- a/program/localization/ast/messages.inc
+++ b/program/localization/ast/messages.inc
@@ -54,9 +54,7 @@
 $messages['deletemessagesconfirm'] = '¿Tas seguru de desaniciar los mensaxes que marcaste?';
 $messages['deletefolderconfirm'] = '¿Tas seguru de desaniciar esta bandexa?';
 $messages['purgefolderconfirm'] = '¿Tas seguru de desaniciar tolos mensaxes d\'esta bandexa?';
-$messages['foldercreating'] = 'Faciendo la bandexa...';
 $messages['folderdeleting'] = 'Desaniciando la bandexa...';
-$messages['folderrenaming'] = 'Renomando la bandexa...';
 $messages['foldermoving'] = 'Moviendo la bandexa...';
 $messages['formincomplete'] = 'Tienes de rellenar tolos campos del formulariu';
 $messages['noemailwarning'] = 'Por favor, dame un corréu válidu';
@@ -89,7 +87,6 @@
 $messages['receiptsent'] = 'Unviose correchamente l\'avisu de llectura.';
 $messages['errorsendingreceipt'] = 'Nun fui a unviar l\'avisu de llectura.';
 $messages['nodeletelastidentity'] = 'Nun puedo desaniciar esa identidá porque ye la última.';
-$messages['addsubfolderhint'] = 'Esta bandexa va ser subandexa de la que ta marcada';
 $messages['forbiddencharacter'] = 'El nome de la bandexa tien un caráuter que nun val';
 $messages['selectimportfile'] = 'Por favor escueye el ficheru que quies xubir';
 $messages['addresswriterror'] = 'Nun puedo escribir nel llibru de direiciones qu\'escoyisti';
diff --git a/program/localization/az_AZ/labels.inc b/program/localization/az_AZ/labels.inc
index 4e7d9d4..ce515e2 100644
--- a/program/localization/az_AZ/labels.inc
+++ b/program/localization/az_AZ/labels.inc
@@ -310,9 +310,6 @@
 $labels['messagecount'] = 'Məktublar';
 $labels['create'] = 'Yarad';
 $labels['createfolder'] = 'Yeni qovluq yarad';
-$labels['rename'] = 'Adını dəyiş';
-$labels['renamefolder'] = 'Qovluğun adını dəyiş';
-$labels['deletefolder'] = 'Qovluğu sil';
 $labels['managefolders'] = 'Qovluqlarla iş';
 $labels['specialfolders'] = 'Xüsusi qovluqlar';
 $labels['sortby'] = 'Çeşidlə';
diff --git a/program/localization/az_AZ/messages.inc b/program/localization/az_AZ/messages.inc
index ef5ca5d..dcef7c5 100644
--- a/program/localization/az_AZ/messages.inc
+++ b/program/localization/az_AZ/messages.inc
@@ -52,9 +52,7 @@
 $messages['deletemessagesconfirm'] = 'Seçilən məktubu (məktubları) silməyə əminsiniz?';
 $messages['deletefolderconfirm'] = 'Bu qovluğu silməyə əminsiniz?';
 $messages['purgefolderconfirm'] = 'Bu qovluqdakı bütün məktubları silməyə əminsiniz?';
-$messages['foldercreating'] = 'Qovluğun yaradılır...';
 $messages['folderdeleting'] = 'Qovluğ silinir...';
-$messages['folderrenaming'] = 'Qovluğun adə dəyişir...';
 $messages['foldermoving'] = 'Qovluq köçürülür...';
 $messages['formincomplete'] = 'Bütün sətrlər doldurulmayıb';
 $messages['noemailwarning'] = 'Lütfən, düzgün e-poçt ünvanı daxil edin';
@@ -89,7 +87,6 @@
 $messages['receiptsent'] = 'Oxunulma haqda bildiriş göndərildi';
 $messages['errorsendingreceipt'] = 'Oxunulma haqda bildiriş göndərilmədi';
 $messages['nodeletelastidentity'] = 'Siz bu kimliyi silə bilməzsiniz. Bu axırıncıdır. ';
-$messages['addsubfolderhint'] = 'Bu qovluq hazırki qovluqda alt qovluq olaraq yaradıldı';
 $messages['forbiddencharacter'] = 'Qovlu adı qadağan olunmuş simvollar təşkil edir';
 $messages['selectimportfile'] = 'Yüklənilən faylı seçin';
 $messages['addresswriterror'] = 'Seçilmiş ünvan kitabçası yaddaşa yazıla bilməz';
diff --git a/program/localization/bg_BG/labels.inc b/program/localization/bg_BG/labels.inc
index e380d2f..14ad45a 100644
--- a/program/localization/bg_BG/labels.inc
+++ b/program/localization/bg_BG/labels.inc
@@ -39,8 +39,7 @@
 $labels['cc'] = 'Копие до';
 $labels['bcc'] = 'Скрито копие до';
 $labels['replyto'] = 'Отговор до';
-$labels['mailreplyto'] = 'Отговор към';
-$labels['mailfollowupto'] = 'Препращане към';
+$labels['followupto'] = 'Препращане към';
 $labels['date'] = 'Дата';
 $labels['size'] = 'Размер';
 $labels['priority'] = 'Приоритет';
@@ -202,8 +201,7 @@
 $labels['addcc'] = 'Копие до';
 $labels['addbcc'] = 'Скрито копие до';
 $labels['addreplyto'] = 'Отговор на';
-$labels['addmailreplyto'] = 'Добавяне на отговор към';
-$labels['addmailfollowupto'] = 'Добавяне на препращане към';
+$labels['addfollowupto'] = 'Добавяне на препращане към';
 $labels['mdnrequest'] = 'Подателят на писмото е пожелал да бъде уведомен, че сте го прочели. Желаете ли да изпратите обратна разписка?';
 $labels['receiptread'] = 'Обратна разписка (прочетено)';
 $labels['yourmessage'] = 'Това е обратна разписка за писмото Ви';
@@ -330,9 +328,6 @@
 $labels['messagecount'] = 'Писма';
 $labels['create'] = 'Създай';
 $labels['createfolder'] = 'Направи нова папка';
-$labels['rename'] = 'Преименувай';
-$labels['renamefolder'] = 'Преименувай папката';
-$labels['deletefolder'] = 'Изтрий';
 $labels['managefolders'] = 'Настройки на папките';
 $labels['specialfolders'] = 'Служебни папки';
 $labels['sortby'] = 'Сортирай по';
diff --git a/program/localization/bg_BG/messages.inc b/program/localization/bg_BG/messages.inc
index cf9acbf..c5bc90f 100644
--- a/program/localization/bg_BG/messages.inc
+++ b/program/localization/bg_BG/messages.inc
@@ -11,7 +11,7 @@
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Todor Dragnev <todor.dragnev@gmail.com>                       |
-|   Nickolay Bunev <just4nick@gmail.com>                                |
+|	  Nickolay Bunev <just4nick@gmail.com>								|
 +-----------------------------------------------------------------------+
 
 @version $Id$
@@ -56,9 +56,7 @@
 $messages['deletemessagesconfirm'] = 'Искате ли да изтриете маркираните съобщения?';
 $messages['deletefolderconfirm'] = 'Искате ли да изтриете тази папка?';
 $messages['purgefolderconfirm'] = 'Искате ли да изтриете всички писма в тази папка?';
-$messages['foldercreating'] = 'Създаване на папка...';
 $messages['folderdeleting'] = 'Изтриване на папка...';
-$messages['folderrenaming'] = 'Преименуване на папка...';
 $messages['foldermoving'] = 'Преместване на папка...';
 $messages['formincomplete'] = 'Не сте попълнили всички полета';
 $messages['noemailwarning'] = 'Моля, въведете валиден e-mail адрес';
@@ -95,7 +93,6 @@
 $messages['receiptsent'] = 'Обратната разписка е изпратена.';
 $messages['errorsendingreceipt'] = 'Грешка при изпращането на обратна разписка.';
 $messages['nodeletelastidentity'] = 'Не можете да изтриете тази самоличност, трябва да имате поне една.';
-$messages['addsubfolderhint'] = 'Тази папка ще бъде създадена като подпапка на текущо избраната';
 $messages['forbiddencharacter'] = 'Името на папката съдържа непозволени символи';
 $messages['selectimportfile'] = 'Моля изберете файл за качване';
 $messages['addresswriterror'] = 'Избраната адресна книга не може да бъде записвана';
diff --git a/program/localization/bn_BD/labels.inc b/program/localization/bn_BD/labels.inc
index 3917eec..37fcc86 100644
--- a/program/localization/bn_BD/labels.inc
+++ b/program/localization/bn_BD/labels.inc
@@ -243,13 +243,10 @@
 $labels['folder'] = 'ফোল্ডার/মেইলবক্স';
 $labels['folders'] = 'ফোল্ডার/মেইলবক্স';
 $labels['foldername'] = 'ফোল্ডার/মেইলবক্স এর নাম';
-$labels['subscribed'] = 'গ্রহনকারি(Subscribed) ';
+$labels['subscribed'] = 'গ্রহনকারি';
 $labels['messagecount'] = 'মেইল/চিঠি';
 $labels['create'] = 'প্রস্তুত করুন';
 $labels['createfolder'] = 'নতুন ফোল্ডার / মেইলবক্স প্রস্তুত করুন';
-$labels['rename'] = 'নাম বদলান';
-$labels['renamefolder'] = 'ফোল্ডার/মেইলবক্স এর নাম বদলান';
-$labels['deletefolder'] = 'ফোল্ডার/মেইলবক্স ফেলে দিন';
 $labels['managefolders'] = 'ফোল্ডার/মেইলবক্স গুলো কে গুছান';
 $labels['specialfolders'] = 'বিশেষ ফোল্ডার/মেইলবক্স';
 $labels['sortby'] = 'সাজান';
diff --git a/program/localization/bn_BD/messages.inc b/program/localization/bn_BD/messages.inc
index 1026969..6383242 100644
--- a/program/localization/bn_BD/messages.inc
+++ b/program/localization/bn_BD/messages.inc
@@ -46,9 +46,7 @@
 $messages['deletemessagesconfirm'] = 'আপনি কি আসলেই এই চিঠি(গুলো) ফেলো দিতে চান?';
 $messages['deletefolderconfirm'] = 'আপনি কি আসলেই এই ফোল্ডার/মেইলবক্স ফেলো দিতে চান?';
 $messages['purgefolderconfirm'] = 'আপনি কি আসলেই এই ফোল্ডার/মেইলবক্স এর সব চিঠি ফেলো দিতে চান?';
-$messages['foldercreating'] = 'ফোল্ডার/মেইলবক্স প্রস্তুত করা হচ্ছে';
 $messages['folderdeleting'] = 'ফোল্ডার/মেইলবক্স ফেলে দেওয়া হচ্ছে';
-$messages['folderrenaming'] = 'ফোল্ডার/মেইলবক্স এর নাম বদলানো হচ্ছে';
 $messages['foldermoving'] = 'ফোল্ডার/মেইলবক্স সরানো হচ্ছে';
 $messages['formincomplete'] = 'আপনি সবগুলো জিনিষ লেখেননি';
 $messages['noemailwarning'] = 'একটি সঠিক ই-মেইল লিখুন';
@@ -81,7 +79,6 @@
 $messages['receiptsent'] = 'ঠিকঠাক মতো ফিরতি রশিদ পাঠানো হয়েছে';
 $messages['errorsendingreceipt'] = 'রশিদ পাঠানো গেলোনা';
 $messages['nodeletelastidentity'] = 'আপনি এই পরিচিতি ফেলতে পারবেন না কারন এইটায় বর্তমানে আপনার একমাত্র পরিচিতি। ';
-$messages['addsubfolderhint'] = 'এই ফোল্ডারটি বর্তমান ফোল্ডার এর সাব-ফোল্ডার হিসাবে তৈরি হবে';
 $messages['forbiddencharacter'] = 'ফোল্ডার এর নামের মধ্যে নিষিদ্ধ অক্ষর আছে';
 $messages['selectimportfile'] = 'একটা ফাইল বেছে নিন তোলার জন্য';
 $messages['addresswriterror'] = 'বেছে নেওয়া ঠিকানার বইটিতে লেখাযায় না';
diff --git a/program/localization/br/labels.inc b/program/localization/br/labels.inc
index f80ed34..c8812d5 100644
--- a/program/localization/br/labels.inc
+++ b/program/localization/br/labels.inc
@@ -171,9 +171,6 @@
 $labels['subscribed'] = 'Koumananer';
 $labels['create'] = 'Krouiñ';
 $labels['createfolder'] = 'Krouiñ ur renkell nevez';
-$labels['rename'] = 'Adanviñ';
-$labels['renamefolder'] = 'Adanviñ ar renkell';
-$labels['deletefolder'] = 'Dilemel ar renkell';
 $labels['managefolders'] = 'Aozañ ar renkelloù';
 $labels['sortby'] = 'Rummañ dre';
 $labels['sortasc'] = 'Rumm diagentad';
diff --git a/program/localization/bs_BA/labels.inc b/program/localization/bs_BA/labels.inc
index 6d2ae5d..ab65eb7 100644
--- a/program/localization/bs_BA/labels.inc
+++ b/program/localization/bs_BA/labels.inc
@@ -221,9 +221,6 @@
 $labels['subscribed']  = 'Pretplaćen';
 $labels['create']  = 'Napravi';
 $labels['createfolder']  = 'Napravi novu fasciklu';
-$labels['rename'] = 'Preimenuj';
-$labels['renamefolder'] = 'Preimenuj fasciklu';
-$labels['deletefolder']  = 'Obriši fasciklu';
 $labels['managefolders']  = 'Podesi fasciklu';
 
 $labels['sortby'] = 'Sortiraj po';
diff --git a/program/localization/ca_ES/labels.inc b/program/localization/ca_ES/labels.inc
index 3022887..d75a2f8 100644
--- a/program/localization/ca_ES/labels.inc
+++ b/program/localization/ca_ES/labels.inc
@@ -317,9 +317,6 @@
 $labels['messagecount'] = 'Missatges';
 $labels['create'] = 'Crea';
 $labels['createfolder'] = 'Crea nova carpeta';
-$labels['rename'] = 'Canvia el nom';
-$labels['renamefolder'] = 'Canvia el nom de la carpeta';
-$labels['deletefolder'] = 'Suprimeix carpeta';
 $labels['managefolders'] = 'Gestiona carpetes';
 $labels['specialfolders'] = 'Carpetes Especials';
 $labels['sortby'] = 'Ordena per';
diff --git a/program/localization/ca_ES/messages.inc b/program/localization/ca_ES/messages.inc
index aa50657..bea1269 100644
--- a/program/localization/ca_ES/messages.inc
+++ b/program/localization/ca_ES/messages.inc
@@ -56,9 +56,7 @@
 $messages['deletemessagesconfirm'] = 'Esteu segurs de voler suprimir el(s) missatge(s) selecionat(s)?';
 $messages['deletefolderconfirm'] = 'Esteu segurs de voler suprimir aquesta carpeta?';
 $messages['purgefolderconfirm'] = 'Esteu segurs de voler suprimir tots els missatges d\'aquesta carpeta?';
-$messages['foldercreating'] = 'Creant la carpeta...';
 $messages['folderdeleting'] = 'Suprimint la carpeta...';
-$messages['folderrenaming'] = 'Reanomenant la carpeta...';
 $messages['foldermoving'] = 'Movent la carpeta...';
 $messages['formincomplete'] = 'El formulari no ha sigut emplenat totalment';
 $messages['noemailwarning'] = 'Introduïu una adreça d\'e-mail vàlida';
@@ -93,7 +91,6 @@
 $messages['receiptsent'] = 'Confirmació de lectura enviada satisfactòriament';
 $messages['errorsendingreceipt'] = 'No es pot enviar la confirmació';
 $messages['nodeletelastidentity'] = 'No podeu suprimir aquesta identitat, és l\'última.';
-$messages['addsubfolderhint'] = 'Aquesta carpeta serà creada com a subcarpeta de la seleccionada actualment';
 $messages['forbiddencharacter'] = 'El nom de carpeta conté un caràcter prohibit';
 $messages['selectimportfile'] = 'Si us plau, seleccioneu un fitxer per pujar';
 $messages['addresswriterror'] = 'La llibreta d\'adreces seleccionada no és modificable';
diff --git a/program/localization/cs_CZ/labels.inc b/program/localization/cs_CZ/labels.inc
index e0363c4..67c571c 100644
--- a/program/localization/cs_CZ/labels.inc
+++ b/program/localization/cs_CZ/labels.inc
@@ -319,9 +319,6 @@
 $labels['messagecount'] = 'Počet zpráv';
 $labels['create'] = 'Vytvořit';
 $labels['createfolder'] = 'Vytvořit novou složku';
-$labels['rename'] = 'Přejmenovat';
-$labels['renamefolder'] = 'Přejmenovat složku';
-$labels['deletefolder'] = 'Smazat složku';
 $labels['managefolders'] = 'Spravovat složky';
 $labels['specialfolders'] = 'Speciální složky';
 $labels['sortby'] = 'Seřadit podle';
diff --git a/program/localization/cs_CZ/messages.inc b/program/localization/cs_CZ/messages.inc
index 4f806e1..6569ddc 100644
--- a/program/localization/cs_CZ/messages.inc
+++ b/program/localization/cs_CZ/messages.inc
@@ -26,6 +26,7 @@
 $messages['sessionerror'] = 'Vaše přihlášení je neplatné nebo vypršelo';
 $messages['imaperror'] = 'Připojení na IMAP server selhalo';
 $messages['servererror'] = 'Chyba serveru!';
+$messages['servererrormsg'] = 'Chyba serveru: $msg';
 $messages['invalidrequest'] = 'Nesprávný požadavek. Data nebyla uložena.';
 $messages['nomessagesfound'] = 'Ve schránce nebyla nalezena žádná zpráva';
 $messages['loggedout'] = 'Byli jste úspěšně odhlášeni. Nashledanou!';
@@ -57,9 +58,7 @@
 $messages['deletemessagesconfirm'] = 'Opravdu chcete smazat označené zprávy?';
 $messages['deletefolderconfirm'] = 'Chcete opravdu smazat tento adresář?';
 $messages['purgefolderconfirm'] = 'Opravdu chcete smazat všechny zprávy v této složce?';
-$messages['foldercreating'] = 'Vytvářím složku...';
 $messages['folderdeleting'] = 'Odstraňuji složku...';
-$messages['folderrenaming'] = 'Přejmenovávám složku...';
 $messages['foldermoving'] = 'Přesouvám složku...';
 $messages['formincomplete'] = 'Formulář nebyl korektně vyplněn';
 $messages['noemailwarning'] = 'Zadejte, prosím, platnou e-mailovou adresu';
@@ -91,10 +90,11 @@
 $messages['errorsavingcontact'] = 'Nemohu uložit adresu kontaktu';
 $messages['movingmessage'] = 'Přesouvám zprávu...';
 $messages['copyingmessage'] = 'Kopíruji zprávu...';
+$messages['deletingmessage'] = 'Odstraňuji zprávu...';
+$messages['markingmessage'] = 'Označuji zprávu...';
 $messages['receiptsent'] = 'Potvrzení o přřijetí zprávy odesláno';
 $messages['errorsendingreceipt'] = 'Potvrzení o přijetí zprávy nebylo možné odeslat';
 $messages['nodeletelastidentity'] = 'Alespoň jedna identita musí být ponechána. Identitu nelze odstranit.';
-$messages['addsubfolderhint'] = 'Tato složka bude vytvořena jako podsložka aktuálně zvolené složky';
 $messages['forbiddencharacter'] = 'Název složky obsahuje zakázaný znak';
 $messages['selectimportfile'] = 'Prosím vyberte soubor k nahrání';
 $messages['addresswriterror'] = 'Vybraný seznam kontaktů není zapisovatelný';
@@ -102,20 +102,31 @@
 $messages['contactremovedfromgroup'] = 'Kontakty byly odstraněny z této skupiny';
 $messages['importwait'] = 'Importuji, prosím čekejte...';
 $messages['importerror'] = 'Během importu nastala chyba! Nahraný soubor není ve formátu vCard.';
-$messages['importconfirm'] = '<b>Úspěšně naimportováno $inserted kontaktů, $skipped existujících záznamů přeskočeno</b>:<p><em>$names</em></p>';
+$messages['importconfirm'] = 'Úspěšně naimportováno $inserted kontaktů, $skipped existujících záznamů přeskočeno:$names';
 $messages['opnotpermitted'] = 'Operace není povolena!';
 $messages['nofromaddress'] = 'Chybějící e-mailová adresa v označeném profilu';
 $messages['editorwarning'] = 'Přepnutím do režimu prostého textu ztratíte veškeré formátování. Chcete pokračovat?';
-$messages['httpreceivedencrypterror'] = 'Vyskytla se vážná chyba v konfiguraci. Kontaktujte neprodleně administátora. <b>Vaše zpráva nemohla být odeslána.</b>';
+$messages['httpreceivedencrypterror'] = 'Vyskytla se vážná chyba v konfiguraci. Kontaktujte neprodleně administátora. Vaše zpráva nemohla být odeslána.';
 $messages['smtpconnerror'] = 'Chyba SMTP ($code): Připojení k serveru selhalo';
 $messages['smtpautherror'] = 'Chyba SMTP ($code): Chyba přihlášení';
 $messages['smtpfromerror'] = 'Chyba SMTP ($code): Nelze nastavit odesílatele "$from" ($msg)';
 $messages['smtptoerror'] = 'Chyba SMTP ($code): Nelze přidat příjemce "$to" ($msg)';
 $messages['smtprecipientserror'] = 'Chyba SMTP: Nelze zpracovat seznam příjemců';
+$messages['smtpdsnerror'] = 'Chyba SMTP: Není podporováno oznamení o stavu doručení (DSN)';
 $messages['smtperror'] = 'Chyba SMTP: $msg';
 $messages['emailformaterror'] = 'Neplatná e-mailová adresa: $email';
 $messages['toomanyrecipients'] = 'Příliš mnoho příjemců. Změňte počet příjemců na $max.';
 $messages['maxgroupmembersreached'] = 'Počet členských skupin dosáhl maximum z $max';
 $messages['internalerror'] = 'Došlo k interní chybě. Zkuste to znovu';
+$messages['contactdelerror'] = 'Kontakty nelze odstranit';
+$messages['contactdeleted'] = 'Kontakty byly odstraněny';
+$messages['groupdeleted'] = 'Skupina byla odstraněna';
+$messages['grouprenamed'] = 'Skupina byla přejmenována';
+$messages['groupcreated'] = 'Skupina vytvořena';
+$messages['messagedeleted'] = 'Zpráva odstraněna';
+$messages['messagemoved'] = 'Zpráva byla přesunuta';
+$messages['messagecopied'] = 'Zpráva byla zkopirována';
+$messages['messagemarked'] = 'Zpráva označena';
+$messages['autocompletechars'] = 'Napište alespoň $min znaků pro automatické doplnění';
 
-?>
\ No newline at end of file
+?>
diff --git a/program/localization/cy_GB/labels.inc b/program/localization/cy_GB/labels.inc
index 0f8e22c..3e22ee4 100644
--- a/program/localization/cy_GB/labels.inc
+++ b/program/localization/cy_GB/labels.inc
@@ -35,15 +35,12 @@
 $labels['cc'] = 'Copi';
 $labels['bcc'] = 'Bcc';
 $labels['replyto'] = 'Ateb-I';
-$labels['mailreplyto'] = 'Neges-Ateb-I';
-$labels['mailfollowupto'] = 'Neges-Ddilynol-I';
+$labels['followupto'] = 'Followup-To';
 $labels['date'] = 'Dyddiad';
 $labels['size'] = 'Maint';
 $labels['priority'] = 'Blaenoriaeth';
 $labels['organization'] = 'Enw\'r Sefydliad';
-$labels['reply-to'] = 'Ateb-I';
-$labels['mail-reply-to'] = 'Neges-Ateb-I';
-$labels['mail-followup-to'] = 'Neges-Ddilynol-I';
+$labels['readstatus'] = 'Statws darllen';
 $labels['mailboxlist'] = 'Ffolderi';
 $labels['messagesfromto'] = 'Negeseuon $from i $to o $count';
 $labels['threadsfromto'] = 'Edefau $from i $to o $count';
@@ -172,6 +169,7 @@
 $labels['charset'] = 'Set nodiau';
 $labels['editortype'] = 'Math golygydd';
 $labels['returnreceipt'] = 'Cadarnhau derbyn';
+$labels['dsn'] = 'Hysbysiad statws danfon';
 $labels['editidents'] = 'Golygu personoliaethau';
 $labels['checkspelling'] = 'Gwirio sillafu';
 $labels['resumeediting'] = 'Ail-ddechrau golygu';
@@ -196,8 +194,7 @@
 $labels['addcc'] = 'Ychwanegu Cc';
 $labels['addbcc'] = 'Ychwanegu Bcc';
 $labels['addreplyto'] = 'Ychwanegu Ateb-I';
-$labels['addmailreplyto'] = 'Ychwanegu Neges-Ateb-I';
-$labels['addmailfollowupto'] = 'Ychwanegu Neges-Ddilynol-I';
+$labels['addfollowupto'] = 'Ychwanegu Followup-To';
 $labels['mdnrequest'] = 'Mae anfonwr y neges hwn wedi gofyn am hysbysiad eich bod wedi darllen y neges. Hoffech chi hysbysu\'r anfonwr?';
 $labels['receiptread'] = 'Cadarnhad Derbyn (darllenwyd)';
 $labels['yourmessage'] = 'Mae hwn yn gadarnhad o dderbyn eich neges';
@@ -209,6 +206,7 @@
 $labels['addcontact'] = 'Ychwanegu cyswllt newydd';
 $labels['editcontact'] = 'Golygu cyswllt';
 $labels['contacts'] = 'Cysylltiadau';
+$labels['contactproperties'] = 'Nodweddion cyswllt';
 $labels['edit'] = 'Golygu';
 $labels['cancel'] = 'Canslo';
 $labels['save'] = 'Cadw';
@@ -256,6 +254,7 @@
 $labels['signature'] = 'Llofnod';
 $labels['dstactive'] = 'Amser arbed golau ddydd';
 $labels['htmleditor'] = 'Ysgrifennu negeseuon HTML';
+$labels['htmlonreply'] = 'wrth ateb i neges HTML yn unig';
 $labels['htmlsignature'] = 'Llofnod HTML';
 $labels['previewpane'] = 'Dangos ffenest rhagolwg';
 $labels['skin'] = 'Croen rhyngwyneb';
@@ -268,6 +267,7 @@
 $labels['askuser'] = 'gofyn i\'r defnyddiwr';
 $labels['autosend'] = 'danfon yn awtomatig';
 $labels['autosendknown'] = 'danfon y derbynneb i fy nghsylltiadau yn unig';
+$labels['autosendknownignore'] = 'danfon derbynneb i fy nghysylltiadau, anwybyddu fel arall';
 $labels['ignore'] = 'anwybyddu';
 $labels['readwhendeleted'] = 'Nodi\'r neges fel darllenwyd wrth ddileu';
 $labels['flagfordeletion'] = 'Fflagio\'r neges i\'w ddileu yn hytrach na dileu yn syth';
@@ -313,6 +313,8 @@
 $labels['previewpanemarkread'] = 'Nodi negeseuon rhagolwg fel darllenwyd';
 $labels['afternseconds'] = 'ar ôl $n eiliad';
 $labels['reqmdn'] = 'Bob amser gofyn am dderbynneb danfon';
+$labels['reqdsn'] = 'Gofyn am hysbysiad statws danfon bob amser';
+$labels['replysamefolder'] = 'Rhoi atebion yn yr un ffolder i\'r neges sy\'n cael ei ateb';
 $labels['folder'] = 'Ffolder';
 $labels['folders'] = 'Ffolderi';
 $labels['foldername'] = 'Enw ffolder';
@@ -320,11 +322,15 @@
 $labels['messagecount'] = 'Negeseuon';
 $labels['create'] = 'Creu';
 $labels['createfolder'] = 'Creu ffolder newydd';
-$labels['rename'] = 'Ailenwi';
-$labels['renamefolder'] = 'Ailenwi ffolder';
-$labels['deletefolder'] = 'Dileu ffolder';
 $labels['managefolders'] = 'Rheoli ffolderi';
 $labels['specialfolders'] = 'Ffolderi arbennig';
+$labels['properties'] = 'Nodweddion';
+$labels['folderproperties'] = 'Ffolder nodweddion';
+$labels['parentfolder'] = 'Ffolder uwchben';
+$labels['location'] = 'Lleoliad';
+$labels['info'] = 'Gwybodaeth';
+$labels['getfoldersize'] = 'Cliciwch i gael maint ffolder';
+$labels['changesubscription'] = 'Cliciwch i newid y tanysgrifiad';
 $labels['sortby'] = 'Trefnu yn ôl';
 $labels['sortasc'] = 'Trefn esgynnol';
 $labels['sortdesc'] = 'Trefn ddisgynnol';
diff --git a/program/localization/cy_GB/messages.inc b/program/localization/cy_GB/messages.inc
index 4a20d30..486455b 100644
--- a/program/localization/cy_GB/messages.inc
+++ b/program/localization/cy_GB/messages.inc
@@ -20,6 +20,9 @@
 $messages['sessionerror'] = 'Mae\'r sesiwn yn anghywir neu wedi dod i ben';
 $messages['imaperror'] = 'Methwyd cysylltu a\'r gweinydd IMAP';
 $messages['servererror'] = 'Gwall Gweinydd!';
+$messages['servererrormsg'] = 'Gwall Gweinydd: $msg';
+$messages['errorreadonly'] = 'Methwyd gweithredu. Mae\'r ffolder yn darllen-yn-unig';
+$messages['errornoperm'] = 'Methwyd gweithredu. Gwrthodwyd caniatad';
 $messages['invalidrequest'] = 'Cais annilys! Ni chadwyd unrhyw wybodaeth.';
 $messages['nomessagesfound'] = 'Dim negeseuon wedi eu canfod yn y blwch hwn';
 $messages['loggedout'] = 'Rydych wedi gorffen y sesiwn yn llwyddianus. Hwyl fawr!';
@@ -51,10 +54,10 @@
 $messages['deletemessagesconfirm'] = 'Ydych chi wir am ddileu y neges(euon) ddewiswyd?';
 $messages['deletefolderconfirm'] = 'Ydych chi wir am ddileu y ffolder yma?';
 $messages['purgefolderconfirm'] = 'Ydych chi wir am ddileu yr holl negeseuon yn y ffolder yma?';
-$messages['foldercreating'] = 'Yn creu ffolder...';
 $messages['folderdeleting'] = 'Yn dileu ffolder...';
-$messages['folderrenaming'] = 'Yn ailenwi ffolder...';
 $messages['foldermoving'] = 'Yn symud ffolder...';
+$messages['foldersubscribing'] = 'Yn tanysgrifio i\'r ffolder...';
+$messages['folderunsubscribing'] = 'Yn dad-danysgrifio i\'r ffolder...';
 $messages['formincomplete'] = 'Nid oedd y ffurflen wedi ei gwblhau yn llawn';
 $messages['noemailwarning'] = 'Rhowch gyfeiriad e-bost dilys';
 $messages['nonamewarning'] = 'Rhowch enw';
@@ -74,6 +77,10 @@
 $messages['checking'] = 'Yn gofyn...';
 $messages['nospellerrors'] = 'Ni gafwyd hyd i unrhyw wallau gwirio';
 $messages['folderdeleted'] = 'Dilëwyd y ffolder yn llwyddiannus';
+$messages['foldersubscribed'] = 'Ffolder wedi ei danysgrifio yn llwyddiannus';
+$messages['folderunsubscribed'] = 'Ffolder wedi ei ddad-danysgrifio yn llwyddiannus';
+$messages['folderpurged'] = 'Ffolder wedi ei lanhau yn llwyddiannus';
+$messages['folderexpunged'] = 'Ffolder wedi ei wagio yn llwyddiannus';
 $messages['deletedsuccessfully'] = 'Dilëwyd yn llwyddiannus';
 $messages['converting'] = 'Yn cael gwared a\'r fformatio...';
 $messages['messageopenerror'] = 'Methwyd llwytho\'r neges o\'r gweinydd';
@@ -85,10 +92,11 @@
 $messages['errorsavingcontact'] = 'Methwyd cadw cyfeiriad y cyswllt';
 $messages['movingmessage'] = 'Yn symud neges...';
 $messages['copyingmessage'] = 'Yn copïo\'r neges';
+$messages['deletingmessage'] = 'Yn dileu neges(euon)...';
+$messages['markingmessage'] = 'Yn marcio neges(euon)...';
 $messages['receiptsent'] = 'Danfonwyd cadarnhad derbyn yn llwyddiannus';
 $messages['errorsendingreceipt'] = 'Methwyd danfon cadarnhad derbyn';
 $messages['nodeletelastidentity'] = 'Allwch chi ddim dileu\'r personoliaeth yma, hwn yw\'r un olaf.';
-$messages['addsubfolderhint'] = 'Mi fydd y ffolder yma\'n cael ei greu fel is-ffolder o\'r un sydd wedi ei ddewis ar hyn o bryd';
 $messages['forbiddencharacter'] = 'Mae enw\'r ffolder yn cynnwys llythyren annerbynniol';
 $messages['selectimportfile'] = 'Dewiswch ffeil i\'w lwytho fyny';
 $messages['addresswriterror'] = 'Nid yw\'n bosib ysgrifennu i\'r llyfr cyfeiriadau ';
@@ -106,10 +114,25 @@
 $messages['smtpfromerror'] = 'Gwall SMTP ($code): Methwyd gosod y danfonwr "$from" ($msg)';
 $messages['smtptoerror'] = 'Gwall SMTP ($code): Methwyd ychwanegu derbynwr "$to" ($msg)';
 $messages['smtprecipientserror'] = 'Gwall SMTP: Nid oedd yn bosib darllen y rhestr o dderbynnwyr';
+$messages['smtpdsnerror'] = 'Gwall SMTP: Dim cefnogaeth i Hysbysiadau Statws Danfon';
 $messages['smtperror'] = 'Gwall SMTP: $msg';
 $messages['emailformaterror'] = 'Cyfeiriad e-bost anghywir: $email';
 $messages['toomanyrecipients'] = 'Gormod o dderbynnwyr. Lleihewch y nifer i $max';
 $messages['maxgroupmembersreached'] = 'Mae nifer o aelodau\'r grŵp yn fwy na\'r uchafswm o $max';
 $messages['internalerror'] = 'Fe gafwyd gwall mewnol. Rhowch gynnig arni eto.';
+$messages['contactdelerror'] = 'Methwyd dileu cyswllt';
+$messages['contactdeleted'] = 'Cyswllt wedi ei ddileu yn llwyddiannus';
+$messages['groupdeleted'] = 'Grŵp wedi ei ddileu yn llwyddiannus';
+$messages['grouprenamed'] = 'Grŵp wedi ei ailenwi yn llwyddiannus';
+$messages['groupcreated'] = 'Grŵp wedi ei greu yn llwyddiannus';
+$messages['messagedeleted'] = 'Neges(euon) wedi eu dileu yn llwyddiannus';
+$messages['messagemoved'] = 'Neges(euon) wedi eu symud yn llwyddiannus';
+$messages['messagecopied'] = 'Neges(euon) wedi eu copïo yn llwyddiannus';
+$messages['messagemarked'] = 'Neges(euon) wedi eu marcio yn llwyddiannus';
+$messages['autocompletechars'] = 'Rhowch o leia $min llythyren ar gyfer awto-gwblhau';
+$messages['namecannotbeempty'] = 'Ni all yr enw fod yn wag';
+$messages['nametoolong'] = 'Mae\'r enw yn rhy hir';
+$messages['folderupdated'] = 'Diweddarwyd y ffolder yn llwyddiannus';
+$messages['foldercreated'] = 'Crëwyd y ffolder yn llwyddiannus';
 
 ?>
diff --git a/program/localization/da_DK/labels.inc b/program/localization/da_DK/labels.inc
index 6d45c04..3aa1ae4 100644
--- a/program/localization/da_DK/labels.inc
+++ b/program/localization/da_DK/labels.inc
@@ -309,9 +309,6 @@
 $labels['messagecount'] = 'Beskeder';
 $labels['create'] = 'Opret';
 $labels['createfolder'] = 'Opret ny mappe';
-$labels['rename'] = 'Omdøb';
-$labels['renamefolder'] = 'Omdøb mappe';
-$labels['deletefolder'] = 'Slet mappe';
 $labels['managefolders'] = 'Administrér mapper';
 $labels['specialfolders'] = 'Specielle mapper';
 $labels['sortby'] = 'Sortér efter';
diff --git a/program/localization/da_DK/messages.inc b/program/localization/da_DK/messages.inc
index e66099c..74d70b7 100644
--- a/program/localization/da_DK/messages.inc
+++ b/program/localization/da_DK/messages.inc
@@ -55,9 +55,7 @@
 $messages['deletemessagesconfirm'] = 'Vil du virkelig slette den/de valgte besked(er)?';
 $messages['deletefolderconfirm'] = 'Vil du virkelig slette den valgte mappe';
 $messages['purgefolderconfirm'] = 'Vil du virkelig slette alle beskeder i denne mappe?';
-$messages['foldercreating'] = 'Opretter mappen...';
 $messages['folderdeleting'] = 'Sletter mappen...';
-$messages['folderrenaming'] = 'Omdøber mappen...';
 $messages['foldermoving'] = 'Flytter mappen...';
 $messages['formincomplete'] = 'Formularen var ikke fuldstændig fyldt ud';
 $messages['noemailwarning'] = 'Indtast venligst en gyldig e-mail adresse';
@@ -92,7 +90,6 @@
 $messages['receiptsent'] = 'Kvittering for læsning er sendt';
 $messages['errorsendingreceipt'] = 'Kvitteringen kunne ikke sendes';
 $messages['nodeletelastidentity'] = 'Du kan ikke slette denne identitet, da det er den eneste der er tilbage.';
-$messages['addsubfolderhint'] = 'Denne mappe vil blive oprettet som en undermappe til den mappe der er valgt i øjeblikket.';
 $messages['forbiddencharacter'] = 'Mappe-navnet indeholder ugyldige tegn';
 $messages['selectimportfile'] = 'Vælg venligst den fil der skal uploades';
 $messages['addresswriterror'] = 'Der kan ikke skrives i den valgte adressebog';
diff --git a/program/localization/de_CH/labels.inc b/program/localization/de_CH/labels.inc
index 5c2bc6d..c59cf61 100644
--- a/program/localization/de_CH/labels.inc
+++ b/program/localization/de_CH/labels.inc
@@ -38,8 +38,7 @@
 $labels['cc'] = 'Kopie (CC)';
 $labels['bcc'] = 'Blind-Kopie';
 $labels['replyto'] = 'Antwort an';
-$labels['mailreplyto'] = 'Mail-Reply-To';
-$labels['mailfollowupto'] = 'Mail-Followup-To';
+$labels['followupto'] = 'Followup-To';
 $labels['date'] = 'Datum';
 $labels['size'] = 'Grösse';
 $labels['priority'] = 'Priorität';
@@ -201,8 +200,7 @@
 $labels['addcc'] = 'Cc hinzufügen';
 $labels['addbcc'] = 'Bcc hinzufügen';
 $labels['addreplyto'] = 'Antwortadresse hinzufügen';
-$labels['addmailreplyto'] = 'Mail-Reply-To hinzufügen';
-$labels['addmailfollowupto'] = 'Mail-Followup-To hinzufügen';
+$labels['addfollowupto'] = 'Followup-To hinzufügen';
 $labels['mdnrequest'] = 'Der Sender dieser Nachricht hat eine Empfangsbestätigung angefordert. Möchten Sie diese jetzt senden?';
 $labels['receiptread'] = 'Empfangsbestätigung (gelesen)';
 $labels['yourmessage'] = 'Dieses ist eine Empfangsbestätigung für Ihre Nachricht';
@@ -330,11 +328,15 @@
 $labels['messagecount'] = 'Nachrichten';
 $labels['create'] = 'Erstellen';
 $labels['createfolder'] = 'Neuen Ordner erstellen';
-$labels['rename'] = 'Umbenennen';
-$labels['renamefolder'] = 'Ordner umbenennen';
-$labels['deletefolder'] = 'Ordner löschen';
 $labels['managefolders'] = 'Ordner verwalten';
 $labels['specialfolders'] = 'Spezialordner';
+$labels['properties'] = 'Eigenschaften';
+$labels['folderproperties'] = 'Ordnereigenschaften';
+$labels['parentfolder'] = 'Eltern';
+$labels['location'] = 'Speicherort';
+$labels['info'] = 'Informationen';
+$labels['getfoldersize'] = 'Ordnergrösse anzeigen';
+$labels['changesubscription'] = 'Abonnieren';
 $labels['sortby'] = 'Sortieren nach';
 $labels['sortasc'] = 'aufsteigend sortieren';
 $labels['sortdesc'] = 'absteigend sortieren';
diff --git a/program/localization/de_CH/messages.inc b/program/localization/de_CH/messages.inc
index 56f3a45..b753418 100644
--- a/program/localization/de_CH/messages.inc
+++ b/program/localization/de_CH/messages.inc
@@ -55,10 +55,10 @@
 $messages['deletemessagesconfirm'] = 'Wollen Sie die ausgewählten Nachrichten wirklich löschen?';
 $messages['deletefolderconfirm'] = 'Wollen Sie diesen Ordner wirklich löschen?';
 $messages['purgefolderconfirm'] = 'Wollen Sie diesen Ordner wirklich leeren?';
-$messages['foldercreating'] = 'Erstelle Ordner...';
 $messages['folderdeleting'] = 'Lösche Ordner...';
-$messages['folderrenaming'] = 'Nenne Ordner um...';
 $messages['foldermoving'] = 'Verschiebe Ordner...';
+$messages['foldersubscribing'] = 'Abonniere Ordner...';
+$messages['folderunsubscribing'] = 'Ordner abbstellen...';
 $messages['formincomplete'] = 'Das Formular wurde nicht vollständig ausgefüllt';
 $messages['noemailwarning'] = 'Bitte geben Sie eine gültige E-Mail-Adresse ein';
 $messages['nonamewarning'] = 'Bitte geben Sie einen Namen ein';
@@ -78,6 +78,10 @@
 $messages['checking'] = 'Prüfe...';
 $messages['nospellerrors'] = 'Keine Rechtschreibfehler gefunden';
 $messages['folderdeleted'] = 'Ordner erfolgreich gelöscht';
+$messages['foldersubscribed'] = 'Der Ordner wurde erfolgreich abonniert';
+$messages['folderunsubscribed'] = 'Der Ordner wurde erfolgreich abbestellt';
+$messages['folderpurged'] = 'Der Ordner wurde erfolgreich gelöscht';
+$messages['folderexpunged'] = 'Der Ordner wurde erfolgreich gepackt';
 $messages['deletedsuccessfully'] = 'Erfolgreich gelöscht';
 $messages['converting'] = 'Entferne Formatierungen...';
 $messages['messageopenerror'] = 'Die Nachricht konnte nicht vom Server geladen werden';
@@ -94,7 +98,6 @@
 $messages['receiptsent'] = 'Lesebestätigung erfolgreich gesendet';
 $messages['errorsendingreceipt'] = 'Bestätigung konnte nicht gesendet werden';
 $messages['nodeletelastidentity'] = 'Diese Identität kann nicht gelöscht werden, da dies die letzte ist.';
-$messages['addsubfolderhint'] = 'Wird als Unterordner des aktuell selektierten Ordners erstellt';
 $messages['forbiddencharacter'] = 'Der Ordnername enthält ein ungültiges Zeichen';
 $messages['selectimportfile'] = 'Bitte wählen Sie eine Datei zum Importieren aus';
 $messages['addresswriterror'] = 'Das gewählte Adressbuch kann nicht verändert werden';
@@ -128,5 +131,11 @@
 $messages['messagecopied'] = 'Nachricht(en) erfolgreich kopiert';
 $messages['messagemarked'] = 'Nachricht(en) erfolgreich markiert';
 $messages['autocompletechars'] = 'Geben Sie mind. $min Zeichen für die Auto-Vervollständigung ein';
+$messages['namecannotbeempty'] = 'Der Name darf nicht leer sein';
+$messages['nametoolong'] = 'Der Name ist zu lang';
+$messages['folderupdated'] = 'Der Ordner wurde erfolgreich aktualisiert';
+$messages['foldercreated'] = 'Der Ordner wurde erfolgreich erstellt';
+$messages['errorreadonly'] = 'Die Aktion nicht ausgeführt werden. Der Ordner ist schreibgeschützt.';
+$messages['errornoperm'] = 'Die Aktion nicht ausgeführt werden. Zugriff verweigert.';
 
 ?>
diff --git a/program/localization/de_DE/labels.inc b/program/localization/de_DE/labels.inc
index 791c323..262127c 100644
--- a/program/localization/de_DE/labels.inc
+++ b/program/localization/de_DE/labels.inc
@@ -38,8 +38,7 @@
 $labels['cc'] = 'Kopie';
 $labels['bcc'] = 'Blindkopie';
 $labels['replyto'] = 'Antwort an';
-$labels['mailreplyto'] = 'Mail-Reply-To';
-$labels['mailfollowupto'] = 'Mail-Followup-To';
+$labels['followupto'] = 'Followup-To';
 $labels['date'] = 'Datum';
 $labels['size'] = 'Größe';
 $labels['priority'] = 'Priorität';
@@ -201,8 +200,7 @@
 $labels['addcc'] = 'Cc hinzufügen';
 $labels['addbcc'] = 'Bcc hinzufügen';
 $labels['addreplyto'] = 'Antwortadresse hinzufügen';
-$labels['addmailreplyto'] = 'Mail-Reply-To hinzufügen';
-$labels['addmailfollowupto'] = 'Mail-Followup-To hinzufügen';
+$labels['addfollowupto'] = 'Followup-To hinzufügen';
 $labels['mdnrequest'] = 'Der Sender dieser Nachricht möchte gerne eine Lesebestätigung. Wollen Sie dieses bestätigen?';
 $labels['receiptread'] = 'Empfangsbestätigung (gelesen)';
 $labels['yourmessage'] = 'Dies ist eine Empfangsbestätigung für Ihre Nachricht';
@@ -330,11 +328,15 @@
 $labels['messagecount'] = 'Nachrichten';
 $labels['create'] = 'Erstellen';
 $labels['createfolder'] = 'Neuen Ordner erstellen';
-$labels['rename'] = 'Umbenennen';
-$labels['renamefolder'] = 'Ordner umbenennen';
-$labels['deletefolder'] = 'Ordner löschen';
 $labels['managefolders'] = 'Ordner verwalten';
 $labels['specialfolders'] = 'Spezialordner';
+$labels['properties'] = 'Eigenschaften';
+$labels['folderproperties'] = 'Ordnereigenschaften';
+$labels['parentfolder'] = 'Eltern';
+$labels['location'] = 'Speicherort';
+$labels['info'] = 'Informationen';
+$labels['getfoldersize'] = 'Ordnergröße anzeigen';
+$labels['changesubscription'] = 'Abonnieren';
 $labels['sortby'] = 'Sortieren nach';
 $labels['sortasc'] = 'Aufsteigend sortieren';
 $labels['sortdesc'] = 'Absteigend sortieren';
diff --git a/program/localization/de_DE/messages.inc b/program/localization/de_DE/messages.inc
index 7f563a7..47e4e01 100644
--- a/program/localization/de_DE/messages.inc
+++ b/program/localization/de_DE/messages.inc
@@ -55,10 +55,10 @@
 $messages['deletemessagesconfirm'] = 'Wollen Sie die ausgewählten Nachrichten wirklich löschen?';
 $messages['deletefolderconfirm'] = 'Wollen Sie diesen Ordner wirklich löschen?';
 $messages['purgefolderconfirm'] = 'Wollen Sie diesen Ordner wirklich leeren?';
-$messages['foldercreating'] = 'Erstelle Ordner...';
 $messages['folderdeleting'] = 'Lösche Ordner...';
-$messages['folderrenaming'] = 'Nenne Ordner um...';
 $messages['foldermoving'] = 'Verschiebe Ordner...';
+$messages['foldersubscribing'] = 'Abonniere Ordner...';
+$messages['folderunsubscribing'] = 'Ordner abbstellen...';
 $messages['formincomplete'] = 'Das Formular wurde nicht vollständig ausgefüllt';
 $messages['noemailwarning'] = 'Bitte geben Sie eine gültige E-Mail-Adresse ein';
 $messages['nonamewarning'] = 'Bitte geben Sie einen Namen ein';
@@ -78,6 +78,10 @@
 $messages['checking'] = 'Prüfe...';
 $messages['nospellerrors'] = 'Keine Rechtschreibfehler gefunden';
 $messages['folderdeleted'] = 'Ordner erfolgreich gelöscht';
+$messages['foldersubscribed'] = 'Der Ordner wurde erfolgreich abonniert';
+$messages['folderunsubscribed'] = 'Der Ordner wurde erfolgreich abbestellt';
+$messages['folderpurged'] = 'Der Ordner wurde erfolgreich gelöscht';
+$messages['folderexpunged'] = 'Der Ordner wurde erfolgreich gepackt';
 $messages['deletedsuccessfully'] = 'Erfolgreich gelöscht';
 $messages['converting'] = 'Entferne Formatierungen der Nachricht...';
 $messages['messageopenerror'] = 'Die Nachricht konnte nicht vom Server geladen werden';
@@ -94,7 +98,6 @@
 $messages['receiptsent'] = 'Lesebestätigung erfolgreich gesendet';
 $messages['errorsendingreceipt'] = 'Bestätigung konnte nicht gesendet werden';
 $messages['nodeletelastidentity'] = 'Diese Identität kann nicht gelöscht werden, da dies die letzte ist.';
-$messages['addsubfolderhint'] = 'Wird als Unterordner des aktuell selektierten Ordners erstellt';
 $messages['forbiddencharacter'] = 'Der Ordnername enthält ein ungültiges Zeichen';
 $messages['selectimportfile'] = 'Bitte wählen Sie eine Datei zum Importieren aus';
 $messages['addresswriterror'] = 'Das ausgewählte Adressbuch kann nicht verändert werden';
@@ -128,5 +131,11 @@
 $messages['messagecopied'] = 'Nachricht(en) erfolgreich kopiert';
 $messages['messagemarked'] = 'Nachricht(en) erfolgreich markiert';
 $messages['autocompletechars'] = 'Geben Sie mind. $min Zeichen für die Auto-Vervollständigung ein';
+$messages['namecannotbeempty'] = 'Der Name darf nicht leer sein';
+$messages['nametoolong'] = 'Der Name ist zu lang';
+$messages['folderupdated'] = 'Der Ordner wurde erfolgreich aktualisiert';
+$messages['foldercreated'] = 'Der Ordner wurde erfolgreich erstellt';
+$messages['errorreadonly'] = 'Die Aktion nicht ausgeführt werden. Der Ordner ist schreibgeschützt.';
+$messages['errornoperm'] = 'Die Aktion nicht ausgeführt werden. Zugriff verweigert.';
 
 ?>
diff --git a/program/localization/el_GR/labels.inc b/program/localization/el_GR/labels.inc
index 5303a08..1884770 100644
--- a/program/localization/el_GR/labels.inc
+++ b/program/localization/el_GR/labels.inc
@@ -238,9 +238,6 @@
 $labels['messagecount'] = 'Μηνύματα';
 $labels['create'] = 'Δημιουργία';
 $labels['createfolder'] = 'Δημιουργία νέου φακέλου';
-$labels['rename'] = 'Μετονομασία';
-$labels['renamefolder'] = 'Μετονομασία φακέλου';
-$labels['deletefolder'] = 'Διαγραφή φακέλου';
 $labels['managefolders'] = 'Διαχείριση φακέλων';
 $labels['specialfolders'] = 'Ειδικοί Φάκελοι';
 $labels['sortby'] = 'Ταξινόμηση κατά';
diff --git a/program/localization/el_GR/messages.inc b/program/localization/el_GR/messages.inc
index de617ce..0e781ad 100644
--- a/program/localization/el_GR/messages.inc
+++ b/program/localization/el_GR/messages.inc
@@ -52,9 +52,7 @@
 $messages['deletemessagesconfirm'] = 'Θέλετε να διαγράψετε το συγκεκριμένο μήνυμα/τα;';
 $messages['deletefolderconfirm'] = 'Θέλετε να διαγράψετε το συγκεκριμένο φάκελο;';
 $messages['purgefolderconfirm'] = 'Θέλετε να διαγράψετε όλα τα μηνύματα στο συγκεκριμένο φάκελο;';
-$messages['foldercreating'] = 'Δημιουργία φακέλου';
 $messages['folderdeleting'] = 'Διαγραφή φακέλου';
-$messages['folderrenaming'] = 'Μετονομασία φακέλου';
 $messages['foldermoving'] = 'Μεταφορά φακέλου';
 $messages['formincomplete'] = 'Η φόρμα δεν έχει συμπληρωθεί πλήρως';
 $messages['noemailwarning'] = 'Παρακαλώ εισάγετε έγκυρη διεύθυνση email';
@@ -88,7 +86,6 @@
 $messages['receiptsent'] = 'Επιτυχής αποστολή αναφοράς ανάγνωσης';
 $messages['errorsendingreceipt'] = 'Αποστολή αναφοράς απέτυχε';
 $messages['nodeletelastidentity'] = 'Δε μπορείτε να διαγράψετε αυτήν την ταυτότητα, είναι η τελευταία.';
-$messages['addsubfolderhint'] = 'Αυτός ο φάκελος θα δημιουργηθεί ως υποφάκελος του επιλεγμένου';
 $messages['forbiddencharacter'] = 'Η ονομασία φακέλου περιέχει μη επιτρεπτό χαρακτήρα';
 $messages['selectimportfile'] = 'Επιλέξτε αρχείο για ανέβασμα';
 $messages['addresswriterror'] = 'Η επιλεγμένη ατζέντα διευθύνσεων δεν είνα εγγράψιμη';
diff --git a/program/localization/en_GB/labels.inc b/program/localization/en_GB/labels.inc
index 44f4d11..7a36f00 100644
--- a/program/localization/en_GB/labels.inc
+++ b/program/localization/en_GB/labels.inc
@@ -38,11 +38,12 @@
 $labels['cc'] = 'Copy';
 $labels['bcc'] = 'Bcc';
 $labels['replyto'] = 'Reply-To';
+$labels['followupto'] = 'Followup-To';
 $labels['date'] = 'Date';
 $labels['size'] = 'Size';
 $labels['priority'] = 'Priority';
 $labels['organization'] = 'Organisation';
-$labels['reply-to'] = 'Reply-To';
+$labels['readstatus'] = 'Read status';
 $labels['mailboxlist'] = 'Folders';
 $labels['messagesfromto'] = 'Messages $from to $to of $count';
 $labels['threadsfromto'] = 'Threads $from to $to of $count';
@@ -96,7 +97,9 @@
 $labels['checkmail'] = 'Check for new messages';
 $labels['writenewmessage'] = 'Create a new message';
 $labels['replytomessage'] = 'Reply to sender';
-$labels['replytoallmessage'] = 'Reply to sender and all recipients';
+$labels['replytoallmessage'] = 'Reply to list or to sender and all recipients';
+$labels['replyall']  = 'Reply all';
+$labels['replylist'] = 'Reply list';
 $labels['forwardmessage'] = 'Forward the message';
 $labels['deletemessage'] = 'Delete message';
 $labels['movemessagetotrash'] = 'Move message to "Deleted Items"';
@@ -169,6 +172,7 @@
 $labels['charset'] = 'Charset';
 $labels['editortype'] = 'Editor type';
 $labels['returnreceipt'] = 'Return receipt';
+$labels['dsn'] = 'Delivery status notification';
 $labels['editidents'] = 'Edit identities';
 $labels['checkspelling'] = 'Check spelling';
 $labels['resumeediting'] = 'Resume editing';
@@ -193,6 +197,7 @@
 $labels['addcc'] = 'Add Cc';
 $labels['addbcc'] = 'Add Bcc';
 $labels['addreplyto'] = 'Add Reply-To';
+$labels['addfollowupto'] = 'Add Followup-To';
 $labels['mdnrequest'] = 'The sender of this message has asked to be notified when you read this message. Do you wish to notify the sender?';
 $labels['receiptread'] = 'Return Receipt (read)';
 $labels['yourmessage'] = 'This is a Return Receipt for your message';
@@ -204,6 +209,7 @@
 $labels['addcontact'] = 'Add new contact';
 $labels['editcontact'] = 'Edit contact';
 $labels['contacts'] = 'Contacts';
+$labels['contactproperties'] = 'Contact properties';
 $labels['edit'] = 'Edit';
 $labels['cancel'] = 'Cancel';
 $labels['save'] = 'Save';
@@ -251,6 +257,7 @@
 $labels['signature'] = 'Signature';
 $labels['dstactive'] = 'Summer time';
 $labels['htmleditor'] = 'Compose HTML messages';
+$labels['htmlonreply'] = 'on reply to HTML message only';
 $labels['htmlsignature'] = 'HTML signature';
 $labels['previewpane'] = 'Show preview pane';
 $labels['skin'] = 'Interface skin';
@@ -259,10 +266,11 @@
 $labels['uisettings'] = 'User Interface';
 $labels['serversettings'] = 'Server Settings';
 $labels['mailboxview'] = 'Mailbox View';
-$labels['mdnrequests'] = 'Sender notifications';
-$labels['askuser'] = 'ask the user';
+$labels['mdnrequests'] = 'On request for return receipt';
+$labels['askuser'] = 'ask each time';
 $labels['autosend'] = 'send automatically';
-$labels['autosendknown'] = 'send receipt to my contacts only';
+$labels['autosendknown'] = 'send receipt to my contacts, otherwise ask';
+$labels['autosendknownignore'] = 'send receipt to my contacts, otherwise ignore';
 $labels['ignore'] = 'ignore';
 $labels['readwhendeleted'] = 'Mark the message as read on delete';
 $labels['flagfordeletion'] = 'Flag the message for deletion instead of delete';
@@ -308,16 +316,14 @@
 $labels['previewpanemarkread'] = 'Mark previewed messages as read';
 $labels['afternseconds'] = 'after $n seconds';
 $labels['reqmdn'] = 'Always request a return receipt';
+$labels['reqdsn'] = 'Always request a delivery status notification';
+$labels['replysamefolder'] = 'Place replies in the folder of the message being replied to';
 $labels['folder'] = 'Folder';
 $labels['folders'] = 'Folders';
 $labels['foldername'] = 'Folder name';
-$labels['subscribed'] = 'Subscribed';
 $labels['messagecount'] = 'Messages';
 $labels['create'] = 'Create';
 $labels['createfolder'] = 'Create new folder';
-$labels['rename'] = 'Rename';
-$labels['renamefolder'] = 'Rename folder';
-$labels['deletefolder'] = 'Delete folder';
 $labels['managefolders'] = 'Manage folders';
 $labels['specialfolders'] = 'Special Folders';
 $labels['sortby'] = 'Sort by';
diff --git a/program/localization/en_GB/messages.inc b/program/localization/en_GB/messages.inc
index ec4f6e7..5c1286e 100644
--- a/program/localization/en_GB/messages.inc
+++ b/program/localization/en_GB/messages.inc
@@ -23,6 +23,7 @@
 $messages['sessionerror'] = 'Your session is invalid or has expired';
 $messages['imaperror'] = 'Connection to IMAP server failed';
 $messages['servererror'] = 'Server Error!';
+$messages['servererrormsg'] = 'Server Error: $msg';
 $messages['invalidrequest'] = 'Invalid request! No data was saved.';
 $messages['nomessagesfound'] = 'No messages found in this mailbox';
 $messages['loggedout'] = 'You have successfully terminated the session. Good bye!';
@@ -46,17 +47,15 @@
 $messages['senttooquickly'] = 'Please wait $sec sec(s). before sending this message';
 $messages['errorsavingsent'] = 'An error occurred while saving sent message';
 $messages['errorsaving'] = 'An error occurred while saving';
-$messages['errormoving'] = 'Could not move the message';
+$messages['errormoving'] = 'Could not move the message(s)';
 $messages['errorcopying'] = 'Could not copy the message(s)';
-$messages['errordeleting'] = 'Could not delete the message';
-$messages['errormarking'] = 'Could not mark the message';
+$messages['errordeleting'] = 'Could not delete the message(s)';
+$messages['errormarking'] = 'Could not mark the message(s)';
 $messages['deletecontactconfirm'] = 'Do you really want to delete the selected contact(s)?';
 $messages['deletemessagesconfirm'] = 'Do you really want to delete the selected message(s)?';
 $messages['deletefolderconfirm'] = 'Do you really want to delete this folder?';
 $messages['purgefolderconfirm'] = 'Do you really want to delete all messages in this folder?';
-$messages['foldercreating'] = 'Creating folder...';
 $messages['folderdeleting'] = 'Deleting folder...';
-$messages['folderrenaming'] = 'Renaming folder...';
 $messages['foldermoving'] = 'Moving folder...';
 $messages['formincomplete'] = 'The form was not completely filled out';
 $messages['noemailwarning'] = 'Please enter a valid email address';
@@ -86,12 +85,13 @@
 $messages['copyerror'] = 'Could not copy any addresses';
 $messages['sourceisreadonly'] = 'This address source is read-only';
 $messages['errorsavingcontact'] = 'Could not save the contact address';
-$messages['movingmessage'] = 'Moving message...';
-$messages['copyingmessage'] = 'Copying message...';
+$messages['movingmessage'] = 'Moving message(s)...';
+$messages['copyingmessage'] = 'Copying message(s)...';
+$messages['deletingmessage'] = 'Deleting message(s)...';
+$messages['markingmessage'] = 'Marking message(s)...';
 $messages['receiptsent'] = 'Successfully sent a read receipt';
 $messages['errorsendingreceipt'] = 'Could not send the receipt';
 $messages['nodeletelastidentity'] = 'You cannot delete this identity, it\'s your last one.';
-$messages['addsubfolderhint'] = 'This folder will be created as subfolder of the currently selected one';
 $messages['forbiddencharacter'] = 'Folder name contains a forbidden character';
 $messages['selectimportfile'] = 'Please select a file to upload';
 $messages['addresswriterror'] = 'The selected address book is not writeable';
@@ -109,10 +109,21 @@
 $messages['smtpfromerror'] = 'SMTP Error ($code): Failed to set sender "$from" ($msg)';
 $messages['smtptoerror'] = 'SMTP Error ($code): Failed to add recipient "$to" ($msg)';
 $messages['smtprecipientserror'] = 'SMTP Error: Unable to parse recipients list';
+$messages['smtpdsnerror'] = 'SMTP Error: Server does not support Delivery Status Notifications';
 $messages['smtperror'] = 'SMTP Error: $msg';
 $messages['emailformaterror'] = 'Incorrect e-mail address: $email';
 $messages['toomanyrecipients'] = 'Too many recipients. Reduce the number of recipients to $max.';
 $messages['maxgroupmembersreached'] = 'The number of group members exceeds the maximum of $max';
 $messages['internalerror'] = 'An internal error occured. Please try again';
+$messages['contactdelerror'] = 'Could not delete contact(s)';
+$messages['contactdeleted'] = 'Contact(s) deleted successfully';
+$messages['groupdeleted'] = 'Group deleted successfully';
+$messages['grouprenamed'] = 'Group renamed successfully';
+$messages['groupcreated'] = 'Group created successfully';
+$messages['messagedeleted'] = 'Message(s) deleted successfully';
+$messages['messagemoved'] = 'Message(s) moved successfully';
+$messages['messagecopied'] = 'Message(s) copied successfully';
+$messages['messagemarked'] = 'Message(s) marked successfully';
+$messages['autocompletechars'] = 'Enter at least $min characters for autocompletion';
 
-?>
+?>
\ No newline at end of file
diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc
index a212e65..dfeb1c2 100644
--- a/program/localization/en_US/labels.inc
+++ b/program/localization/en_US/labels.inc
@@ -46,18 +46,12 @@
 $labels['cc']      = 'Copy';
 $labels['bcc']     = 'Bcc';
 $labels['replyto'] = 'Reply-To';
-$labels['mailreplyto'] = 'Mail-Reply-To';
-$labels['mailfollowupto'] = 'Mail-Followup-To';
+$labels['followupto'] = 'Followup-To';
 $labels['date']    = 'Date';
 $labels['size']    = 'Size';
 $labels['priority'] = 'Priority';
 $labels['organization'] = 'Organization';
 $labels['readstatus'] = 'Read status';
-
-// aliases
-$labels['reply-to'] = $labels['replyto'];
-$labels['mail-reply-to'] = $labels['mailreplyto'];
-$labels['mail-followup-to'] = $labels['mailfollowupto'];
 
 $labels['mailboxlist'] = 'Folders';
 $labels['messagesfromto'] = 'Messages $from to $to of $count';
@@ -241,8 +235,7 @@
 $labels['addcc'] = 'Add Cc';
 $labels['addbcc'] = 'Add Bcc';
 $labels['addreplyto'] = 'Add Reply-To';
-$labels['addmailreplyto'] = 'Add Mail-Reply-To';
-$labels['addmailfollowupto'] = 'Add Mail-Followup-To';
+$labels['addfollowupto'] = 'Add Followup-To';
 
 // mdn
 $labels['mdnrequest'] = 'The sender of this message has asked to be notified when you read this message. Do you wish to notify the sender?';
@@ -387,11 +380,15 @@
 $labels['messagecount'] = 'Messages';
 $labels['create']  = 'Create';
 $labels['createfolder']  = 'Create new folder';
-$labels['rename'] = 'Rename';
-$labels['renamefolder'] = 'Rename folder';
-$labels['deletefolder']  = 'Delete folder';
 $labels['managefolders']  = 'Manage folders';
 $labels['specialfolders'] = 'Special Folders';
+$labels['properties'] = 'Properties';
+$labels['folderproperties'] = 'Folder properties';
+$labels['parentfolder'] = 'Parent folder';
+$labels['location'] = 'Location';
+$labels['info'] = 'Information';
+$labels['getfoldersize'] = 'Click to get folder size';
+$labels['changesubscription'] = 'Click to change subscription';
 
 $labels['sortby'] = 'Sort by';
 $labels['sortasc']  = 'Sort ascending';
diff --git a/program/localization/en_US/messages.inc b/program/localization/en_US/messages.inc
index 0f87c05..df78b0f 100644
--- a/program/localization/en_US/messages.inc
+++ b/program/localization/en_US/messages.inc
@@ -24,6 +24,8 @@
 $messages['imaperror'] = 'Connection to IMAP server failed';
 $messages['servererror'] = 'Server Error!';
 $messages['servererrormsg'] = 'Server Error: $msg';
+$messages['errorreadonly'] = 'Unable to perform operation. Folder is read-only';
+$messages['errornoperm'] = 'Unable to perform operation. Permission denied';
 $messages['invalidrequest'] = 'Invalid request! No data was saved.';
 $messages['nomessagesfound'] = 'No messages found in this mailbox';
 $messages['loggedout'] = 'You have successfully terminated the session. Good bye!';
@@ -55,10 +57,10 @@
 $messages['deletemessagesconfirm'] = 'Do you really want to delete the selected message(s)?';
 $messages['deletefolderconfirm']  = 'Do you really want to delete this folder?';
 $messages['purgefolderconfirm']  = 'Do you really want to delete all messages in this folder?';
-$messages['foldercreating'] = 'Creating folder...';
 $messages['folderdeleting'] = 'Deleting folder...';
-$messages['folderrenaming'] = 'Renaming folder...';
 $messages['foldermoving'] = 'Moving folder...';
+$messages['foldersubscribing'] = 'Subscribing folder...';
+$messages['folderunsubscribing'] = 'Unsubscribing folder...';
 $messages['formincomplete'] = 'The form was not completely filled out';
 $messages['noemailwarning'] = 'Please enter a valid email address';
 $messages['nonamewarning']  = 'Please enter a name';
@@ -78,6 +80,10 @@
 $messages['checking'] = 'Checking...';
 $messages['nospellerrors'] = 'No spelling errors found';
 $messages['folderdeleted'] = 'Folder successfully deleted';
+$messages['foldersubscribed'] = 'Folder successfully subscribed';
+$messages['folderunsubscribed'] = 'Folder successfully unsubscribed';
+$messages['folderpurged'] = 'Folder successfully purged';
+$messages['folderexpunged'] = 'Folder successfully emptied';
 $messages['deletedsuccessfully'] = 'Successfully deleted';
 $messages['converting'] = 'Removing formatting...';
 $messages['messageopenerror'] = 'Could not load message from server';
@@ -94,7 +100,6 @@
 $messages['receiptsent'] = 'Successfully sent a read receipt';
 $messages['errorsendingreceipt'] = 'Could not send the receipt';
 $messages['nodeletelastidentity'] = 'You cannot delete this identity, it\'s your last one.';
-$messages['addsubfolderhint'] = 'This folder will be created as subfolder of the currently selected one';
 $messages['forbiddencharacter'] = 'Folder name contains a forbidden character';
 $messages['selectimportfile'] = 'Please select a file to upload';
 $messages['addresswriterror'] = 'The selected address book is not writeable';
@@ -128,5 +133,9 @@
 $messages['messagecopied'] = 'Message(s) copied successfully';
 $messages['messagemarked'] = 'Message(s) marked successfully';
 $messages['autocompletechars'] = 'Enter at least $min characters for autocompletion';
+$messages['namecannotbeempty'] = 'Name cannot be empty';
+$messages['nametoolong'] = 'Name is too long';
+$messages['folderupdated'] = 'Folder updated successfully';
+$messages['foldercreated'] = 'Folder created successfully';
 
 ?>
diff --git a/program/localization/eo/labels.inc b/program/localization/eo/labels.inc
index df21704..06fafd5 100644
--- a/program/localization/eo/labels.inc
+++ b/program/localization/eo/labels.inc
@@ -220,9 +220,6 @@
 $labels['messagecount'] = 'Mesaĝoj';
 $labels['create'] = 'Kreu';
 $labels['createfolder'] = 'Kreu novan dosierujon';
-$labels['rename'] = 'Renomu';
-$labels['renamefolder'] = 'Renomu dosierujon';
-$labels['deletefolder'] = 'Forigu dosierujon';
 $labels['managefolders'] = 'Administru dosierujon';
 $labels['sortby'] = 'Ordigu per';
 $labels['sortasc'] = 'Ordigu kreskante';
diff --git a/program/localization/eo/messages.inc b/program/localization/eo/messages.inc
index 956aed0..4aa8522 100644
--- a/program/localization/eo/messages.inc
+++ b/program/localization/eo/messages.inc
@@ -75,7 +75,6 @@
 $messages['receiptsent'] = 'Sukcese sendis konfirmon';
 $messages['errorsendingreceipt'] = 'Ne povis sendi konfirmon';
 $messages['nodeletelastidentity'] = 'Vi ne povas forigi ĉi tiun identon, ĉar ĝi estas la lasta';
-$messages['addsubfolderhint'] = 'Ĉi tiu dosierujo estos farita kiel subdosierujo de la nune elektita dosierujo';
 $messages['forbiddencharacter'] = 'Dosierujo-nomo enhavas malpermesitan karaktron';
 
 ?>
diff --git a/program/localization/es_AR/labels.inc b/program/localization/es_AR/labels.inc
index 6c2d16b..25f0cf9 100644
--- a/program/localization/es_AR/labels.inc
+++ b/program/localization/es_AR/labels.inc
@@ -301,9 +301,6 @@
 $labels['messagecount'] = 'Mensajes';
 $labels['create'] = 'Crear';
 $labels['createfolder'] = 'Crear nueva carpeta';
-$labels['rename'] = 'Renombrar';
-$labels['renamefolder'] = 'Renombrar carpeta';
-$labels['deletefolder'] = 'Eliminar carpeta';
 $labels['managefolders'] = 'Administrar carpetas';
 $labels['specialfolders'] = 'Carpetas Especiales';
 $labels['sortby'] = 'Ordenar por';
diff --git a/program/localization/es_AR/messages.inc b/program/localization/es_AR/messages.inc
index 3843494..3319b60 100644
--- a/program/localization/es_AR/messages.inc
+++ b/program/localization/es_AR/messages.inc
@@ -57,9 +57,7 @@
 $messages['deletemessagesconfirm'] = '¿Realmente quiere eliminar los mensajes seleccionados?';
 $messages['deletefolderconfirm'] = '¿Realmente quiere eliminar esta carpeta?';
 $messages['purgefolderconfirm'] = '¿Realmente quiere eliminar todos los mensajes de esta carpeta?';
-$messages['foldercreating'] = 'Creando carpeta...';
 $messages['folderdeleting'] = 'Eliminando carpeta...';
-$messages['folderrenaming'] = 'Renombrando carpeta...';
 $messages['foldermoving'] = 'Moviendo carpeta...';
 $messages['formincomplete'] = 'No se han llenado todos los campos del formulario';
 $messages['noemailwarning'] = 'Por favor, introduzca un e-mail válido';
@@ -94,7 +92,6 @@
 $messages['receiptsent'] = 'La notificación de lectura se ha enviado con éxito.';
 $messages['errorsendingreceipt'] = 'No se ha podido enviar la notificación de lectura.';
 $messages['nodeletelastidentity'] = 'No se puede borrar esta identidad puesto que es la última.';
-$messages['addsubfolderhint'] = 'Esta carpeta se creará como una subcarpeta dentro de la carpeta seleccionada';
 $messages['forbiddencharacter'] = 'El nombre de la carpeta contiene un carácter prohibido';
 $messages['selectimportfile'] = 'Por favor, seleccione el archivo a subir';
 $messages['addresswriterror'] = 'La libreta de direcciones seleccionada es de solo-lectura';
diff --git a/program/localization/es_ES/labels.inc b/program/localization/es_ES/labels.inc
index 4e4829f..8365693 100644
--- a/program/localization/es_ES/labels.inc
+++ b/program/localization/es_ES/labels.inc
@@ -40,11 +40,15 @@
 $labels['cc'] = 'Copia';
 $labels['bcc'] = 'Cco';
 $labels['replyto'] = 'Respuesta a';
+$labels['followupto'] = 'Seguir a';
 $labels['date'] = 'Fecha';
 $labels['size'] = 'Tamaño';
 $labels['priority'] = 'Prioridad';
 $labels['organization'] = 'Organización';
+$labels['readstatus'] = 'Leer estado';
 $labels['reply-to'] = 'Respuesta a';
+$labels['mail-reply-to'] = 'Responder a';
+$labels['mail-followup-to'] = 'Seguir a';
 $labels['mailboxlist'] = 'Bandejas';
 $labels['messagesfromto'] = 'Mensajes $from a $to de $count';
 $labels['threadsfromto'] = 'Hilos $from a $to de $count';
@@ -99,6 +103,8 @@
 $labels['writenewmessage'] = 'Crear nuevo mensaje';
 $labels['replytomessage'] = 'Responder mensaje';
 $labels['replytoallmessage'] = 'Responder al emisor y a todos los destinatarios';
+$labels['replyall'] = 'Responder a todos';
+$labels['replylist'] = 'Responder a la lista';
 $labels['forwardmessage'] = 'Reenviar mensaje';
 $labels['deletemessage'] = 'Eliminar mensaje';
 $labels['movemessagetotrash'] = 'Mover mensaje a la papelera';
@@ -171,13 +177,15 @@
 $labels['charset'] = 'Codificación';
 $labels['editortype'] = 'Tipo de editor';
 $labels['returnreceipt'] = 'Acuse de recibo';
+$labels['dsn'] = 'Entrega de notificaciones de estado';
+$labels['editidents'] = 'Editar identidades';
 $labels['checkspelling'] = 'Revisar ortografía';
 $labels['resumeediting'] = 'Continuar edición';
 $labels['revertto'] = 'Revertir a';
 $labels['attachments'] = 'Adjuntos';
 $labels['upload'] = 'Subir';
 $labels['close'] = 'Cerrar';
-$labels['messageoptions']  = 'Opciones de mensaje...';
+$labels['messageoptions'] = 'Opciones de mensaje...';
 $labels['low'] = 'Bajo';
 $labels['lowest'] = 'Bajísimo';
 $labels['normal'] = 'Normal';
@@ -194,6 +202,7 @@
 $labels['addcc'] = 'Añadir Cc';
 $labels['addbcc'] = 'Añadir Cco';
 $labels['addreplyto'] = 'Añadir Respuesta a';
+$labels['addfollowupto'] = 'Añadir Seguir a';
 $labels['mdnrequest'] = 'El emisor de este mensaje desea ser notificado cuando usted lo lea. ¿Quiere enviar esta notificación?';
 $labels['receiptread'] = 'Notificación de lectura';
 $labels['yourmessage'] = 'Esta es una notificación de lectura de su mensaje';
@@ -205,6 +214,7 @@
 $labels['addcontact'] = 'Añadir nuevo contacto';
 $labels['editcontact'] = 'Editar contacto';
 $labels['contacts'] = 'Contactos';
+$labels['contactproperties'] = 'Propiedades del contacto';
 $labels['edit'] = 'Editar';
 $labels['cancel'] = 'Cancelar';
 $labels['save'] = 'Guardar';
@@ -252,6 +262,7 @@
 $labels['signature'] = 'Firma';
 $labels['dstactive'] = 'Cambio de horario';
 $labels['htmleditor'] = 'Componer mensaje en HTML';
+$labels['htmlonreply'] = 'En respuesta al mensaje sólo HTML';
 $labels['htmlsignature'] = 'Firma HTML';
 $labels['previewpane'] = 'Mostrar vista preliminar';
 $labels['skin'] = 'Apariencia de la interfaz';
@@ -263,6 +274,8 @@
 $labels['mdnrequests'] = 'Notificaciones de envío';
 $labels['askuser'] = 'preguntar al usuario';
 $labels['autosend'] = 'enviar automáticamente';
+$labels['autosendknown'] = 'Añade el destinatario a mis contacatos, sino pregunta me';
+$labels['autosendknownignore'] = 'Añade el destinatario a mis contacatos, ignoralo';
 $labels['ignore'] = 'ignorar';
 $labels['readwhendeleted'] = 'Marcar el mensaje como leído al borrarlo';
 $labels['flagfordeletion'] = 'Marcar el mensaje para borrarse en vez de borrarlo';
@@ -307,6 +320,9 @@
 $labels['insertsignature'] = 'Insertar firma';
 $labels['previewpanemarkread'] = 'Marcar mensaje previsualizado como leído';
 $labels['afternseconds'] = 'después de $n segundos';
+$labels['reqmdn'] = 'Solicitar siempre un acuse de recibo';
+$labels['reqdsn'] = 'Solicitar siempre la entrega de notificaciones de estado';
+$labels['replysamefolder'] = 'Coloque las respuestas en la carpeta del mensaje que se responde';
 $labels['folder'] = 'Bandeja';
 $labels['folders'] = 'Bandejas';
 $labels['foldername'] = 'Nombre de bandeja';
@@ -314,9 +330,6 @@
 $labels['messagecount'] = 'Mensajes';
 $labels['create'] = 'Crear';
 $labels['createfolder'] = 'Crear nueva bandeja';
-$labels['rename'] = 'Renombrar';
-$labels['renamefolder'] = 'Renombrar bandeja';
-$labels['deletefolder'] = 'Eliminar bandeja';
 $labels['managefolders'] = 'Administrar bandejas';
 $labels['specialfolders'] = 'Bandejas Especiales';
 $labels['sortby'] = 'Ordenar por';
diff --git a/program/localization/es_ES/messages.inc b/program/localization/es_ES/messages.inc
index d2d4a83..24014a7 100644
--- a/program/localization/es_ES/messages.inc
+++ b/program/localization/es_ES/messages.inc
@@ -25,6 +25,7 @@
 $messages['sessionerror'] = 'Su sesión no existe o ha expirado';
 $messages['imaperror'] = 'Error de conexión con el servidor IMAP';
 $messages['servererror'] = '¡Error en el servidor!';
+$messages['servererrormsg'] = 'Error del Servidor: $msg';
 $messages['invalidrequest'] = '¡Petición no válida! No se han guardado los datos.';
 $messages['nomessagesfound'] = 'No se han encontrado mensajes en esta casilla';
 $messages['loggedout'] = 'Ha cerrado la sesión. ¡Hasta pronto!';
@@ -56,9 +57,7 @@
 $messages['deletemessagesconfirm'] = '¿Realmente quiere eliminar los mensajes seleccionados?';
 $messages['deletefolderconfirm'] = '¿Realmente quiere eliminar esta carpeta?';
 $messages['purgefolderconfirm'] = '¿Realmente quiere eliminar todos los mensajes de esta carpeta?';
-$messages['foldercreating'] = 'Creando carpeta...';
 $messages['folderdeleting'] = 'Borrando carpeta...';
-$messages['folderrenaming'] = 'Renombrando carpeta...';
 $messages['foldermoving'] = 'Moviendo carpeta...';
 $messages['formincomplete'] = 'No ha rellenado todos los campos del formulario';
 $messages['noemailwarning'] = 'Por favor, introduzca un e-mail válido';
@@ -90,10 +89,11 @@
 $messages['errorsavingcontact'] = 'No se pudo guardar la dirección de contacto';
 $messages['movingmessage'] = 'Moviendo mensaje...';
 $messages['copyingmessage'] = 'Copiando mensaje...';
+$messages['deletingmessage'] = 'Eliminando Mensaje(s)...';
+$messages['markingmessage'] = 'Marcando Mensaje(s)...';
 $messages['receiptsent'] = 'La notificación de lectura se ha enviado con éxito.';
 $messages['errorsendingreceipt'] = 'No se ha podido enviar la notificación de lectura.';
 $messages['nodeletelastidentity'] = 'No se puede borrar esta identidad puesto que es la última.';
-$messages['addsubfolderhint'] = 'Esta carpeta se creará como una subcarpeta dentro de la carpeta seleccionada';
 $messages['forbiddencharacter'] = 'El nombre de la carpeta contiene un carácter prohibido';
 $messages['selectimportfile'] = 'Por favor, seleccione un archivo para subir';
 $messages['addresswriterror'] = 'No se puede escribir la dirección de contacto seleccionada';
@@ -111,10 +111,21 @@
 $messages['smtpfromerror'] = 'Error SMTP ($code): No se ha podido asignar el emisor "$from" ($msg)';
 $messages['smtptoerror'] = 'Error SMTP ($code): No se ha podido establecer remitente "$to" ($msg)';
 $messages['smtprecipientserror'] = 'Error SMTP: No es posible analizar la lista de destinatarios';
+$messages['smtpdsnerror'] = 'Error SMTP: No hay soporte para las Notificaciones de Entrega';
 $messages['smtperror'] = 'Error SMTP: $msg';
 $messages['emailformaterror'] = 'Dirección e-mail incorrecta: $email';
 $messages['toomanyrecipients'] = 'Hay demasiados destinatarios. Reduzca el número de destinatarios a $max.';
 $messages['maxgroupmembersreached'] = 'El número de miembros del grupo excede el máximo de $max.';
 $messages['internalerror'] = 'Ocurrió un error interno. Por favor intentalo de nuevo';
+$messages['contactdelerror'] = 'No se ha podido eliminar el contacto(s)';
+$messages['contactdeleted'] = 'Contacto(s) eliminado(s) correctamente';
+$messages['groupdeleted'] = 'Grupo eliminado correctamente';
+$messages['grouprenamed'] = 'Grupo renombrado correctamente';
+$messages['groupcreated'] = 'Grupo creado correctamente';
+$messages['messagedeleted'] = 'Mensaje(s) eliminado(s) correctamente';
+$messages['messagemoved'] = 'Mensaje(s) movido(s) correctamente';
+$messages['messagecopied'] = 'Mensaje(s) copiado(s) correctamente';
+$messages['messagemarked'] = 'Mensaje(s) marcado(s) correctamente';
+$messages['autocompletechars'] = 'Introduce al menos $min caracteres para autocompletar';
 
 ?>
diff --git a/program/localization/et_EE/labels.inc b/program/localization/et_EE/labels.inc
index 6f8434f..a80155d 100644
--- a/program/localization/et_EE/labels.inc
+++ b/program/localization/et_EE/labels.inc
@@ -40,8 +40,7 @@
 $labels['cc'] = 'Koopia';
 $labels['bcc'] = 'Pimekoopia';
 $labels['replyto'] = 'Vastus aadressile';
-$labels['mailreplyto'] = 'Mail-Reply-To';
-$labels['mailfollowupto'] = 'Mail-Followup-To';
+$labels['followupto'] = 'Followup-To';
 $labels['date'] = 'Kuupäev';
 $labels['size'] = 'Suurus';
 $labels['priority'] = 'Tähtsus';
@@ -203,8 +202,7 @@
 $labels['addcc'] = 'Lisa koopia';
 $labels['addbcc'] = 'Lisa pimekoopia';
 $labels['addreplyto'] = 'Lisa vastus aadressile';
-$labels['addmailreplyto'] = 'Lisa Mail-Reply-To';
-$labels['addmailfollowupto'] = 'Lisa Mail-Followup-To';
+$labels['addfollowupto'] = 'Lisa Followup-To';
 $labels['mdnrequest'] = 'Selle kirja saatja soovib saada kinnitust kirja lugemise kohta. Kas soovid kinnituse saata?';
 $labels['receiptread'] = 'Kättesaamiskinnitus (leotud)';
 $labels['yourmessage'] = 'See on sinu saadetud kirja kättesaamiskinnitus';
@@ -332,11 +330,15 @@
 $labels['messagecount'] = 'Kirju';
 $labels['create'] = 'Loo';
 $labels['createfolder'] = 'Uue kausta loomine';
-$labels['rename'] = 'Nimeta ümber';
-$labels['renamefolder'] = 'Nimeta olemasolev kaust ümber';
-$labels['deletefolder'] = 'Kustuta kaust';
 $labels['managefolders'] = 'Halda kaustu';
 $labels['specialfolders'] = 'Erilised kaustad';
+$labels['properties'] = 'Omadused';
+$labels['folderproperties'] = 'Kausta omadused';
+$labels['parentfolder'] = 'Ülemine kaust';
+$labels['location'] = 'Asukoht';
+$labels['info'] = 'Teave';
+$labels['getfoldersize'] = 'Kliki kausta suuruse teadasaamiseks';
+$labels['changesubscription'] = 'Kliki kausta tellimuste muutmiseks';
 $labels['sortby'] = 'Järjesta';
 $labels['sortasc'] = 'Järjesta kasvavalt';
 $labels['sortdesc'] = 'Järjesta kahanevalt';
diff --git a/program/localization/et_EE/messages.inc b/program/localization/et_EE/messages.inc
index f679277..391b04e 100644
--- a/program/localization/et_EE/messages.inc
+++ b/program/localization/et_EE/messages.inc
@@ -26,6 +26,8 @@
 $messages['imaperror'] = 'Ei õnnestunud IMAP serveriga ühendust luua';
 $messages['servererror'] = 'Serveri tõrge!';
 $messages['servererrormsg'] = 'Serveri tõrge: $msg';
+$messages['errorreadonly'] = 'Operatsioon nurjus. Kaustale on vaid lugemisõigus';
+$messages['errornoperm'] = 'Operatsioon nurjus. Ligipääsu õigused puuduvad';
 $messages['invalidrequest'] = 'Lubamatu päring! Andmeid ei salvestatud.';
 $messages['nomessagesfound'] = 'Postkast paistab tühi olevat';
 $messages['loggedout'] = 'Sinu seanss on edukalt lõpetatud. Nägemiseni!';
@@ -57,10 +59,10 @@
 $messages['deletemessagesconfirm'] = 'Soovid valitud kirja(d) kustutada?';
 $messages['deletefolderconfirm'] = 'Soovid selle kataloogi kindlasti kustutada?';
 $messages['purgefolderconfirm'] = 'Soovid sellest kaustast kõik kirjad kustutada?';
-$messages['foldercreating'] = 'Loon kausta...';
 $messages['folderdeleting'] = 'Kustutan kausta...';
-$messages['folderrenaming'] = 'Nimetan kausta ümber...';
 $messages['foldermoving'] = 'Liigutan kausta...';
+$messages['foldersubscribing'] = 'Tellin kausta...';
+$messages['folderunsubscribing'] = 'Peatan kausta tellimuse...';
 $messages['formincomplete'] = 'Vormi kõik väljad ei ole täidetud';
 $messages['noemailwarning'] = 'Palun sisesta toimiv e-posti aadress';
 $messages['nonamewarning'] = 'Palun sisesta nimi';
@@ -80,6 +82,10 @@
 $messages['checking'] = 'Kontrollin...';
 $messages['nospellerrors'] = 'Õigekirjavigu ei leitud';
 $messages['folderdeleted'] = 'Kausta kustutamine õnnestus';
+$messages['foldersubscribed'] = 'Kausta tellimine õnnestus';
+$messages['folderunsubscribed'] = 'Kausta tellimise peatamine õnnestus';
+$messages['folderpurged'] = 'Kaust puhastatud edukalt';
+$messages['folderexpunged'] = 'Kaust tühjendatud edukalt';
 $messages['deletedsuccessfully'] = 'Edukalt kustutatud';
 $messages['converting'] = 'Eemaldan kirjast vormindust...';
 $messages['messageopenerror'] = 'Kirjade serverist laadimine ebaõnnestus';
@@ -96,7 +102,6 @@
 $messages['receiptsent'] = 'Kättesaamiskinnitus saadetud';
 $messages['errorsendingreceipt'] = 'Ei õnnestunud kättesaamiskinnitust saata';
 $messages['nodeletelastidentity'] = 'See identiteet on viimane ja seda ei saa kustutada.';
-$messages['addsubfolderhint'] = 'See kataloog luuakse valitud kausta alamkataloogina.';
 $messages['forbiddencharacter'] = 'Kausta nimi sisaldab keelatud sümbolit';
 $messages['selectimportfile'] = 'Palun vali üleslaadimiseks fail';
 $messages['addresswriterror'] = 'Valitud aadressiraamat pole kirjutatav';
@@ -130,8 +135,9 @@
 $messages['messagecopied'] = 'Kiri edukalt kopeeritud';
 $messages['messagemarked'] = 'Kiri edukalt märgitud';
 $messages['autocompletechars'] = 'Sisesta vähemalt $min märki autocompleteks';
+$messages['namecannotbeempty'] = 'Nimi ei saa olla tühi';
+$messages['nametoolong'] = 'Nimi liiga pikk';
+$messages['folderupdated'] = 'Kaust uuendatud edukalt';
+$messages['foldercreated'] = 'Kaust loodud edukalt';
 
 ?>
-
-
-
diff --git a/program/localization/eu_ES/labels.inc b/program/localization/eu_ES/labels.inc
index 1572ce2..9080f8a 100644
--- a/program/localization/eu_ES/labels.inc
+++ b/program/localization/eu_ES/labels.inc
@@ -224,9 +224,6 @@
 $labels['messagecount'] = 'Mezuak';
 $labels['create'] = 'Sortu';
 $labels['createfolder'] = 'Karpeta berria sortu';
-$labels['rename'] = 'Berrizendatu';
-$labels['renamefolder'] = 'Karpeta berrizendatu';
-$labels['deletefolder'] = 'Karpeta ezabatu';
 $labels['managefolders'] = 'Karpeta kudeaketa';
 $labels['specialfolders'] = 'Karpeta bereziak';
 $labels['sortby'] = 'Honela ordenatu';
diff --git a/program/localization/eu_ES/messages.inc b/program/localization/eu_ES/messages.inc
index d3787af..df2af02 100644
--- a/program/localization/eu_ES/messages.inc
+++ b/program/localization/eu_ES/messages.inc
@@ -78,7 +78,6 @@
 $messages['receiptsent'] = 'Ondo bidalia irakurritako agiria';
 $messages['errorsendingreceipt'] = 'Ezin da agiria bidali';
 $messages['nodeletelastidentity'] = 'Ezin da izaera hau ezabatu, zure bakarra da';
-$messages['addsubfolderhint'] = 'Aukeratutakoaren azpikarpeta bezala sortuko da karpeta hau';
 $messages['forbiddencharacter'] = 'Karpeta izenak debekatutako karaktereak ditu';
 
 ?>
diff --git a/program/localization/fa/labels.inc b/program/localization/fa/labels.inc
index 3bf67a6..1df8743 100644
--- a/program/localization/fa/labels.inc
+++ b/program/localization/fa/labels.inc
@@ -247,13 +247,9 @@
 $labels['folder'] = 'پوشه';
 $labels['folders'] = 'پوشه‌ها';
 $labels['foldername'] = 'نام پوشه';
-$labels['subscribed'] = 'مورد اشتراک';
 $labels['messagecount'] = 'پیغام‌ها';
 $labels['create'] = 'ایجاد';
 $labels['createfolder'] = 'ایجاد پوشه‌ی جدید';
-$labels['rename'] = 'تغییر نام';
-$labels['renamefolder'] = 'تغییر نام پوشه';
-$labels['deletefolder'] = 'حذف پوشه';
 $labels['managefolders'] = 'مدیریت پوشه‌ها';
 $labels['specialfolders'] = 'پوشه های ویژه';
 $labels['sortby'] = 'مرتب‌سازی بر اساس';
diff --git a/program/localization/fa/messages.inc b/program/localization/fa/messages.inc
index 69146df..1a9673a 100644
--- a/program/localization/fa/messages.inc
+++ b/program/localization/fa/messages.inc
@@ -50,9 +50,7 @@
 $messages['deletemessagesconfirm'] = 'آیا واقعاً می‌خواهید پیغام (های) انتخاب شده را حذف کنید؟';
 $messages['deletefolderconfirm'] = 'آیا واقعاً می‌خواهید این پوشه را حذف کنید؟';
 $messages['purgefolderconfirm'] = 'آیا واقعاً می‌خواهید همه‌ی پیغام‌های داخل این پوشه را حذف کنید؟';
-$messages['foldercreating'] = '...در حال ایجاد پوشه ';
 $messages['folderdeleting'] = '...در حال حذف پوشه ';
-$messages['folderrenaming'] = '...در حال تغییر نام پوشه ';
 $messages['foldermoving'] = '...در حال انتقال پوشه ';
 $messages['formincomplete'] = 'فرم کاملاً پر نشده بود';
 $messages['noemailwarning'] = 'لطفاً یک نشانی ایمیل معتبر وارد کنید';
@@ -85,7 +83,6 @@
 $messages['receiptsent'] = 'رسید خواندن با موفقیت ارسال شد';
 $messages['errorsendingreceipt'] = 'ناتوان در ارسال رسید';
 $messages['nodeletelastidentity'] = '.نمی‌توانید این هویت را حذف کنید، زیرا آخرین هویت شماست';
-$messages['addsubfolderhint'] = 'پوشه به عنوان زیرپوشه ای ساخته خواهد شد که هم اکنون انتخاب شده است';
 $messages['forbiddencharacter'] = 'نام پوشه شامل یک حرف غیر مجاز است';
 $messages['selectimportfile'] = 'لطفاً فایل را جهت بارگذاری انتخاب کنید';
 $messages['addresswriterror'] = 'در دفترچه تلفن انتخابی ، اجازه نوشتن ندارید';
diff --git a/program/localization/fa_AF/labels.inc b/program/localization/fa_AF/labels.inc
index 1fc3a01..19700a5 100644
--- a/program/localization/fa_AF/labels.inc
+++ b/program/localization/fa_AF/labels.inc
@@ -287,9 +287,6 @@
 $labels['messagecount'] = 'پيغام ها ';
 $labels['create']  = 'ایجاد کردن';
 $labels['createfolder']  = 'ایجاد پوشه جدید';
-$labels['rename'] = 'تغيير نام ';
-$labels['renamefolder'] = 'تغييرنام پوشه ';
-$labels['deletefolder']  = 'حذف کردن پوشه ';
 $labels['managefolders']  = 'اداره کردن پوشه ها ';
 $labels['specialfolders'] = 'پوشه های مخصوص';
 
diff --git a/program/localization/fa_AF/messages.inc b/program/localization/fa_AF/messages.inc
index 17394ac..f298e0f 100644
--- a/program/localization/fa_AF/messages.inc
+++ b/program/localization/fa_AF/messages.inc
@@ -31,9 +31,7 @@
 $messages['deletemessagesconfirm'] = 'آيا واقعاً شما ميخواهيد که پيغام هاي انتخاب شده را حذف کنيد؟ ';
 $messages['deletefolderconfirm']  = 'آيا واقعاً شما ميخواهيد که اين پوشه را حذف کنيد؟ ';
 $messages['purgefolderconfirm']  = 'آيا واقعاً شما ميخواهيد  تمام پيغام های که  در اين پوشه وجود دارد حذف کنيد؟ ';
-$messages['foldercreating'] = 'در حال ایجاد پوشه';
 $messages['folderdeleting'] = 'در حال حذف پوشه';
-$messages['folderrenaming'] = 'در حال تغییر نام پوشه';
 $messages['foldermoving'] = 'در حال انتقال پوشه';
 $messages['formincomplete'] = 'فورمه بصورت مکمل خانه پري نه شده است ';
 $messages['noemailwarning'] = 'لطفاً يک ايميل ادرس موجود را داخل کنيد ';
@@ -66,7 +64,6 @@
 $messages['receiptsent'] = 'یک رسید برای ارسال کننده این پیام فرستاده شد.';
 $messages['errorsendingreceipt'] = 'رسيد ارسال شده نتوانست  ';
 $messages['nodeletelastidentity'] = 'شما این شناخت نامه را حذف کرده نمیتوانید. این آخرین شناخت نامه شما است.';
-$messages['addsubfolderhint'] = 'این پوشه به حیث پوشه فرعی پوشه انتخاب شده فعلی ساخته خواهد شد.';
 $messages['forbiddencharacter'] = 'نام پوشه دارای یک کرکتر ممنوعه است.';
 $messages['selectimportfile'] = 'لطفاً یک فایل را برای آپلود کردن انتخاب نمایید.';
 $messages['addresswriterror'] = 'کتابچه آدرس انتخاب شده دارای اجازه نامه نوشتاری نیست.';
diff --git a/program/localization/fi_FI/labels.inc b/program/localization/fi_FI/labels.inc
index 31aaf83..45a8032 100644
--- a/program/localization/fi_FI/labels.inc
+++ b/program/localization/fi_FI/labels.inc
@@ -308,9 +308,6 @@
 $labels['messagecount'] = 'Viestejä';
 $labels['create'] = 'Luo uusi';
 $labels['createfolder'] = 'Luo uusi kansio';
-$labels['rename'] = 'Nimeä uudelleen';
-$labels['renamefolder'] = 'Nimeä kansio uudelleen';
-$labels['deletefolder'] = 'Poista kansio';
 $labels['managefolders'] = 'Kansioiden hallinta';
 $labels['specialfolders'] = 'Erikoiskansiot';
 $labels['sortby'] = 'Järjestä';
diff --git a/program/localization/fi_FI/messages.inc b/program/localization/fi_FI/messages.inc
index ddf98f4..641dedf 100644
--- a/program/localization/fi_FI/messages.inc
+++ b/program/localization/fi_FI/messages.inc
@@ -55,9 +55,7 @@
 $messages['deletemessagesconfirm'] = 'Haluatko varmasti poistaa valitut viestit?';
 $messages['deletefolderconfirm'] = 'Haluatko varmasti poistaa kansion?';
 $messages['purgefolderconfirm'] = 'Haluatko varmasti poistaa kaikki viestit kansiosta?';
-$messages['foldercreating'] = 'Luodaan kansiota...';
 $messages['folderdeleting'] = 'Poistetaan kansiota...';
-$messages['folderrenaming'] = 'Nimetään kansiota...';
 $messages['foldermoving'] = 'Siirretään kansiota...';
 $messages['formincomplete'] = 'Lomakkeen tiedot olivat puutteelliset';
 $messages['noemailwarning'] = 'Anna sähköpostiosoite';
@@ -92,7 +90,6 @@
 $messages['receiptsent'] = 'Lukukuittaus lähetetty onnistuneesti';
 $messages['errorsendingreceipt'] = 'Lukukuittausta ei voitu lähettää';
 $messages['nodeletelastidentity'] = 'Et voi poistaa tätä identiteettiä, koska se on ainoa jäljelläoleva';
-$messages['addsubfolderhint'] = 'Uusi kansio luodaan valitun kansion alikansiona';
 $messages['forbiddencharacter'] = 'Kansion nimessä on kiellettyjä merkkejä';
 $messages['selectimportfile'] = 'Valitse lähetettävä tiedosto';
 $messages['addresswriterror'] = 'Valittuun osoitekirjaan ei voi kirjoittaa';
diff --git a/program/localization/fr_FR/labels.inc b/program/localization/fr_FR/labels.inc
index 09028f2..a3e4bc0 100644
--- a/program/localization/fr_FR/labels.inc
+++ b/program/localization/fr_FR/labels.inc
@@ -44,6 +44,7 @@
 $labels['size'] = 'Taille';
 $labels['priority'] = 'Priorité';
 $labels['organization'] = 'Organisation';
+$labels['readstatus'] = 'Status de lecture';
 $labels['reply-to'] = 'Répondre à';
 $labels['mailboxlist'] = 'Dossiers';
 $labels['messagesfromto'] = 'Messages de $from à $to sur $count';
@@ -99,6 +100,8 @@
 $labels['writenewmessage'] = 'Écrire un nouveau message';
 $labels['replytomessage'] = 'Répondre au message';
 $labels['replytoallmessage'] = 'Répondre à tous';
+$labels['replyall'] = 'Répondre à tous';
+$labels['replylist'] = 'Répondre à la liste';
 $labels['forwardmessage'] = 'Transmettre le message';
 $labels['deletemessage'] = 'Déplacer le message dans la corbeille';
 $labels['movemessagetotrash'] = 'Déplacer le message dans la corbeille';
@@ -171,6 +174,7 @@
 $labels['charset'] = 'Encodage';
 $labels['editortype'] = 'Type d\'éditeur';
 $labels['returnreceipt'] = 'Accusé de réception';
+$labels['dsn'] = 'Notification d\'état de distribution';
 $labels['editidents'] = 'Modifier les identités';
 $labels['checkspelling'] = 'Vérifier l\'orthographe';
 $labels['resumeediting'] = 'Retourner à l\'édition';
@@ -206,6 +210,7 @@
 $labels['addcontact'] = 'Ajouter le contact sélectionné à votre Carnet d\'adresses';
 $labels['editcontact'] = 'Modifier le contact';
 $labels['contacts'] = 'Contacts';
+$labels['contactproperties'] = 'Propriétés de contact';
 $labels['edit'] = 'Modifier';
 $labels['cancel'] = 'Annuler';
 $labels['save'] = 'Sauvegarder';
@@ -253,6 +258,7 @@
 $labels['signature'] = 'Signature';
 $labels['dstactive'] = 'Heure d\'été';
 $labels['htmleditor'] = 'Composer un message au format HTML';
+$labels['htmlonreply'] = 'en réponse aux messages HTML uniquement';
 $labels['htmlsignature'] = 'Signature HTML';
 $labels['previewpane'] = 'Afficher le panneau d\'aperçu';
 $labels['skin'] = 'Thème de l\'interface';
@@ -265,6 +271,7 @@
 $labels['askuser'] = 'demander à l\'utilisateur';
 $labels['autosend'] = 'envoyer automatiquement';
 $labels['autosendknown'] = 'Envoyer un avis de réception uniquement à mes contacts';
+$labels['autosendknownignore'] = 'envoie un accusé à mes contacts, sinon ignorer';
 $labels['ignore'] = 'ignorer';
 $labels['readwhendeleted'] = 'Marquer le message comme lu à la suppression';
 $labels['flagfordeletion'] = 'Mettre le drapeau de suppression au lieu de supprimer';
@@ -310,6 +317,8 @@
 $labels['previewpanemarkread'] = 'Marquer les messages prévisualisés comme lus';
 $labels['afternseconds'] = 'après $n secondes';
 $labels['reqmdn'] = 'Toujours demandé un avis de réception';
+$labels['reqdsn'] = 'Toujours demander une notification d\'état de distribution';
+$labels['replysamefolder'] = 'Placer les réponses dans le dossier du message étant répondu';
 $labels['folder'] = 'Dossier';
 $labels['folders'] = 'Dossiers';
 $labels['foldername'] = 'Nom du dossier';
@@ -317,11 +326,15 @@
 $labels['messagecount'] = 'Messages';
 $labels['create'] = 'Créer';
 $labels['createfolder'] = 'Créer un nouveau dossier';
-$labels['rename'] = 'Renommer';
-$labels['renamefolder'] = 'Renommer le dossier';
-$labels['deletefolder'] = 'Supprimer le dossier';
 $labels['managefolders'] = 'Organiser les dossiers';
 $labels['specialfolders'] = 'Dossiers spéciaux';
+$labels['properties'] = 'Propriétés';
+$labels['folderproperties'] = 'Propriétés du dossier';
+$labels['parentfolder'] = 'Dossier parant';
+$labels['location'] = 'Localisation';
+$labels['info'] = 'Information';
+$labels['getfoldersize'] = 'Cliquer pour obtenir la taille de dossier';
+$labels['changesubscription'] = 'Cliquer pour modifier l\'inscription';
 $labels['sortby'] = 'Trier par';
 $labels['sortasc'] = 'Tri ascendant';
 $labels['sortdesc'] = 'Tri descendant';
diff --git a/program/localization/fr_FR/messages.inc b/program/localization/fr_FR/messages.inc
index a3018fa..6623948 100644
--- a/program/localization/fr_FR/messages.inc
+++ b/program/localization/fr_FR/messages.inc
@@ -25,6 +25,7 @@
 $messages['sessionerror'] = 'Votre session est invalide ou a expiré';
 $messages['imaperror'] = 'Erreur de connexion au serveur IMAP';
 $messages['servererror'] = 'Erreur Serveur !';
+$messages['servererrormsg'] = 'Erreur du serveur: $msg';
 $messages['invalidrequest'] = 'Requête invalide ! Aucune donnée n\'a été sauvegardée.';
 $messages['nomessagesfound'] = 'Aucun message trouvé dans cette boîte aux lettres';
 $messages['loggedout'] = 'Vous venez de vous déconnecter avec succès. Au revoir !';
@@ -56,9 +57,7 @@
 $messages['deletemessagesconfirm'] = 'Voulez-vous vraiment supprimer le(s) message(s) sélectionné(s) ?';
 $messages['deletefolderconfirm'] = 'Voulez-vous vraiment effacer ce dossier ?';
 $messages['purgefolderconfirm'] = 'Voulez-vous vraiment effacer tous les messages de ce dossier ?';
-$messages['foldercreating'] = 'Création du dossier...';
 $messages['folderdeleting'] = 'Suppression du dossier...';
-$messages['folderrenaming'] = 'Renommage du dossier...';
 $messages['foldermoving'] = 'Déplacement du dossier...';
 $messages['formincomplete'] = 'Le formulaire n\'a pas été entièrement rempli';
 $messages['noemailwarning'] = 'Veuillez spécifier un courriel valide';
@@ -90,10 +89,11 @@
 $messages['errorsavingcontact'] = 'Ne peut pas enregistrer l\'adresse du contact';
 $messages['movingmessage'] = 'Déplacement du message...';
 $messages['copyingmessage'] = 'Copie du message ...';
+$messages['deletingmessage'] = 'Suppression des messages...';
+$messages['markingmessage'] = 'Marquage des messages...';
 $messages['receiptsent'] = 'L\'accusé de réception a bien été envoyé';
 $messages['errorsendingreceipt'] = 'L\'accusé de réception n\'a pas pu être envoyé';
 $messages['nodeletelastidentity'] = 'Vous ne pouvez pas effacer votre seule identité.';
-$messages['addsubfolderhint'] = 'Ce dossier sera créé comme sous-dossier de celui sélectionné.';
 $messages['forbiddencharacter'] = 'Le nom du dossier contient un caractère interdit';
 $messages['selectimportfile'] = 'Veuillez sélectionner un fichier à envoyer';
 $messages['addresswriterror'] = 'Impossible d\'écrire dans le carnet d\'adresse sélectionné';
@@ -111,10 +111,21 @@
 $messages['smtpfromerror'] = 'Erreur SMTP ($code): Impossible de définir l\'expéditeur "$from" ($msg)';
 $messages['smtptoerror'] = 'Erreur SMTP ($code): Impossible d\'ajouter le destinataire "$to" ($msg)';
 $messages['smtprecipientserror'] = 'Erreur SMTP: Impossible de lire la liste des destinataires';
+$messages['smtpdsnerror'] = 'Erreur SMTP: Pas de support des notifications d\'état de distribution';
 $messages['smtperror'] = 'Erreur SMTP: $msg';
 $messages['emailformaterror'] = 'Adresse email incorrecte: $email';
 $messages['toomanyrecipients'] = 'Trop de destinataires. Réduisez leur nombre à $max maximum.';
 $messages['maxgroupmembersreached'] = 'Le nombre de membres du groupe dépasse le maximum de $max.';
 $messages['internalerror'] = 'Une erreur interne est survenue. Merci de réessayer';
+$messages['contactdelerror'] = 'Les contacts n\'ont pas pu être supprimés';
+$messages['contactdeleted'] = 'Les contacts ont bien été supprimés';
+$messages['groupdeleted'] = 'Le groupe a bien été supprimé';
+$messages['grouprenamed'] = 'Le groupe a bien été renommé';
+$messages['groupcreated'] = 'Le groupe a bien été créé';
+$messages['messagedeleted'] = 'Les messages ont bien été supprimés';
+$messages['messagemoved'] = 'Les messages ont bien été déplacés';
+$messages['messagecopied'] = 'Les messages ont bien été copiés';
+$messages['messagemarked'] = 'Les messages ont bien été marqués';
+$messages['autocompletechars'] = 'Entrez au moins $min caractères pour l\'auto-complétion';
 
-?>
\ No newline at end of file
+?>
diff --git a/program/localization/ga_IE/labels.inc b/program/localization/ga_IE/labels.inc
index d6c5f05..40b99a2 100755
--- a/program/localization/ga_IE/labels.inc
+++ b/program/localization/ga_IE/labels.inc
@@ -167,9 +167,6 @@
 $labels['subscribed'] = 'Síntiú';
 $labels['create'] = 'Cruthaigh';
 $labels['createfolder'] = 'Cruthaigh fillteán nua';
-$labels['rename'] = 'Ainmnigh arís';
-$labels['renamefolder'] = 'Ainmnigh fillteán arís';
-$labels['deletefolder'] = 'Scrios fillteán';
 $labels['managefolders'] = 'Stiúir na fillteán';
 $labels['sortby'] = 'Sórtáil trí';
 $labels['sortasc'] = 'Sórtáil in ord méadaitheach';
diff --git a/program/localization/gl_ES/labels.inc b/program/localization/gl_ES/labels.inc
index 13e2a2c..1ba8edb 100644
--- a/program/localization/gl_ES/labels.inc
+++ b/program/localization/gl_ES/labels.inc
@@ -28,18 +28,22 @@
 $labels['drafts'] = 'Borradores';
 $labels['sent'] = 'Enviado';
 $labels['trash'] = 'Cubo do Lixo';
-$labels['junk'] = 'Lixo';
+$labels['junk'] = 'Correo Lixo';
 $labels['subject'] = 'Asunto';
 $labels['from'] = 'Remitente';
 $labels['to'] = 'Destinatario';
-$labels['cc'] = 'Copia';
-$labels['bcc'] = 'Copia Oculta';
-$labels['replyto'] = 'Respostar a';
+$labels['cc'] = 'Copia (CC)';
+$labels['bcc'] = 'Copia Oculta (BCC)';
+$labels['replyto'] = 'Respostar a (Reply-To)';
+$labels['followupto'] = 'Respostar a todos (Followup-To)';
 $labels['date'] = 'Data';
 $labels['size'] = 'Tamaño';
 $labels['priority'] = 'Prioridade';
 $labels['organization'] = 'Organización';
+$labels['readstatus'] = 'Estado da lectura';
 $labels['reply-to'] = 'Respostar a';
+$labels['mail-reply-to'] = 'Respostar ao autor';
+$labels['mail-followup-to'] = 'Respostar a todos';
 $labels['mailboxlist'] = 'Cartafoles';
 $labels['messagesfromto'] = 'Mensaxes do $from ao $to de $count';
 $labels['threadsfromto'] = 'Fíos do $from ao $to de $count';
@@ -93,10 +97,12 @@
 $labels['checkmail'] = 'Procurar novas mensaxes';
 $labels['writenewmessage'] = 'Crear unha nova mensaxe';
 $labels['replytomessage'] = 'Respostar a mensaxe';
-$labels['replytoallmessage'] = 'Respostar a todos';
+$labels['replytoallmessage'] = 'Respostar á lista ou ao remitente e a tódolos destinatarios';
+$labels['replyall'] = 'Respostar a todos';
+$labels['replylist'] = 'Respostar á lista de correo';
 $labels['forwardmessage'] = 'Reenviar a mensaxe';
 $labels['deletemessage'] = 'Eliminar a mensaxe';
-$labels['movemessagetotrash'] = 'Mover a mensaxe ó cubo do lixo';
+$labels['movemessagetotrash'] = 'Mover a mensaxe ao cubo do lixo';
 $labels['printmessage'] = 'Imprimir esta mensaxe';
 $labels['previousmessage'] = 'Amosar a mensaxe anterior';
 $labels['previousmessages'] = 'Amosar o grupo anterior de mensaxes';
@@ -165,7 +171,9 @@
 $labels['addattachment'] = 'Anexar un ficheiro';
 $labels['charset'] = 'Codificación';
 $labels['editortype'] = 'Tipo de editor';
-$labels['returnreceipt'] = 'Notificación de disposición';
+$labels['returnreceipt'] = 'Notificación da entrega';
+$labels['dsn'] = 'Notificación do estado de envío (DSN)';
+$labels['editidents'] = 'Modificar identidades';
 $labels['checkspelling'] = 'Revisar a ortografía';
 $labels['resumeediting'] = 'Voltar á edición';
 $labels['revertto'] = 'Voltar a';
@@ -189,9 +197,10 @@
 $labels['addcc'] = 'Engadir Copia (CC)';
 $labels['addbcc'] = 'Engadir Copia Oculta (BCC)';
 $labels['addreplyto'] = 'Engadir Respostar a (Reply-To)';
+$labels['addfollowupto'] = 'Engadir Respostar a todos (Followup-To)';
 $labels['mdnrequest'] = 'O remitente desta mensaxe pediu ser notificado cando vostede a lea. Quere notificar ao remitente?';
-$labels['receiptread'] = 'Notificación da disposición da mensaxe (lectura)';
-$labels['yourmessage'] = 'Esta é unha notificación de disposición para a súa mensaxe';
+$labels['receiptread'] = 'Notificación da entrega da mensaxe (lectura)';
+$labels['yourmessage'] = 'Esta é unha notificación da entrega da súa mensaxe';
 $labels['receiptnote'] = 'Nota: Esta notificación só confirma que a mensaxe se abriu no computador do destinatario. Non asegura que o destinatario o lera ou entendera o seu contido.';
 $labels['name'] = 'Nome completo';
 $labels['firstname'] = 'Nome';
@@ -200,6 +209,7 @@
 $labels['addcontact'] = 'Engadir novo contacto';
 $labels['editcontact'] = 'Editar contacto';
 $labels['contacts'] = 'Contactos';
+$labels['contactproperties'] = 'Propiedades do contacto';
 $labels['edit'] = 'Editar';
 $labels['cancel'] = 'Cancelar';
 $labels['save'] = 'Gardar';
@@ -247,6 +257,7 @@
 $labels['signature'] = 'Sinatura';
 $labels['dstactive'] = 'Cambio de hora';
 $labels['htmleditor'] = 'Redactar mensaxes HTML';
+$labels['htmlonreply'] = 'só cando se resposte a unha mensaxe HTML';
 $labels['htmlsignature'] = 'Sinatura HTML';
 $labels['previewpane'] = 'Amosar panel de previsualización';
 $labels['skin'] = 'Aspecto da interface';
@@ -255,9 +266,11 @@
 $labels['uisettings'] = 'Interface de usuario';
 $labels['serversettings'] = 'Axustes do servidor';
 $labels['mailboxview'] = 'Vista das caixas de correo';
-$labels['mdnrequests'] = 'Notificacións de envío';
-$labels['askuser'] = 'preguntar ao usuario';
+$labels['mdnrequests'] = 'Cando se solicitan notificacións da entrega';
+$labels['askuser'] = 'preguntarme qué facer';
 $labels['autosend'] = 'enviar automáticamente';
+$labels['autosendknown'] = 'enviar aos meus contactos, noutros casos preguntarme';
+$labels['autosendknownignore'] = 'enviar aos meus contactos, noutros casos ignorar';
 $labels['ignore'] = 'ignorar';
 $labels['readwhendeleted'] = 'Marcar a mensaxe coma lida ao eliminar';
 $labels['flagfordeletion'] = 'Marcar a mensaxe para eliminar no canto de eliminar';
@@ -302,6 +315,9 @@
 $labels['insertsignature'] = 'Engadir firma';
 $labels['previewpanemarkread'] = 'Marcar como lidas as mensaxes previsualizadas';
 $labels['afternseconds'] = 'logo de $n segundos';
+$labels['reqmdn'] = 'Solicitar sempre unha notificación da entrega';
+$labels['reqdsn'] = 'Solicitar sempre unha notificación do estado de envío';
+$labels['replysamefolder'] = 'Deixar as respostas no cartafol onde está a mensaxe á que se responde';
 $labels['folder'] = 'Cartafol';
 $labels['folders'] = 'Cartafoles';
 $labels['foldername'] = 'Nome do cartafol';
@@ -309,9 +325,6 @@
 $labels['messagecount'] = 'Mensaxes';
 $labels['create'] = 'Crear';
 $labels['createfolder'] = 'Crear novo cartafol';
-$labels['rename'] = 'Renomear';
-$labels['renamefolder'] = 'Renomear cartafol';
-$labels['deletefolder'] = 'Eliminar cartafol';
 $labels['managefolders'] = 'Xestionar cartafoles';
 $labels['specialfolders'] = 'Cartafoles especiais';
 $labels['sortby'] = 'Ordenar por';
diff --git a/program/localization/gl_ES/messages.inc b/program/localization/gl_ES/messages.inc
index 5eb5c89..02e3fd7 100644
--- a/program/localization/gl_ES/messages.inc
+++ b/program/localization/gl_ES/messages.inc
@@ -19,7 +19,8 @@
 $messages['cookiesdisabled'] = 'O seu navegador non acepta galletas';
 $messages['sessionerror'] = 'A súa sesión non é válida ou expirou';
 $messages['imaperror'] = 'Fallou a conexión co servidor IMAP';
-$messages['servererror'] = 'Erro no servidor!';
+$messages['servererror'] = 'Erro do servidor!';
+$messages['servererrormsg'] = 'Erro do servidor: $msg';
 $messages['invalidrequest'] = 'Petición inválida!. Non se gardou ningún dato.';
 $messages['nomessagesfound'] = 'Non se atoparon mensaxes nesta caixa de correo';
 $messages['loggedout'] = 'Rematou correctamente a súa sesión. Ata logo!';
@@ -51,9 +52,7 @@
 $messages['deletemessagesconfirm'] = 'Quere eliminar a(s) mensaxe(s) seleccionadas?';
 $messages['deletefolderconfirm'] = 'Quere eliminar este cartafol?';
 $messages['purgefolderconfirm'] = 'Quere eliminar tódalas mensaxes neste cartafol?';
-$messages['foldercreating'] = 'Creando o cartafol...';
 $messages['folderdeleting'] = 'Eliminando o cartafol...';
-$messages['folderrenaming'] = 'Renomeando o cartafol...';
 $messages['foldermoving'] = 'Movendo o cartafol...';
 $messages['formincomplete'] = 'Non se cumprimentou completamente o formulario';
 $messages['noemailwarning'] = 'Por favor, introduza un enderezo de correo electrónico válido';
@@ -83,12 +82,13 @@
 $messages['copyerror'] = 'Non foi posible copiar ningún enderezo';
 $messages['sourceisreadonly'] = 'A orixe é de só lectura';
 $messages['errorsavingcontact'] = 'Non foi posible gardar o contacto';
-$messages['movingmessage'] = 'Movendo a mensaxe...';
-$messages['copyingmessage'] = 'Copiando a mensaxe...';
-$messages['receiptsent'] = 'A notificación de disposición enviouse correctamente';
-$messages['errorsendingreceipt'] = 'Non foi posible enviar a notificación de disposición';
+$messages['movingmessage'] = 'Movendo a(s) mensaxe(s)...';
+$messages['copyingmessage'] = 'Copiando a(s) mensaxe(s)...';
+$messages['deletingmessage'] = 'Eliminando a(s) mensaxe(s)...';
+$messages['markingmessage'] = 'Marcando a(s) mensaxe(s)...';
+$messages['receiptsent'] = 'A notificación da entrega enviouse correctamente';
+$messages['errorsendingreceipt'] = 'Non foi posible enviar a notificación da entrega';
 $messages['nodeletelastidentity'] = 'Non pode eliminar esta identidade, é a última';
-$messages['addsubfolderhint'] = 'Este cartafol vaise crear coma un subcartafol do seleccionado';
 $messages['forbiddencharacter'] = 'O nome do cartafol contén un carácter non válido';
 $messages['selectimportfile'] = 'Por favor, escolla un ficheiro para cargar';
 $messages['addresswriterror'] = 'Non se pode escribir no caderno de enderezos que escolleu';
@@ -106,10 +106,21 @@
 $messages['smtpfromerror'] = 'Erro SMTP ($code): Non foi posible establecer o remitente "$from" ($msg)';
 $messages['smtptoerror'] = 'Erro SMTP ($code): Non foi posible engadir o destinatario "$to" ($msg)';
 $messages['smtprecipientserror'] = 'Erro SMTP: Non se pode analizar a lista de destinatarios';
+$messages['smtpdsnerror'] = 'Erro SMTP: Non hai soporte para notificacións do estado de envío (DSN)';
 $messages['smtperror'] = 'Erro SMTP: $msg';
 $messages['emailformaterror'] = 'O enderezo de correo electrónico é incorrecto: $email';
 $messages['toomanyrecipients'] = 'Especificou demasiados destinatarios. Por favor, redúzaos a un máximo de $max.';
 $messages['maxgroupmembersreached'] = 'O número de membros do grupo excede o máximo de $max.';
 $messages['internalerror'] = 'Ocurriu un erro interno. Por favor, probe outra vez.';
+$messages['contactdelerror'] = 'Non foi posible borrar o(s) contacto(s)';
+$messages['contactdeleted'] = 'Borráronse correctamente o(s) contacto(s)';
+$messages['groupdeleted'] = 'Borrouse correctamente o grupo';
+$messages['grouprenamed'] = 'Mudouse correctamente o nome do grupo';
+$messages['groupcreated'] = 'Creouse correctamente o grupo';
+$messages['messagedeleted'] = 'Borráronse correctamente a(s) mensaxe(s)';
+$messages['messagemoved'] = 'Movéronse correctamente a(s) mensaxe(s)';
+$messages['messagecopied'] = 'Copiáronse correctamente a(s) mensaxe(s)';
+$messages['messagemarked'] = 'Marcáronse correctamente a(s) mensaxe(s)';
+$messages['autocompletechars'] = 'Introduza polo menos $min caracteres para autocompletar';
 
 ?>
diff --git a/program/localization/he_IL/labels.inc b/program/localization/he_IL/labels.inc
index 0b03367..61f27f7 100644
--- a/program/localization/he_IL/labels.inc
+++ b/program/localization/he_IL/labels.inc
@@ -11,7 +11,7 @@
 +-----------------------------------------------------------------------+
 | Author: Moshe Leibovitch  <moish@mln.co.il>                           |
 | Updates: Noor Dawod <noor@comrax.com>                                 |
-| Updates: Moshe Leibovitch  <moish@mln.co.il>  10112010                |
+| Updates: Moshe Leibovitch  <moish@mln.co.il>  09122010                |
 +-----------------------------------------------------------------------+
 */
 
@@ -36,16 +36,12 @@
 $labels['cc'] = 'לידיעה';
 $labels['bcc'] = 'מכותב מוסתר';
 $labels['replyto'] = 'כתובת למענה';
-$labels['mailreplyto'] = 'כתובת למענה';
-$labels['mailfollowupto'] = 'כתובת להעברת הודעה';
+$labels['followupto'] = 'כתובת להעברת הודעה';
 $labels['date'] = 'תאריך';
 $labels['size'] = 'גודל';
 $labels['priority'] = 'עדיפות';
 $labels['organization'] = 'ארגון';
 $labels['readstatus'] = 'נקרא';
-$labels['reply-to'] = 'כתובת למענה';
-$labels['mail-reply-to'] = 'כתובת למענה';
-$labels['mail-followup-to'] = 'כתובת להעברת הודעה';
 $labels['mailboxlist'] = 'תיקים';
 $labels['messagesfromto'] = 'הודעות $from עד $to מתוך $count';
 $labels['threadsfromto'] = 'שרשור $from עד $to מתוך $count';
@@ -199,8 +195,7 @@
 $labels['addcc'] = 'הוספת מכותב לידיעה';
 $labels['addbcc'] = 'הוספת מכותב נסתר';
 $labels['addreplyto'] = 'הוספת כתובת למענה';
-$labels['addmailreplyto'] = 'הוספת כתובת למענה';
-$labels['addmailfollowupto'] = 'הוספת כתובת להעברת הודעה';
+$labels['addfollowupto'] = 'הוספת כתובת להעברת הודעה';
 $labels['mdnrequest'] = 'השולח ביקש לדעת אם ההודעה נקראה. האם להודיע לשולח?';
 $labels['receiptread'] = 'אישור קבלה (נקרא)';
 $labels['yourmessage'] = 'אישור קבלה להודעתך';
@@ -328,11 +323,15 @@
 $labels['messagecount'] = 'הודעות';
 $labels['create'] = 'יצירה';
 $labels['createfolder'] = 'יצירת תיק חדש';
-$labels['rename'] = 'שינוי שם';
-$labels['renamefolder'] = 'שינוי שם תיק';
-$labels['deletefolder'] = 'מחיקת תיק';
 $labels['managefolders'] = 'ניהול תיקים';
 $labels['specialfolders'] = 'תיקים מיוחדים';
+$labels['properties'] = 'מאפיינים';
+$labels['folderproperties'] = 'מאפייני תיק';
+$labels['parentfolder'] = 'תיק אב';
+$labels['location'] = 'מיקום';
+$labels['info'] = 'מידע';
+$labels['getfoldersize'] = 'הקשה להצגה של גודל תיק';
+$labels['changesubscription'] = 'הקשה לשינוי הרשמה';
 $labels['sortby'] = 'מיון לפי';
 $labels['sortasc'] = 'מיון בסדר עולה';
 $labels['sortdesc'] = 'מיון בסדר יורד';
diff --git a/program/localization/he_IL/messages.inc b/program/localization/he_IL/messages.inc
index 3b3f936..9dd3c87 100644
--- a/program/localization/he_IL/messages.inc
+++ b/program/localization/he_IL/messages.inc
@@ -11,7 +11,7 @@
 +-----------------------------------------------------------------------+
 | Author: Moshe Leibovitch    <moish@mln.co.il>                         |
 | Updates: Noor Dawod <noor@comrax.com>                                 |
-| Updates: Moshe Leibovitch  <moish@mln.co.il>  10112010                |
+| Updates: Moshe Leibovitch  <moish@mln.co.il>  09122010                |
 +-----------------------------------------------------------------------+
 
 */
@@ -23,6 +23,8 @@
 $messages['imaperror'] = 'הקשר לשרת הדואר נכשל';
 $messages['servererror'] = '! שגיאת שרת';
 $messages['servererrormsg'] = '$msg  שגיאת שרת';
+$messages['errorreadonly'] = 'לא ניתן לבצע הפעולה כי התיק ניתן לקריאה בלבד';
+$messages['errornoperm'] = 'לא ניתן לבצע הפעולה כי אין הרשאה לבצעה';
 $messages['invalidrequest'] = 'בקשה לא חוקית. המידע לא נשמר';
 $messages['nomessagesfound'] = 'לא נמצאו הודעות בתיבה זו';
 $messages['loggedout'] = 'הקשר הסתיים. להתראות!';
@@ -54,10 +56,10 @@
 $messages['deletemessagesconfirm'] = 'האם למחוק את ההודעות המסומנות?';
 $messages['deletefolderconfirm'] = 'האם למחוק תיק זה?';
 $messages['purgefolderconfirm'] = 'האם למחוק את כל ההודעות בתיק זה?';
-$messages['foldercreating'] = 'התיקיה נוצרת...';
 $messages['folderdeleting'] = 'התיקיה נמחקת...';
-$messages['folderrenaming'] = 'שינוי שם תיקיה...';
 $messages['foldermoving'] = 'העברת תיקיה...';
+$messages['foldersubscribing'] = 'התיק נרשם...';
+$messages['folderunsubscribing'] = 'רישום התיק בוטל...';
 $messages['formincomplete'] = 'לא הוזנו כל השדות בטופס זה';
 $messages['noemailwarning'] = 'נא להוסיף כתובת דוא\"ל חוקית';
 $messages['nonamewarning'] = 'נא להוסיף שם';
@@ -77,6 +79,10 @@
 $messages['checking'] = 'בדיקה...';
 $messages['nospellerrors'] = 'לא נמצאו שגיאות כתיב';
 $messages['folderdeleted'] = 'התיק נמחק בהצלחה';
+$messages['foldersubscribed'] = 'התיק נרשם בהצלחה';
+$messages['folderunsubscribed'] = 'ביטול רישום תיק הצליח';
+$messages['folderpurged'] = 'התיק נמחק בהצלחה';
+$messages['folderexpunged'] = 'התיק רוקן בהצלחה';
 $messages['deletedsuccessfully'] = 'המחיקה הסתיימה בהצלחה';
 $messages['converting'] = 'הסרת העיצוב מההודעה';
 $messages['messageopenerror'] = 'לא ניתן לטעון ההודעה מהשרת';
@@ -93,7 +99,6 @@
 $messages['receiptsent'] = 'אישור הקבלה נשלח בהצלחה';
 $messages['errorsendingreceipt'] = 'לא ניתן לשלוח אישור קבלה';
 $messages['nodeletelastidentity'] = 'זו הזהות האחרונה ולכן לא ניתן לבטלה';
-$messages['addsubfolderhint'] = 'תיקיה זו תוקם תחת התיקיה שנבחרה';
 $messages['forbiddencharacter'] = 'שם התיקיה מכיל תוים אסורים';
 $messages['selectimportfile'] = 'נא לבחור קובץ לייבוא';
 $messages['addresswriterror'] = 'פנקס הכתובות שנבחר אינו ניתן לכתיבה';
@@ -127,5 +132,9 @@
 $messages['messagecopied'] = 'ההודעה הועתקה בהצלחה';
 $messages['messagemarked'] = 'ההודעה סומנה בהצלחה';
 $messages['autocompletechars'] = 'יש להקיש לפחות $min תווים להשלמה אוטומטית של המחרוזת';
+$messages['namecannotbeempty'] = 'השם אינו יכול להיות ריק';
+$messages['nametoolong'] = 'השם ארוך מדי';
+$messages['folderupdated'] = 'התיק עודכן בהצלחה';
+$messages['foldercreated'] = 'התיק נוצר בהצלחה';
 
 ?>
diff --git a/program/localization/hi_IN/labels.inc b/program/localization/hi_IN/labels.inc
index 6db8e02..36d91fe 100644
--- a/program/localization/hi_IN/labels.inc
+++ b/program/localization/hi_IN/labels.inc
@@ -226,9 +226,6 @@
 $labels['subscribed']		= 'सबस्क्राईब किया गया';
 $labels['create']		= 'बनाऐं';
 $labels['createfolder']		= 'फ़ोलडर बनाऐं';
-$labels['rename']		= 'नाम बदलें';
-$labels['renamefolder']		= 'फ़ोलडर का नाम बदलें';
-$labels['deletefolder']		= 'फ़ोलडर मिटाऐं';
 $labels['managefolders']	= 'फ़ोलडर को व्यवस्थित करें';
 
 $labels['sortby']		= 'ऐसे तय करें';
diff --git a/program/localization/hr_HR/labels.inc b/program/localization/hr_HR/labels.inc
index 835159e..2043f7c 100644
--- a/program/localization/hr_HR/labels.inc
+++ b/program/localization/hr_HR/labels.inc
@@ -38,21 +38,25 @@
 $labels['cc'] = 'Cc';
 $labels['bcc'] = 'Bcc';
 $labels['replyto'] = 'Odgovor-na';
+$labels['followupto'] = 'Nastavi-na';
 $labels['date'] = 'Datum';
 $labels['size'] = 'Veličina';
 $labels['priority'] = 'Prioritet';
 $labels['organization'] = 'Organizacija';
+$labels['readstatus'] = 'Pročitano';
 $labels['reply-to'] = 'Odgovor-na';
+$labels['mail-reply-to'] = 'Mail-Odogovori-na';
+$labels['mail-followup-to'] = 'Mail-Nastavi-na';
 $labels['mailboxlist'] = 'Mape';
 $labels['messagesfromto'] = 'Poruke od $from do $to od ukupno $count';
+$labels['threadsfromto'] = 'Teme od $from do $to od ukupno $count';
 $labels['messagenrof'] = 'Poruka broj $nr od $count';
-$labels['moveto'] = 'prebaci u...';
-$labels['download'] = 'preuzmi (download)';
+$labels['copy'] = 'Kopiraj';
+$labels['move'] = 'Premjesti';
+$labels['moveto'] = 'Premjesti u...';
+$labels['download'] = 'Preuzmi (download)';
 $labels['filename'] = 'Ime datoteke';
 $labels['filesize'] = 'Veličina datoteke';
-$labels['preferhtml'] = 'HTML format u prednosti';
-$labels['htmlmessage'] = 'HTML format poruke';
-$labels['prettydate'] = 'Formatiran datum';
 $labels['addtoaddressbook'] = 'Dodaj u imenik';
 $labels['sun'] = 'Ned';
 $labels['mon'] = 'Pon';
@@ -97,6 +101,8 @@
 $labels['writenewmessage'] = 'Nova poruka';
 $labels['replytomessage'] = 'Odgovori na poruku';
 $labels['replytoallmessage'] = 'Odgovori pošiljaocu i svim primateljima';
+$labels['replyall'] = 'Odgovori svima';
+$labels['replylist'] = 'Odgovori listi';
 $labels['forwardmessage'] = 'Prosljedi poruku';
 $labels['deletemessage'] = 'Prebaci poruku u mapu smeće';
 $labels['movemessagetotrash'] = 'Preseli poruke u smeće';
@@ -120,12 +126,35 @@
 $labels['select'] = 'Označi';
 $labels['all'] = 'Sve';
 $labels['none'] = 'Nijednu';
+$labels['currpage'] = 'Trenutna stranica';
 $labels['unread'] = 'Nepročitane';
 $labels['flagged'] = 'Markirane';
 $labels['unanswered'] = 'Neodgovrene';
 $labels['deleted'] = 'Obrisano';
 $labels['invert'] = 'Obrni';
 $labels['filter'] = 'Filtriraj';
+$labels['list'] = 'Lista';
+$labels['threads'] = 'Teme';
+$labels['expand-all'] = 'Proširi sve';
+$labels['expand-unread'] = 'Proširi nepročitane';
+$labels['collapse-all'] = 'Zatvori sve';
+$labels['threaded'] = 'Tematski prikaz';
+$labels['autoexpand_threads'] = 'Proširi teme poruka';
+$labels['do_expand'] = 'Sve teme';
+$labels['expand_only_unread'] = 'samo sa nepročitanim porukama';
+$labels['fromto'] = 'Pošiljatelj/Primatelj';
+$labels['flag'] = 'Zastava';
+$labels['attachment'] = 'Privitak';
+$labels['nonesort'] = 'Ništa';
+$labels['sentdate'] = 'Datum slanja';
+$labels['arrival'] = 'Datum primanja';
+$labels['asc'] = 'uzlazno';
+$labels['desc'] = 'silazno';
+$labels['listcolumns'] = 'Kolone';
+$labels['listsorting'] = 'Sortirajuća kolona';
+$labels['listorder'] = 'Sortirajući redoslijed';
+$labels['listmode'] = 'Model pregleda listi';
+$labels['folderactions'] = 'Akcije mapa';
 $labels['compact'] = 'Kompresiranje';
 $labels['empty'] = 'Isprazni ';
 $labels['purge'] = 'Očisti';
@@ -146,12 +175,15 @@
 $labels['charset'] = 'Charset';
 $labels['editortype'] = 'Tip editora';
 $labels['returnreceipt'] = 'Potvrda o primitku poruke';
+$labels['dsn'] = 'Potvrda o poslanoj poruci';
+$labels['editidents'] = 'Promijeni identitete';
 $labels['checkspelling'] = 'Provjera pravopisa';
 $labels['resumeediting'] = 'Povratak u pisanje';
 $labels['revertto'] = 'Vrati na';
 $labels['attachments'] = 'Privitci (Attachments)';
 $labels['upload'] = 'Dodaj';
 $labels['close'] = 'Zatvori';
+$labels['messageoptions'] = 'Opcije poruka...';
 $labels['low'] = 'Nizak';
 $labels['lowest'] = 'Najniži';
 $labels['normal'] = 'Srednji';
@@ -168,6 +200,7 @@
 $labels['addcc'] = 'Dodaj Cc';
 $labels['addbcc'] = 'Dodaj Bcc';
 $labels['addreplyto'] = 'Dodaj Odgovori-na';
+$labels['addfollowupto'] = 'Dodaj Nastavak-na';
 $labels['mdnrequest'] = 'Pošiljaoc ove poruke je tražio da bude obaviješten o njenom primitku. Želite li obavijestiti pošiljaoca?';
 $labels['receiptread'] = 'Vrati potvrdu (pročitano)';
 $labels['yourmessage'] = 'Ovo je vraćena potvrda vaše poruke';
@@ -178,6 +211,8 @@
 $labels['email'] = 'E-Mail';
 $labels['addcontact'] = 'Dodaj novi kontakt';
 $labels['editcontact'] = 'Izmjeni kontakt';
+$labels['contacts'] = 'Kontakti';
+$labels['contactproperties'] = 'Svojstva kontakta';
 $labels['edit'] = 'Izmjeni';
 $labels['cancel'] = 'Odustani';
 $labels['save'] = 'Spremi';
@@ -189,10 +224,13 @@
 $labels['print'] = 'Print';
 $labels['export'] = 'Export';
 $labels['exportvcards'] = 'Izvezi kontakte u vCard formatu';
+$labels['newcontactgroup'] = 'Napravi novu kontaktnu grupu';
+$labels['groupactions'] = 'Akcije kontaktne grupe';
 $labels['previouspage'] = 'Prethodna strana';
 $labels['firstpage'] = 'Prva strana';
 $labels['nextpage'] = 'Slijedeća strana';
 $labels['lastpage'] = 'Zadnja strana';
+$labels['group'] = 'Grupa';
 $labels['groups'] = 'Grupe';
 $labels['personaladrbook'] = 'Privatna adresa';
 $labels['import'] = 'Uvoz';
@@ -210,6 +248,10 @@
 $labels['newidentity'] = 'Dodaj identitet';
 $labels['newitem'] = 'Novo';
 $labels['edititem'] = 'Uredi';
+$labels['preferhtml'] = 'HTML format u prednosti';
+$labels['defaultcharset'] = 'Zadani skup znakova';
+$labels['htmlmessage'] = 'HTML format poruke';
+$labels['prettydate'] = 'Formatiran datum';
 $labels['setdefault'] = 'Postavi predodređeno';
 $labels['autodetect'] = 'Auto';
 $labels['language'] = 'Jezik';
@@ -218,6 +260,7 @@
 $labels['signature'] = 'Potpis';
 $labels['dstactive'] = 'Automatska promjena vremena';
 $labels['htmleditor'] = 'Sastavi HTML poruke';
+$labels['htmlonreply'] = 'odgovor samo na HTML poruke';
 $labels['htmlsignature'] = 'HTML potpis';
 $labels['previewpane'] = 'Prikaži područje pregleda';
 $labels['skin'] = 'Tema izgleda';
@@ -229,10 +272,13 @@
 $labels['mdnrequests'] = 'Obavijest pošiljatelja';
 $labels['askuser'] = 'pitaj korisnika';
 $labels['autosend'] = 'šalji automatski';
-$labels['ignore'] = 'ignoriraj';
+$labels['autosendknown'] = 'Dodaj primatelja u moje kontakte, u suprotnom me pitaj';
+$labels['autosendknownignore'] = 'Dodaj primatelja u moje kontakte, u suprotnom zanemari';
+$labels['ignore'] = 'zanemari';
 $labels['readwhendeleted'] = 'Označi poruku kao pročitanu pri brisanju';
 $labels['flagfordeletion'] = 'Označi poruku za brisanje umjesto brisanja';
 $labels['skipdeleted'] = 'Ne prikazivaj pobrisane poruke';
+$labels['deletealways'] = 'Ukoliko premještanje poruka u mapu otpad ne uspije, izbrši poruku';
 $labels['showremoteimages'] = 'Prikaži slike s interneta';
 $labels['fromknownsenders'] = 'od poznatih pošiljatelja';
 $labels['always'] = 'uvijek';
@@ -240,13 +286,15 @@
 $labels['autosavedraft'] = 'Automatski spremi draft';
 $labels['everynminutes'] = 'svakih $n minuta';
 $labels['keepalive'] = 'Provjeri nove poruke';
-$labels['never'] = 'Nikada';
+$labels['never'] = 'nikada';
+$labels['immediately'] = 'odmah';
 $labels['messagesdisplaying'] = 'Prikazujem poruke';
 $labels['messagescomposition'] = 'Komponiram poruke';
 $labels['mimeparamfolding'] = 'Nazivi privitaka';
 $labels['2231folding'] = 'Full RFC 2231 (Thunderbird)';
 $labels['miscfolding'] = 'RFC 2047/2231 (MS Outlook)';
 $labels['2047folding'] = 'Full RFC 2047 (ostali)';
+$labels['force7bit'] = 'Koristi MIME postavke za 8-bitne znakove';
 $labels['advancedoptions'] = 'Napredne postavke';
 $labels['focusonnewmessage'] = 'Fokusiraj browser pri novoj poruci';
 $labels['checkallfolders'] = 'Provjeri nove poruke u svim mapama';
@@ -268,6 +316,11 @@
 $labels['belowquote'] = 'ispod citata';
 $labels['abovequote'] = 'iznad citata';
 $labels['insertsignature'] = 'Umetni potpis';
+$labels['previewpanemarkread'] = 'Obilježi pregledane poruke kao pročitane';
+$labels['afternseconds'] = 'nakon $n sekundi';
+$labels['reqmdn'] = 'Uvijek zatraži potvrdu o primitku poruke';
+$labels['reqdsn'] = 'Uvijek zatraži potvrdu o slanju poruke';
+$labels['replysamefolder'] = 'Spremi odgovore u mapu gdje se nalazi poruka';
 $labels['folder'] = 'Mapa';
 $labels['folders'] = 'Mape';
 $labels['foldername'] = 'Ime mape';
@@ -275,9 +328,6 @@
 $labels['messagecount'] = 'Poruke';
 $labels['create'] = 'Napravi';
 $labels['createfolder'] = 'Napravi novu mapu';
-$labels['rename'] = 'Preimenuj';
-$labels['renamefolder'] = 'Preimenuj Mapu';
-$labels['deletefolder'] = 'Obriši Mapu';
 $labels['managefolders'] = 'Podesi Mapu';
 $labels['specialfolders'] = 'Specijalna Mapa';
 $labels['sortby'] = 'Sortiraj po';
@@ -287,5 +337,23 @@
 $labels['KB'] = 'KB';
 $labels['MB'] = 'MB';
 $labels['GB'] = 'GB';
+$labels['unicode'] = 'Unicode';
+$labels['english'] = 'Engleski';
+$labels['westerneuropean'] = 'Zapadno Europski';
+$labels['easterneuropean'] = 'Istočno Europski';
+$labels['southeasterneuropean'] = 'Južno-Istočni Europski';
+$labels['baltic'] = 'Balitčki';
+$labels['cyrillic'] = 'Čirilčni';
+$labels['arabic'] = 'Arapski';
+$labels['greek'] = 'Grčki';
+$labels['hebrew'] = 'Hibru';
+$labels['turkish'] = 'Turski';
+$labels['nordic'] = 'Nordski';
+$labels['thai'] = 'Tajlandski';
+$labels['celtic'] = 'Keltski';
+$labels['vietnamese'] = 'Vijetnamski';
+$labels['japanese'] = 'Japanski';
+$labels['korean'] = 'Korejski';
+$labels['chinese'] = 'Kineski';
 
 ?>
diff --git a/program/localization/hr_HR/messages.inc b/program/localization/hr_HR/messages.inc
index 4f4b7c5..7594efa 100644
--- a/program/localization/hr_HR/messages.inc
+++ b/program/localization/hr_HR/messages.inc
@@ -53,9 +53,7 @@
 $messages['deletemessagesconfirm'] = 'Sigurno želite obrisati odabrane poruke?';
 $messages['deletefolderconfirm'] = 'Želite li obrisati ovu mapu?';
 $messages['purgefolderconfirm'] = 'Želite li obrisati sve poruke u mapi?';
-$messages['foldercreating'] = 'Kreiram mapu...';
 $messages['folderdeleting'] = 'Brišem mapu...';
-$messages['folderrenaming'] = 'Mijenjam naziv mape...';
 $messages['foldermoving'] = 'Premještam mapu...';
 $messages['formincomplete'] = 'Obrazac nije u cjelosti popunjen';
 $messages['noemailwarning'] = 'Unesite valjanu e-mail adresu';
@@ -89,7 +87,6 @@
 $messages['receiptsent'] = 'Uspješno poslana potvrda (pročitano)';
 $messages['errorsendingreceipt'] = 'Ne može poslati potvrdu';
 $messages['nodeletelastidentity'] = 'Ne možete izbrisati zadnji identitet.';
-$messages['addsubfolderhint'] = 'Ova mapa će biti stvorena kao podmapa na trenutno označenoj';
 $messages['forbiddencharacter'] = 'Naziv mape sadrži zabranjene znakove';
 $messages['selectimportfile'] = 'Odaberite datoteku za prijenos';
 $messages['addresswriterror'] = 'U odabrani adresar nije moguće zapisivat...';
diff --git a/program/localization/hu_HU/labels.inc b/program/localization/hu_HU/labels.inc
index e255388..f8f2b6f 100644
--- a/program/localization/hu_HU/labels.inc
+++ b/program/localization/hu_HU/labels.inc
@@ -40,16 +40,15 @@
 $labels['cc'] = 'Másolat';
 $labels['bcc'] = 'Titkos másolat';
 $labels['replyto'] = 'Válaszcím';
-$labels['mailreplyto'] = 'Hírcsoport';
-$labels['mailfollowupto'] = 'Hírcsoport válasz';
+$labels['followupto'] = 'Hírcsoport válasz';
 $labels['date'] = 'Dátum';
 $labels['size'] = 'Méret';
 $labels['priority'] = 'Sürgősség';
 $labels['organization'] = 'Szervezet';
 $labels['readstatus'] = 'Olvasott';
 $labels['reply-to'] = 'Válaszcím';
-$labels['mailreply-to'] = 'Hírcsoport';
-$labels['mailfollowup-to'] = 'Hírcsoport válasz';
+$labels['mail-reply-to'] = 'Hírcsoport';
+$labels['mail-followup-to'] = 'Hírcsoport válasz';
 $labels['mailboxlist'] = 'Mappák';
 $labels['messagesfromto'] = 'Üzenetek: $from - $to / $count';
 $labels['threadsfromto'] = 'Témák ($from - $to, összesen $count)';
@@ -203,8 +202,7 @@
 $labels['addcc'] = 'Cc (Másolati cím) hozzáadása';
 $labels['addbcc'] = 'Bcc (titkos másolati cím) hozzáadása';
 $labels['addreplyto'] = 'Válaszcím hozzáadása';
-$labels['addmailreplyto'] = 'Hírcsoport hozzáadása';
-$labels['addmailfollowupto'] = 'Hírcsoport válasz hozzáadása';
+$labels['addfollowupto'] = 'Hírcsoport válasz hozzáadása';
 $labels['mdnrequest'] = 'Az üzenet küldője értesítést kér arról, hogy elolvasta a levelet. El legyen küldve az olvasási visszaigazolás?';
 $labels['receiptread'] = 'Olvasási visszaigazolás (olvasott)';
 $labels['yourmessage'] = 'Ez az üzenete olvasási visszaigazolása';
@@ -331,9 +329,6 @@
 $labels['messagecount'] = 'Üzenet';
 $labels['create'] = 'Létrehozás';
 $labels['createfolder'] = 'Új mappa létrehozása';
-$labels['rename'] = 'Átnevezés';
-$labels['renamefolder'] = 'Mappa átnevezése';
-$labels['deletefolder'] = 'Mappa törlése';
 $labels['managefolders'] = 'Mappák kezelése';
 $labels['specialfolders'] = 'Különleges mappák';
 $labels['sortby'] = 'Rendezés';
diff --git a/program/localization/hu_HU/messages.inc b/program/localization/hu_HU/messages.inc
index 3f5d7de..c820bc2 100644
--- a/program/localization/hu_HU/messages.inc
+++ b/program/localization/hu_HU/messages.inc
@@ -57,9 +57,7 @@
 $messages['deletemessagesconfirm'] = 'Biztos, hogy törölni szeretné a kijelölt üzenete(ke)t?';
 $messages['deletefolderconfirm'] = 'Biztos, hogy törölni szeretné ezt a mappát?';
 $messages['purgefolderconfirm'] = 'Biztos benne, hogy az összes üzenet törölhető?';
-$messages['foldercreating'] = 'Mappa létrehozása...';
 $messages['folderdeleting'] = 'Mappa törlése...';
-$messages['folderrenaming'] = 'Mappa átnevezése...';
 $messages['foldermoving'] = 'Mappa mozgatása...';
 $messages['formincomplete'] = 'Az űrlap hiányosan lett kitöltve';
 $messages['noemailwarning'] = 'Adjon meg egy valós e-mail címet';
@@ -94,7 +92,6 @@
 $messages['receiptsent'] = 'Az olvasási visszaigazolás el lett küldve';
 $messages['errorsendingreceipt'] = 'Az olvasási visszaigazolást nem sikerült elküldeni';
 $messages['nodeletelastidentity'] = 'Nem törölheti ezt az azonosítót, ez az egyetlen';
-$messages['addsubfolderhint'] = 'Az új könyvtár az aktuálisan kiválasztott alkönyvtáraként lesz létrehozva';
 $messages['forbiddencharacter'] = 'A mappa neve tiltott karaktert tartalmaz';
 $messages['selectimportfile'] = 'Kérjük válassza ki a feltölteni kívánt fájlt';
 $messages['addresswriterror'] = 'A kiválasztott címjegyzék nem írható';
diff --git a/program/localization/hy_AM/labels.inc b/program/localization/hy_AM/labels.inc
index 7081d44..5809c13 100644
--- a/program/localization/hy_AM/labels.inc
+++ b/program/localization/hy_AM/labels.inc
@@ -249,9 +249,6 @@
 $labels['messagecount'] = 'Նամակներ';
 $labels['create'] = 'Ստեղծել';
 $labels['createfolder'] = 'Բացել նոր դարակ';
-$labels['rename'] = 'Վերանվանել';
-$labels['renamefolder'] = 'Վերանվանել դարակը';
-$labels['deletefolder'] = 'Ջնջել դարակը';
 $labels['managefolders'] = 'Կարգավորել դարակները';
 $labels['specialfolders'] = 'Հատուկ դարակներ';
 $labels['sortby'] = 'Դասավորել';
diff --git a/program/localization/hy_AM/messages.inc b/program/localization/hy_AM/messages.inc
index cd8aab2..5313ba1 100644
--- a/program/localization/hy_AM/messages.inc
+++ b/program/localization/hy_AM/messages.inc
@@ -48,9 +48,7 @@
 $messages['deletemessagesconfirm'] = 'Ուզու՞մ էք ջնջել նշված նամակները';
 $messages['deletefolderconfirm'] = 'Ուզու՞մ էք ջնջել այս դարակը';
 $messages['purgefolderconfirm'] = 'Ուզու՞մ էք ջնջել այս դարակի բոլոր նամակները';
-$messages['foldercreating'] = 'Դարակը ստեղծվում է…';
 $messages['folderdeleting'] = 'Դարակը ջնջվում է…';
-$messages['folderrenaming'] = 'Դարակը վերանվանվում է…';
 $messages['foldermoving'] = 'Դարակը տեղափոխվում է…';
 $messages['formincomplete'] = 'Ձևը թերի է լրացված';
 $messages['noemailwarning'] = 'Մուտքագրեք ճիշտ էլ. հասցե';
@@ -83,7 +81,6 @@
 $messages['receiptsent'] = 'Նամակի ընթերցման ծանուցագիրն ուղարկված է';
 $messages['errorsendingreceipt'] = 'Ծանուցագրի ուղարկումը ձախողվեց';
 $messages['nodeletelastidentity'] = 'Անհնար է ջնջել վերջին տարբերակը';
-$messages['addsubfolderhint'] = 'Այս դարակը կստեղծվի որպես նշվածի ենթադարակ';
 $messages['forbiddencharacter'] = 'Դարակի անունը պարունակում է անթույլատրելի նշան';
 $messages['selectimportfile'] = 'Ընտրեք ուղարկվող ֆայլը';
 $messages['addresswriterror'] = 'Ընտրված հասցեագիրքը ենթակա չէ փոփոխման';
diff --git a/program/localization/id_ID/labels.inc b/program/localization/id_ID/labels.inc
index 854712d..80a351a 100644
--- a/program/localization/id_ID/labels.inc
+++ b/program/localization/id_ID/labels.inc
@@ -10,7 +10,7 @@
 | Licensed under the GNU GPL                                            |
 |                                                                       |
 +-----------------------------------------------------------------------+
-| Author: Putu Arya Sabda Wijaya <klunxer@gmail.com>                    |
+| Author: Putu Arya Sabda Wijaya <ptaryasw@isi-dps.ac.id>                    |
 +-----------------------------------------------------------------------+
 
 @version $Id$
@@ -38,11 +38,15 @@
 $labels['cc'] = 'Lampiran';
 $labels['bcc'] = 'Lampiran tersembunyi';
 $labels['replyto'] = 'Balas kepada';
+$labels['followupto'] = 'Surat Tindak Lanjut Untuk';
 $labels['date'] = 'Tanggal';
 $labels['size'] = 'Ukuran';
 $labels['priority'] = 'Prioritas';
 $labels['organization'] = 'Organisasi';
+$labels['readstatus'] = 'Status Terbaca';
 $labels['reply-to'] = 'Balas kepada';
+$labels['mail-reply-to'] = 'Surat Balasan Untuk';
+$labels['mail-followup-to'] = 'Surat Tindak Lanjut Untuk';
 $labels['mailboxlist'] = 'Map';
 $labels['messagesfromto'] = 'Pesan ke $from sampai $to dari $count';
 $labels['threadsfromto'] = 'Untaian ke $from sampai $to dari $count';
@@ -97,6 +101,8 @@
 $labels['writenewmessage'] = 'Buat pesan baru';
 $labels['replytomessage'] = 'Balas pesan';
 $labels['replytoallmessage'] = 'Balas ke pengirim dan yang lain';
+$labels['replyall'] = 'Balas ke semua';
+$labels['replylist'] = 'Balas ke milis';
 $labels['forwardmessage'] = 'Teruskan pesan';
 $labels['deletemessage'] = 'Hapus pesan';
 $labels['movemessagetotrash'] = 'Pindahkan pesan ke tong sampah';
@@ -168,7 +174,9 @@
 $labels['addattachment'] = 'Sisipkan sebuah berkas';
 $labels['charset'] = 'Set karakter';
 $labels['editortype'] = 'Tipe penyunting';
-$labels['returnreceipt'] = 'Kembalikan penerima';
+$labels['returnreceipt'] = 'Tanda terima kembali';
+$labels['dsn'] = 'Pemberitahuan status terkirim';
+$labels['editidents'] = 'Ubah identitas';
 $labels['checkspelling'] = 'Pemeriksaan ejaan';
 $labels['resumeediting'] = 'Lanjutkan menyunting';
 $labels['revertto'] = 'Balikkan ke';
@@ -192,6 +200,7 @@
 $labels['addcc'] = 'Tambah Cc';
 $labels['addbcc'] = 'Tambah Bcc';
 $labels['addreplyto'] = 'Tambah Balas Ke';
+$labels['addfollowupto'] = 'Tambahkan Tindak-Lanjut-Ke';
 $labels['mdnrequest'] = 'Pengirim pesan ini telah meminta untuk diberitahu ketika Anda membaca pesan ini. Apakah anda ingin memberitahu pengirim?';
 $labels['receiptread'] = 'Tanda Terima (baca)';
 $labels['yourmessage'] = 'Ini adalah Tanda Terima untuk pesan Anda';
@@ -203,6 +212,7 @@
 $labels['addcontact'] = 'Tambah kontak baru';
 $labels['editcontact'] = 'Ubah kontak';
 $labels['contacts'] = 'Daftar kontak';
+$labels['contactproperties'] = 'Properti kontak';
 $labels['edit'] = 'Ubah';
 $labels['cancel'] = 'Batal';
 $labels['save'] = 'Simpan';
@@ -250,6 +260,7 @@
 $labels['signature'] = 'Tanda tangan';
 $labels['dstactive'] = 'Waktu Musim Panas';
 $labels['htmleditor'] = 'Tulis pesan HTML';
+$labels['htmlonreply'] = 'balasan untuk pesan HTML saja';
 $labels['htmlsignature'] = 'Tandatangan HTML';
 $labels['previewpane'] = 'Perlihatkan tempat melihat';
 $labels['skin'] = 'Tampilan antarmuka';
@@ -258,9 +269,11 @@
 $labels['uisettings'] = 'Antarmuka pengguna';
 $labels['serversettings'] = 'Pengaturan Server';
 $labels['mailboxview'] = 'Tampilan Kotak Surat';
-$labels['mdnrequests'] = 'Pemberitahuan pada pengirim';
+$labels['mdnrequests'] = 'Sedang dimintakan tanda terima kembali';
 $labels['askuser'] = 'tanya pengguna';
 $labels['autosend'] = 'kirim otomatis';
+$labels['autosendknown'] = 'kirim tanda terima kepada kontak saya, selain itu tanyai saya';
+$labels['autosendknownignore'] = 'kirim tanda terima kepada kontak saya, selain acuhkan';
 $labels['ignore'] = 'acuhkan';
 $labels['readwhendeleted'] = 'Tandai pesan sebagai terbaca saat dihapus';
 $labels['flagfordeletion'] = 'Tandai pesan untuk penghapusan daripada dihapus';
@@ -305,6 +318,9 @@
 $labels['insertsignature'] = 'Isi tanda tangan';
 $labels['previewpanemarkread'] = 'Tandai pesan yang sudah dilihat ';
 $labels['afternseconds'] = 'setelah $n detik';
+$labels['reqmdn'] = 'Selalu meminta tanda terima kembali';
+$labels['reqdsn'] = 'Selalu meminta pemberitahuan status terkirim';
+$labels['replysamefolder'] = 'Taruh balasan di folder yang sama dengan pesan yang dibalas';
 $labels['folder'] = 'Map';
 $labels['folders'] = 'Map-map';
 $labels['foldername'] = 'Nama map';
@@ -312,9 +328,6 @@
 $labels['messagecount'] = 'Pesan-pesan';
 $labels['create'] = 'Buat';
 $labels['createfolder'] = 'Buat map baru';
-$labels['rename'] = 'Namai ulang';
-$labels['renamefolder'] = 'Namai ulang map';
-$labels['deletefolder'] = 'Hapus map';
 $labels['managefolders'] = 'Atur map';
 $labels['specialfolders'] = 'Map Khusus';
 $labels['sortby'] = 'Urut berdasarkan';
diff --git a/program/localization/id_ID/messages.inc b/program/localization/id_ID/messages.inc
index f0b49e4..3950249 100644
--- a/program/localization/id_ID/messages.inc
+++ b/program/localization/id_ID/messages.inc
@@ -10,7 +10,7 @@
 | Licensed under the GNU GPL                                            |
 |                                                                       |
 +-----------------------------------------------------------------------+
-| Author: Putu Arya Sabda Wijaya <klunxer@gmail.com>                    |
+| Author: Putu Arya Sabda Wijaya <ptaryasw@isi-dps.ac.id>                    |
 +-----------------------------------------------------------------------+
 
 @version $Id$
@@ -23,6 +23,7 @@
 $messages['sessionerror'] = 'Session Anda invalid atau kadaluwarsa';
 $messages['imaperror'] = 'Koneksi ke IMAP server gagal';
 $messages['servererror'] = 'Server Error!';
+$messages['servererrormsg'] = 'Server Error: $msg';
 $messages['invalidrequest'] = 'Permintaan tidak valid! Tidak ada data yang tersimpan.';
 $messages['nomessagesfound'] = 'Surat tidak ditemukan di kotak masuk ini';
 $messages['loggedout'] = 'Anda berhasil mengakhiri session. Selamat Tinggal!';
@@ -34,7 +35,7 @@
 $messages['sendingmessage'] = 'Mengirim pesan...';
 $messages['messagesent'] = 'Pesan terkirim';
 $messages['savingmessage'] = 'Menyimpan pesan...';
-$messages['messagesaved'] = 'MMenyimpan pesan ke daftar tunggu';
+$messages['messagesaved'] = 'Menyimpan pesan ke daftar tunggu';
 $messages['successfullysaved'] = 'Berhasil disimpan';
 $messages['addedsuccessfully'] = 'Kontak berhasil ditambahkan ke buku alamat';
 $messages['contactexists'] = 'Kontak dengan alamat e-mail ini sudah ada';
@@ -54,9 +55,7 @@
 $messages['deletemessagesconfirm'] = 'Yakin menghapus pesan terpilih?';
 $messages['deletefolderconfirm'] = 'Apakah anda benar-benar ingin menghapus map ini?';
 $messages['purgefolderconfirm'] = 'Yakin menghapus semua pesan pada map ini?';
-$messages['foldercreating'] = 'Membuat map...';
 $messages['folderdeleting'] = 'Menghapus map...';
-$messages['folderrenaming'] = 'Mengubah nama map...';
 $messages['foldermoving'] = 'Memindahkan map...';
 $messages['formincomplete'] = 'Isian tidak terisi semua';
 $messages['noemailwarning'] = 'Tolong masukkan alamat email yang valid';
@@ -88,10 +87,11 @@
 $messages['errorsavingcontact'] = 'Tidak bisa menyimpan alamat kontak';
 $messages['movingmessage'] = 'Memindahkan pesan...';
 $messages['copyingmessage'] = 'Menyalin pesan...';
+$messages['deletingmessage'] = 'Menghapus pesan...';
+$messages['markingmessage'] = 'Menandai Pesan...';
 $messages['receiptsent'] = 'Berhasil mengirim pemberitahuan tanda terima telah terbaca';
 $messages['errorsendingreceipt'] = 'Tidak dapat mengirim tanda terima';
 $messages['nodeletelastidentity'] = 'Anda tidak bida mengapus identitas ini, ini identitas yang terakhir';
-$messages['addsubfolderhint'] = 'Folder ini akan dibuat sebagai subfolder pada folder yang terpilih';
 $messages['forbiddencharacter'] = 'Nama folder mengandung karakter terlarang';
 $messages['selectimportfile'] = 'Mohon pilih sebuah berkas untuk diunggah';
 $messages['addresswriterror'] = 'Buku alamat terpilih tidak dapat ditulisi';
@@ -109,10 +109,21 @@
 $messages['smtpfromerror'] = 'SMTP Error ($code): Gagal mengatur pengirim "$from" ($msg)';
 $messages['smtptoerror'] = 'SMTP Error ($code): Gagal menambah penerima "$to" ($msg)';
 $messages['smtprecipientserror'] = 'SMTP Error ($code): Tidak dapat menguraikan daftar penerima';
+$messages['smtpdsnerror'] = 'SMTP Error: Tidak ada dukungan untuk pemberitahuan status terkirim';
 $messages['smtperror'] = 'SMTP Error : $msg';
 $messages['emailformaterror'] = 'Alamat e-mail salah: $email';
 $messages['toomanyrecipients'] = 'Terlalu banyak penerima. Batas maksimal penerima adalah $max';
 $messages['maxgroupmembersreached'] = 'Jumlah grup melebihi jumlah maksimum $max';
 $messages['internalerror'] = 'Terjadi kesalahan internal. Silahkan diulang kembali';
+$messages['contactdelerror'] = 'Kontak tidak bisa dihapus';
+$messages['contactdeleted'] = 'Kontak berhasil dihapus';
+$messages['groupdeleted'] = 'Grup berhasil dihapus';
+$messages['grouprenamed'] = 'Grup berhasil dinamai kembali';
+$messages['groupcreated'] = 'Grub berhasil dibuat';
+$messages['messagedeleted'] = 'Pesan berhasil dihapus';
+$messages['messagemoved'] = 'Pesan berhasil dipindahkan';
+$messages['messagecopied'] = 'Pesan berhasil disalin';
+$messages['messagemarked'] = 'Pesan berhasil ditandai';
+$messages['autocompletechars'] = 'Masukkan setidaknya $min karakter untuk swaparipurna';
 
 ?>
diff --git a/program/localization/is_IS/labels.inc b/program/localization/is_IS/labels.inc
index f21a3b5..edb0ce3 100644
--- a/program/localization/is_IS/labels.inc
+++ b/program/localization/is_IS/labels.inc
@@ -250,9 +250,6 @@
 $labels['messagecount'] = 'Skeyti';
 $labels['create'] = 'Búa til';
 $labels['createfolder'] = 'Búa til nýja möppu';
-$labels['rename'] = 'Endurnefna';
-$labels['renamefolder'] = 'Breyta nafni möppu';
-$labels['deletefolder'] = 'Eyða möppu';
 $labels['managefolders'] = 'Sýsla með möppum';
 $labels['specialfolders'] = 'Sérstakar möppur';
 $labels['sortby'] = 'Raða eftir';
diff --git a/program/localization/it_IT/labels.inc b/program/localization/it_IT/labels.inc
index 5f6cc85..327791c 100644
--- a/program/localization/it_IT/labels.inc
+++ b/program/localization/it_IT/labels.inc
@@ -39,15 +39,14 @@
 $labels['cc'] = 'Cc';
 $labels['bcc'] = 'Bcn';
 $labels['replyto'] = 'Rispondi a';
-$labels['mailreplyto'] = 'Mail-Reply-To';
-$labels['mailfollowupto'] = 'Mail-Followup-To';
+$labels['followupto'] = 'Followup-To';
 $labels['date'] = 'Data';
 $labels['size'] = 'Dimensione';
 $labels['priority'] = 'Priorità';
 $labels['organization'] = 'Società';
 $labels['reply-to'] = 'Rispondi a';
-$labels['mailreply-to'] = 'Mail-Reply-To';
-$labels['mailfollowup-to'] = 'Mail-Followup-To';
+$labels['mail-reply-to'] = 'Mail-Reply-To';
+$labels['mail-followup-to'] = 'Mail-Followup-To';
 $labels['mailboxlist'] = 'Cartelle';
 $labels['messagesfromto'] = 'Messaggi da $from a $to di $count';
 $labels['threadsfromto'] = 'Thread da $from a $to di $count';
@@ -201,8 +200,7 @@
 $labels['addcc'] = 'Aggiungi Cc';
 $labels['addbcc'] = 'Aggiungi Bcc';
 $labels['addreplyto'] = 'Aggiungi Rispondi a';
-$labels['addmailreplyto'] = 'Aggiungi Mail-Reply-To';
-$labels['addmailfollowupto'] = 'Aggiungi Mail-Followup-To';
+$labels['addfollowupto'] = 'Aggiungi Followup-To';
 $labels['mdnrequest'] = 'Il mittente ha richiesto di ricevere una notifica dell\'avvenuta lettura del messaggio. Si desidera inviare tale notifica?';
 $labels['receiptread'] = 'Ricevuta di ritorno (letto)';
 $labels['yourmessage'] = 'Questa è la ricevuta di ritorno del messaggio inviato';
@@ -328,9 +326,6 @@
 $labels['messagecount'] = 'Messaggi';
 $labels['create'] = 'Crea';
 $labels['createfolder'] = 'Crea nuova cartella';
-$labels['rename'] = 'Rinomina';
-$labels['renamefolder'] = 'Rinomina cartella';
-$labels['deletefolder'] = 'Cancella cartella';
 $labels['managefolders'] = 'Gestione cartelle';
 $labels['specialfolders'] = 'Cartelle Speciali';
 $labels['sortby'] = 'Ordina per';
diff --git a/program/localization/it_IT/messages.inc b/program/localization/it_IT/messages.inc
index 1a0c9db..665a9e5 100644
--- a/program/localization/it_IT/messages.inc
+++ b/program/localization/it_IT/messages.inc
@@ -55,9 +55,7 @@
 $messages['deletemessagesconfirm'] = 'Sei sicuro di voler eliminare i messaggi selezionati?';
 $messages['deletefolderconfirm'] = 'Sei sicuro di voler eliminare la cartella selezionata?';
 $messages['purgefolderconfirm'] = 'Sei sicuro di voler eliminare tutti i messaggi in questa cartella?';
-$messages['foldercreating'] = 'Creazione cartella...';
 $messages['folderdeleting'] = 'Eliminazione cartella...';
-$messages['folderrenaming'] = 'Rinominazione cartella...';
 $messages['foldermoving'] = 'Spostamento cartella...';
 $messages['formincomplete'] = 'Per favore, compila tutti i campi';
 $messages['noemailwarning'] = 'Per favore, immetti un indirizzo e-mail valido';
@@ -92,7 +90,6 @@
 $messages['receiptsent'] = 'Ricevuta di ritorno inviata con successo';
 $messages['errorsendingreceipt'] = 'Impossibile spedire la ricevuta di ritorno';
 $messages['nodeletelastidentity'] = 'Impossibile eliminare l\'unica identità disponibile';
-$messages['addsubfolderhint'] = 'La cartella verrà creata come sotto cartella della cartella corrente';
 $messages['forbiddencharacter'] = 'Il nome della cartella contiene un carattere vietato';
 $messages['selectimportfile'] = 'Per favore, seleziona il file da caricare';
 $messages['addresswriterror'] = 'La rubrica selezionata non è scrivibile';
diff --git a/program/localization/ja_JP/labels.inc b/program/localization/ja_JP/labels.inc
index c8ff8ac..317ba6e 100644
--- a/program/localization/ja_JP/labels.inc
+++ b/program/localization/ja_JP/labels.inc
@@ -16,68 +16,51 @@
 
 @version $Id$
 
-EN-Revision: 4184
+EN-Revision: 3891
 
 */
 
 $labels = array();
-
-// login page
 $labels['welcome'] = 'ようこそ $product へ';
 $labels['username'] = 'ユーザー名';
 $labels['password'] = 'パスワード';
 $labels['server'] = 'サーバー';
 $labels['login'] = 'ログイン';
-
-// taskbar
 $labels['logout'] = 'ログアウト';
 $labels['mail'] = '電子メール';
 $labels['settings'] = '個人設定';
 $labels['addressbook'] = 'アドレス帳';
-
-// mailbox names
 $labels['inbox'] = '受信トレイ';
 $labels['drafts'] = '下書き';
 $labels['sent'] = '送信済みアイテム';
 $labels['trash'] = 'ごみ箱';
 $labels['junk'] = '迷惑メール';
-
-// message listing
 $labels['subject'] = '件名';
 $labels['from'] = '差出人';
 $labels['to'] = '宛先';
 $labels['cc'] = 'コピー';
 $labels['bcc'] = 'Bcc';
 $labels['replyto'] = 'Reply-To (返信先)';
-$labels['mailreplyto'] = 'Mail-Reply-To (ML 投稿者)';
-$labels['mailfollowupto'] = 'Mail-Followup-To (ML の宛先)';
+$labels['followupto'] = 'Followup-To ( の宛先)';
 $labels['date'] = '日付';
-$labels['size'] = '容量';
+$labels['size'] = 'サイズ';
 $labels['priority'] = '優先度';
 $labels['organization'] = '所属';
-$labels['readstatus'] = '閲覧の状態';
-
-// aliases
-$labels['reply-to'] = $labels['replyto'];
-$labels['mail-reply-to'] = $labels['mailreplyto'];
-$labels['mail-followup-to'] = $labels['mailfollowupto'];
-
-$labels['mailboxlist'] = 'フォルダー一覧';
+$labels['readstatus'] = '閲覧状況';
+$labels['reply-to'] = '返信先';
+$labels['mail-reply-to'] = 'Mail-Reply-To (ML 投稿者)';
+$labels['mail-followup-to'] = 'Mail-Followup-To (ML の宛先)';
+$labels['mailboxlist'] = 'フォルダ一覧';
 $labels['messagesfromto'] = '表示中のメール: $from ~ $to (全: $count 件)';
 $labels['threadsfromto'] = '表示中のスレッド: $from ~ $to (全: $count 件)';
 $labels['messagenrof'] = '現在のメール: $nr (全: $count 件)';
-
-$labels['copy']     = 'コピー';
-$labels['move']     = '移動';
-$labels['moveto']   = 'フォルダーの移動';
+$labels['copy'] = 'コピー';
+$labels['move'] = '移動';
+$labels['moveto'] = 'フォルダの移動';
 $labels['download'] = 'ダウンロード';
-
 $labels['filename'] = 'ファイル名';
 $labels['filesize'] = 'ファイル サイズ';
-
 $labels['addtoaddressbook'] = 'アドレス帳に追加';
-
-// weekdays short
 $labels['sun'] = '日';
 $labels['mon'] = '月';
 $labels['tue'] = '火';
@@ -85,74 +68,64 @@
 $labels['thu'] = '木';
 $labels['fri'] = '金';
 $labels['sat'] = '土';
-
-// weekdays long
-$labels['sunday']    = '日曜日';
-$labels['monday']    = '月曜日';
-$labels['tuesday']   = '火曜日';
+$labels['sunday'] = '日曜日';
+$labels['monday'] = '月曜日';
+$labels['tuesday'] = '火曜日';
 $labels['wednesday'] = '水曜日';
-$labels['thursday']  = '木曜日';
-$labels['friday']    = '金曜日';
-$labels['saturday']  = '土曜日';
-
-// months short
-$labels['jan']	= '1 月';
-$labels['feb']	= '2 月';
-$labels['mar']	= '3 月';
-$labels['apr']	= '4 月';
-$labels['may']	= '5 月';
-$labels['jun']	= '6 月';
-$labels['jul']	= '7 月';
-$labels['aug']	= '8 月';
-$labels['sep']	= '9 月';
-$labels['oct']	= '10 月';
-$labels['nov']	= '11 月';
-$labels['dec']	= '12 月';
-
-// months long
-$labels['longjan']	= '1 月';
-$labels['longfeb']	= '2 月';
-$labels['longmar']	= '3 月';
-$labels['longapr']	= '4 月';
-$labels['longmay']	= '5 月';
-$labels['longjun']	= '6 月';
-$labels['longjul']	= '7 月';
-$labels['longaug']	= '8 月';
-$labels['longsep']	= '9 月';
-$labels['longoct']	= '10 月';
-$labels['longnov']	= '11 月';
-$labels['longdec']	= '12 月';
-
+$labels['thursday'] = '木曜日';
+$labels['friday'] = '金曜日';
+$labels['saturday'] = '土曜日';
+$labels['jan'] = '1 月';
+$labels['feb'] = '2 月';
+$labels['mar'] = '3 月';
+$labels['apr'] = '4 月';
+$labels['may'] = '5 月';
+$labels['jun'] = '6 月';
+$labels['jul'] = '7 月';
+$labels['aug'] = '8 月';
+$labels['sep'] = '9 月';
+$labels['oct'] = '10 月';
+$labels['nov'] = '11 月';
+$labels['dec'] = '12 月';
+$labels['longjan'] = '1 月';
+$labels['longfeb'] = '2 月';
+$labels['longmar'] = '3 月';
+$labels['longapr'] = '4 月';
+$labels['longmay'] = '5 月';
+$labels['longjun'] = '6 月';
+$labels['longjul'] = '7 月';
+$labels['longaug'] = '8 月';
+$labels['longsep'] = '9 月';
+$labels['longoct'] = '10 月';
+$labels['longnov'] = '11 月';
+$labels['longdec'] = '12 月';
 $labels['today'] = '今日';
-
-// toolbar buttons
-$labels['checkmail']        = '新着の確認';
-$labels['writenewmessage']  = '新規メールの作成';
-$labels['replytomessage']   = '返信';
+$labels['checkmail'] = '新着の確認';
+$labels['writenewmessage'] = '新規メールの作成';
+$labels['replytomessage'] = '返信';
 $labels['replytoallmessage'] = '差出人とすべての宛先に返信';
-$labels['replyall']         = '全員に返信';
-$labels['replylist']        = 'ML に返信';
-$labels['forwardmessage']   = '転送';
-$labels['deletemessage']    = '削除';
+$labels['replyall'] = '全員に返信';
+$labels['replylist'] = 'ML に返信';
+$labels['forwardmessage'] = '転送';
+$labels['deletemessage'] = '削除';
 $labels['movemessagetotrash'] = 'ごみ箱に移動';
-$labels['printmessage']     = '印刷';
-$labels['previousmessage']  = '前のメールへ';
+$labels['printmessage'] = '印刷';
+$labels['previousmessage'] = '前のメールへ';
 $labels['previousmessages'] = '前の一覧へ';
-$labels['firstmessage']     = '最初のメールへ';
-$labels['firstmessages']    = '最初の一覧へ';
-$labels['nextmessage']      = '次のメールへ';
-$labels['nextmessages']     = '次の一覧へ';
-$labels['lastmessage']      = '最後のメールへ';
-$labels['lastmessages']     = '最後の一覧へ';
-$labels['backtolist']       = '一覧に戻る';
-$labels['viewsource']       = 'ソースの表示';
-$labels['markmessages']     = 'マークを付ける';
-$labels['markread']         = '既読にする';
-$labels['markunread']       = '未読にする';
-$labels['markflagged']      = 'フラグを付ける';
-$labels['markunflagged']    = 'フラグを外す';
+$labels['firstmessage'] = '最初のメールへ';
+$labels['firstmessages'] = '最初の一覧へ';
+$labels['nextmessage'] = '次のメールへ';
+$labels['nextmessages'] = '次の一覧へ';
+$labels['lastmessage'] = '最後のメールへ';
+$labels['lastmessages'] = '最後の一覧へ';
+$labels['backtolist'] = '一覧に戻る';
+$labels['viewsource'] = 'ソースの表示';
+$labels['markmessages'] = 'マークを付ける';
+$labels['markread'] = '既読にする';
+$labels['markunread'] = '未読にする';
+$labels['markflagged'] = 'フラグを付ける';
+$labels['markunflagged'] = 'フラグを外す';
 $labels['messageactions'] = 'その他の操作...';
-
 $labels['select'] = '選択';
 $labels['all'] = 'すべて';
 $labels['none'] = 'なし';
@@ -163,14 +136,12 @@
 $labels['deleted'] = '削除済み';
 $labels['invert'] = '反転';
 $labels['filter'] = 'フィルター';
-
 $labels['list'] = '一覧';
 $labels['threads'] = 'スレッド';
 $labels['expand-all'] = 'すべて展開';
 $labels['expand-unread'] = '未開封のメールを展開';
 $labels['collapse-all'] = 'すべて折りたたむ';
 $labels['threaded'] = 'スレッドにする';
-
 $labels['autoexpand_threads'] = 'スレッドの展開';
 $labels['do_expand'] = 'すべてのスレッド';
 $labels['expand_only_unread'] = '未開封のメールのみ';
@@ -186,89 +157,69 @@
 $labels['listsorting'] = '整列基準';
 $labels['listorder'] = '整列順';
 $labels['listmode'] = '一覧表示モード';
-
-$labels['folderactions'] = 'フォルダーの操作...';
+$labels['folderactions'] = 'フォルダの操作...';
 $labels['compact'] = 'コンパクト';
 $labels['empty'] = '空';
 $labels['purge'] = 'ごみ箱を空にする';
-
 $labels['quota'] = 'ディスク使用量';
-$labels['unknown']  = '不明';
-$labels['unlimited']  = '無制限';
-
+$labels['unknown'] = '不明';
+$labels['unlimited'] = '無制限';
 $labels['quicksearch'] = '検索';
 $labels['resetsearch'] = '検索解除';
-$labels['searchmod']  = '検索条件';
-$labels['msgtext']  = 'すべてのメール';
-
+$labels['searchmod'] = '検索条件';
+$labels['msgtext'] = 'すべてのメール';
 $labels['openinextwin'] = '新しいウィンドウで開く';
 $labels['emlsave'] = 'eml 形式で保存する';
-
-// message compose
-$labels['compose']        = 'メールの作成';
-$labels['editasnew']      = '新規として編集';
-$labels['savemessage']    = '下書きに保存';
-$labels['sendmessage']    = '今すぐ送信';
-$labels['addattachment']  = 'ファイルの添付';
-$labels['charset']        = '文字エンコード';
-$labels['editortype']     = 'エディターの種類';
-$labels['returnreceipt']  = '開封確認';
-$labels['dsn']            = '配送状況の通知';
-
-$labels['editidents']    = '個人情報の編集';
+$labels['compose'] = 'メールの作成';
+$labels['editasnew'] = '新規として編集';
+$labels['savemessage'] = '下書きに保存';
+$labels['sendmessage'] = '今すぐ送信';
+$labels['addattachment'] = 'ファイルの添付';
+$labels['charset'] = '文字エンコード';
+$labels['editortype'] = 'エディターの種類';
+$labels['returnreceipt'] = '開封確認';
+$labels['dsn'] = '配送状況通知';
+$labels['editidents'] = '個人情報の編集';
 $labels['checkspelling'] = 'スペル チェック';
 $labels['resumeediting'] = 'メール作成に戻る';
-$labels['revertto']      = '元に戻す';
-
+$labels['revertto'] = '元に戻す';
 $labels['attachments'] = '添付ファイル';
 $labels['upload'] = 'アップロード';
-$labels['close']  = '閉じる';
+$labels['close'] = '閉じる';
 $labels['messageoptions'] = 'メッセージのオプション...';
-
-$labels['low']     = '低い';
-$labels['lowest']  = '最低';
-$labels['normal']  = '通常';
-$labels['high']    = '高い';
+$labels['low'] = '低い';
+$labels['lowest'] = '最低';
+$labels['normal'] = '通常';
+$labels['high'] = '高い';
 $labels['highest'] = '最高';
-
 $labels['nosubject'] = '(件名なし)';
 $labels['showimages'] = '画像の表示';
 $labels['alwaysshow'] = '$sender から届いた画像は常に表示';
-
 $labels['htmltoggle'] = 'HTML';
 $labels['plaintoggle'] = 'テキスト';
 $labels['savesentmessagein'] = '送信済みメールの保存先';
 $labels['dontsave'] = '保存しない';
 $labels['maxuploadsize'] = '添付可能なファイルのサイズは最大 $size です。';
-
 $labels['addcc'] = 'Cc 追加';
 $labels['addbcc'] = 'Bcc 追加';
 $labels['addreplyto'] = 'Reply-To 追加';
-$labels['addmailreplyto'] = 'Mail-Reply-To 追加';
-$labels['addmailfollowupto'] = 'Mail-Followup-To 追加';
-
-// mdn
+$labels['addfollowupto'] = 'Followup-To 追加';
 $labels['mdnrequest'] = 'メールの差出人は開封確認の送付を求めています。開封確認のメールを送付しますか?';
 $labels['receiptread'] = '開封確認 (表示済み)';
 $labels['yourmessage'] = 'これはあなたが送信したメールに対する開封確認です。';
 $labels['receiptnote'] = '注意: この開封確認はメールが受信者に表示されたことの通知です。受信者がメールを読んだこと、内容を理解したことを保証するものではありません。';
-
-// address boook
 $labels['name'] = '表示名';
 $labels['firstname'] = '名 (ファースト ネーム)';
 $labels['surname'] = '姓 (ラスト ネーム)';
 $labels['email'] = 'メールアドレス';
-
 $labels['addcontact'] = '連絡先の新規追加';
 $labels['editcontact'] = '連絡先の編集';
 $labels['contacts'] = '連絡先';
 $labels['contactproperties'] = '連絡先のプロパティ';
-
 $labels['edit'] = '編集';
 $labels['cancel'] = 'キャンセル';
 $labels['save'] = '保存';
 $labels['delete'] = '削除';
-
 $labels['newcontact'] = '連絡先の新規作成';
 $labels['deletecontact'] = '連絡先の削除';
 $labels['composeto'] = 'この連絡先へメールの送信';
@@ -278,37 +229,28 @@
 $labels['exportvcards'] = 'vCard 形式でエクスポート';
 $labels['newcontactgroup'] = '連絡先グループの新規作成';
 $labels['groupactions'] = '連絡先グループの操作...';
-
 $labels['previouspage'] = '前の一覧へ';
 $labels['firstpage'] = '最初の一覧へ';
 $labels['nextpage'] = '次の一覧へ';
 $labels['lastpage'] = '最後の一覧へ';
-
 $labels['group'] = 'グループ';
 $labels['groups'] = 'グループ';
 $labels['personaladrbook'] = '個人アドレス';
-
 $labels['import'] = 'インポート';
 $labels['importcontacts'] = '連絡先のインポート';
 $labels['importfromfile'] = 'インポートするファイル:';
 $labels['importreplace'] = '現在のアドレス帳と置き換える';
 $labels['importtext'] = '既存のアドレス帳の連絡先をアップロードできます。現在、<a href="http://ja.wikipedia.org/wiki/VCard">vCard</a> 形式からのインポートに対応しています。';
 $labels['done'] = '完了';
-
-// settings
 $labels['settingsfor'] = '次の設定:';
-
 $labels['preferences'] = '設定';
 $labels['userpreferences'] = 'ユーザー設定';
 $labels['editpreferences'] = 'ユーザー設定の変更';
-
 $labels['identities'] = '個人情報';
 $labels['manageidentities'] = 'アカウントの個人情報管理';
 $labels['newidentity'] = '個人情報の新規作成';
-
 $labels['newitem'] = '新しい項目';
 $labels['edititem'] = '項目の編集';
-
 $labels['preferhtml'] = 'HTML を表示する';
 $labels['defaultcharset'] = '標準の文字セット';
 $labels['htmlmessage'] = 'HTML メール';
@@ -320,19 +262,19 @@
 $labels['pagesize'] = '1 ページの表示件数';
 $labels['signature'] = '署名';
 $labels['dstactive'] = 'サマータイムを適用する';
-$labels['htmleditor'] = '新規メールでは HTML を標準にする';
-$labels['htmlonreply'] = 'メールの返信時は常に HTML を使用する';
+$labels['htmleditor'] = '新規メールは HTML を標準にする';
+$labels['htmlonreply'] = '返信メールでは常に HTML を使用';
 $labels['htmlsignature'] = '署名に HTML タグを使用する';
 $labels['previewpane'] = 'プレビュー ペインを表示する';
 $labels['skin'] = 'スキン';
 $labels['logoutclear'] = 'ログアウト時にごみ箱を空にする';
-$labels['logoutcompact'] = 'ログアウト時にフォルダーのコンパクト化を実行する';
+$labels['logoutcompact'] = 'ログアウト時にフォルダのコンパクト化を実行する';
 $labels['uisettings'] = 'ユーザー インターフェース';
 $labels['serversettings'] = 'サーバーの設定';
 $labels['mailboxview'] = '受信箱';
-$labels['mdnrequests'] = '開封確認の送信要求時';
-$labels['askuser'] = '開封確認メールの送信を確認する';
-$labels['autosend'] = '開封確認メールを送信する';
+$labels['mdnrequests'] = '差出人への通知';
+$labels['askuser'] = 'ユーザーに確認';
+$labels['autosend'] = '自動的に送信';
 $labels['autosendknown'] = '差出人が連絡先に登録されていれば開封確認を送信し、それ以外は問い合わせる';
 $labels['autosendknownignore'] = '差出人が連絡先に登録されていれば開封確認を送信し、それ以外は無視する';
 $labels['ignore'] = '無視';
@@ -358,7 +300,7 @@
 $labels['force7bit'] = 'マルチバイト文字列を MIME エンコードする';
 $labels['advancedoptions'] = '高度な設定';
 $labels['focusonnewmessage'] = '新着メールが届いたらブラウザーをアクティブにする';
-$labels['checkallfolders'] = 'すべてのフォルダーで新着メールを表示する';
+$labels['checkallfolders'] = 'すべてのフォルダで新着メールを表示する';
 $labels['displaynext'] = 'メールの削除や移動後に次のメールを表示する';
 $labels['mainoptions'] = '基本設定';
 $labels['section'] = '設定項目';
@@ -370,7 +312,7 @@
 $labels['replytopposting'] = '元のメッセージ引用部の前に本文を作成する';
 $labels['replybottomposting'] = '元のメッセージ引用部の後に本文を作成する';
 $labels['replyremovesignature'] = '返信時にメッセージからオリジナルの署名を除去する';
-$labels['autoaddsignature'] = '自動的に署名を付加する';
+$labels['autoaddsignature'] = '署名を自動的に付加する';
 $labels['newmessageonly'] = '新規作成時のみ';
 $labels['replyandforwardonly'] = '返信・転送時のみ';
 $labels['replysignaturepos'] = '返信・転送時に署名を挿入する位置';
@@ -379,34 +321,32 @@
 $labels['insertsignature'] = '署名の挿入';
 $labels['previewpanemarkread'] = '開封済みにする';
 $labels['afternseconds'] = '$n 秒後';
-$labels['reqmdn'] = '常に開封確認通知を要求する';
-$labels['reqdsn'] = '常に配送状況の通知を要求する';
-$labels['replysamefolder'] = '返信されたメールを返信元メールと同じフォルダに保存';
-
-$labels['folder']  = 'フォルダー';
-$labels['folders']  = 'フォルダー一覧';
-$labels['foldername']  = 'フォルダー名';
+$labels['reqmdn'] = '常に開封確認を要求';
+$labels['reqdsn'] = '常に配送状況通知を要求';
+$labels['replysamefolder'] = '返信されてきたメールを返信元メールと同じフォルダに保存';
+$labels['folder'] = 'フォルダ';
+$labels['folders'] = 'フォルダ一覧';
+$labels['foldername'] = 'フォルダ名';
 $labels['subscribed']  = '購読済';
 $labels['messagecount'] = 'メール';
-$labels['create']  = '作成';
-$labels['createfolder']  = 'フォルダーの新規作成';
-$labels['rename'] = '名前の変更';
-$labels['renamefolder'] = 'フォルダー名の変更';
-$labels['deletefolder']  = 'フォルダーの削除';
-$labels['managefolders']  = 'フォルダーの管理';
-$labels['specialfolders'] = '特殊なフォルダー';
-
+$labels['create'] = '作成';
+$labels['createfolder'] = 'フォルダの新規作成';
+$labels['managefolders'] = 'フォルダの管理';
+$labels['specialfolders'] = '特殊なフォルダ';
+$labels['properties'] = 'プロパティ';
+$labels['folderproperties'] = 'フォルダのプロパティ';
+$labels['parentfolder'] = '親フォルダ';
+$labels['location'] = 'フォルダパス';
+$labels['info'] = 'フォルダ情報';
+$labels['getfoldersize'] = 'クリックでフォルダサイズを表示';
+$labels['changesubscription'] = 'クリックで同期設定を変更';
 $labels['sortby'] = '並び替えの基準';
 $labels['sortasc'] = '昇順で並び替え';
 $labels['sortdesc'] = '降順で並び替え';
-
-// units
 $labels['B'] = 'バイト';
 $labels['KB'] = 'KB';
 $labels['MB'] = 'MB';
 $labels['GB'] = 'GB';
-
-// character sets
 $labels['unicode'] = 'Unicode';
 $labels['english'] = '英語';
 $labels['westerneuropean'] = '西ヨーロッパ言語';
diff --git a/program/localization/ja_JP/messages.inc b/program/localization/ja_JP/messages.inc
index b1b88b0..3c3e7bd 100644
--- a/program/localization/ja_JP/messages.inc
+++ b/program/localization/ja_JP/messages.inc
@@ -26,7 +26,7 @@
 $messages['sessionerror'] = 'セッションが正しくないか期限切れです。';
 $messages['imaperror'] = 'IMAP サーバーへの接続に失敗しました。';
 $messages['servererror'] = 'サーバーでエラーが発生しました。';
-$messages['servererrormsg'] = 'サーバー エラー: $msg';
+$messages['servererrormsg'] = 'サーバーエラー: $msg';
 $messages['invalidrequest'] = '不正なリクエストです。データは保存されませんでした。';
 $messages['nomessagesfound'] = 'メールはありません。';
 $messages['loggedout'] = 'ログアウトしました。';
@@ -53,15 +53,15 @@
 $messages['errormoving'] = 'メールを移動できません。';
 $messages['errorcopying'] = 'メールをコピーできません。';
 $messages['errordeleting'] = 'メールを削除できません。';
-$messages['errormarking'] = 'メールのマークを設定できません。';
+$messages['errormarking'] = 'メールにマークを付けられません。';
 $messages['deletecontactconfirm'] = '選択した連絡先を本当に削除しますか?';
 $messages['deletemessagesconfirm'] = '選択したメールを本当に削除しますか?';
-$messages['deletefolderconfirm'] = 'このフォルダーを本当に削除しますか?';
-$messages['purgefolderconfirm'] = 'このフォルダーの全メールを本当に削除しますか?';
-$messages['foldercreating'] = 'フォルダーを作成しています...';
-$messages['folderdeleting'] = 'フォルダーを削除しています...';
-$messages['folderrenaming'] = 'フォルダー名を変更しています...';
-$messages['foldermoving'] = 'フォルダーを移動しています...';
+$messages['deletefolderconfirm'] = 'このフォルダを本当に削除しますか?';
+$messages['purgefolderconfirm'] = 'このフォルダの全メールを本当に削除しますか?';
+$messages['folderdeleting'] = 'フォルダを削除しています...';
+$messages['foldermoving'] = 'フォルダを移動しています...';
+$messages['foldersubscribing'] = 'フォルダの同期を登録しています...';
+$messages['folderunsubscribing'] = 'フォルダの同期を解除しています...';
 $messages['formincomplete'] = 'すべてのフォームの項目を入力していません。';
 $messages['noemailwarning'] = '有効なメールアドレスを入力してください。';
 $messages['nonamewarning'] = '名前を入力してください。';
@@ -80,7 +80,10 @@
 $messages['searching'] = '検索しています...';
 $messages['checking'] = '確認しています...';
 $messages['nospellerrors'] = 'スペル ミスは見つかりませんでした。';
-$messages['folderdeleted'] = 'フォルダーを削除しました。';
+$messages['folderdeleted'] = 'フォルダを削除しました。';
+$messages['foldersubscribed'] = 'フォルダの同期が設定されました。';
+$messages['folderunsubscribed'] = 'フォルダの同期が解除されました。';
+$messages['folderpurged'] = 'フォルダを削除しました。';
 $messages['deletedsuccessfully'] = '削除しました。';
 $messages['converting'] = 'メールから書式を削除しています...';
 $messages['messageopenerror'] = 'サーバーからメールを取得できません。';
@@ -93,12 +96,11 @@
 $messages['movingmessage'] = 'メールを移動しています...';
 $messages['copyingmessage'] = 'メールをコピーしています...';
 $messages['deletingmessage'] = 'メールを削除しています...';
-$messages['markingmessage'] = 'メールのマークを設定しています...';
+$messages['markingmessage'] = 'メールにマークを付けています...';
 $messages['receiptsent'] = '開封確認を送信しました。';
 $messages['errorsendingreceipt'] = '開封確認を送信できません。';
 $messages['nodeletelastidentity'] = '削除できません。少なくとも 1 つの個人情報が必要です。';
-$messages['addsubfolderhint'] = '現在選択しているフォルダーのサブ フォルダーとして作成されます。';
-$messages['forbiddencharacter'] = 'フォルダー名に利用できない文字が含まれています。';
+$messages['forbiddencharacter'] = 'フォルダ名に利用できない文字が含まれています。';
 $messages['selectimportfile'] = 'アップロードするファイルを選択してください。';
 $messages['addresswriterror'] = '選択したアドレス帳に書き込めません。';
 $messages['contactaddedtogroup'] = 'グループに連絡先を追加しました。';
@@ -110,26 +112,30 @@
 $messages['nofromaddress'] = '選択中の個人情報にメールアドレスが含まれていません。';
 $messages['editorwarning'] = 'テキスト エディターに切り替えるとすべての書式が失われます。よろしいですか?';
 $messages['httpreceivedencrypterror'] = '致命的な設定エラーが発生しました。<b>メッセージは送信されませんでした。</b>システム管理者に至急連絡してください。';
-$messages['smtpconnerror'] = 'SMTP Error ($code): サーバーへの接続に失敗しました。';
-$messages['smtpautherror'] = 'SMTP Error ($code): 認証に失敗しました。';
+$messages['smtpconnerror'] = 'SMTP Error ($code): サーバーへの接続に失敗しました';
+$messages['smtpautherror'] = 'SMTP Error ($code): 認証に失敗しました';
 $messages['smtpfromerror'] = 'SMTP Error ($code): 差出人 "$from" を設定できません ($msg)';
 $messages['smtptoerror'] = 'SMTP Error ($code): 宛先 "$to" を追加できません ($msg)';
-$messages['smtprecipientserror'] = 'SMTP Error: 宛先の一覧を解析できません。';
-$messages['smtpdsnerror'] = 'SMTP エラー: 配送状況通知をサポートしていません。';
-$messages['smtperror'] = 'SMTP エラー: $msg';
+$messages['smtprecipientserror'] = 'SMTP Error: 宛先のリストを解析できません';
+$messages['smtpdsnerror'] = 'SMTP Error: 配送状況通知 (DSN) はサポートされていません';
+$messages['smtperror'] = 'SMTP Error: $msg';
 $messages['emailformaterror'] = 'メールアドレスが正しくありません: $email';
 $messages['toomanyrecipients'] = '宛先が多すぎます。$max 件以内にしてください。';
 $messages['maxgroupmembersreached'] = 'グループのメンバーが多すぎます。$max 件以内にしてください。';
 $messages['internalerror'] = '内部エラーが発生しました。もう一度やり直してください。';
-$messages['contactdelerror'] = '連絡先を削除できませんでした。';
+$messages['contactdelerror'] = '連絡先を削除できません。';
 $messages['contactdeleted'] = '連絡先を削除しました。';
 $messages['groupdeleted'] = 'グループを削除しました。';
-$messages['grouprenamed'] = 'グループ名を変更しました.';
+$messages['grouprenamed'] = 'グループ名を変更しました。';
 $messages['groupcreated'] = 'グループを作成しました。';
 $messages['messagedeleted'] = 'メールを削除しました。';
 $messages['messagemoved'] = 'メールを移動しました。';
 $messages['messagecopied'] = 'メールをコピーしました。';
-$messages['messagemarked'] = 'メールのマークを設定しました。';
+$messages['messagemarked'] = 'メールにマークを付けました。';
 $messages['autocompletechars'] = '自動補完には少なくとも $min 文字入力してください。';
+$messages['namecannotbeempty'] = '名前が入力されていません。';
+$messages['nametoolong'] = '名前が長すぎます。';
+$messages['folderupdated'] = 'フォルダを更新しました。';
+$messages['foldercreated'] = 'フォルダを作成しました。';
 
 ?>
diff --git a/program/localization/ka_GE/labels.inc b/program/localization/ka_GE/labels.inc
index 8234318..7a56fc4 100755
--- a/program/localization/ka_GE/labels.inc
+++ b/program/localization/ka_GE/labels.inc
@@ -274,9 +274,6 @@
 $labels['messagecount'] = 'შეტყობინებები';
 $labels['create'] = 'შექმნა';
 $labels['createfolder'] = 'საქაღალდის შექმნა';
-$labels['rename'] = 'სახელის გადარქმევა';
-$labels['renamefolder'] = 'სახელის გადარქმევა საქაღალდისთვის';
-$labels['deletefolder'] = 'საქაღალდის წაშლა';
 $labels['managefolders'] = 'საქაღალდეების მართვა';
 $labels['specialfolders'] = 'სპეციალური საქაღალდე';
 $labels['sortby'] = 'დალაგება';
diff --git a/program/localization/ka_GE/messages.inc b/program/localization/ka_GE/messages.inc
index 33767dd..6e526b7 100755
--- a/program/localization/ka_GE/messages.inc
+++ b/program/localization/ka_GE/messages.inc
@@ -52,9 +52,7 @@
 $messages['deletemessagesconfirm'] = 'ნამდვილად გსურთ მონიშნული შეტყობინებების წაშლა?';
 $messages['deletefolderconfirm'] = 'ნამდვილად გსურთ ამ საქაღალდის წაშლა?';
 $messages['purgefolderconfirm'] = 'ნამდვილად გსურთ ყველა შეტყობინების წაშლა აღნიშნულ საქაღალდეში?';
-$messages['foldercreating'] = 'საქაღალდის შექმნა...';
 $messages['folderdeleting'] = 'საქაღალდის წაშლა...';
-$messages['folderrenaming'] = 'საქაღალდის სახელის შეცვლა...';
 $messages['foldermoving'] = 'საქაღალდის გადატანა...';
 $messages['formincomplete'] = 'ყველა ველი არ არის შევსებული';
 $messages['noemailwarning'] = 'მიუთითეთ სწორი ელ–ფოსტის მისამართი';
@@ -88,7 +86,6 @@
 $messages['receiptsent'] = 'წარმატებით გაიგზავნა';
 $messages['errorsendingreceipt'] = 'არ გაიგზავნა';
 $messages['nodeletelastidentity'] = 'წაშლა შეუძლებელია, ის თქვენთვის ერთადერთია';
-$messages['addsubfolderhint'] = 'საქაღალდე შეიქმნება როგორც ქვესაქაღალდე მონიშნულ საქაღალდეში';
 $messages['forbiddencharacter'] = 'საქაღალდის სახელი შეიცავს აკრძალულ სიმბოლოებს';
 $messages['selectimportfile'] = 'გთხოვთ მონიშნოთ ფაილი ასატვირთად';
 $messages['addresswriterror'] = 'მონიშნულ მისამართებში ჩაწერა შეუძლებელია';
diff --git a/program/localization/kh_KH/labels.inc b/program/localization/kh_KH/labels.inc
index 7782b28..75799a2 100644
--- a/program/localization/kh_KH/labels.inc
+++ b/program/localization/kh_KH/labels.inc
@@ -312,9 +312,6 @@
 $labels['messagecount'] = 'សារ';
 $labels['create'] = 'បង្កើត';
 $labels['createfolder'] = 'បង្កើត Folder ថ្មី';
-$labels['rename'] = 'ប្តូឈ្មោះ';
-$labels['renamefolder'] = 'ប្តូឈ្មោះថត';
-$labels['deletefolder'] = 'លុបថត';
 $labels['managefolders'] = 'រៀបចំថត';
 $labels['specialfolders'] = 'ថតពិសេស';
 $labels['sortby'] = 'តំរៀបតាម';
diff --git a/program/localization/kh_KH/messages.inc b/program/localization/kh_KH/messages.inc
index db148d3..9d67d9d 100644
--- a/program/localization/kh_KH/messages.inc
+++ b/program/localization/kh_KH/messages.inc
@@ -54,9 +54,7 @@
 $messages['deletemessagesconfirm'] = 'តើអ្នកពិតជាចង់លុបសារនេះមែនទេ?';
 $messages['deletefolderconfirm'] = 'តើអ្នកពិតជាចង់លុបថតនេះមែនទេ?';
 $messages['purgefolderconfirm'] = 'តើអ្នកពិតជាចង់លុបសារទាំងអស់មែនទេ?';
-$messages['foldercreating'] = 'កំពុងបង្កើតថតសំរាប់ទុកឯកសារ...';
 $messages['folderdeleting'] = 'កំពុងលុបថតសំរាប់ទុកឯកសារ...';
-$messages['folderrenaming'] = 'កំពុងប្តូរឈ្មោះថតសំរាប់ទុកឯកសារ...';
 $messages['foldermoving'] = 'កំពុងផ្តេរថតសំរាប់ទុកឯកសារ...';
 $messages['formincomplete'] = 'ទំរង់នេះមិនទាន់ពេញលេញនៅឡើយទេ';
 $messages['noemailwarning'] = 'សូមវាយបញ្ចូលអ៊ីមែលរបស់អ្នក';
@@ -91,7 +89,6 @@
 $messages['receiptsent'] = 'ការបញ្ជូន read receipt បានសំរេច';
 $messages['errorsendingreceipt'] = 'មិនអាចបញ្ជុន receipt ទេ';
 $messages['nodeletelastidentity'] = 'អ្នកមិនអាចលុបអត្តសញ្ញាណនេះទេ ព្រោះវានៅសល់ចុងក្រោយគេ';
-$messages['addsubfolderhint'] = 'Folder នេះនឹងបង្កើតជា Subfolder នៃ Folder ដែលកំពុងស្ថិតនៅនេះ';
 $messages['forbiddencharacter'] = 'ឈ្មោះ Folder នេះមានអក្សរដែលត្រូវហាមឃាត់';
 $messages['selectimportfile'] = 'សូមជ្រើសរើសឯកសារដើម្បីផ្ញើ';
 $messages['addresswriterror'] = 'សៀវភៅអាសយដ្ឋាននោះមិនអាចសរសេរចូលបានទេ';
diff --git a/program/localization/ko_KR/labels.inc b/program/localization/ko_KR/labels.inc
index 2d97998..15bb8e7 100644
--- a/program/localization/ko_KR/labels.inc
+++ b/program/localization/ko_KR/labels.inc
@@ -250,9 +250,6 @@
 $labels['messagecount'] = '메시지';
 $labels['create'] = '만들기';
 $labels['createfolder'] = '새 폴더 만들기';
-$labels['rename'] = '이름 바꾸기';
-$labels['renamefolder'] = '폴더 이름 바꾸기';
-$labels['deletefolder'] = '폴더 지우기';
 $labels['managefolders'] = '폴더 관리';
 $labels['specialfolders'] = '특수 폴더';
 $labels['sortby'] = '정렬';
diff --git a/program/localization/ko_KR/messages.inc b/program/localization/ko_KR/messages.inc
index ea2b451..596e2b1 100644
--- a/program/localization/ko_KR/messages.inc
+++ b/program/localization/ko_KR/messages.inc
@@ -49,9 +49,7 @@
 $messages['deletemessagesconfirm'] = '정말 선택한 메일들을 삭제하시겠습니까?';
 $messages['deletefolderconfirm'] = '정말 이 폴더를 삭제하시겠습니까?';
 $messages['purgefolderconfirm'] = '정말 이 폴더의 모든 메일을 삭제하시겠습니까?';
-$messages['foldercreating'] = '폴더 만드는 중...';
 $messages['folderdeleting'] = '폴더 지우는 중...';
-$messages['folderrenaming'] = '폴더 이름 바꾸는 중...';
 $messages['foldermoving'] = '폴더 옮기는 중...';
 $messages['formincomplete'] = '양식을 완전히 채우지 않았습니다';
 $messages['noemailwarning'] = '유효한 이메일 주소를 넣어주십시오';
@@ -84,7 +82,6 @@
 $messages['receiptsent'] = '메일 읽음 확인을 보냈습니다';
 $messages['errorsendingreceipt'] = '읽음 확인을 보낼 수 없습니다';
 $messages['nodeletelastidentity'] = '이 정보는 마지막 남은 것이므로 지울 수 없습니다';
-$messages['addsubfolderhint'] = '이 폴더는 현재 선택된 폴더의 서브 폴더로 만들어질 것입니다';
 $messages['forbiddencharacter'] = '폴더 이름에 쓸 수 없는 문자가 포함되어 있습니다';
 $messages['selectimportfile'] = '업로드할 파일을 선택하세요';
 $messages['addresswriterror'] = '선택한 주소록은 쓸 수 없습니다';
diff --git a/program/localization/ku/labels.inc b/program/localization/ku/labels.inc
index c1b7068..699e374 100644
--- a/program/localization/ku/labels.inc
+++ b/program/localization/ku/labels.inc
@@ -177,9 +177,6 @@
 $labels['messagecount'] = 'Peyam';
 $labels['create'] = 'Biafirîne';
 $labels['createfolder'] = 'Peldankeke nû biafirîne';
-$labels['rename'] = 'Nav biguherîne';
-$labels['renamefolder'] = 'Navê peldankê biguherîne';
-$labels['deletefolder'] = 'Peldankê jê bibe';
 $labels['managefolders'] = 'Rêveberiya peldankan';
 $labels['sortby'] = 'Şêweyê rêzkirinê';
 $labels['sortasc'] = 'Wekî zêde dibe';
diff --git a/program/localization/ku/messages.inc b/program/localization/ku/messages.inc
index 37029a9..d5d2e01 100644
--- a/program/localization/ku/messages.inc
+++ b/program/localization/ku/messages.inc
@@ -74,6 +74,5 @@
 $messages['receiptsent'] = 'Rapora şandina serkeftî';
 $messages['errorsendingreceipt'] = 'Rapor nehat şandin';
 $messages['nodeletelastidentity'] = 'Nikarî vê nasnameyê jê bibî. Ew ya dawî ye.';
-$messages['addsubfolderhint'] = 'Ev peldank wê wekî binepeldanka ya heyî bê afirandin';
 
 ?>
diff --git a/program/localization/lt_LT/labels.inc b/program/localization/lt_LT/labels.inc
index a72a125..392d7b2 100644
--- a/program/localization/lt_LT/labels.inc
+++ b/program/localization/lt_LT/labels.inc
@@ -39,11 +39,15 @@
 $labels['cc'] = 'Kopija';
 $labels['bcc'] = 'Slaptoji kopija';
 $labels['replyto'] = 'Atsakymą gaus';
+$labels['followupto'] = 'Followup-To';
 $labels['date'] = 'Data';
 $labels['size'] = 'Dydis';
 $labels['priority'] = 'Prioritetas';
 $labels['organization'] = 'Organizacija';
+$labels['readstatus'] = 'Neskaitytas';
 $labels['reply-to'] = 'Atsakymą gaus';
+$labels['mail-reply-to'] = 'Mail-Reply-To';
+$labels['mail-followup-to'] = 'Mail-Followup-To';
 $labels['mailboxlist'] = 'Aplankai';
 $labels['messagesfromto'] = 'Laiškai nuo $from iki $to iš $count';
 $labels['threadsfromto'] = 'Gijos nuo $from iki $to iš $count';
@@ -97,7 +101,9 @@
 $labels['checkmail'] = 'Tikrinti, ar yra naujų laiškų';
 $labels['writenewmessage'] = 'Rašyti naują laišką';
 $labels['replytomessage'] = 'Atsakyti siuntėjui';
-$labels['replytoallmessage'] = 'Atsakyti visiems';
+$labels['replytoallmessage'] = 'Atsakyti el. pašto grupei arba laiško siuntėjui ir visiems jo gavėjams';
+$labels['replyall'] = 'Atsakyti visiems';
+$labels['replylist'] = 'Atsakyti el. pašto grupei';
 $labels['forwardmessage'] = 'Persiųsti laišką';
 $labels['deletemessage'] = 'Pašalinti laišką';
 $labels['movemessagetotrash'] = 'Perkelti laišką į šiukšlinę';
@@ -169,7 +175,8 @@
 $labels['addattachment'] = 'Pridėti failą';
 $labels['charset'] = 'Koduotė';
 $labels['editortype'] = 'Laiško tipas';
-$labels['returnreceipt'] = 'Prašyti gavimo pažymos';
+$labels['returnreceipt'] = 'Prašyti pristatymo pažymos';
+$labels['dsn'] = 'Laiško pristatymo pažyma';
 $labels['editidents'] = 'Tvarkyti tapatybes';
 $labels['checkspelling'] = 'Tikrinti rašybą';
 $labels['resumeediting'] = 'Tęsti redagavimą';
@@ -194,6 +201,7 @@
 $labels['addcc'] = 'Pridėti Cc';
 $labels['addbcc'] = 'Pridėti Bcc';
 $labels['addreplyto'] = 'Pridėti Reply-To';
+$labels['addfollowupto'] = 'Pridėti Followup-To';
 $labels['mdnrequest'] = 'Šio laiško siuntėjas paprašė patvirtinti, kad jūs jį perskaitėte. Ar išsiųsti tai patvirtinančią pažymą?';
 $labels['receiptread'] = 'Patvirtinimas (laiškas perskaitytas)';
 $labels['yourmessage'] = 'Tai – pažyma, patvirtinanti, jog buvo perskaitytas Jūsų laiškas';
@@ -205,6 +213,7 @@
 $labels['addcontact'] = 'Pridėti adresatą';
 $labels['editcontact'] = 'Taisyti adresatą';
 $labels['contacts'] = 'Adresatai';
+$labels['contactproperties'] = 'Adresato savybės';
 $labels['edit'] = 'Redaguoti';
 $labels['cancel'] = 'Atsisakyti';
 $labels['save'] = 'Įrašyti';
@@ -252,6 +261,7 @@
 $labels['signature'] = 'Parašas';
 $labels['dstactive'] = 'Vasaros laikas skiriasi';
 $labels['htmleditor'] = 'Laiškus kurti HTML formatu';
+$labels['htmlonreply'] = 'tik atsakymus į HTML formato laiškus';
 $labels['htmlsignature'] = 'HTML parašas';
 $labels['previewpane'] = 'Rodyti laiško peržiūros polangį';
 $labels['skin'] = 'Grafinis apvalkalas';
@@ -259,12 +269,13 @@
 $labels['logoutcompact'] = 'Suspausti Gautų laiškų aplanką atsijungiant';
 $labels['uisettings'] = 'Naudotojo sąsaja';
 $labels['serversettings'] = 'Serverio nustatymai';
-$labels['mailboxview'] = 'Pašto dėžutės rodinys';
-$labels['mdnrequests'] = 'Siuntėjų prašomos pažymos';
-$labels['askuser'] = 'kaskart klausti';
-$labels['autosend'] = 'siųsti automatiškai';
-$labels['autosendknown'] = 'siųsti tik adresų knygoje esantiems adresatams';
-$labels['ignore'] = 'nesiųsti';
+$labels['mailboxview'] = 'Pašto dėžutės rodymas';
+$labels['mdnrequests'] = 'Gavus prašymą patvirtinti, jog laiškas perskaitytas';
+$labels['askuser'] = 'visuomet klausti, ar siųsti patvirtinimą';
+$labels['autosend'] = 'visuomet siųsti patvirtinimą automatiškai';
+$labels['autosendknown'] = 'automatiškai siųsti patvirtinimą adresų knygoje esantiems adresatams, kitu atveju klausti';
+$labels['autosendknownignore'] = 'automatiškai siųsti patvirtinimą adresų knygoje esantiems adresatams, kitu atveju nesiųsti';
+$labels['ignore'] = 'niekada nesiųsti patvirtinimo';
 $labels['readwhendeleted'] = 'Pažymėti laišką kaip skaitytą prieš šalinant';
 $labels['flagfordeletion'] = 'Pažymėti laišką šalinimui užuot šalinus';
 $labels['skipdeleted'] = 'Nerodyti pašalintų laiškų';
@@ -308,7 +319,9 @@
 $labels['insertsignature'] = 'Pridėti parašą';
 $labels['previewpanemarkread'] = 'Peržiūros polangyje parodytus laiškus žymėti skaitytais';
 $labels['afternseconds'] = 'praėjus $n sek.';
-$labels['reqmdn'] = 'Visuomet prašyti gavimo pažymos';
+$labels['reqmdn'] = 'Visuomet prašyti patvirtinimo, jog laiškas perskaitytas';
+$labels['reqdsn'] = 'Visuomet prašyti laiško pristatymo pažymos';
+$labels['replysamefolder'] = 'Atsakymus talpinti į tą patį aplanką, kuriame yra pirminis laiškas';
 $labels['folder'] = 'Aplankas';
 $labels['folders'] = 'Aplankai';
 $labels['foldername'] = 'Aplanko vardas';
@@ -316,9 +329,6 @@
 $labels['messagecount'] = 'Laiškai';
 $labels['create'] = 'Sukurti';
 $labels['createfolder'] = 'Sukurti naują aplanką';
-$labels['rename'] = 'Pervardinti';
-$labels['renamefolder'] = 'Pervardinti aplanką';
-$labels['deletefolder'] = 'Pašalinti aplanką';
 $labels['managefolders'] = 'Tvarkyti aplankus';
 $labels['specialfolders'] = 'Specialieji aplankai';
 $labels['sortby'] = 'Rikiuoti pagal';
diff --git a/program/localization/lt_LT/messages.inc b/program/localization/lt_LT/messages.inc
index 62d59de..f6cdb62 100644
--- a/program/localization/lt_LT/messages.inc
+++ b/program/localization/lt_LT/messages.inc
@@ -24,6 +24,7 @@
 $messages['sessionerror'] = 'Jūsų sesija negaliojanti';
 $messages['imaperror'] = 'Nepavyko prisijungti prie IMAP serverio';
 $messages['servererror'] = 'Serverio klaida!';
+$messages['servererrormsg'] = 'Serverio klaida: $msg';
 $messages['invalidrequest'] = 'Netinkama užklausa! Duomenys neišsaugoti.';
 $messages['nomessagesfound'] = 'Šioje pašto dėžutėje laiškų nėra ';
 $messages['loggedout'] = 'Jūs sėkmingai atsijungėte. Iki kito karto!';
@@ -55,10 +56,10 @@
 $messages['deletemessagesconfirm'] = 'Ar tikrai pašalinti pažymėtą(-us) laišką(-us)?';
 $messages['deletefolderconfirm'] = 'Ar tikrai pašalinti šį aplanką?';
 $messages['purgefolderconfirm'] = 'Ar tikrai pašalinti visus šiame aplanke esančius laiškus?';
-$messages['foldercreating'] = 'Aplankas kuriamas…';
 $messages['folderdeleting'] = 'Aplankas šalinamas…';
-$messages['folderrenaming'] = 'Aplankas pervardinamas…';
 $messages['foldermoving'] = 'Aplankas perkeliamas…';
+$messages['foldersubscribing'] = 'Aplankas prenumeruojamas…';
+$messages['folderunsubscribing'] = 'Atsisakoma aplanko prenumeratos…';
 $messages['formincomplete'] = 'Formos laukai nepilnai užpildyti';
 $messages['noemailwarning'] = 'Prašom įvesti teisingą el. pašto adresą';
 $messages['nonamewarning'] = 'Prašom įvesti vardą';
@@ -78,6 +79,9 @@
 $messages['checking'] = 'Tikrinama…';
 $messages['nospellerrors'] = 'Rašybos klaidų nerasta';
 $messages['folderdeleted'] = 'Aplankas sėkmingai pašalintas';
+$messages['foldersubscribed'] = 'Aplankas sėkmingai užprenumeruotas';
+$messages['folderunsubscribed'] = 'Aplanko prenumeratos sėkmingai atsisakyta';
+$messages['folderpurged'] = 'Aplankas sėkmingai ištuštintas';
 $messages['deletedsuccessfully'] = 'Sėkmingai pašalinta';
 $messages['converting'] = 'Šalinamas laiško formatavimas…';
 $messages['messageopenerror'] = 'Nepavyko įkelti laiško iš serverio';
@@ -87,12 +91,13 @@
 $messages['copyerror'] = 'Adresų nukopijuoti nepavyko';
 $messages['sourceisreadonly'] = 'Šis adresų šaltinis prieinamas tik skaitymui';
 $messages['errorsavingcontact'] = 'Asmens adreso įrašyti nepavyko';
-$messages['movingmessage'] = 'Laiškas perkeliamas…';
-$messages['copyingmessage'] = 'Laiškas kopijuojamas…';
+$messages['movingmessage'] = 'Laiškas(-ai) perkeliamas(-i)…';
+$messages['copyingmessage'] = 'Laiškai(-ai) kopijuojamas(-i)…';
+$messages['deletingmessage'] = 'Laiškas(-ai) šalinamas(-i)…';
+$messages['markingmessage'] = 'Laiškas(-ai) žymimas(-i)…';
 $messages['receiptsent'] = 'Laiško perskaitymo pažyma sėkmingai išsiųsta';
 $messages['errorsendingreceipt'] = 'Laiško perskaitymo pažymos išsiųsti nepavyko';
 $messages['nodeletelastidentity'] = 'Jūs negalite ištrinti šios tapatybės, nes ji yra vienintelė likusi.';
-$messages['addsubfolderhint'] = 'Šis aplankas bus sukurtas kaip pažymėtojo aplanko poaplankis';
 $messages['forbiddencharacter'] = 'Aplanko varde rasta neleistinų simbolių';
 $messages['selectimportfile'] = 'Parinkite įkelti norimą failą';
 $messages['addresswriterror'] = 'Pasirinktoji adresų knyga prieinama tik skaitymui';
@@ -110,10 +115,25 @@
 $messages['smtpfromerror'] = 'SMTP klaida ($code): nepavyko nurodyti siuntėjo „$from“ ($msg)';
 $messages['smtptoerror'] = 'SMTP klaida ($code): nepavyko pridėti gavėjo „$to“ ($msg)';
 $messages['smtprecipientserror'] = 'SMTP klaida: nepavyko apdoroti gavėjų sąrašo';
+$messages['smtpdsnerror'] = 'SMTP klaida: laiškų pristatymo pažymos nepalaikomos';
 $messages['smtperror'] = 'SMTP klaida: $msg';
 $messages['emailformaterror'] = 'Netinkamas el. pašto adresas: $email';
 $messages['toomanyrecipients'] = 'Per daug gavėjų. Sumažinkite jų bent iki $max.';
 $messages['maxgroupmembersreached'] = 'Grupės narių skaičius viršijo maksimalų leistiną ($max)';
 $messages['internalerror'] = 'Įvyko klaida. Prašom bandyti iš naujo.';
+$messages['contactdelerror'] = 'Nepavyko pašalinti adresato(-ų)';
+$messages['contactdeleted'] = 'Adresatas(-ai) sėkmingai pašalintas(-i)';
+$messages['groupdeleted'] = 'Grupė sėkmingai pašalinta';
+$messages['grouprenamed'] = 'Grupė sėkmingai pervardinta';
+$messages['groupcreated'] = 'Grupė sėkmingai sukurta';
+$messages['messagedeleted'] = 'Laiškas(-ai) sėkmingai pašalintas(-i)';
+$messages['messagemoved'] = 'Laiškas(-ai) sėkmingai perkeltas(-i)';
+$messages['messagecopied'] = 'Laiškas(-ai) sėkmingai nukopijuotas(-i)';
+$messages['messagemarked'] = 'Laiškas(-ai) sėkmingai pažymėtas(-i)';
+$messages['autocompletechars'] = 'Automatiniam užbaigimui būtini bent $min simboliai';
+$messages['namecannotbeempty'] = 'Vardas negali būti tuščias';
+$messages['nametoolong'] = 'Vardas yra per ilgas';
+$messages['folderupdated'] = 'Aplanko savybės sėkmingai atnaujintos';
+$messages['foldercreated'] = 'Aplankas sėkmingai sukurtas';
 
 ?>
diff --git a/program/localization/lv_LV/labels.inc b/program/localization/lv_LV/labels.inc
index cafa1d3..797b455 100644
--- a/program/localization/lv_LV/labels.inc
+++ b/program/localization/lv_LV/labels.inc
@@ -277,9 +277,6 @@
 $labels['messagecount'] = 'Vēstules';
 $labels['create'] = 'Izveidot';
 $labels['createfolder'] = 'Izveidot jaunu mapi';
-$labels['rename'] = 'Pārsaukt';
-$labels['renamefolder'] = 'Pārsaukt mapi';
-$labels['deletefolder'] = 'Dzēst mapi';
 $labels['managefolders'] = 'Rediģēt mapes';
 $labels['specialfolders'] = 'Īpašās mapes';
 $labels['sortby'] = 'Kārtot pēc';
diff --git a/program/localization/lv_LV/messages.inc b/program/localization/lv_LV/messages.inc
index e84a832..78b3a4a 100644
--- a/program/localization/lv_LV/messages.inc
+++ b/program/localization/lv_LV/messages.inc
@@ -55,9 +55,7 @@
 $messages['deletemessagesconfirm'] = 'Vai tiešām vēlaties dzēst iezīmēto(ās) vēstules?';
 $messages['deletefolderconfirm'] = 'Vai tiešām vēlaties dzēst šo mapi?';
 $messages['purgefolderconfirm'] = 'Vai tiešām vēlaties dzēst visas vēstules, kas atrodas šajā mapē?';
-$messages['foldercreating'] = 'Izveidoju mapi...';
 $messages['folderdeleting'] = 'Dzēšu mapi...';
-$messages['folderrenaming'] = 'Pārsaucu mapi...';
 $messages['foldermoving'] = 'Pārvietoju mapi...';
 $messages['formincomplete'] = 'Formulārs nav pilnībā aizpildīts';
 $messages['noemailwarning'] = 'Lūdzu ievadiet pareizu e-pasta adresi';
@@ -91,7 +89,6 @@
 $messages['receiptsent'] = 'Saņemšanas apstiprinājums nosūtīts';
 $messages['errorsendingreceipt'] = 'Neizdevās nosūtīt apstiprinājumu';
 $messages['nodeletelastidentity'] = 'Šo identitāti nevar izdzēst, tā ir pati pēdējā.';
-$messages['addsubfolderhint'] = 'Šis folderis tiks izveidots kā apakšfolderis tam, kurš patreiz ir izvēlēts';
 $messages['forbiddencharacter'] = 'Mapes nosaukums satur aizliegtus simbolus';
 $messages['selectimportfile'] = 'Lūdzu izvēlieties failu, ko vēlaties augšupielādēt';
 $messages['addresswriterror'] = 'Izvēlētās adrešu grāmatas datus nevar labot';
diff --git a/program/localization/mk_MK/labels.inc b/program/localization/mk_MK/labels.inc
index 4d8d69f..462fdce 100755
--- a/program/localization/mk_MK/labels.inc
+++ b/program/localization/mk_MK/labels.inc
@@ -274,9 +274,6 @@
 $labels['messagecount'] = 'Пораки';
 $labels['create'] = 'Создај';
 $labels['createfolder'] = 'Создај нова папка';
-$labels['rename'] = 'Преименувај';
-$labels['renamefolder'] = 'Преименувај папка';
-$labels['deletefolder'] = 'Избриши папка';
 $labels['managefolders'] = 'Организирање на папки';
 $labels['specialfolders'] = 'Специјални папки';
 $labels['sortby'] = 'Сортирај по';
diff --git a/program/localization/mk_MK/messages.inc b/program/localization/mk_MK/messages.inc
index 4d51bb5..0344061 100755
--- a/program/localization/mk_MK/messages.inc
+++ b/program/localization/mk_MK/messages.inc
@@ -52,9 +52,7 @@
 $messages['deletemessagesconfirm'] = 'Дали сте сигурни дека сакате да го(и) избришете обележаниот(те) писмо(а)?';
 $messages['deletefolderconfirm'] = 'Дали сте сигурни дека сакате да ја избришете оваа папка?';
 $messages['purgefolderconfirm'] = 'Дали сте сигурни дека сакате да ги избршете сите писма во оваа папка?';
-$messages['foldercreating'] = 'Ја создавам папката...';
 $messages['folderdeleting'] = 'Ја бришам папката...';
-$messages['folderrenaming'] = 'Ја преименувам папката...';
 $messages['foldermoving'] = 'Ја преместувам папката...';
 $messages['formincomplete'] = 'Имате изоставено непополнети информации';
 $messages['noemailwarning'] = 'Внесете валидна е-поштенска адреса';
@@ -88,7 +86,6 @@
 $messages['receiptsent'] = 'Известувањето е успешно пратено';
 $messages['errorsendingreceipt'] = 'Известувањето не е пратено';
 $messages['nodeletelastidentity'] = 'Овој идентитет неможе да се избрише, тој е последниот.';
-$messages['addsubfolderhint'] = 'Оваа папка ќе биде креирана како потпапка на моментално избраната.';
 $messages['forbiddencharacter'] = 'Името на папката содржи несоодветен формат';
 $messages['selectimportfile'] = 'Изберете ја податотеката која сакате да ја прикачите';
 $messages['addresswriterror'] = 'Одбраниот именик не може да се менува';
diff --git a/program/localization/mr_IN/labels.inc b/program/localization/mr_IN/labels.inc
index a8cf865..2187813 100755
--- a/program/localization/mr_IN/labels.inc
+++ b/program/localization/mr_IN/labels.inc
@@ -378,9 +378,6 @@
 $labels['messagecount'] = 'संदेश';
 $labels['create'] = 'तयार करा';
 $labels['createfolder'] = 'नवीन फोल्डर तयार करा';
-$labels['rename'] = 'नवीन नाव द्या';
-$labels['renamefolder'] = 'फोल्डरला नवीन नाव द्या';
-$labels['deletefolder'] = 'फोल्डर काढून टाका';
 $labels['managefolders'] = 'फोल्डर्सचे नियोजन करा';
 $labels['specialfolders'] = 'विषेश फोल्डर';
 $labels['sortby'] = 'ने वर्गवारी करा';
diff --git a/program/localization/mr_IN/messages.inc b/program/localization/mr_IN/messages.inc
index 3dc07fd..6ee3a5e 100755
--- a/program/localization/mr_IN/messages.inc
+++ b/program/localization/mr_IN/messages.inc
@@ -51,9 +51,7 @@
 $messages['deletemessagesconfirm'] = 'खूण केलेले सर्व संदेश खरोखरच तुम्हाला काढून टाकायचे आहेत का?';
 $messages['deletefolderconfirm'] = 'हा फोल्डर खरोखरच तुम्हाला काढून टाकायचा आहेत का?';
 $messages['purgefolderconfirm'] = 'या फोल्डरमधिल सर्व संदेश खरोखरच तुम्हाला काढून टाकायचे आहेत का?';
-$messages['foldercreating'] = 'फोल्डर तयार करत आहे';
 $messages['folderdeleting'] = 'फोल्डर काढून टाकत आहे';
-$messages['folderrenaming'] = 'फोल्डरला नवीन नाव देत आहे.';
 $messages['foldermoving'] = 'फोल्डर हलवत आहे.';
 $messages['formincomplete'] = 'फॉर्म पूर्णपणे भरलेला  नाही. ';
 $messages['noemailwarning'] = 'योग्य, बरोबर, आणि वैध इमेल पत्ता द्या. ';
@@ -88,7 +86,6 @@
 $messages['receiptsent'] = 'पोचपावती यशस्वीरित्या पाठवण्यात आली आहे. ';
 $messages['errorsendingreceipt'] = 'पोचपावती पाठवता आली नाही.';
 $messages['nodeletelastidentity'] = 'तुम्ही हे खाते काढून टाकू शकत नाही कारण हे तुमचे शेवटचे खाते आहे.';
-$messages['addsubfolderhint'] = 'हा फोल्डर निवडलेल्या फोल्डरचा उप-फोल्डर असेल';
 $messages['forbiddencharacter'] = 'फोल्डरच्या नावात न चालणारी अक्षरे किंवा खूणा आहेत.';
 $messages['selectimportfile'] = 'चढवण्यासाठी फाईल निवडा';
 $messages['addresswriterror'] = 'निवडलेल्या पत्ता नोंदवहीत नोंद करता येत नाही.';
diff --git a/program/localization/ms_MY/labels.inc b/program/localization/ms_MY/labels.inc
index c6a5858..bf395da 100644
--- a/program/localization/ms_MY/labels.inc
+++ b/program/localization/ms_MY/labels.inc
@@ -215,9 +215,6 @@
 $labels['messagecount'] = 'Mesej-mesej';
 $labels['create'] = 'Cipta';
 $labels['createfolder'] = 'Cipta kabinet fail baru';
-$labels['rename'] = 'Namakan semula';
-$labels['renamefolder'] = 'Namakan semula kabinet fail';
-$labels['deletefolder'] = 'Hapus kabinet fail';
 $labels['managefolders'] = 'Urus kabinet fail';
 $labels['sortby'] = 'Susun dengan';
 $labels['sortasc'] = 'Susun menaik';
diff --git a/program/localization/ms_MY/messages.inc b/program/localization/ms_MY/messages.inc
index 2dac2bc..907903b 100644
--- a/program/localization/ms_MY/messages.inc
+++ b/program/localization/ms_MY/messages.inc
@@ -77,6 +77,5 @@
 $messages['receiptsent'] = 'Berjaya menghantar resip bacaan';
 $messages['errorsendingreceipt'] = 'Tidak dapat menghantar resip';
 $messages['nodeletelastidentity'] = 'Anda tidak boleh membuang identiti ini, ia milik anda yang terakhir.';
-$messages['addsubfolderhint'] = 'Folder ini akan dibina sebagai subfolder kepada folder yang dipilih sekarang';
 
 ?>
diff --git a/program/localization/nb_NO/labels.inc b/program/localization/nb_NO/labels.inc
index 0e828a2..c9f3b0f 100644
--- a/program/localization/nb_NO/labels.inc
+++ b/program/localization/nb_NO/labels.inc
@@ -312,9 +312,6 @@
 $labels['messagecount'] = 'Meldinger';
 $labels['create'] = 'Opprett';
 $labels['createfolder'] = 'Lag ny mappe';
-$labels['rename'] = 'Endre navn';
-$labels['renamefolder'] = 'Endre navn på mappe';
-$labels['deletefolder'] = 'Slett mappe';
 $labels['managefolders'] = 'Rediger mapper';
 $labels['specialfolders'] = 'Spesielle mapper';
 $labels['sortby'] = 'Sorter etter';
diff --git a/program/localization/nb_NO/messages.inc b/program/localization/nb_NO/messages.inc
index db00818..4f823a5 100644
--- a/program/localization/nb_NO/messages.inc
+++ b/program/localization/nb_NO/messages.inc
@@ -57,9 +57,7 @@
 $messages['deletemessagesconfirm'] = 'Vil du virkelig slette de(n) valgte meldingen(e)?';
 $messages['deletefolderconfirm'] = 'Vil du virkelig slette denne mappen?';
 $messages['purgefolderconfirm'] = 'Vil du virkelig slette alle meldingene i denne mappen?';
-$messages['foldercreating'] = 'Oppretter mappe...';
 $messages['folderdeleting'] = 'Sletter mappe...';
-$messages['folderrenaming'] = 'Gir nytt navn til mappe...';
 $messages['foldermoving'] = 'Flytter mappe...';
 $messages['formincomplete'] = 'Skjemaet var ikke fullstendig fylt ut';
 $messages['noemailwarning'] = 'Skriv inn en gyldig e-postadresse';
@@ -94,7 +92,6 @@
 $messages['receiptsent'] = 'Kvittering er sent';
 $messages['errorsendingreceipt'] = 'Kunne ikke sende kvittering';
 $messages['nodeletelastidentity'] = 'Du kan ikke slette denne identiteten, det er din eneste.';
-$messages['addsubfolderhint'] = 'Mappen vil bli opprettet som en undermappe av nåværende valgt mappe';
 $messages['forbiddencharacter'] = 'Mappenavnet inneholder tegn som ikke er tillatt';
 $messages['selectimportfile'] = 'Vennligst velg en fil for opplasting';
 $messages['addresswriterror'] = 'Den valgte adresseboken er ikke skrivbar';
diff --git a/program/localization/ne_NP/labels.inc b/program/localization/ne_NP/labels.inc
index ee1cc09..ec4ed1a 100644
--- a/program/localization/ne_NP/labels.inc
+++ b/program/localization/ne_NP/labels.inc
@@ -166,9 +166,6 @@
 $labels['subscribed'] = 'सबस्क्राईब गरियो';
 $labels['create'] = 'बनाउनुहोस';
 $labels['createfolder'] = 'नया फोलडर बनाउनुहोस';
-$labels['rename'] = 'नाम बदल्नुहोस';
-$labels['renamefolder'] = 'फोलडरको नाम बदल्नुहोस';
-$labels['deletefolder'] = 'फोलडर मेट्नुहोस';
 $labels['managefolders'] = 'फोलडर व्यवस्थित गर्नुहोस';
 $labels['sortby'] = 'यसरी तय गर्नुहोस';
 $labels['sortasc'] = 'पहिलो देखि अन्तिम सम्म तय गर्नुहोस';
diff --git a/program/localization/nl_BE/labels.inc b/program/localization/nl_BE/labels.inc
index 2ac0eea..86b6c4b 100644
--- a/program/localization/nl_BE/labels.inc
+++ b/program/localization/nl_BE/labels.inc
@@ -321,9 +321,6 @@
 $labels['messagecount'] = 'Berichten';
 $labels['create'] = 'Aanmaken';
 $labels['createfolder'] = 'Nieuwe map aanmaken';
-$labels['rename'] = 'Hernoemen';
-$labels['renamefolder'] = 'Hernoem map';
-$labels['deletefolder'] = 'Map verwijderen';
 $labels['managefolders'] = 'Mappen beheren';
 $labels['specialfolders'] = 'Speciale mappen';
 $labels['sortby'] = 'Sorteren op';
diff --git a/program/localization/nl_BE/messages.inc b/program/localization/nl_BE/messages.inc
index 8739fa5..71fbb3d 100644
--- a/program/localization/nl_BE/messages.inc
+++ b/program/localization/nl_BE/messages.inc
@@ -55,9 +55,7 @@
 $messages['deletemessagesconfirm'] = 'Bent u zeker dat u de geselecteerde bericht(en) wilt verwijderen?';
 $messages['deletefolderconfirm'] = 'Weet u zeker dat u deze map wilt verwijderen?';
 $messages['purgefolderconfirm'] = 'Bent u zeker dat u alle berichten in deze map wilt verwijderen?';
-$messages['foldercreating'] = 'Map aanmaken...';
 $messages['folderdeleting'] = 'Map verwijderen...';
-$messages['folderrenaming'] = 'Map hernoemen...';
 $messages['foldermoving'] = 'Map verplaatsen...';
 $messages['formincomplete'] = 'Het formulier is niet volledig ingevuld...';
 $messages['noemailwarning'] = 'Geef een geldig e-mailadres op...';
@@ -92,7 +90,6 @@
 $messages['receiptsent'] = 'Ontvangstbevestiging verstuurd';
 $messages['errorsendingreceipt'] = 'Kon de ontvangstbevestigign niet versturen';
 $messages['nodeletelastidentity'] = 'U kunt dit laatste afzendadres niet verwijderen.';
-$messages['addsubfolderhint'] = 'De map wordt aangemaakt als submap van de geselecteerde map.';
 $messages['forbiddencharacter'] = 'De naam van de map bevat een karakter dat niet is toegestaan';
 $messages['selectimportfile'] = 'Selecteer een bestand om te uploaden';
 $messages['addresswriterror'] = 'Het geselecteerde adresboek is alleen-lezen';
diff --git a/program/localization/nl_NL/labels.inc b/program/localization/nl_NL/labels.inc
index 97ad8cc..5097ec7 100644
--- a/program/localization/nl_NL/labels.inc
+++ b/program/localization/nl_NL/labels.inc
@@ -42,16 +42,15 @@
 $labels['cc'] = 'Kopie';
 $labels['bcc'] = 'Bcc';
 $labels['replyto'] = 'Antwoord-aan';
-$labels['mailreplyto'] = 'Mail-Antwoord-Aan';
-$labels['mailfollowupto'] = 'Mail-Followup-Aan';
+$labels['followupto'] = 'Followup-Aan';
 $labels['date'] = 'Datum';
 $labels['size'] = 'Grootte';
 $labels['priority'] = 'Prioriteit';
 $labels['organization'] = 'Organisatie';
 $labels['readstatus'] = 'Gelezen?';
 $labels['reply-to'] = 'Antwoord-aan';
-$labels['mailreply-to'] = 'Mail-Antwoord-Aan';
-$labels['mailfollowup-to'] = 'Mail-Followup-Aan';
+$labels['mail-reply-to'] = 'Mail-Antwoord-Aan';
+$labels['mail-followup-to'] = 'Mail-Followup-Aan';
 $labels['mailboxlist'] = 'Mappen';
 $labels['messagesfromto'] = 'Bericht $from t/m $to van $count';
 $labels['threadsfromto'] = 'Conversatie $from t/m $to van $count';
@@ -205,8 +204,7 @@
 $labels['addcc'] = 'Cc toevoegen';
 $labels['addbcc'] = 'Bcc toevoegen';
 $labels['addreplyto'] = 'Antwoord-aan toevoegen';
-$labels['addmailreplyto'] = 'Mail-Antwoord-Aan toevoegen';
-$labels['addmailfollowupto'] = 'Mail-Followup-Aan toevoegen';
+$labels['addfollowupto'] = 'Mail-Followup-Aan toevoegen';
 $labels['mdnrequest'] = 'De afzender van dit bericht heeft gevraagd een melding te ontvangen wanneer u dit bericht heeft gelezen. Wilt u deze melding verzenden?';
 $labels['receiptread'] = 'Ontvangstbevestiging (gelezen)';
 $labels['yourmessage'] = 'Dit is een ontvangstbevestiging voor uw bericht';
@@ -218,6 +216,7 @@
 $labels['addcontact'] = 'Nieuwe contactpersoon toevoegen';
 $labels['editcontact'] = 'Contactpersoon wijzigen';
 $labels['contacts'] = 'Contacten';
+$labels['contactproperties'] = 'Contact eigenschappen';
 $labels['edit'] = 'Wijzig';
 $labels['cancel'] = 'Annuleer';
 $labels['save'] = 'Opslaan';
@@ -325,6 +324,7 @@
 $labels['afternseconds'] = 'Na $n seconden';
 $labels['reqmdn'] = 'Vraag altijd een ontvangstbevestiging';
 $labels['reqdsn'] = 'Vraag altijd een afleverings status notificatie (DSN)';
+$labels['replysamefolder'] = 'Plaats antwoorden in de folder van het beantwoorde bericht';
 $labels['folder'] = 'Map';
 $labels['folders'] = 'Mappen';
 $labels['foldername'] = 'Mapnaam';
@@ -332,9 +332,6 @@
 $labels['messagecount'] = 'Berichten';
 $labels['create'] = 'Nieuw';
 $labels['createfolder'] = 'Maak nieuwe map';
-$labels['rename'] = 'Wijzig naam';
-$labels['renamefolder'] = 'Wijzig mapnaam';
-$labels['deletefolder'] = 'Verwijder map';
 $labels['managefolders'] = 'Beheer mappen';
 $labels['specialfolders'] = 'Speciale mappen';
 $labels['sortby'] = 'Sorteer op';
diff --git a/program/localization/nl_NL/messages.inc b/program/localization/nl_NL/messages.inc
index 9fd802a..f83789d 100644
--- a/program/localization/nl_NL/messages.inc
+++ b/program/localization/nl_NL/messages.inc
@@ -58,9 +58,7 @@
 $messages['deletemessagesconfirm'] = 'Weet u zeker dat u de geselecteerde bericht(en) wilt verwijderen?';
 $messages['deletefolderconfirm'] = 'Weet u zeker dat u deze map wilt verwijderen?';
 $messages['purgefolderconfirm'] = 'Weet u zeker dat u alle berichten in deze map wilt verwijderen?';
-$messages['foldercreating'] = 'Map aanmaken...';
 $messages['folderdeleting'] = 'Map verwijderen...';
-$messages['folderrenaming'] = 'Mapnaam wijzigen...';
 $messages['foldermoving'] = 'Map verplaatsen...';
 $messages['formincomplete'] = 'Het formulier was niet volledig ingevuld';
 $messages['noemailwarning'] = 'Geef een geldig e-mailadres op';
@@ -95,7 +93,6 @@
 $messages['receiptsent'] = 'Ontvangstbevestiging is verstuurd';
 $messages['errorsendingreceipt'] = 'Kan de ontvangstbevestiging niet versturen';
 $messages['nodeletelastidentity'] = 'U kunt uw enige identiteit niet verwijderen';
-$messages['addsubfolderhint'] = 'Deze map zal worden aangemaakt onder de geselecteerde map';
 $messages['forbiddencharacter'] = 'De naam van de map bevat een karakter dat niet is toegestaan';
 $messages['selectimportfile'] = 'Selecteer een bestand om de uploaden';
 $messages['addresswriterror'] = 'Het geselecteerde adresboek is alleen lezen';
diff --git a/program/localization/nn_NO/labels.inc b/program/localization/nn_NO/labels.inc
index 5f4a0a9..d79c67c 100644
--- a/program/localization/nn_NO/labels.inc
+++ b/program/localization/nn_NO/labels.inc
@@ -310,9 +310,6 @@
 $labels['messagecount'] = 'Meldingar';
 $labels['create'] = 'Opprette';
 $labels['createfolder'] = 'Opprett ny mappe';
-$labels['rename'] = 'Gje nytt namn';
-$labels['renamefolder'] = 'Gje nytt namn til mappe';
-$labels['deletefolder'] = 'Slett mappe';
 $labels['managefolders'] = 'Mappehandsaming';
 $labels['specialfolders'] = 'Spesialmapper';
 $labels['sortby'] = 'Sorter etter';
diff --git a/program/localization/nn_NO/messages.inc b/program/localization/nn_NO/messages.inc
index 904e3b6..1e181a2 100644
--- a/program/localization/nn_NO/messages.inc
+++ b/program/localization/nn_NO/messages.inc
@@ -55,9 +55,7 @@
 $messages['deletemessagesconfirm'] = 'Sletta melding(ar)?';
 $messages['deletefolderconfirm'] = 'Sletta mappa?';
 $messages['purgefolderconfirm'] = 'Sletta alle meldingane i denne mappa?';
-$messages['foldercreating'] = 'Lagar mappe...';
 $messages['folderdeleting'] = 'Slettar mappe...';
-$messages['folderrenaming'] = 'Endrar namn på mappe...';
 $messages['foldermoving'] = 'Flyttar mappe...';
 $messages['formincomplete'] = 'Fyll ut skjema';
 $messages['noemailwarning'] = 'Skriv inn korrekt epostadresse';
@@ -92,7 +90,6 @@
 $messages['receiptsent'] = 'Sende melding-er-lest-kvittering';
 $messages['errorsendingreceipt'] = 'Kunne ikkje senda melding-er-lest-kvittering';
 $messages['nodeletelastidentity'] = 'Du kan ikkje sletta denne identiteten, det er den siste.';
-$messages['addsubfolderhint'] = 'Denne mappa vert laga som ei undermappe til den du hev markert';
 $messages['forbiddencharacter'] = 'Mappenamn inneheld eit teikn som ikkje er støtta';
 $messages['selectimportfile'] = 'Vel ei fil til å lasta opp';
 $messages['addresswriterror'] = 'Denne adresseboka er ikkje skrivbar';
diff --git a/program/localization/pl_PL/labels.inc b/program/localization/pl_PL/labels.inc
index 03eaa97..519eb34 100644
--- a/program/localization/pl_PL/labels.inc
+++ b/program/localization/pl_PL/labels.inc
@@ -42,13 +42,12 @@
 $labels['to'] = 'Odbiorca';
 $labels['cc'] = 'Kopia';
 $labels['bcc'] = 'Ukryta kopia';
-$labels['replyto'] = 'Odp. do';
+$labels['replyto'] = 'Odpowiedź do';
 $labels['date'] = 'Data';
 $labels['size'] = 'Rozmiar';
 $labels['readstatus'] = 'Przeczytano';
 $labels['priority'] = 'Priorytet';
 $labels['organization'] = 'Organizacja';
-$labels['reply-to'] = 'Odpowiedz do';
 $labels['mailboxlist'] = 'Foldery';
 $labels['messagesfromto'] = 'Wiadomości od $from do $to z $count';
 $labels['threadsfromto'] = 'Wątki od $from do $to z $count';
@@ -319,9 +318,6 @@
 $labels['messagecount'] = 'Wiadomości';
 $labels['create'] = 'Utwórz';
 $labels['createfolder'] = 'Utwórz nowy folder';
-$labels['rename'] = 'Zmień nazwę';
-$labels['renamefolder'] = 'Zmień nazwę folderu';
-$labels['deletefolder'] = 'Usuń folder';
 $labels['managefolders'] = 'Zarządzaj folderami';
 $labels['specialfolders'] = 'Foldery specjalne';
 $labels['sortby'] = 'Sortuj wg';
@@ -352,18 +348,21 @@
 $labels['folderactions'] = 'Działania na folderach...';
 $labels['contacts'] = 'Kontakty';
 $labels['messageoptions'] = 'Opcje wiadomości...';
-$labels['mailreplyto'] = 'Mail-Reply-To';
-$labels['mailfollowupto'] = 'Mail-Followup-To';
-$labels['mail-reply-to'] = 'Mail-Reply-To';
-$labels['mail-followup-to'] = 'Mail-Followup-To';
+$labels['followupto'] = 'Kontynuacja do';
 $labels['replyall'] = 'Odpowiedz wszystkim';
 $labels['replylist'] = 'Odpowiedz na listę';
 $labels['editidents'] = 'Edytuj tożsamości';
-$labels['addmailreplyto'] = 'Dodaj Mail-Reply-To';
-$labels['addmailfollowupto'] = 'Dodaj Mail-Followup-To';
+$labels['addfollowupto'] = 'Dodaj Followup-To';
 $labels['dsn'] = 'Status dostarczenia (DSN)';
 $labels['reqdsn'] = 'Zawsze żądaj statusu dostarczenia (DSN)';
 $labels['replysamefolder'] = 'Umieszczaj odpowiedzi w folderze wiadomości, na którą odpowiadam';
 $labels['contactproperties'] = 'Właściwości';
+$labels['properties'] = 'Właściwości';
+$labels['folderproperties'] = 'Włąściwości folderu';
+$labels['parentfolder'] = 'Folder nadrzędny';
+$labels['location'] = 'Położenie';
+$labels['info'] = 'Informacje';
+$labels['getfoldersize'] = 'Kliknij aby pobrać rozmiar folderu';
+$labels['changesubscription'] = 'Kliknij aby zmienić subskrypcję';
 
 ?>
diff --git a/program/localization/pl_PL/messages.inc b/program/localization/pl_PL/messages.inc
index 29749ca..d3c205b 100644
--- a/program/localization/pl_PL/messages.inc
+++ b/program/localization/pl_PL/messages.inc
@@ -60,9 +60,7 @@
 $messages['deletemessagesconfirm'] = 'Czy na pewno chcesz usunąć wybrane wiadomości?';
 $messages['deletefolderconfirm'] = 'Czy na pewno chcesz usunąć wybrany folder?';
 $messages['purgefolderconfirm'] = 'Czy na pewno chcesz usunąć wszystkie wiadomości w tym folderze?';
-$messages['foldercreating'] = 'Dodawanie folderu...';
 $messages['folderdeleting'] = 'Usuwanie folderu...';
-$messages['folderrenaming'] = 'Zmiana nazwy folderu...';
 $messages['foldermoving'] = 'Przenoszenie folderu...';
 $messages['formincomplete'] = 'Uzupełnij formularz!';
 $messages['noemailwarning'] = 'Podaj poprawny adres e-mail!';
@@ -99,7 +97,6 @@
 $messages['receiptsent'] = 'Pomyślnie wysłano potwierdzenie dostarczenia';
 $messages['errorsendingreceipt'] = 'Nie można wysłać potwierdzenia';
 $messages['nodeletelastidentity'] = 'Nie można skasować tej tożsamości, ponieważ jest ostatnią.';
-$messages['addsubfolderhint'] = 'Ten folder zostanie utworzony jako podfolder aktualnie wybranego.';
 $messages['forbiddencharacter'] = 'Nazwa folderu zawiera niedozwolony znak';
 $messages['selectimportfile'] = 'Proszę wybrać plik do wysłania';
 $messages['addresswriterror'] = 'Wybrana książka adresowa jest tylko-do-odczytu';
@@ -133,5 +130,17 @@
 $messages['messagecopied'] = 'Wiadomości zostały skopiowane';
 $messages['messagemarked'] = 'Wiadomości zostały oznaczone';
 $messages['autocompletechars'] = 'Wprowadź co najmniej $min znak(ów) aby skorzystać z autouzupełniania';
+$messages['foldersubscribing'] = 'Subskrybowanie folderu...';
+$messages['folderunsubscribing'] = 'Odsubskrybowanie folderu...';
+$messages['foldersubscribed'] = 'Folder pomyślnie zasubskrybowany';
+$messages['folderunsubscribed'] = 'Folder pomyślnie odsubskrybowany';
+$messages['folderpurged'] = 'Folder pomyślnie wyczyszczony';
+$messages['folderexpunged'] = 'Folder pomyślnie opróżniony';
+$messages['namecannotbeempty'] = 'Nazwa nie może być pusta';
+$messages['nametoolong'] = 'Name jest zbyt długa';
+$messages['folderupdated'] = 'Folder pomyślnie zaktualizowany';
+$messages['foldercreated'] = 'Folder pomyślnie utworzony';
+$messages['errorreadonly'] = 'Nie można wykonać operacji. Folder tylko do odczytu';
+$messages['errornoperm'] = 'Nie można wykonać operacji. Brak uprawnień';
 
 ?>
diff --git a/program/localization/ps/labels.inc b/program/localization/ps/labels.inc
index 7dd6430..e7692e7 100755
--- a/program/localization/ps/labels.inc
+++ b/program/localization/ps/labels.inc
@@ -287,9 +287,6 @@
 $labels['messagecount'] = 'استوزي ';
 $labels['create']  = 'جوړول، رامنځ ته کول ';
 $labels['createfolder']  = 'نوې پوښۍ جوړ کړه ';
-$labels['rename'] = 'بيانومول ';
-$labels['renamefolder'] = 'پوښۍ بيانومول ';
-$labels['deletefolder']  = 'پوښۍ ړنګول ';
 $labels['managefolders']  = 'پوښيو څارل ';
 $labels['specialfolders'] = 'ځانګړي پوښۍۍ';
 
diff --git a/program/localization/ps/messages.inc b/program/localization/ps/messages.inc
index c5aae6a..f29475c 100755
--- a/program/localization/ps/messages.inc
+++ b/program/localization/ps/messages.inc
@@ -31,9 +31,7 @@
 $messages['deletemessagesconfirm'] = 'په رښتيا سره غواړئ چې ټاکل شوي استوزي‌ړنګ کړئ؟';
 $messages['deletefolderconfirm']  = 'په رښتيآ سره غواړئ چې دا پوښۍ ړنګه کړئ؟';
 $messages['purgefolderconfirm']  = 'په رښتيا سره غواړئ چې ددې پوښۍ ټول استوزي‌ړنګ کړئ؟';
-$messages['foldercreating'] = 'پوښۍ جوړوي';
 $messages['folderdeleting'] = 'پوښۍ ړنګوي';
-$messages['folderrenaming'] = 'پوښۍ بيانوموي';
 $messages['foldermoving'] = 'پوښۍ خوځوي';
 $messages['formincomplete'] = 'دا پورمه بشپړه ډکه شوې نه ده';
 $messages['noemailwarning'] = 'مهرباني وکړئ د يوه شته برېښناليک پته ورځای کړئ';
@@ -66,7 +64,6 @@
 $messages['receiptsent'] = 'يو لوستل شوی رسليک په بشپړه توګه واستول شو';
 $messages['errorsendingreceipt'] = 'رسليک يې ونه شوای ليږلی';
 $messages['nodeletelastidentity'] = 'تاسې نه شئ کولی چې دا پېژندنه ړنګه کړئ، داستاسو اخرنی پيژندنه ده';
-$messages['addsubfolderhint'] = 'دا پوښۍ د دويمۍ پوښۍ په توګه د ټاکل شوي اوسني ځای کې جوړشي';
 $messages['forbiddencharacter'] = 'د پوښۍ نوم له فوربايډن تورو څخه جوړ دی';
 $messages['selectimportfile'] = 'مهرباني وکړئ‌يو فايل د پورته کولو لپاره وټاکئ';
 $messages['addresswriterror'] = 'ټاکل شوی پتې کتاب د بياليکلو نه دی';
diff --git a/program/localization/pt_BR/labels.inc b/program/localization/pt_BR/labels.inc
index 27c5bb5..ee236d7 100644
--- a/program/localization/pt_BR/labels.inc
+++ b/program/localization/pt_BR/labels.inc
@@ -316,9 +316,6 @@
 $labels['messagecount'] = 'Mensagens';
 $labels['create'] = 'Criar';
 $labels['createfolder'] = 'Criar nova pasta';
-$labels['rename'] = 'Renomear';
-$labels['renamefolder'] = 'Renomear pasta';
-$labels['deletefolder'] = 'Apagar pasta';
 $labels['managefolders'] = 'Gerenciar pastas';
 $labels['specialfolders'] = 'Pastas especiais';
 $labels['sortby'] = 'Ordenado por';
diff --git a/program/localization/pt_BR/messages.inc b/program/localization/pt_BR/messages.inc
index 8e4e39f..2fd9437 100644
--- a/program/localization/pt_BR/messages.inc
+++ b/program/localization/pt_BR/messages.inc
@@ -59,9 +59,7 @@
 $messages['deletemessagesconfirm'] = 'Deseja realmente excluir a(s) mensagem(s) selecionada(s)?';
 $messages['deletefolderconfirm'] = 'Deseja realmente excluir esta pasta?';
 $messages['purgefolderconfirm'] = 'Deseja realmente excluir todas mensagens desta pasta?';
-$messages['foldercreating'] = 'Criando pasta...';
 $messages['folderdeleting'] = 'Apagando pasta...';
-$messages['folderrenaming'] = 'Renomeando pasta...';
 $messages['foldermoving'] = 'Movendo pasta...';
 $messages['formincomplete'] = 'Os campos não foram completamente preenchidos';
 $messages['noemailwarning'] = 'Por favor, informe um endereço de e-mail válido';
@@ -96,7 +94,6 @@
 $messages['receiptsent'] = 'Confirmação de recebimento enviada com sucesso';
 $messages['errorsendingreceipt'] = 'Não foi possível enviar a confirmação de recebimento';
 $messages['nodeletelastidentity'] = 'Você não pode excluir a única identidade';
-$messages['addsubfolderhint'] = 'Esta pasta será criada como uma sub-pasta da que está selecionada';
 $messages['forbiddencharacter'] = 'O nome da pasta contém um caractere não permitido';
 $messages['selectimportfile'] = 'Selecione o arquivo para envio';
 $messages['addresswriterror'] = 'O catálogo de endereços selecionado não tem permissão de modificação';
diff --git a/program/localization/pt_PT/labels.inc b/program/localization/pt_PT/labels.inc
index 0202eb3..8897c51 100644
--- a/program/localization/pt_PT/labels.inc
+++ b/program/localization/pt_PT/labels.inc
@@ -42,8 +42,7 @@
 $labels['cc'] = 'Cc';
 $labels['bcc'] = 'Bcc';
 $labels['replyto'] = 'Responder para';
-$labels['mailreplyto'] = 'Mensagem-Responder-Para';
-$labels['mailfollowupto'] = 'Mensagem-Reencaminhar-Para';
+$labels['followupto'] = 'Reencaminhar-Para';
 $labels['date'] = 'Data';
 $labels['size'] = 'Tamanho';
 $labels['priority'] = 'Prioridade';
@@ -205,8 +204,7 @@
 $labels['addcc'] = 'Adicionar Cc';
 $labels['addbcc'] = 'Adicionar Bcc';
 $labels['addreplyto'] = 'Adicionar Responder para';
-$labels['addmailreplyto'] = 'Adicionar Mensagem-Responder-Para';
-$labels['addmailfollowupto'] = 'Adicionar Mensagem-Reencaminhar-Para';
+$labels['addfollowupto'] = 'Adicionar Reencaminhar-Para';
 $labels['mdnrequest'] = 'O remetente desta mensagem pediu para ser notificado quando esta mensagem fosse lida. Deseja enviar uma notificação?';
 $labels['receiptread'] = 'Recibo de leitura';
 $labels['yourmessage'] = 'Isto é um recibo de leitura da sua mensagem';
@@ -334,11 +332,15 @@
 $labels['messagecount'] = 'Mensagens';
 $labels['create'] = 'Criar';
 $labels['createfolder'] = 'Criar nova pasta';
-$labels['rename'] = 'Renomear';
-$labels['renamefolder'] = 'Renomear pasta';
-$labels['deletefolder'] = 'Eliminar pasta';
 $labels['managefolders'] = 'Gerir pastas';
 $labels['specialfolders'] = 'Pastas especiais (predefinidas)';
+$labels['properties'] = 'Propriedades';
+$labels['folderproperties'] = 'Propriedades da pasta';
+$labels['parentfolder'] = 'Pasta de origem';
+$labels['location'] = 'Localização';
+$labels['info'] = 'Informação';
+$labels['getfoldersize'] = 'Clique para obter o tamanho da pasta';
+$labels['changesubscription'] = 'Clique para alterar a subscrição';
 $labels['sortby'] = 'Ordenar por';
 $labels['sortasc'] = 'Ordenação Ascendente';
 $labels['sortdesc'] = 'Ordenação Descendente';
@@ -365,4 +367,4 @@
 $labels['korean'] = 'Coreano';
 $labels['chinese'] = 'Chinês';
 
-?>
\ No newline at end of file
+?>
diff --git a/program/localization/pt_PT/messages.inc b/program/localization/pt_PT/messages.inc
index 511a2ed..8bd4b39 100644
--- a/program/localization/pt_PT/messages.inc
+++ b/program/localization/pt_PT/messages.inc
@@ -58,10 +58,10 @@
 $messages['deletemessagesconfirm'] = 'Deseja realmente eliminar a(s) mensagem(ns) selecionada(s)?';
 $messages['deletefolderconfirm'] = 'Deseja realmente eliminar esta pasta?';
 $messages['purgefolderconfirm'] = 'Deseja realmente eliminar todas mensagens desta pasta?';
-$messages['foldercreating'] = 'A criar pasta...';
 $messages['folderdeleting'] = 'A eliminar pasta...';
-$messages['folderrenaming'] = 'A renomear pasta...';
 $messages['foldermoving'] = 'A mover pasta...';
+$messages['foldersubscribing'] = 'A subscrever pasta...';
+$messages['folderunsubscribing'] = 'A cancelar subscrição da pasta...';
 $messages['formincomplete'] = 'Os campos não foram completamente preenchidos';
 $messages['noemailwarning'] = 'Por favor escreva um endereço de e-mail válido';
 $messages['nonamewarning'] = 'Por favor escreva o nome';
@@ -81,6 +81,9 @@
 $messages['checking'] = 'A verificar...';
 $messages['nospellerrors'] = 'Não foi encontrado nenhum erro ortográfico';
 $messages['folderdeleted'] = 'Pasta eliminada com sucesso';
+$messages['foldersubscribed'] = 'Subscrição da pasta concluída com sucesso';
+$messages['folderunsubscribed'] = 'Subscrição da pasta cancelada com sucesso';
+$messages['folderpurged'] = 'Pasta eliminada com sucesso';
 $messages['deletedsuccessfully'] = 'Eliminado com sucesso';
 $messages['converting'] = 'A remover a formatação...';
 $messages['messageopenerror'] = 'Não foi possível carregar a mensagem';
@@ -97,7 +100,6 @@
 $messages['receiptsent'] = 'Recibo de leitura enviadocom sucesso';
 $messages['errorsendingreceipt'] = 'Não foi possível enviar o recibo';
 $messages['nodeletelastidentity'] = 'Esta é a última identidade, não é possível eliminá-la.';
-$messages['addsubfolderhint'] = 'Esta pasta será criada como uma sub-pasta da que está seleccionada';
 $messages['forbiddencharacter'] = 'O nome da pasta contém um caractere inválido';
 $messages['selectimportfile'] = 'Por favor seleccione um ficheiro para carregar';
 $messages['addresswriterror'] = 'Não é possível escrever no livro de endereços seleccionado';
@@ -131,5 +133,9 @@
 $messages['messagecopied'] = 'Mensagens copiadas com sucesso';
 $messages['messagemarked'] = 'Mensagens marcadas com sucesso';
 $messages['autocompletechars'] = 'Indique pelo menos $min caracteres para auto completar';
+$messages['namecannotbeempty'] = 'O nome não pode estar em branco';
+$messages['nametoolong'] = 'O nome é demasiado longo';
+$messages['folderupdated'] = 'Actualização da pasta concluída com sucesso';
+$messages['foldercreated'] = 'Pasta criada com sucesso';
 
-?>
\ No newline at end of file
+?>
diff --git a/program/localization/ro_RO/labels.inc b/program/localization/ro_RO/labels.inc
index 6f77b1f..83778a0 100644
--- a/program/localization/ro_RO/labels.inc
+++ b/program/localization/ro_RO/labels.inc
@@ -310,9 +310,6 @@
 $labels['messagecount'] = 'Mesaje';
 $labels['create'] = 'Creează';
 $labels['createfolder'] = 'Creează dosar nou';
-$labels['rename'] = 'Redenumeşte';
-$labels['renamefolder'] = 'Redenumeşte dosar';
-$labels['deletefolder'] = 'Şterge dosar';
 $labels['managefolders'] = 'Administrează dosare';
 $labels['specialfolders'] = 'Dosare speciale';
 $labels['sortby'] = 'Sortează după';
diff --git a/program/localization/ro_RO/messages.inc b/program/localization/ro_RO/messages.inc
index 8027f42..8ced7d2 100644
--- a/program/localization/ro_RO/messages.inc
+++ b/program/localization/ro_RO/messages.inc
@@ -55,9 +55,7 @@
 $messages['deletemessagesconfirm'] = 'Chiar doriţi să ştergeţi mesajele selectate ?';
 $messages['deletefolderconfirm'] = 'Sunteţi sigur că doriţi să ştergeţi acest dosar?';
 $messages['purgefolderconfirm'] = 'Sunteţi sigur că doriţi să ştergeţi toate mesajele din acest dosar?';
-$messages['foldercreating'] = 'Se creează dosarul...';
 $messages['folderdeleting'] = 'Se şterge dosarul...';
-$messages['folderrenaming'] = 'Se redenumeşte dosarul...';
 $messages['foldermoving'] = 'Se mută dosarul...';
 $messages['formincomplete'] = 'Formularul nu a fost completat corect';
 $messages['noemailwarning'] = 'Vă rugăm să introduceţi o adresă de e-mail validă';
@@ -92,7 +90,6 @@
 $messages['receiptsent'] = 'Confirmarea de citire a fost trimisă cu succes';
 $messages['errorsendingreceipt'] = 'Confirmarea nu a putut fi trimisă';
 $messages['nodeletelastidentity'] = 'Nu puteţi şterge această identitate, este ultima.';
-$messages['addsubfolderhint'] = 'Acest dosar va fi creat ca subdosar al celui selectat.';
 $messages['forbiddencharacter'] = 'Numele dosarului conţine un caracter nepermis.';
 $messages['selectimportfile'] = 'Va rugăm să selectaţi fişierul pentru încărcare';
 $messages['addresswriterror'] = 'Agenda selectată nu poate fi actualizată';
diff --git a/program/localization/ru_RU/labels.inc b/program/localization/ru_RU/labels.inc
index d8e5ff8..6aeeff4 100644
--- a/program/localization/ru_RU/labels.inc
+++ b/program/localization/ru_RU/labels.inc
@@ -40,13 +40,15 @@
 $labels['cc'] = 'Копия';
 $labels['bcc'] = 'Скрытая';
 $labels['replyto'] = 'Ответить';
-$labels['mailreplyto'] = 'Ответить в списке рассылки';
+$labels['followupto'] = 'Followup-To';
 $labels['date'] = 'Дата';
 $labels['size'] = 'Размер';
 $labels['priority'] = 'Приоритет';
 $labels['organization'] = 'Организация';
+$labels['readstatus'] = 'Статус прочтения';
 $labels['reply-to'] = 'Ответить';
-$labels['mailreply-to'] = 'Ответить в списке рассылки';
+$labels['mail-reply-to'] = 'Mail-Reply-To';
+$labels['mail-followup-to'] = 'Mail-Followup-To';
 $labels['mailboxlist'] = 'Папки';
 $labels['messagesfromto'] = 'Сообщения с $from по $to из $count';
 $labels['threadsfromto'] = 'Обсуждения с $from по $to из $count';
@@ -200,7 +202,7 @@
 $labels['addcc'] = 'Копия';
 $labels['addbcc'] = 'Скрытая копия';
 $labels['addreplyto'] = 'Кому ответить';
-$labels['addmailreplyto'] = 'Кому ответить в списке рассылки';
+$labels['addfollowupto'] = 'Добавить Followup-To';
 $labels['mdnrequest'] = 'Отправитель этого сообщения запросил уведомление о прочтении. Отправить уведомление?';
 $labels['receiptread'] = 'Уведомление о прочтении';
 $labels['yourmessage'] = 'Это уведомление о прочтении вашего сообщения';
@@ -212,6 +214,7 @@
 $labels['addcontact'] = 'Добавить выбранные контакты в список контактов';
 $labels['editcontact'] = 'Редактировать контакт';
 $labels['contacts'] = 'Контакты';
+$labels['contactproperties'] = 'Свойства контакта';
 $labels['edit'] = 'Правка';
 $labels['cancel'] = 'Отмена';
 $labels['save'] = 'Сохранить';
@@ -319,6 +322,7 @@
 $labels['afternseconds'] = 'через $n секунд';
 $labels['reqmdn'] = 'Всегда запрашивать уведомление о доставке';
 $labels['reqdsn'] = 'Всегда запрашивать уведомление о состоянии доставки';
+$labels['replysamefolder'] = 'Помещать ответы в ту же папку, где находится оригинал';
 $labels['folder'] = 'Папка';
 $labels['folders'] = 'Папки';
 $labels['foldername'] = 'Имя папки';
@@ -326,9 +330,6 @@
 $labels['messagecount'] = 'Сообщения';
 $labels['create'] = 'Создать';
 $labels['createfolder'] = 'Создать новую папку';
-$labels['rename'] = 'Переименовать';
-$labels['renamefolder'] = 'Переименовать папку';
-$labels['deletefolder'] = 'Удалить папку';
 $labels['managefolders'] = 'Управление папками';
 $labels['specialfolders'] = 'Особые папки';
 $labels['sortby'] = 'Сортировать по';
diff --git a/program/localization/ru_RU/messages.inc b/program/localization/ru_RU/messages.inc
index 75c6d77..f37c078 100644
--- a/program/localization/ru_RU/messages.inc
+++ b/program/localization/ru_RU/messages.inc
@@ -56,9 +56,7 @@
 $messages['deletemessagesconfirm'] = 'Вы действительно хотите удалить выбранные сообщения?';
 $messages['deletefolderconfirm'] = 'Вы действительно хотите удалить эту папку?';
 $messages['purgefolderconfirm'] = 'Вы действительно хотите удалить все сообщения в этой папке?';
-$messages['foldercreating'] = 'Создание папки...';
 $messages['folderdeleting'] = 'Удаление папки...';
-$messages['folderrenaming'] = 'Переименование папки...';
 $messages['foldermoving'] = 'Перемещение папки...';
 $messages['formincomplete'] = 'Заполнены не все поля';
 $messages['noemailwarning'] = 'Пожалуйста, введите корректный адрес электронной почты';
@@ -95,7 +93,6 @@
 $messages['receiptsent'] = 'Уведомление о прочтении отправлено';
 $messages['errorsendingreceipt'] = 'Уведомление о прочтении не отправлено';
 $messages['nodeletelastidentity'] = 'Вы не можете удалить этот профиль, он у вас последний';
-$messages['addsubfolderhint'] = 'Эта папка будет создана как подпапка в текущей папке';
 $messages['forbiddencharacter'] = 'Имя папки содержит недопустимые символы';
 $messages['selectimportfile'] = 'Выберите файл для загрузки';
 $messages['addresswriterror'] = 'Выбранная адресная книга недоступна для записи';
diff --git a/program/localization/si_LK/labels.inc b/program/localization/si_LK/labels.inc
index 632b967..6b3ad9e 100644
--- a/program/localization/si_LK/labels.inc
+++ b/program/localization/si_LK/labels.inc
@@ -179,9 +179,6 @@
 $labels['messagecount'] = 'පනිවුඩ';
 $labels['create'] = 'සෑදීම';
 $labels['createfolder'] = 'අඵත් ෆෝල්ඩරයක් සෑදීම';
-$labels['rename'] = 'නැවත නම් කිරීම';
-$labels['renamefolder'] = 'ෆෝල්ඩරය නැවත නම් කිරීම';
-$labels['deletefolder'] = 'ෆෝල්ඩරය මකා දැමීම';
 $labels['managefolders'] = 'හැසිරවීම හැසිරවීම';
 $labels['sortby'] = 'චිසින් වර්ග කිරීම';
 $labels['sortasc'] = 'ආරෝහණ වර්ග කිරීම';
diff --git a/program/localization/si_LK/messages.inc b/program/localization/si_LK/messages.inc
index 61a0b42..0a5a5fc 100644
--- a/program/localization/si_LK/messages.inc
+++ b/program/localization/si_LK/messages.inc
@@ -76,6 +76,5 @@
 $messages['receiptsent'] = 'කියවීම් භාර ගැනීම සාර්ථකව යවන ලදී';
 $messages['errorsendingreceipt'] = 'කියවීම් භාර ගැනීම යැවීමට නොහැක';
 $messages['nodeletelastidentity'] = 'අවසාන අනන්‍යතාවය මකා දැමිය නොහැක';
-$messages['addsubfolderhint'] = 'ෆෝල්ඩරය දැනට තෝරාගෙන ඇති ෆෝල්ඩරයෙහි අනු ෆෝල්ඩරයක් ලෙස සෑදේ';
 
 ?>
diff --git a/program/localization/sk_SK/labels.inc b/program/localization/sk_SK/labels.inc
index e2c22e0..ce93f88 100644
--- a/program/localization/sk_SK/labels.inc
+++ b/program/localization/sk_SK/labels.inc
@@ -318,9 +318,6 @@
 $labels['messagecount'] = 'Počet správ';
 $labels['create'] = 'Vytvoriť';
 $labels['createfolder'] = 'Vytvor nový priečinok';
-$labels['rename'] = 'Premenovať';
-$labels['renamefolder'] = 'Premenovať priečinok';
-$labels['deletefolder'] = 'Zmazať priečinok';
 $labels['managefolders'] = 'Spravovať priečinky';
 $labels['specialfolders'] = 'Špeciálne priečinky';
 $labels['sortby'] = 'Triediť podľa';
diff --git a/program/localization/sk_SK/messages.inc b/program/localization/sk_SK/messages.inc
index 4476fd7..315038f 100644
--- a/program/localization/sk_SK/messages.inc
+++ b/program/localization/sk_SK/messages.inc
@@ -57,9 +57,7 @@
 $messages['deletemessagesconfirm'] = 'Ste si istý, že chcete zmazať zvolenú(é) správu(y)?';
 $messages['deletefolderconfirm'] = 'Ste si istý, že chcete zmazať tento priečinok?';
 $messages['purgefolderconfirm'] = 'Ste si istý, že chcete zmazať všetky správy v tomto priečinku?';
-$messages['foldercreating'] = 'Vytvára sa priečinok ...';
 $messages['folderdeleting'] = 'Odstraňuje sa priečinok ...';
-$messages['folderrenaming'] = 'Mení sa názov priečinka ...';
 $messages['foldermoving'] = 'Prečinok sa presúva ...';
 $messages['formincomplete'] = 'Formulár nie je kompletne vyplnený';
 $messages['noemailwarning'] = 'Prosím, vložte platnú emailovú adresu';
@@ -94,7 +92,6 @@
 $messages['receiptsent'] = 'Potvrdenie o prijatí správy bolo odoslané';
 $messages['errorsendingreceipt'] = 'Potvrdenie o prijatí správy sa nedalo odoslať';
 $messages['nodeletelastidentity'] = 'Identita sa nedá odstrániť, je posledná a musí zostať.';
-$messages['addsubfolderhint'] = 'Tento priečinok bude vytvorený ako podpriečinok aktuálne zvoleného priečinka';
 $messages['forbiddencharacter'] = 'Názov priečinka obsahuje nepovolený znak';
 $messages['selectimportfile'] = 'Zvoľte súbor, ktorý chcete načítať';
 $messages['addresswriterror'] = 'Zvolený adresár kontaktov je iba na čítanie';
diff --git a/program/localization/sl_SI/labels.inc b/program/localization/sl_SI/labels.inc
index 8b90a00..191a552 100644
--- a/program/localization/sl_SI/labels.inc
+++ b/program/localization/sl_SI/labels.inc
@@ -39,16 +39,15 @@
 $labels['cc'] = 'Kp';
 $labels['bcc'] = 'Skp';
 $labels['replyto'] = 'Odgovor na';
-$labels['mailreplyto'] = 'Odgovor na';
-$labels['mailfollowupto'] = 'Odgovor na';
+$labels['followupto'] = 'Odgovor na';
 $labels['date'] = 'Datum';
 $labels['size'] = 'Velikost';
 $labels['priority'] = 'Prioriteta';
 $labels['organization'] = 'Organizacija';
 $labels['readstatus'] = 'Status';
 $labels['reply-to'] = 'Odgovor na';
-$labels['mailreply-to'] = 'Odgovor na';
-$labels['mailfollowup-to'] = 'Odgovor na';
+$labels['mail-reply-to'] = 'Odgovor na';
+$labels['mail-followup-to'] = 'Odgovor na';
 $labels['mailboxlist'] = 'Mape';
 $labels['messagesfromto'] = 'Sporočila $from do $to od $count';
 $labels['threadsfromto'] = 'Nit $from do $to od $count';
@@ -202,8 +201,7 @@
 $labels['addcc'] = 'Dodaj Kp';
 $labels['addbcc'] = 'Dodaj Skp';
 $labels['addreplyto'] = 'Dodaj naslov za odgovor';
-$labels['addmailreplyto'] = 'Dodaj naslov za odgovor';
-$labels['addmailfollowupto'] = 'Dodaj naslov za odgovor';
+$labels['addfollowupto'] = 'Dodaj naslov za odgovor';
 $labels['mdnrequest'] = 'Pošiljatelj tega sporočila je zaprosil za potrdilo o branju. Želite o tem obvestiti pošiljatelja?';
 $labels['receiptread'] = 'Potrdilo o branju';
 $labels['yourmessage'] = 'To je potrdilo o branju.';
@@ -329,9 +327,6 @@
 $labels['messagecount'] = 'Sporočila';
 $labels['create'] = 'Ustvari';
 $labels['createfolder'] = 'Ustvari novo mapo';
-$labels['rename'] = 'Preimenuj';
-$labels['renamefolder'] = 'Preimenuj mapo';
-$labels['deletefolder'] = 'Izbriši mapo';
 $labels['managefolders'] = 'Uredi mape';
 $labels['specialfolders'] = 'Posebne mape';
 $labels['sortby'] = 'Uredi po';
diff --git a/program/localization/sl_SI/messages.inc b/program/localization/sl_SI/messages.inc
index 7570919..6896858 100644
--- a/program/localization/sl_SI/messages.inc
+++ b/program/localization/sl_SI/messages.inc
@@ -52,9 +52,7 @@
 $messages['deletemessagesconfirm'] = 'Ste prepričani, da želite izbrisati označeno(a) sporočilo(a)?';
 $messages['deletefolderconfirm'] = 'Ste prepričani, da želite to mapo izbrisati?';
 $messages['purgefolderconfirm'] = 'Ste prepričani, da želite izbrisati vsa sporočila v mapi?';
-$messages['foldercreating'] = 'Ustvarjanje mape...';
 $messages['folderdeleting'] = 'Brisanje mape...';
-$messages['folderrenaming'] = 'Preimenovanje mape...';
 $messages['foldermoving'] = 'Premikanje mape...';
 $messages['formincomplete'] = 'Obrazec ni v celoti izpolnjen';
 $messages['noemailwarning'] = 'Vnesite veljaven elektronski naslov';
@@ -89,7 +87,6 @@
 $messages['receiptsent'] = 'Sporočilo o branju je bilo uspešno poslano';
 $messages['errorsendingreceipt'] = 'Sporočila o branju ni bilo mogoče poslati';
 $messages['nodeletelastidentity'] = 'Te identitete ni mogoče izbrisati, saj je edina.';
-$messages['addsubfolderhint'] = 'Ta mapa bo ustvarjena kot podmapa od izbrane mape.';
 $messages['forbiddencharacter'] = 'Ime mape vsebuje nedovoljen znak';
 $messages['selectimportfile'] = 'Izberite datoteko, ki jo želite prenesti';
 $messages['addresswriterror'] = 'Izbran imenik ni zapisljiv';
diff --git a/program/localization/sq_AL/labels.inc b/program/localization/sq_AL/labels.inc
index 2e0f437..51ffb7a 100644
--- a/program/localization/sq_AL/labels.inc
+++ b/program/localization/sq_AL/labels.inc
@@ -180,9 +180,6 @@
 $labels['messagecount'] = 'Mesazhe';
 $labels['create'] = 'Krijo';
 $labels['createfolder'] = 'Krijo kuti të re';
-$labels['rename'] = 'Riemëro';
-$labels['renamefolder'] = 'Riemëro kutinë';
-$labels['deletefolder'] = 'Fshi kutinë';
 $labels['managefolders'] = 'Sistemo kutitë';
 $labels['sortby'] = 'Rradhit sipas';
 $labels['sortasc'] = 'Rradhitje rritëse';
diff --git a/program/localization/sq_AL/messages.inc b/program/localization/sq_AL/messages.inc
index d5bcad6..4af0b1b 100644
--- a/program/localization/sq_AL/messages.inc
+++ b/program/localization/sq_AL/messages.inc
@@ -77,6 +77,5 @@
 $messages['receiptsent'] = 'U dërgua me sukses një njoftim leximi';
 $messages['errorsendingreceipt'] = 'Nuk mund të dërgohet njoftimi';
 $messages['nodeletelastidentity'] = 'Ju nuk mund ta fshini këtë identitet sepse nuk ju ka mbetur tjetër.';
-$messages['addsubfolderhint'] = 'Kjo kuti do të krijohet si një nënkuti e asaj që është e zgjedhur';
 
 ?>
diff --git a/program/localization/sr_CS/labels.inc b/program/localization/sr_CS/labels.inc
index 780e6d6..64f5f37 100644
--- a/program/localization/sr_CS/labels.inc
+++ b/program/localization/sr_CS/labels.inc
@@ -180,9 +180,6 @@
 $labels['messagecount'] = 'Поруке';
 $labels['create'] = 'Креирај';
 $labels['createfolder'] = 'Креирај нову фасциклу';
-$labels['rename'] = 'Преименуј';
-$labels['renamefolder'] = 'Преименуј фасциклу';
-$labels['deletefolder'] = 'Обриши фасциклу';
 $labels['managefolders'] = 'Подеси фасциклу';
 $labels['sortby'] = 'Сортирај по';
 $labels['sortasc'] = 'Сортирај растуће';
diff --git a/program/localization/sr_CS/messages.inc b/program/localization/sr_CS/messages.inc
index 4756b5c..76f178c 100644
--- a/program/localization/sr_CS/messages.inc
+++ b/program/localization/sr_CS/messages.inc
@@ -77,6 +77,5 @@
 $messages['receiptsent'] = 'Успешно послато обавештење о приспећу';
 $messages['errorsendingreceipt'] = 'Неуспело слање обавештења о приспећу';
 $messages['nodeletelastidentity'] = 'Не можете обрисати овај идентитет, он Вам је последњи.';
-$messages['addsubfolderhint'] = 'Ова фасцикла ће бити креирана као подфасцикла тренутне';
 
 ?>
diff --git a/program/localization/sv_SE/labels.inc b/program/localization/sv_SE/labels.inc
index 3519e2b..55dfdda 100644
--- a/program/localization/sv_SE/labels.inc
+++ b/program/localization/sv_SE/labels.inc
@@ -40,12 +40,12 @@
 $labels['cc'] = 'Kopia';
 $labels['bcc'] = 'Hemlig kopia';
 $labels['replyto'] = 'Svara till';
-$labels['mailreplyto'] = 'Mail-Reply-To';
-$labels['mailfollowupto'] = 'Mail-Followup-To';
+$labels['followupto'] = 'Followup-To';
 $labels['date'] = 'Datum';
 $labels['size'] = 'Storlek';
 $labels['priority'] = 'Prioritet';
 $labels['organization'] = 'Organisation';
+$labels['readstatus'] = 'Lässtatus';
 $labels['reply-to'] = 'Svara till';
 $labels['mail-reply-to'] = 'Mail-Reply-To';
 $labels['mail-followup-to'] = 'Mail-Followup-To';
@@ -202,8 +202,7 @@
 $labels['addcc'] = 'Kopia';
 $labels['addbcc'] = 'Hemlig kopia';
 $labels['addreplyto'] = 'Svara till';
-$labels['addmailreplyto'] = 'Lägg till Mail-Reply-To';
-$labels['addmailfollowupto'] = 'Lägg till Mail-Followup-To';
+$labels['addfollowupto'] = 'Lägg till Mail-Followup-To';
 $labels['mdnrequest'] = 'Avsändaren har begärt mottagarkvitto för det här meddelandet. Vill du skicka ett mottagarkvitto?';
 $labels['receiptread'] = 'Mottagarkvitto (läst)';
 $labels['yourmessage'] = 'Det här är ett mottagarkvitto för ditt meddelande';
@@ -215,6 +214,7 @@
 $labels['addcontact'] = 'Lägg till ny kontakt';
 $labels['editcontact'] = 'Redigera kontakt';
 $labels['contacts'] = 'Kontakter';
+$labels['contactproperties'] = 'Kontaktegenskaper';
 $labels['edit'] = 'Redigera';
 $labels['cancel'] = 'Avbryt';
 $labels['save'] = 'Spara';
@@ -322,6 +322,7 @@
 $labels['afternseconds'] = 'Efter $n sekunder';
 $labels['reqmdn'] = 'Begär alltid mottagningskvitto';
 $labels['reqdsn'] = 'Begär alltid leveransstatusmeddelande';
+$labels['replysamefolder'] = 'Placera svar i samma katalog som besvarat meddelande';
 $labels['folder'] = 'Katalog';
 $labels['folders'] = 'Kataloger';
 $labels['foldername'] = 'Katalognamn';
@@ -329,9 +330,6 @@
 $labels['messagecount'] = 'Meddelanden';
 $labels['create'] = 'Skapa';
 $labels['createfolder'] = 'Ny katalog';
-$labels['rename'] = 'Ändra namn';
-$labels['renamefolder'] = 'Ändra katalognamn';
-$labels['deletefolder'] = 'Radera katalog';
 $labels['managefolders'] = 'Hantera kataloger';
 $labels['specialfolders'] = 'Speciella kataloger';
 $labels['sortby'] = 'Sortera på';
diff --git a/program/localization/sv_SE/messages.inc b/program/localization/sv_SE/messages.inc
index 1933d73..6e2a419 100644
--- a/program/localization/sv_SE/messages.inc
+++ b/program/localization/sv_SE/messages.inc
@@ -57,9 +57,7 @@
 $messages['deletemessagesconfirm'] = 'Vill du verkligen ta bort valda meddelanden?';
 $messages['deletefolderconfirm'] = 'Vill du verkligen radera den här katalogen?';
 $messages['purgefolderconfirm'] = 'Vill du verkligen radera alla meddelanden i den här katalogen?';
-$messages['foldercreating'] = 'Skapar katalog...';
 $messages['folderdeleting'] = 'Raderar katalog...';
-$messages['folderrenaming'] = 'Namnändrar katalog...';
 $messages['foldermoving'] = 'Flyttar katalog...';
 $messages['formincomplete'] = 'Formuläret var inte ifyllt i sin helhet';
 $messages['noemailwarning'] = 'Vänligen ange en giltig adress';
@@ -91,10 +89,11 @@
 $messages['errorsavingcontact'] = 'Kunde inte spara kontaktadressen';
 $messages['movingmessage'] = 'Flyttar meddelande...';
 $messages['copyingmessage'] = 'Kopierar meddelande...';
+$messages['deletingmessage'] = 'Raderar meddelande...';
+$messages['markingmessage'] = 'Markerar meddelande...';
 $messages['receiptsent'] = 'Mottagarkvitto har skickats';
 $messages['errorsendingreceipt'] = 'Kunde inte skicka mottagarkvitto';
 $messages['nodeletelastidentity'] = 'Du kan inte radera den här identiteten, det är din sista.';
-$messages['addsubfolderhint'] = 'Den här katalogen kommer att skapas som en underkatalog till den valda';
 $messages['forbiddencharacter'] = 'Katalognamnet innehåller otillåtna tecken';
 $messages['selectimportfile'] = 'Välj en fil att ladda upp';
 $messages['addresswriterror'] = 'Angiven adressbok är skrivskyddad';
@@ -118,5 +117,15 @@
 $messages['toomanyrecipients'] = 'Förmånga mottagare. Minska antalet till högst $max.';
 $messages['maxgroupmembersreached'] = 'Antalet gruppmedlemmar får inte överstiga $max';
 $messages['internalerror'] = 'Ett internt fel uppstod. Vänligen försök igen.';
+$messages['contactdelerror'] = 'Kunde inte radera kontakt';
+$messages['contactdeleted'] = 'Kontakt raderad';
+$messages['groupdeleted'] = 'Grupp raderad';
+$messages['grouprenamed'] = 'Gruppnamn ändrat';
+$messages['groupcreated'] = 'Grupp skapad';
+$messages['messagedeleted'] = 'Meddelande raderat';
+$messages['messagemoved'] = 'Meddelande flyttat';
+$messages['messagecopied'] = 'Meddelande kopierat';
+$messages['messagemarked'] = 'Meddelande markerat';
+$messages['autocompletechars'] = 'Ange minst $min tecken för automatisk komplettering';
 
 ?>
diff --git a/program/localization/ta_IN/labels.inc b/program/localization/ta_IN/labels.inc
index 9492ad9..2045c7b 100644
--- a/program/localization/ta_IN/labels.inc
+++ b/program/localization/ta_IN/labels.inc
@@ -272,9 +272,6 @@
 $labels['messagecount'] = 'செய்திகள்';
 $labels['create'] = 'உருவாக்கு';
 $labels['createfolder'] = 'புது அடைவு உருவாக்கு';
-$labels['rename'] = 'மறுபெயரிடு';
-$labels['renamefolder'] = 'அடைவை மறுபெயரிடு';
-$labels['deletefolder'] = 'அடைவை நீக்கு';
 $labels['managefolders'] = 'அடைவுகளை நிற்வகி';
 $labels['specialfolders'] = 'சிறப்பு அடைவுகள்';
 $labels['sortby'] = 'வாரியாக அடுக்கு';
diff --git a/program/localization/ta_IN/messages.inc b/program/localization/ta_IN/messages.inc
index 40684a5..7f722f6 100644
--- a/program/localization/ta_IN/messages.inc
+++ b/program/localization/ta_IN/messages.inc
@@ -50,9 +50,7 @@
 $messages['deletemessagesconfirm'] = 'நீங்கள் தேர்ந்தெடுத்த செய்திகளை நீக்க விரும்புகிறீர்களா ?';
 $messages['deletefolderconfirm'] = 'நீங்கள் இந்த அடைவை நீக்க விரும்புகிறீர்களா ?';
 $messages['purgefolderconfirm'] = 'நீங்கள் இந்த அடைவிலிருக்கும் எல்லா செய்திகளையும் நீக்க விரும்புகிறீர்களா ?';
-$messages['foldercreating'] = 'அடைவை உருவாக்குகிறது...';
 $messages['folderdeleting'] = 'அடைவை நீக்குகிறது...';
-$messages['folderrenaming'] = 'அடைவை மறுபெயரிடுகிறது...';
 $messages['foldermoving'] = 'அடைவை நகர்த்துகிறது...';
 $messages['formincomplete'] = 'விண்ணப்பத்தை முழுமையாக நிறைவு செய்யவில்லை';
 $messages['noemailwarning'] = 'தயவு செய்து உண்மையான மின்னஞ்சலை எழுதுங்கள்';
@@ -86,7 +84,6 @@
 $messages['receiptsent'] = 'படித்த சீட்டு வெற்றிகரமாக அனுப்பப்பட்டது';
 $messages['errorsendingreceipt'] = 'சீட்டை அனுப்ப முடியவில்லை';
 $messages['nodeletelastidentity'] = 'நீங்கள் இந்த அடையாளத்தை நீக்க முடியாது இது தான் கடைசி';
-$messages['addsubfolderhint'] = 'இந்த அடைவு இப்போது தேர்ந்தெடுக்கப்பட்டதன் துணை அடைவாக உருவாக்கப்படும்';
 $messages['forbiddencharacter'] = 'அடைவு பெயரில் தடை செய்யப்பட்ட எழுத்துக்கள் உள்ளது';
 $messages['selectimportfile'] = 'தயவு செய்து ஏற்றுவதற்கு ஒரு கோப்பை தேர்ந்தெடுங்கள்';
 $messages['addresswriterror'] = 'நீங்கள் தேர்ந்தெடுத்த தொடர்புகளில் எழுத முடியாது';
diff --git a/program/localization/th_TH/labels.inc b/program/localization/th_TH/labels.inc
index 4daa87b..3a6ea49 100644
--- a/program/localization/th_TH/labels.inc
+++ b/program/localization/th_TH/labels.inc
@@ -162,9 +162,6 @@
 $labels['subscribed'] = 'ลงชื่อ';
 $labels['create'] = 'สร้าง';
 $labels['createfolder'] = 'สร้างกล่องจดหมาย';
-$labels['rename'] = 'เปลื่ยนชื่อ';
-$labels['renamefolder'] = 'เปลี่ยนชื่อกล่องจดหมาย';
-$labels['deletefolder'] = 'ลบกล่องจดหมาย';
 $labels['managefolders'] = 'จัดการกล่องจดหมาย';
 $labels['sortby'] = 'เรียงตาม';
 $labels['sortasc'] = 'เรียงจากหน้าไปหลัง';
diff --git a/program/localization/tr_TR/labels.inc b/program/localization/tr_TR/labels.inc
index fc1e0bd..3170733 100644
--- a/program/localization/tr_TR/labels.inc
+++ b/program/localization/tr_TR/labels.inc
@@ -313,9 +313,6 @@
 $labels['messagecount'] = 'Postalar';
 $labels['create'] = 'Oluştur';
 $labels['createfolder'] = 'Yeni klasör oluştur';
-$labels['rename'] = 'Yeniden adlandır';
-$labels['renamefolder'] = 'Klasörü yeniden adlandır';
-$labels['deletefolder'] = 'Klasörü sil';
 $labels['managefolders'] = 'Klasörleri düzenle';
 $labels['specialfolders'] = 'Özel klasörler';
 $labels['sortby'] = 'Sırala';
diff --git a/program/localization/tr_TR/messages.inc b/program/localization/tr_TR/messages.inc
index 2d057d3..bab1490 100644
--- a/program/localization/tr_TR/messages.inc
+++ b/program/localization/tr_TR/messages.inc
@@ -55,9 +55,7 @@
 $messages['deletemessagesconfirm'] = 'Seçili postaları silmek istediğinizden emin misiniz?';
 $messages['deletefolderconfirm'] = 'Bu klasörü silmek istediğinizden emin misiniz?';
 $messages['purgefolderconfirm'] = 'Bu klasördeki tüm postaları silmek istediğinizden emin misiniz?';
-$messages['foldercreating'] = 'Klasör oluştuluyor...';
 $messages['folderdeleting'] = 'Klasör siliniyor...';
-$messages['folderrenaming'] = 'Klasör yeniden adlandırılıyor...';
 $messages['foldermoving'] = 'Klasör taşınıyor...';
 $messages['formincomplete'] = 'Form tam olarak doldurulmadı';
 $messages['noemailwarning'] = 'Lütfen geçerli bir e-posta adresi girin';
@@ -92,7 +90,6 @@
 $messages['receiptsent'] = 'Okundu onayı gönderildi';
 $messages['errorsendingreceipt'] = 'Okundu onayı gönderilemedi';
 $messages['nodeletelastidentity'] = 'Son kimliğiniz olduğu için bu kimliği silemezsiniz';
-$messages['addsubfolderhint'] = 'Bu klasör, şu an seçili olanın alt klasörü olarak oluşturulacak';
 $messages['forbiddencharacter'] = 'Klasör ismi yasaklanmış bir karakter içeriyor';
 $messages['selectimportfile'] = 'Lütfen yüklenecek dosyayı seçin';
 $messages['addresswriterror'] = 'Seçili adres defterine yazılamaz';
diff --git a/program/localization/uk_UA/labels.inc b/program/localization/uk_UA/labels.inc
index be69f41..877682d 100644
--- a/program/localization/uk_UA/labels.inc
+++ b/program/localization/uk_UA/labels.inc
@@ -38,15 +38,15 @@
 $labels['cc'] = 'Копія';
 $labels['bcc'] = 'Прихована';
 $labels['replyto'] = 'Зворотня адреса';
-$labels['mailreplyto'] = 'Mail-Reply-To';
-$labels['mailfollowupto'] = 'Mail-Followup-To';
+$labels['followupto'] = 'Followup-To';
 $labels['date'] = 'Дата';
 $labels['size'] = 'Розмір';
 $labels['priority'] = 'Пріоритет';
 $labels['organization'] = 'Організація';
+$labels['readstatus'] = 'Статус прочитання';
 $labels['reply-to'] = 'Відповісти';
-$labels['mailreply-to'] = 'Mail-Reply-To';
-$labels['mailfollowup-to'] = 'Mail-Followup-To';
+$labels['mail-reply-to'] = 'Mail-Reply-To';
+$labels['mail-followup-to'] = 'Mail-Followup-To';
 $labels['mailboxlist'] = 'Папки';
 $labels['messagesfromto'] = 'Повідомлення з $from по $to із $count';
 $labels['threadsfromto'] = 'Обговорення з $from по $to із $count';
@@ -200,8 +200,7 @@
 $labels['addcc'] = 'Додати копію';
 $labels['addbcc'] = 'Додати приховану копію';
 $labels['addreplyto'] = 'Додати зворотню адресу';
-$labels['addmailreplyto'] = 'Додати Mail-Reply-To';
-$labels['addmailfollowupto'] = 'Додати Mail-Followup-To';
+$labels['addfollowupto'] = 'Додати Followup-To';
 $labels['mdnrequest'] = 'Відправник цього листа запитав про прочитання. Повідомити відправника?';
 $labels['receiptread'] = 'Повідомлення про прочитання';
 $labels['yourmessage'] = 'Повідомлення про прочитання Вашого листа';
@@ -213,6 +212,7 @@
 $labels['addcontact'] = 'Додати вибрані контакти до списку контактів';
 $labels['editcontact'] = 'Редагувати контакт';
 $labels['contacts'] = 'Контакти';
+$labels['contactproperties'] = 'Властивості контакта';
 $labels['edit'] = 'Правка';
 $labels['cancel'] = 'Скасувати';
 $labels['save'] = 'Зберегти';
@@ -320,6 +320,7 @@
 $labels['afternseconds'] = 'через $n секунд';
 $labels['reqmdn'] = 'Завжди вимагати повідомлення про доставку';
 $labels['reqdsn'] = 'Завжди вимагати повідомлення про статус доставки';
+$labels['replysamefolder'] = 'Розмістити відповіді у тій же папці, де знаходиться оригінал';
 $labels['folder'] = 'Папка';
 $labels['folders'] = 'Папки';
 $labels['foldername'] = 'Назва папки';
@@ -327,9 +328,6 @@
 $labels['messagecount'] = 'Листи';
 $labels['create'] = 'Створити';
 $labels['createfolder'] = 'Створити нову папку';
-$labels['rename'] = 'Перейменувати';
-$labels['renamefolder'] = 'Перейменувати папку';
-$labels['deletefolder'] = 'Видалити папку';
 $labels['managefolders'] = 'Керування папками';
 $labels['specialfolders'] = 'Особливі папки';
 $labels['sortby'] = 'Відсортувати за';
diff --git a/program/localization/uk_UA/messages.inc b/program/localization/uk_UA/messages.inc
index 6ec33e5..c917c31 100644
--- a/program/localization/uk_UA/messages.inc
+++ b/program/localization/uk_UA/messages.inc
@@ -23,6 +23,7 @@
 $messages['sessionerror'] = 'Ваша сесія застаріла';
 $messages['imaperror'] = 'Невдале з`єднання з IMAP сервером';
 $messages['servererror'] = 'Помилка сервера!';
+$messages['servererrormsg'] = 'Помилка сервера: $msg';
 $messages['invalidrequest'] = 'Невірний запит! Дані не збережено.';
 $messages['nomessagesfound'] = 'Листів не знайдено';
 $messages['loggedout'] = 'Вашу сесію завершено. Всього найкращого!';
@@ -54,9 +55,7 @@
 $messages['deletemessagesconfirm'] = 'Ви дійсно бажаєте видалити вибрані листи?';
 $messages['deletefolderconfirm'] = 'Ви дійсно бажаєте видалити цю папку?';
 $messages['purgefolderconfirm'] = 'Ви дійсно бажаєте видалити всі листи у цій папці?';
-$messages['foldercreating'] = 'Створення папки...';
 $messages['folderdeleting'] = 'Видалення папки...';
-$messages['folderrenaming'] = 'Перейменування папки...';
 $messages['foldermoving'] = 'Переміщення папки...';
 $messages['formincomplete'] = 'Заповнено не всі поля';
 $messages['noemailwarning'] = 'Будь ласка, введіть коректну адресу електронної пошти';
@@ -88,10 +87,11 @@
 $messages['errorsavingcontact'] = 'Неможливо зберегти адресу контакту';
 $messages['movingmessage'] = 'Переміщення листа...';
 $messages['copyingmessage'] = 'Копіювання листа...';
+$messages['deletingmessage'] = 'Видалення листа (ів)';
+$messages['markingmessage'] = 'Позначення листа (ів)';
 $messages['receiptsent'] = 'Повідомлення про прочитання відправлено';
 $messages['errorsendingreceipt'] = 'Не вдалося відправити повідомлення про прочитання';
 $messages['nodeletelastidentity'] = 'Ви не можете видалити цей профіль, він у Вас останній.';
-$messages['addsubfolderhint'] = 'Цю папку буде створено як підпапку в поточній.';
 $messages['forbiddencharacter'] = 'Ім\'я папки містить заборонені символи';
 $messages['selectimportfile'] = 'Виберіть файл для завантаження';
 $messages['addresswriterror'] = 'Обрана адресна книга недоступна для запису';
@@ -115,5 +115,15 @@
 $messages['toomanyrecipients'] = 'Занадто багато отримувачів. Зменшіть їх число до $max.';
 $messages['maxgroupmembersreached'] = 'Число адрес у групі перевищило максимум у $max.';
 $messages['internalerror'] = 'Виникла внутрішня помилка. Будь ласка, спробуйте ще раз';
+$messages['contactdelerror'] = 'Неможливо видалити контакт(и)';
+$messages['contactdeleted'] = 'Контакт(и) видалено успішно';
+$messages['groupdeleted'] = 'Група видалена успішно';
+$messages['grouprenamed'] = 'Група перейменована успішно';
+$messages['groupcreated'] = 'Група створена успішно';
+$messages['messagedeleted'] = 'Лист(и) видалено успішно';
+$messages['messagemoved'] = 'Лист(и) переміщено успішно';
+$messages['messagecopied'] = 'Лист(и) скопійовано успішно';
+$messages['messagemarked'] = 'Лист(и) помічено успішно';
+$messages['autocompletechars'] = 'Введіть щонайменьше $min символів для автозаповнення';
 
 ?>
diff --git a/program/localization/vi_VN/labels.inc b/program/localization/vi_VN/labels.inc
index 611b5a4..ece0a5c 100644
--- a/program/localization/vi_VN/labels.inc
+++ b/program/localization/vi_VN/labels.inc
@@ -205,9 +205,6 @@
 $labels['subscribed']  = 'Cho sử dụng';
 $labels['create']  = 'Tạo';
 $labels['createfolder']  = 'Tạo thư mục mới';
-$labels['rename'] = 'Đổi tên';
-$labels['renamefolder'] = 'Đổi tên thư mục';
-$labels['deletefolder']  = 'Xóa thư mục';
 $labels['managefolders']  = 'Quản trị thư mục';
 
 $labels['sortby'] = 'Sắp xếp';
diff --git a/program/localization/zh_CN/labels.inc b/program/localization/zh_CN/labels.inc
index acebdf7..6c3c79a 100644
--- a/program/localization/zh_CN/labels.inc
+++ b/program/localization/zh_CN/labels.inc
@@ -311,9 +311,6 @@
 $labels['messagecount'] = '邮件数量';
 $labels['create'] = '建立';
 $labels['createfolder'] = '建立新邮件夹';
-$labels['rename'] = '重命名';
-$labels['renamefolder'] = '重命名邮件夹';
-$labels['deletefolder'] = '删除邮件夹';
 $labels['managefolders'] = '管理邮件夹';
 $labels['specialfolders'] = '指定邮件夹';
 $labels['sortby'] = '排序';
diff --git a/program/localization/zh_CN/messages.inc b/program/localization/zh_CN/messages.inc
index 5fc0d3f..dbe5af5 100644
--- a/program/localization/zh_CN/messages.inc
+++ b/program/localization/zh_CN/messages.inc
@@ -55,9 +55,7 @@
 $messages['deletemessagesconfirm'] = '确定要删除已选中的邮件?';
 $messages['deletefolderconfirm'] = '确定要删除已选中的邮件夹?';
 $messages['purgefolderconfirm'] = '是否确认要删除当前邮件夹中的所有邮件?';
-$messages['foldercreating'] = '正在创建邮件夹';
 $messages['folderdeleting'] = '正在删除邮件夹';
-$messages['folderrenaming'] = '正在重命名邮件夹';
 $messages['foldermoving'] = '正在移动目录...';
 $messages['formincomplete'] = '当前表单未填写完整,请完整填写';
 $messages['noemailwarning'] = '请输入一个有效的邮件地址';
@@ -92,7 +90,6 @@
 $messages['receiptsent'] = '成功发送了一个已读回执';
 $messages['errorsendingreceipt'] = '无法发送回执';
 $messages['nodeletelastidentity'] = '无法删除这个身份,这是最后一个。';
-$messages['addsubfolderhint'] = '新建的文件夹将成为所选文件夹的子文件夹';
 $messages['forbiddencharacter'] = '目录名包含隐藏字符';
 $messages['selectimportfile'] = '请选择要上传的文件';
 $messages['addresswriterror'] = '已选择的地址簿不可写';
diff --git a/program/localization/zh_TW/labels.inc b/program/localization/zh_TW/labels.inc
index c05622e..886d3a3 100644
--- a/program/localization/zh_TW/labels.inc
+++ b/program/localization/zh_TW/labels.inc
@@ -40,8 +40,7 @@
 $labels['cc'] = '副本';
 $labels['bcc'] = '密件副本';
 $labels['replyto'] = '回覆至';
-$labels['mailreplyto'] = '信件回覆至';
-$labels['mailfollowupto'] = '信件跟隨至';
+$labels['followupto'] = '信件跟隨至';
 $labels['date'] = '日期';
 $labels['size'] = '大小';
 $labels['priority'] = '優先順序';
@@ -203,8 +202,7 @@
 $labels['addcc'] = '新增副本';
 $labels['addbcc'] = '新增密件副本';
 $labels['addreplyto'] = '新增回覆地址';
-$labels['addmailreplyto'] = '新增 信件回覆至';
-$labels['addmailfollowupto'] = '新增 信件跟隨至';
+$labels['addfollowupto'] = '新增 信件跟隨至';
 $labels['mdnrequest'] = '此郵件的寄件者希望在你閱讀此郵件時受到通知。你想要通知寄件者嗎?';
 $labels['receiptread'] = '郵件回條(已閱讀)';
 $labels['yourmessage'] = '這是你郵件的郵件回條';
@@ -332,9 +330,6 @@
 $labels['messagecount'] = '郵件數目';
 $labels['create'] = '建立';
 $labels['createfolder'] = '建立新資料夾';
-$labels['rename'] = '重新命名';
-$labels['renamefolder'] = '重新命名資料夾';
-$labels['deletefolder'] = '刪除資料夾';
 $labels['managefolders'] = '管理資料夾';
 $labels['specialfolders'] = '預設資料夾設定';
 $labels['sortby'] = '排序';
diff --git a/program/localization/zh_TW/messages.inc b/program/localization/zh_TW/messages.inc
index fc3ebbf..68c543f 100644
--- a/program/localization/zh_TW/messages.inc
+++ b/program/localization/zh_TW/messages.inc
@@ -57,9 +57,7 @@
 $messages['deletemessagesconfirm'] = '你確定要刪除已選擇的郵件?';
 $messages['deletefolderconfirm'] = '你確定要刪除這個資料夾嗎?';
 $messages['purgefolderconfirm'] = '你確定要刪除這個資料夾裡面所有的郵件嗎?';
-$messages['foldercreating'] = '建立資料夾中...';
 $messages['folderdeleting'] = '刪除資料夾中...';
-$messages['folderrenaming'] = '重新命名資料夾中...';
 $messages['foldermoving'] = '移動資料夾中...';
 $messages['formincomplete'] = '這個表單有部分未填,請完整填寫';
 $messages['noemailwarning'] = '請輸入一個有效的電子郵件位址';
@@ -96,7 +94,6 @@
 $messages['receiptsent'] = '閱讀回條傳送成功';
 $messages['errorsendingreceipt'] = '無法傳送回條';
 $messages['nodeletelastidentity'] = '你不能刪除此身份,因為只剩一個身份。';
-$messages['addsubfolderhint'] = '此資料夾會成為目前所選資料夾的子資料夾';
 $messages['forbiddencharacter'] = '資料夾名稱中包含非法的字元';
 $messages['selectimportfile'] = '請選擇一個上傳的檔案';
 $messages['addresswriterror'] = '無法寫入選擇的通訊錄';
@@ -129,5 +126,6 @@
 $messages['messagemoved'] = '訊息成功移動';
 $messages['messagecopied'] = '訊息成功複製';
 $messages['messagemarked'] = '訊息成功標示';
+$messages['autocompletechars'] = '輸入至少 $min 字元才能自動完成自動完成';
 
 ?>
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index 828a94f..45b95c9 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -267,19 +267,11 @@
       $param = 'replyto';
       $header = 'reply-to';
 
-    case 'mailreplyto':
-    case 'mail-reply-to':
+    case 'followupto':
+    case 'followup-to':
       if (!$fname) {
-        $fname = '_mailreplyto';
-        $param = 'mailreplyto';
-        $header = 'mail-reply-to';
-      }
-
-    case 'mailfollowupto':
-    case 'mail-followup-to':
-      if (!$fname) {
-        $fname = '_mailfollowupto';
-        $param = 'mailfollowupto';
+        $fname = '_followupto';
+        $param = 'followupto';
         $header = 'mail-followup-to';
       }
 
@@ -354,10 +346,10 @@
       $fvalue = $MESSAGE->get_header('cc');
     else if ($header=='bcc' && !empty($MESSAGE->headers->bcc))
       $fvalue = $MESSAGE->get_header('bcc');
+    else if ($header=='reply-to' && !empty($MESSAGE->headers->others['mail-reply-to']))
+      $fvalue = $MESSAGE->get_header('mail-reply-to');
     else if ($header=='reply-to' && !empty($MESSAGE->headers->replyto))
       $fvalue = $MESSAGE->get_header('reply-to');
-    else if ($header=='mail-reply-to' && !empty($MESSAGE->headers->others['mail-reply-to']))
-      $fvalue = $MESSAGE->get_header('followup-to');
     else if ($header=='mail-followup-to' && !empty($MESSAGE->headers->others['mail-followup-to']))
       $fvalue = $MESSAGE->get_header('mail-followup-to');
 
@@ -742,7 +734,7 @@
   // build reply prefix
   $from = array_pop($RCMAIL->imap->decode_address_list($MESSAGE->get_header('from')));
   $prefix = sprintf("On %s, %s wrote:",
-    $MESSAGE->headers->date, $from['name'] ? $from['name'] : idn_to_utf8($from['email']));
+    $MESSAGE->headers->date, $from['name'] ? $from['name'] : idn_to_utf8($from['mailto']));
 
   if (!$bodyIsHtml) {
     $body = preg_replace('/\r?\n/', "\n", $body);
diff --git a/program/steps/mail/copy.inc b/program/steps/mail/copy.inc
index 4cd51d8..8a7c591 100644
--- a/program/steps/mail/copy.inc
+++ b/program/steps/mail/copy.inc
@@ -33,7 +33,7 @@
 
     if (!$copied) {
         // send error message
-        $OUTPUT->show_message('errorcopying', 'error');
+        rcmail_display_server_error('errorcopying');
         $OUTPUT->send();
         exit;
     }
@@ -52,5 +52,3 @@
 
 // send response
 $OUTPUT->send();
-
-
diff --git a/program/steps/mail/folders.inc b/program/steps/mail/folders.inc
index 26f464b..3b96dc2 100644
--- a/program/steps/mail/folders.inc
+++ b/program/steps/mail/folders.inc
@@ -20,55 +20,61 @@
 
 // only process ajax requests
 if (!$OUTPUT->ajax_call)
-  return;
+    return;
 
 $mbox = get_input_value('_mbox', RCUBE_INPUT_POST, true);
 
 // send EXPUNGE command
-if ($RCMAIL->action=='expunge')
-{
-  $success = $IMAP->expunge($mbox);
+if ($RCMAIL->action == 'expunge') {
 
-  // reload message list if current mailbox
-  if ($success && !empty($_REQUEST['_reload']))
-  {
-    $OUTPUT->command('set_quota', rcmail_quota_content());
-    $OUTPUT->command('message_list.clear');
-    $RCMAIL->action = 'list';
-    return;
-  }
-  else
-    $commands = "// expunged: $success\n";
+    $success = $IMAP->expunge($mbox);
+
+    // reload message list if current mailbox
+    if ($success) {
+        $OUTPUT->show_message('folderexpunged', 'confirmation');
+
+        if (!empty($_REQUEST['_reload'])) {
+            $OUTPUT->command('set_quota', rcmail_quota_content());
+            $OUTPUT->command('message_list.clear');
+            $RCMAIL->action = 'list';
+            return;
+        }
+    }
+    else {
+        rcmail_display_server_error();
+    }
 }
 
 // clear mailbox
-else if ($RCMAIL->action=='purge')
+else if ($RCMAIL->action == 'purge')
 {
-  $delimiter = $IMAP->get_hierarchy_delimiter();
-  $trash_regexp = '/^' . preg_quote($CONFIG['trash_mbox'] . $delimiter, '/') . '/';
-  $junk_regexp = '/^' . preg_quote($CONFIG['junk_mbox'] . $delimiter, '/') . '/';
+    $delimiter = $IMAP->get_hierarchy_delimiter();
+    $trash_regexp = '/^' . preg_quote($CONFIG['trash_mbox'] . $delimiter, '/') . '/';
+    $junk_regexp  = '/^' . preg_quote($CONFIG['junk_mbox'] . $delimiter, '/') . '/';
 
-  // we should only be purging trash and junk (or their subfolders)
-  if ($mbox == $CONFIG['trash_mbox'] || $mbox == $CONFIG['junk_mbox']
-    || preg_match($trash_regexp, $mbox) || preg_match($junk_regexp, $mbox))
-  {
-    $success = $IMAP->clear_mailbox($mbox);
-  
-    if ($success && !empty($_REQUEST['_reload']))
-    {
-      $OUTPUT->set_env('messagecount', 0);
-      $OUTPUT->set_env('pagecount', 0);
-      $OUTPUT->command('message_list.clear');
-      $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text());
-      $OUTPUT->command('set_unread_count', $mbox, 0);
-      $OUTPUT->command('set_quota', rcmail_quota_content());
-      $_SESSION['unseen_count'][$mbox] = 0;
+    // we should only be purging trash and junk (or their subfolders)
+    if ($mbox == $CONFIG['trash_mbox'] || $mbox == $CONFIG['junk_mbox']
+        || preg_match($trash_regexp, $mbox) || preg_match($junk_regexp, $mbox)
+    ) {
+        $success = $IMAP->clear_mailbox($mbox);
+
+        if ($success) {
+            $OUTPUT->show_message('folderpurged', 'confirmation');
+
+            if (!empty($_REQUEST['_reload'])) {
+                $OUTPUT->set_env('messagecount', 0);
+                $OUTPUT->set_env('pagecount', 0);
+                $OUTPUT->command('message_list.clear');
+                $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text());
+                $OUTPUT->command('set_unread_count', $mbox, 0);
+                $OUTPUT->command('set_quota', rcmail_quota_content());
+                rcmail_set_unseen_count($mbox, 0);
+            }
+        }
+        else {
+            rcmail_display_server_error();
+        }
     }
-    else
-      $commands = "// purged: $success";
-  }
 }
 
-$OUTPUT->send($commands);
-
-
+$OUTPUT->send();
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index c7498d5..750cf6f 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -436,65 +436,6 @@
   }
 
 
-function rcmail_quota_display($attrib)
-  {
-  global $OUTPUT;
-
-  if (!$attrib['id'])
-    $attrib['id'] = 'rcmquotadisplay';
-
-  if(isset($attrib['display']))
-    $_SESSION['quota_display'] = $attrib['display'];
-
-  $OUTPUT->add_gui_object('quotadisplay', $attrib['id']);
-
-  $quota = rcmail_quota_content($attrib);
-
-  $OUTPUT->add_script('$(document).ready(function(){
-	rcmail.set_quota('.json_serialize($quota).')});', 'foot');
-
-  return html::span($attrib, '');
-  }
-
-
-function rcmail_quota_content($attrib=NULL)
-  {
-  global $COMM_PATH, $RCMAIL;
-
-  $quota = $RCMAIL->imap->get_quota();
-  $quota = $RCMAIL->plugins->exec_hook('quota', $quota);
-
-  $quota_result = (array) $quota;
-  $quota_result['type'] = isset($_SESSION['quota_display']) ? $_SESSION['quota_display'] : '';
-
-  if (!$quota['total'] && $RCMAIL->config->get('quota_zero_as_unlimited')) {
-    $quota_result['title'] = rcube_label('unlimited');
-    $quota_result['percent'] = 0;
-    }
-  else if ($quota['total']) {
-    if (!isset($quota['percent']))
-      $quota_result['percent'] = min(100, round(($quota['used']/max(1,$quota['total']))*100));
-
-    $title = sprintf('%s / %s (%.0f%%)',
-        show_bytes($quota['used'] * 1024), show_bytes($quota['total'] * 1024),
-        $quota_result['percent']);
-
-    $quota_result['title'] = $title;
-
-    if ($attrib['width'])
-      $quota_result['width'] = $attrib['width'];
-    if ($attrib['height'])
-      $quota_result['height']	= $attrib['height'];
-    }
-  else {
-    $quota_result['title'] = rcube_label('unknown');
-    $quota_result['percent'] = 0;
-    }
-
-  return $quota_result;
-  }
-
-
 function rcmail_get_messagecount_text($count=NULL, $page=NULL)
   {
   global $RCMAIL, $IMAP;
@@ -545,7 +486,7 @@
 {
   global $RCMAIL;
 
-  $old_unseen = $_SESSION['unseen_count'][$mbox_name];
+  $old_unseen = rcmail_get_unseen_count($mbox_name);
 
   if ($count === null)
     $unseen = $RCMAIL->imap->messagecount($mbox_name, 'UNSEEN', $force);
@@ -555,10 +496,30 @@
   if ($unseen != $old_unseen || ($mbox_name == 'INBOX'))
     $RCMAIL->output->command('set_unread_count', $mbox_name, $unseen, ($mbox_name == 'INBOX'));
 
-  // @TODO: this data is doubled (session and cache tables) if caching is enabled
-  $_SESSION['unseen_count'][$mbox_name] = $unseen;
+  rcmail_set_unseen_count($mbox_name, $unseen);
 
   return $unseen;
+}
+
+
+function rcmail_set_unseen_count($mbox_name, $count)
+{
+  // @TODO: this data is doubled (session and cache tables) if caching is enabled
+
+  // Make sure we have an array here (#1487066)
+  if (!is_array($_SESSION['unseen_count']))
+    $_SESSION['unseen_count'] = array();
+
+  $_SESSION['unseen_count'][$mbox_name] = $count;
+}
+
+
+function rcmail_get_unseen_count($mbox_name)
+{
+  if (is_array($_SESSION['unseen_count']) && array_key_exists($mbox_name, $_SESSION['unseen_count']))
+    return $_SESSION['unseen_count'][$mbox_name];
+  else
+    return null;
 }
 
 
@@ -966,10 +927,14 @@
     else
       $header_value = trim($IMAP->decode_header($value));
 
-    $output_headers[$hkey] = array('title' => rcube_label($hkey), 'value' => $header_value, 'raw' => $value);
+    $output_headers[$hkey] = array(
+        'title' => rcube_label(preg_replace('/(^mail-|-)/', '', $hkey)),
+        'value' => $header_value, 'raw' => $value
+    );
   }
 
-  $plugin = $RCMAIL->plugins->exec_hook('message_headers_output', array('output' => $output_headers, 'headers' => $MESSAGE->headers));
+  $plugin = $RCMAIL->plugins->exec_hook('message_headers_output',
+    array('output' => $output_headers, 'headers' => $MESSAGE->headers));
 
   // compose html table
   $table = new html_table(array('cols' => 2));
diff --git a/program/steps/mail/getunread.inc b/program/steps/mail/getunread.inc
index a035f52..e60f36c 100644
--- a/program/steps/mail/getunread.inc
+++ b/program/steps/mail/getunread.inc
@@ -28,15 +28,18 @@
   $check_all = (bool)$RCMAIL->config->get('check_all_folders');
 
   foreach ($a_folders as $mbox_row) {
-    if (!$check_all && isset($_SESSION['unseen_count'][$mbox_row]) && $mbox_row != $current)
-      $unseen = $_SESSION['unseen_count'][$mbox_row];
-    else
-      $unseen = $IMAP->messagecount($mbox_row, 'UNSEEN', !isset($_SESSION['unseen_count'][$mbox_row]));
+    $unseen_old = rcmail_get_unseen_count($mbox_row);
 
-    if ($unseen || !isset($_SESSION['unseen_count'][$mbox_row])) {
+    if (!$check_all && $unseen_old !== null && $mbox_row != $current)
+      $unseen = $unseen_old;
+    else
+      $unseen = $IMAP->messagecount($mbox_row, 'UNSEEN', $unseen_old === null);
+
+    if ($unseen || $unseen_old === null) {
       $OUTPUT->command('set_unread_count', $mbox_row, $unseen, $inbox && $mbox_row == 'INBOX');
     }
-    $_SESSION['unseen_count'][$mbox_row] = $unseen;
+
+    rcmail_set_unseen_count($mbox_row, $unseen);
   }
 }
 
diff --git a/program/steps/mail/list.inc b/program/steps/mail/list.inc
index 6353be7..7e6d294 100644
--- a/program/steps/mail/list.inc
+++ b/program/steps/mail/list.inc
@@ -106,8 +106,7 @@
 else {
   // handle IMAP errors (e.g. #1486905)
   if ($err_code = $IMAP->get_error_code()) {
-    $err_str = $IMAP->get_error_str();
-    $OUTPUT->show_message('servererrormsg', 'error', array('msg' => $err_str));
+    rcmail_display_server_error();
   }
   else if ($search_request)
     $OUTPUT->show_message('searchnomatch', 'notice');
diff --git a/program/steps/mail/mark.inc b/program/steps/mail/mark.inc
index 5411e3f..1ff4407 100644
--- a/program/steps/mail/mark.inc
+++ b/program/steps/mail/mark.inc
@@ -47,7 +47,7 @@
     // send error message
     if ($_POST['_from'] != 'show')
       $OUTPUT->command('list_mailbox');
-    $OUTPUT->show_message('errormarking', 'error');
+    rcmail_display_server_error('errormarking');
     $OUTPUT->send();
     exit;
   }
@@ -98,11 +98,11 @@
       // update mailboxlist
       $mbox = $IMAP->get_mailbox_name();
       $unseen_count = $msg_count ? $IMAP->messagecount($mbox, 'UNSEEN') : 0;
-      $old_unseen = $_SESSION['unseen_count'][$mbox];
+      $old_unseen = rcmail_get_unseen_count($mbox);
 
       if ($old_unseen != $unseen_count) {
         $OUTPUT->command('set_unread_count', $mbox, $unseen_count, ($mbox == 'INBOX'));
-	    $_SESSION['unseen_count'][$mbox] = $unseen_count;
+        rcmail_set_unseen_count($mbox, $unseen_count);
       }
       $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($msg_count));
 
diff --git a/program/steps/mail/move_del.inc b/program/steps/mail/move_del.inc
index 3940b6d..2db3ec3 100644
--- a/program/steps/mail/move_del.inc
+++ b/program/steps/mail/move_del.inc
@@ -39,7 +39,7 @@
         // send error message
 	    if ($_POST['_from'] != 'show')
             $OUTPUT->command('list_mailbox');
-        $OUTPUT->show_message('errormoving', 'error');
+        rcmail_display_server_error('errormoving');
         $OUTPUT->send();
         exit;
     }
@@ -60,7 +60,7 @@
         // send error message
 	    if ($_POST['_from'] != 'show')
             $OUTPUT->command('list_mailbox');
-        $OUTPUT->show_message('errordeleting', 'error');
+        rcmail_display_server_error('errordeleting');
         $OUTPUT->send();
         exit;
     }
@@ -109,11 +109,11 @@
   // update mailboxlist
   $mbox = $IMAP->get_mailbox_name();
   $unseen_count = $msg_count ? $IMAP->messagecount($mbox, 'UNSEEN') : 0;
-  $old_unseen = $_SESSION['unseen_count'][$mbox];
-  
+  $old_unseen = rcmail_get_unseen_count($mbox);
+
   if ($old_unseen != $unseen_count) {
     $OUTPUT->command('set_unread_count', $mbox, $unseen_count, ($mbox == 'INBOX'));
-    $_SESSION['unseen_count'][$mbox] = $unseen_count;
+    rcmail_set_unseen_count($mbox, $unseen_count);
   }
 
   if ($RCMAIL->action=='moveto' && strlen($target)) {
diff --git a/program/steps/mail/search.inc b/program/steps/mail/search.inc
index 90d1c37..39fb32f 100644
--- a/program/steps/mail/search.inc
+++ b/program/steps/mail/search.inc
@@ -124,8 +124,7 @@
 }
 // handle IMAP errors (e.g. #1486905)
 else  if ($err_code = $IMAP->get_error_code()) {
-  $err_str = $IMAP->get_error_str();
-  $OUTPUT->show_message('servererrormsg', 'error', array('msg' => $err_str));
+  rcmail_display_server_error();
 }
 else {
   $OUTPUT->show_message('searchnomatch', 'notice');
diff --git a/program/steps/mail/sendmail.inc b/program/steps/mail/sendmail.inc
index 796e778..09f12ed 100644
--- a/program/steps/mail/sendmail.inc
+++ b/program/steps/mail/sendmail.inc
@@ -70,7 +70,7 @@
 function rcmail_get_identity($id)
 {
   global $USER, $OUTPUT;
-  
+
   if ($sql_arr = $USER->get_identity($id)) {
     $out = $sql_arr;
     $out['mailto'] = $sql_arr['email'];
@@ -100,7 +100,7 @@
 
   // remove any null-byte characters before parsing
   $body = preg_replace('/\x00/', '', $body);
-  
+
   $searchstr = 'program/js/tiny_mce/plugins/emotions/img/';
   $offset = 0;
 
@@ -192,6 +192,7 @@
 
   return implode(', ', $result);
 }
+
 
 /****** compose message ********/
 
@@ -297,12 +298,12 @@
 $headers['To'] = $mailto;
 
 // additional recipients
-if (!empty($mailcc))
+if (!empty($mailcc)) {
   $headers['Cc'] = $mailcc;
-
-if (!empty($mailbcc))
+}
+if (!empty($mailbcc)) {
   $headers['Bcc'] = $mailbcc;
-
+}
 if (!empty($identity_arr['bcc'])) {
   $headers['Bcc'] = ($headers['Bcc'] ? $headers['Bcc'].', ' : '') . $identity_arr['bcc'];
   $RECIPIENT_COUNT ++;
@@ -318,36 +319,43 @@
 // add subject
 $headers['Subject'] = trim(get_input_value('_subject', RCUBE_INPUT_POST, TRUE, $message_charset));
 
-if (!empty($identity_arr['organization']))
+if (!empty($identity_arr['organization'])) {
   $headers['Organization'] = $identity_arr['organization'];
-
-if (!empty($_POST['_replyto']))
+}
+if (!empty($_POST['_replyto'])) {
   $headers['Reply-To'] = rcmail_email_input_format(get_input_value('_replyto', RCUBE_INPUT_POST, TRUE, $message_charset));
-else if (!empty($identity_arr['reply-to']))
+}
+else if (!empty($identity_arr['reply-to'])) {
   $headers['Reply-To'] = rcmail_email_input_format($identity_arr['reply-to'], false, true);
-
-if (!empty($_POST['_mailfollowupto']))
-  $headers['Mail-Followup-To'] = rcmail_email_input_format(get_input_value('_mailfollowupto', RCUBE_INPUT_POST, TRUE, $message_charset));
-if (!empty($_POST['_mailreplyto']))
-  $headers['Mail-Reply-To'] = rcmail_email_input_format(get_input_value('_mailreplyto', RCUBE_INPUT_POST, TRUE, $message_charset));
-
-if (!empty($_SESSION['compose']['reply_msgid']))
+}
+if (!empty($headers['Reply-To'])) {
+  $headers['Mail-Reply-To'] = $headers['Reply-To'];
+}
+if (!empty($_POST['_followupto'])) {
+  $headers['Mail-Followup-To'] = rcmail_email_input_format(get_input_value('_followupto', RCUBE_INPUT_POST, TRUE, $message_charset));
+}
+if (!empty($_SESSION['compose']['reply_msgid'])) {
   $headers['In-Reply-To'] = $_SESSION['compose']['reply_msgid'];
+}
 
 // remember reply/forward UIDs in special headers
-if (!empty($_SESSION['compose']['reply_uid']) && $savedraft)
+if (!empty($_SESSION['compose']['reply_uid']) && $savedraft) {
   $headers['X-Draft-Info'] = array('type' => 'reply', 'uid' => $_SESSION['compose']['reply_uid']);
-else if (!empty($_SESSION['compose']['forward_uid']) && $savedraft)
+}
+else if (!empty($_SESSION['compose']['forward_uid']) && $savedraft) {
   $headers['X-Draft-Info'] = array('type' => 'forward', 'uid' => $_SESSION['compose']['forward_uid']);
+}
 
-if (!empty($_SESSION['compose']['references']))
+if (!empty($_SESSION['compose']['references'])) {
   $headers['References'] = $_SESSION['compose']['references'];
+}
 
 if (!empty($_POST['_priority'])) {
   $priority = intval($_POST['_priority']);
   $a_priorities = array(1=>'highest', 2=>'high', 4=>'low', 5=>'lowest');
-  if ($str_priority = $a_priorities[$priority])
+  if ($str_priority = $a_priorities[$priority]) {
     $headers['X-Priority'] = sprintf("%d (%s)", $priority, ucfirst($str_priority));
+  }
 }
 
 if (!empty($_POST['_receipt'])) {
@@ -359,11 +367,12 @@
 $headers['Message-ID'] = $message_id;
 $headers['X-Sender'] = $from;
 
-if (is_array($headers['X-Draft-Info']))
+if (is_array($headers['X-Draft-Info'])) {
   $headers['X-Draft-Info'] = rcmail_draftinfo_encode($headers['X-Draft-Info'] + array('folder' => $_SESSION['compose']['mailbox']));
-
-if (!empty($CONFIG['useragent']))
+}
+if (!empty($CONFIG['useragent'])) {
   $headers['User-Agent'] = $CONFIG['useragent'];
+}
 
 // exec hook for header checking and manipulation
 $data = $RCMAIL->plugins->exec_hook('message_outgoing_headers', array('headers' => $headers));
@@ -441,13 +450,16 @@
 
   $MAIL_MIME->setHTMLBody($plugin['body']);
 
+  // replace emoticons
+  $plugin['body'] = rcmail_replace_emoticons($plugin['body']);
+
   // add a plain text version of the e-mail as an alternative part.
   $h2t = new html2text($plugin['body'], false, true, 0);
   $plainTextPart = rc_wordwrap($h2t->get_text(), $LINE_LENGTH, "\r\n");
   $plainTextPart = wordwrap($plainTextPart, 998, "\r\n", true);
   if (!$plainTextPart) {
-    // empty message body breaks attachment handling in drafts 
-    $plainTextPart = "\r\n"; 
+    // empty message body breaks attachment handling in drafts
+    $plainTextPart = "\r\n";
   }
   else {
     // make sure all line endings are CRLF (#1486712)
@@ -513,9 +525,10 @@
         ($attachment['data'] ? false : true),
         ($ctype == 'message/rfc822' ? '8bit' : 'base64'),
         ($ctype == 'message/rfc822' ? 'inline' : 'attachment'),
-        $message_charset, '', '',
+        '', '', '',
         $CONFIG['mime_param_folding'] ? 'quoted-printable' : NULL,
-        $CONFIG['mime_param_folding'] == 2 ? 'quoted-printable' : NULL
+        $CONFIG['mime_param_folding'] == 2 ? 'quoted-printable' : NULL,
+        '', RCMAIL_CHARSET
       );
     }
   }
diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc
index e660207..45dd8e1 100644
--- a/program/steps/mail/show.inc
+++ b/program/steps/mail/show.inc
@@ -196,8 +196,11 @@
 if ($MESSAGE && $MESSAGE->headers && !$MESSAGE->headers->seen &&
   ($RCMAIL->action == 'show' || ($RCMAIL->action == 'preview' && intval($CONFIG['preview_pane_mark_read']) == 0)))
 {
-  if ($IMAP->set_flag($MESSAGE->uid, 'SEEN') && $_SESSION['unseen_count'][$mbox_name])
-    $_SESSION['unseen_count'][$mbox_name] -= 1;
+  if ($IMAP->set_flag($MESSAGE->uid, 'SEEN')) {
+    if ($count = rcmail_get_unseen_count($mbox_name)) {
+      rcmail_set_unseen_count($mbox_name, $count - 1);
+    }
+  }
 }
 
 exit;
diff --git a/program/steps/settings/edit_folder.inc b/program/steps/settings/edit_folder.inc
new file mode 100644
index 0000000..3a7c0d9
--- /dev/null
+++ b/program/steps/settings/edit_folder.inc
@@ -0,0 +1,294 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/steps/settings/edit_folder.inc                                |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2005-2009, Roundcube Dev. - Switzerland                 |
+ | Licensed under the GNU GPL                                            |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Provide functionality to create/edit a folder                       |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                            |
+ +-----------------------------------------------------------------------+
+
+ $Id$
+
+*/
+
+// WARNING: folder names in UI are encoded with RCMAIL_CHARSET
+
+// init IMAP connection
+$RCMAIL->imap_connect();
+
+function rcube_folder_form($attrib)
+{
+    global $RCMAIL;
+
+    // edited folder name (empty in create-folder mode)
+    $mbox      = trim(get_input_value('_mbox', RCUBE_INPUT_GPC, true));
+    $mbox_imap = rcube_charset_convert($mbox, RCMAIL_CHARSET, 'UTF7-IMAP');
+
+    // predefined path for new folder
+    $parent      = trim(get_input_value('_path', RCUBE_INPUT_GPC, true));
+    $parent_imap = rcube_charset_convert($parent, RCMAIL_CHARSET, 'UTF7-IMAP');
+
+    $delimiter = $RCMAIL->imap->get_hierarchy_delimiter();
+    $special   = (strlen($mbox_imap) && in_array($mbox_imap, (array) $RCMAIL->config->get('default_imap_folders')));
+    $protected = ($special && $RCMAIL->config->get('protect_default_folders'));
+    $threading_supported = $RCMAIL->imap->get_capability('thread=references')
+        || $IMAP->get_capability('thread=orderedsubject')
+        || $IMAP->get_capability('thread=refs');
+
+    // Get mailbox stats (messages count, etc.), mailbox name and parent
+    if (strlen($mbox)) {
+        $msgcount = $RCMAIL->imap->messagecount($mbox_imap, 'ALL', true, false);
+
+        $path   = explode($delimiter, $mbox_imap);
+        $folder = array_pop($path);
+        $path   = implode($delimiter, $path);
+
+        $folder = rcube_charset_convert($folder, 'UTF7-IMAP');
+
+        $hidden_fields = array('name' => '_mbox', 'value' => $mbox);
+    }
+    else {
+        $path = $parent_imap;
+    }
+
+    $form = array();
+
+    // General tab
+    $form['props'] = array(
+        'name' => rcube_label('properties'),
+    );
+
+    // Location (name)
+    if ($protected)
+        $foldername = rcmail_localize_foldername($mbox_imap);
+    else {
+        if (isset($_POST['_name']))
+            $folder = trim(get_input_value('_name', RCUBE_INPUT_POST, true));
+
+        $foldername = new html_inputfield(array('name' => '_name', 'id' => '_name', 'size' => 30));
+        $foldername = $foldername->show($folder);
+
+        if ($special)
+            $foldername .= '&nbsp;(' . rcmail_localize_foldername($mbox_imap) .')';
+    }
+
+    $form['props']['fieldsets']['location'] = array(
+        'name'  => rcube_label('location'),
+        'content' => array(
+            'name' => array(
+                'label' => rcube_label('foldername'),
+                'value' => $foldername,
+            ),
+        ),
+    );
+
+    if (strlen($path)) {
+        $radio1 = new html_radiobutton(array('name' => '_parent', 'value' => ''));
+        $radio2 = new html_radiobutton(array('name' => '_parent', 'value' => $path));
+        $selected  = isset($_POST['_parent']) ? $_POST['_parent'] : $path;
+
+        $html_path = str_replace($delimiter, ' &raquo; ', rcmail_localize_folderpath($path));
+
+        $folderpath = $radio1->show($selected) . Q(rcube_label('none')) . '&nbsp;'
+            .$radio2->show($selected) . Q($html_path);
+
+        $form['props']['fieldsets']['location']['content']['path'] = array(
+            'label' => rcube_label('parentfolder'),
+            'value' => $folderpath,
+        );
+    }
+
+    // Settings
+    $form['props']['fieldsets']['settings'] = array(
+        'name'  => rcube_label('settings'),
+    );
+
+    // Settings: threading
+    if ($threading_supported) {
+        $select = new html_select(array('name' => '_viewmode', 'id' => '_listmode'));
+        $select->add(rcube_label('list'), 0);
+        $select->add(rcube_label('threads'), 1);
+
+        if (isset($_POST['_viewmode'])) {
+            $value = (int) $_POST['_viewmode'];
+        }
+        else if (strlen($mbox_imap)) {
+            $a_threaded = $RCMAIL->config->get('message_threading', array());
+            $value = (int) isset($a_threaded[$mbox_imap]);
+        }
+
+        $form['props']['fieldsets']['settings']['content']['viewmode'] = array(
+            'label' => rcube_label('listmode'),
+            'value' => $select->show($value),
+        );
+    }
+/*
+    // Settings: sorting column
+    $select = new html_select(array('name' => '_sortcol', 'id' => '_sortcol'));
+    $select->add(rcube_label('nonesort'), '');
+    $select->add(rcube_label('arrival'), 'arrival');
+    $select->add(rcube_label('sentdate'), 'date');
+    $select->add(rcube_label('subject'), 'subject');
+    $select->add(rcube_label('fromto'), 'from');
+    $select->add(rcube_label('replyto'), 'replyto');
+    $select->add(rcube_label('cc'), 'cc');
+    $select->add(rcube_label('size'), 'size');
+
+    $value = isset($_POST['_sortcol']) ? $_POST['_sortcol'] : '';
+
+    $form['props']['fieldsets']['settings']['content']['sortcol'] = array(
+        'label' => rcube_label('listsorting'),
+        'value' => $select->show($value),
+    );
+
+    // Settings: sorting order
+    $select = new html_select(array('name' => '_sortord', 'id' => '_sortord'));
+    $select->add(rcube_label('asc'), 'ASC');
+    $select->add(rcube_label('desc'), 'DESC');
+
+    $value = isset($_POST['_sortord']) ? $_POST['_sortord'] : '';
+
+    $form['props']['fieldsets']['settings']['content']['sortord'] = array(
+        'label' => rcube_label('listorder'),
+        'value' => $select->show(),
+    );
+*/
+    // Information (count, size) - Edit mode
+    if (strlen($mbox)) {
+        // Number of messages
+        $form['props']['fieldsets']['info'] = array(
+            'name'  => rcube_label('info'),
+            'content' => array(
+                'count' => array(
+                    'label' => rcube_label('messagecount'),
+                    'value' => (int) $msgcount,
+                ),
+            ),
+        );
+
+        // Size
+        if ($msgcount) {
+            // create link with folder-size command
+            $onclick = sprintf("return %s.command('folder-size', '%s', this)",
+                JS_OBJECT_NAME, JQ($mbox_imap));
+            $size = html::a(array('href' => '#', 'onclick' => $onclick, 'id' => 'folder-size'),
+                rcube_label('getfoldersize'));
+        }
+        else {
+            // no messages -> zero size
+            $size = 0;
+        }
+        $form['props']['fieldsets']['info']['content']['size'] = array(
+            'label' => rcube_label('size'),
+            'value' => $size,
+        );
+    }
+
+    // Allow plugins to modify folder form content
+    $plugin = $RCMAIL->plugins->exec_hook('folder_form', array('form' => $form));
+
+    $form = $plugin['form'];
+
+    // Set form tags and hidden fields
+    list($form_start, $form_end) = get_form_tags($attrib, 'save-folder', null, $hidden_fields);
+
+    unset($attrib['form']);
+
+    // return the complete edit form as table
+    $out = "$form_start\n";
+
+    // Create form output
+    foreach ($form as $tab) {
+        if (!empty($tab['fieldsets']) && is_array($tab['fieldsets'])) {
+            $content = '';
+            foreach ($tab['fieldsets'] as $fieldset) {
+                $subcontent = rcmail_get_form_part($fieldset);
+                if ($subcontent) {
+                    $content .= html::tag('fieldset', null, html::tag('legend', null, Q($fieldset['name'])) . $subcontent) ."\n";
+                }
+            }
+        }
+        else {
+            $content = rcmail_get_form_part($tab);
+        }
+
+        if ($content) {        
+            $out .= html::tag('fieldset', null, html::tag('legend', null, Q($tab['name'])) . $content) ."\n";
+        }
+    }
+
+    $out .= "\n$form_end";
+
+    $RCMAIL->output->set_env('messagecount', (int) $msgcount);
+
+    return $out;
+}
+
+function rcmail_get_form_part($form)
+{
+    $content = '';
+
+    if (is_array($form['content']) && !empty($form['content'])) {
+        $table = new html_table(array('cols' => 2));
+        foreach ($form['content'] as $col => $colprop) {
+            $colprop['id'] = '_'.$col;
+            $label = !empty($colprop['label']) ? $colprop['label'] : rcube_label($col);
+
+            $table->add('title', sprintf('<label for="%s">%s</label>', $colprop['id'], Q($label)));
+            $table->add(null, $colprop['value']);
+        }
+        $content = $table->show();
+    }
+    else {
+        $content = $tag['content'];
+    }
+
+    return $content;
+}
+
+function rcmail_localize_folderpath($path)
+{
+    global $RCMAIL;
+
+    $protect_folders = $RCMAIL->config->get('protect_default_folders');
+    $default_folders = (array) $RCMAIL->config->get('default_imap_folders');
+    $delimiter       = $RCMAIL->imap->get_hierarchy_delimiter();
+    $path            = explode($delimiter, $path);
+    $result          = array();
+
+    foreach ($path as $idx => $dir) {
+        $directory = implode($delimiter, array_slice($path, 0, $idx+1));
+        if ($protect_folders && in_array($directory, $default_folders)) {
+            unset($result);
+            $result[] = rcmail_localize_foldername($directory);
+        }
+        else if ($protect_folders && in_array($dir, $default_folders)) {
+            $result[] = rcmail_localize_foldername($dir);
+        }
+        else {
+            $result[] = rcube_charset_convert($dir, 'UTF7-IMAP');
+        }
+    }
+
+    return implode($delimiter, $result);
+}
+
+
+//$OUTPUT->set_pagetitle(rcube_label('folders'));
+
+// register UI objects
+$OUTPUT->add_handlers(array(
+    'folderdetails' => 'rcube_folder_form',
+));
+
+$OUTPUT->add_label('nonamewarning');
+
+$OUTPUT->send('folderedit');
diff --git a/program/steps/settings/edit_identity.inc b/program/steps/settings/edit_identity.inc
index ef2be65..f458cbf 100644
--- a/program/steps/settings/edit_identity.inc
+++ b/program/steps/settings/edit_identity.inc
@@ -126,7 +126,8 @@
       foreach ($fieldset['content'] as $col => $colprop) {
         $colprop['id'] = 'rcmfd_'.$col;
 
-        $label = !empty($colprop['label']) ? $colprop['label'] : rcube_label($col);
+        $label = !empty($colprop['label']) ? $colprop['label'] :
+            rcube_label(str_replace('-', '', $col));
         $value = !empty($colprop['value']) ? $colprop['value'] :
             rcmail_get_edit_field($col, $IDENTITY_RECORD[$col], $colprop, $colprop['type']);
 
diff --git a/program/steps/settings/folders.inc b/program/steps/settings/folders.inc
new file mode 100644
index 0000000..7ae4fb3
--- /dev/null
+++ b/program/steps/settings/folders.inc
@@ -0,0 +1,377 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/steps/settings/folders.inc                                    |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2005-2009, Roundcube Dev. - Switzerland                 |
+ | Licensed under the GNU GPL                                            |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Provide functionality of folders management                         |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+ | Author: Thomas Bruederli <roundcube@gmail.com>                        |
+ | Author: Aleksander Machniak <alec@alec.pl>                            |
+ +-----------------------------------------------------------------------+
+
+ $Id$
+
+*/
+
+// WARNING: folder names in UI are encoded with RCMAIL_CHARSET
+
+// init IMAP connection
+$RCMAIL->imap_connect();
+
+// subscribe mailbox
+if ($RCMAIL->action == 'subscribe')
+{
+    $mbox = get_input_value('_mbox', RCUBE_INPUT_POST, true, 'UTF7-IMAP');
+    if (strlen($mbox)) {
+        $result = $IMAP->subscribe(array($mbox));
+
+        // Handle virtual (non-existing) folders
+        if (!$result && $IMAP->get_error_code() == -1 &&
+            $IMAP->get_response_code() == rcube_imap::TRYCREATE
+        ) {
+            $result = $IMAP->create_mailbox($mbox, true);
+            if ($result) {
+                // @TODO: remove 'virtual' class of folder's row
+            }
+        }
+
+        if ($result)
+            $OUTPUT->show_message('foldersubscribed', 'confirmation');
+        else
+            rcmail_display_server_error('errorsaving');
+    }
+}
+
+// unsubscribe mailbox
+else if ($RCMAIL->action == 'unsubscribe')
+{
+    $mbox = get_input_value('_mbox', RCUBE_INPUT_POST, true, 'UTF7-IMAP');
+    if (strlen($mbox)) {
+        $result = $IMAP->unsubscribe(array($mbox));
+        if ($result)
+            $OUTPUT->show_message('folderunsubscribed', 'confirmation');
+        else
+            rcmail_display_server_error('errorsaving');
+    }
+}
+
+// delete an existing mailbox
+else if ($RCMAIL->action == 'delete-folder')
+{
+    $mbox_utf8 = get_input_value('_mbox', RCUBE_INPUT_POST, true);
+    $mbox      = rcube_charset_convert($mbox_utf8, RCMAIL_CHARSET, 'UTF7-IMAP');
+
+    // get folder's children or all folders if the name contains special characters
+    $delimiter = $IMAP->get_hierarchy_delimiter();
+    if ((strpos($mbox, '%') === false) && (strpos($mbox, '*') === false))
+        $a_mboxes  = $IMAP->list_unsubscribed('', $mbox.$delimiter.'*');
+    else
+        $a_mboxes  = $IMAP->list_unsubscribed();
+
+    if (strlen($mbox))
+        $deleted = $IMAP->delete_mailbox($mbox);
+
+    if ($OUTPUT->ajax_call && $deleted) {
+        // Remove folder and subfolders rows
+        $OUTPUT->command('remove_folder_row', $mbox_utf8);
+        foreach ($a_mboxes as $folder) {
+            if (preg_match('/^'. preg_quote($mbox.$delimiter, '/') .'/', $folder)) {
+                $OUTPUT->command('remove_folder_row', rcube_charset_convert($folder, 'UTF7-IMAP'));
+            }
+        }
+        $OUTPUT->show_message('folderdeleted', 'confirmation');
+        // Clear content frame
+        $OUTPUT->command('subscription_select');
+        $OUTPUT->command('set_quota', rcmail_quota_content());
+    }
+    else if (!$deleted) {
+        rcmail_display_server_error('errorsaving');
+    }
+}
+
+// rename an existing mailbox
+else if ($RCMAIL->action == 'rename-folder')
+{
+    $name_utf8    = trim(get_input_value('_folder_newname', RCUBE_INPUT_POST, true));
+    $oldname_utf8 = trim(get_input_value('_folder_oldname', RCUBE_INPUT_POST, true));
+
+    if (strlen($name_utf8) && strlen($oldname_utf8)) {
+        $name    = rcube_charset_convert($name_utf8, RCMAIL_CHARSET, 'UTF7-IMAP');
+        $oldname = rcube_charset_convert($oldname_utf8, RCMAIL_CHARSET, 'UTF7-IMAP');
+
+        $rename = rcmail_rename_folder($oldname, $name);
+    }
+
+    if ($rename && $OUTPUT->ajax_call) {
+        $folderlist = $IMAP->list_unsubscribed();
+        $delimiter  = $IMAP->get_hierarchy_delimiter();
+
+        $regexp = '/^' . preg_quote($name . $delimiter, '/') . '/';
+
+        // subfolders
+        for ($x=sizeof($folderlist)-1; $x>=0; $x--) {
+            if (preg_match($regexp, $folderlist[$x])) {
+                $oldfolder = $oldname . $delimiter . preg_replace($regexp, '', $folderlist[$x]);
+                $foldersplit = explode($delimiter, $folderlist[$x]);
+                $level = count($foldersplit) - 1;
+                $display_rename = str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', $level) 
+                    . rcube_charset_convert($foldersplit[$level], 'UTF7-IMAP');
+
+                $before = isset($folderlist[$x+1]) ? rcube_charset_convert($folderlist[$x+1], 'UTF7-IMAP') : false;
+
+                $OUTPUT->command('replace_folder_row', rcube_charset_convert($oldfolder, 'UTF7-IMAP'),
+                    rcube_charset_convert($folderlist[$x], 'UTF7-IMAP'), $display_rename, $before);
+            }
+        }
+
+        $foldersplit = explode($delimiter, $name);
+        $level = count($foldersplit) - 1;
+        $display_rename = str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', $level) . rcube_charset_convert($foldersplit[$level], 'UTF7-IMAP');
+        $index = array_search($name, $folderlist);
+        $before = $index !== false && isset($folderlist[$index+1]) ? rcube_charset_convert($folderlist[$index+1], 'UTF7-IMAP') : false;
+
+        $OUTPUT->command('replace_folder_row', $oldname_utf8,
+            rcube_charset_convert($name, 'UTF7-IMAP'), $display_rename, $before);
+    }
+    else if (!$rename) {
+        rcmail_display_server_error('errorsaving');
+    }
+}
+
+// clear mailbox
+else if ($RCMAIL->action == 'purge')
+{
+    $mbox_utf8 = get_input_value('_mbox', RCUBE_INPUT_POST, true);
+    $mbox      = rcube_charset_convert($mbox_utf8, RCMAIL_CHARSET, 'UTF7-IMAP');
+    $delimiter = $IMAP->get_hierarchy_delimiter();
+    $trash_regexp = '/^' . preg_quote($CONFIG['trash_mbox'] . $delimiter, '/') . '/';
+
+    // we should only be purging trash (or their subfolders)
+    if (!strlen($CONFIG['trash_mbox']) || $mbox == $CONFIG['trash_mbox']
+        || preg_match($trash_regexp, $mbox)
+    ) {
+        $success = $IMAP->clear_mailbox($mbox);
+        $delete = true;
+    }
+    // copy to Trash
+    else {
+        $success = $IMAP->move_message('1:*', $CONFIG['trash_mbox'], $mbox);
+        $delete = false;
+    }
+
+    if ($success) {
+        $OUTPUT->set_env('messagecount', 0);
+        if ($delete) {
+            $OUTPUT->show_message('folderpurged', 'confirmation');
+            $OUTPUT->command('set_quota', rcmail_quota_content());
+        }
+        else {
+            $OUTPUT->show_message('messagemoved', 'confirmation');
+        }
+        $_SESSION['unseen_count'][$mbox] = 0;
+        $OUTPUT->command('show_folder', $mbox_utf8, null, true);
+    }
+    else {
+        rcmail_display_server_error('errorsaving');
+    }
+}
+
+// get mailbox size
+else if ($RCMAIL->action == 'folder-size')
+{
+    $name = trim(get_input_value('_mbox', RCUBE_INPUT_POST, true));
+
+    $size = $IMAP->get_mailbox_size($name);
+
+    // @TODO: check quota and show percentage usage of specified mailbox?
+
+    if ($size !== false) {
+        $OUTPUT->command('folder_size_update', show_bytes($size));
+    }
+    else {
+        rcmail_display_server_error();
+    }
+}
+
+if ($OUTPUT->ajax_call)
+    $OUTPUT->send();
+
+
+// build table with all folders listed by server
+function rcube_subscription_form($attrib)
+{
+    global $RCMAIL, $IMAP, $CONFIG, $OUTPUT;
+
+    list($form_start, $form_end) = get_form_tags($attrib, 'folders');
+    unset($attrib['form']);
+  
+    if (!$attrib['id'])
+        $attrib['id'] = 'rcmSubscriptionlist';
+
+    $table = new html_table();
+
+    if ($attrib['noheader'] !== true && $attrib['noheader'] != "true") {
+        // add table header
+        $table->add_header('name', rcube_label('foldername'));
+        $table->add_header('subscribed', '');
+    }
+
+    // get folders from server
+    $IMAP->clear_cache('mailboxes');
+
+    $a_unsubscribed = $IMAP->list_unsubscribed();
+    $a_subscribed   = $IMAP->list_mailboxes();
+    $delimiter      = $IMAP->get_hierarchy_delimiter();
+    $a_js_folders   = array();
+    $seen           = array();
+    $list_folders   = array();
+
+    // pre-process folders list
+    foreach ($a_unsubscribed as $i => $folder) {
+        $foldersplit = explode($delimiter, $folder);
+        $name = rcube_charset_convert(array_pop($foldersplit), 'UTF7-IMAP');
+        $parent_folder = join($delimiter, $foldersplit);
+        $level = count($foldersplit);
+
+        // add any necessary "virtual" parent folders
+        if ($parent_folder && !$seen[$parent_folder]) {
+            for ($i=1; $i<=$level; $i++) {
+	            $ancestor_folder = join($delimiter, array_slice($foldersplit, 0, $i));
+	            if ($ancestor_folder && !$seen[$ancestor_folder]++) {
+	                $ancestor_name = rcube_charset_convert($foldersplit[$i-1], 'UTF7-IMAP');
+	                $list_folders[] = array(
+                        'id'      => $ancestor_folder,
+                        'name'    => $ancestor_name,
+                        'level'   => $i-1,
+                        'virtual' => true,
+                    );
+	            }
+            }
+        }
+    
+        $seen[$folder]++;
+
+        $list_folders[] = array(
+            'id'    => $folder,
+            'name'  => $name,
+            'level' => $level,
+        );
+    }
+
+    unset($seen);
+
+    $checkbox_subscribe = new html_checkbox(array(
+        'name'    => '_subscribed[]',
+        'title'   => rcube_label('changesubscription'),
+        'onclick' => JS_OBJECT_NAME.".command(this.checked?'subscribe':'unsubscribe',this.value)",
+    ));
+
+    // create list of available folders
+    foreach ($list_folders as $i => $folder) {
+        $idx        = $i + 1;
+        $subscribed = in_array($folder['id'], $a_subscribed);
+        $protected  = ($CONFIG['protect_default_folders'] == true && in_array($folder['id'], $CONFIG['default_imap_folders']));
+        $classes    = array($i%2 ? 'even' : 'odd');
+
+        $folder_js      = Q($folder['id']);
+        $folder_utf8    = rcube_charset_convert($folder['id'], 'UTF7-IMAP');
+        $display_folder = str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', $folder['level'])
+            . Q($protected ? rcmail_localize_foldername($folder['id']) : $folder['name']);
+    
+        if ($folder['virtual']) {
+            $classes[] = 'virtual';
+        }
+
+        if (!$protected) {
+            $opts = $IMAP->mailbox_options($folder['id']);
+            $noselect = in_array('\\Noselect', $opts);
+        }
+
+        $table->add_row(array('id' => 'rcmrow'.$idx, 'class' => join(' ', $classes)));
+    
+        $table->add('name', $display_folder);
+        $table->add('subscribed', $checkbox_subscribe->show(($subscribed ? $folder_utf8 : ''),
+            array('value' => $folder_utf8, 'disabled' => ($protected || $noselect) ? 'disabled' : '')));
+
+        $a_js_folders['rcmrow'.$idx] = array($folder_utf8, Q($display_folder), $protected || $folder['virtual']);
+    }
+
+    $RCMAIL->plugins->exec_hook('folders_list', array('table' => $table));
+
+    $OUTPUT->add_gui_object('subscriptionlist', $attrib['id']);
+    $OUTPUT->set_env('subscriptionrows', $a_js_folders);
+    $OUTPUT->set_env('defaultfolders', $CONFIG['default_imap_folders']);
+    $OUTPUT->set_env('delimiter', $delimiter);
+
+    return $form_start . $table->show($attrib) . $form_end;
+}
+
+function rcmail_folder_frame($attrib)
+{
+    global $OUTPUT;
+
+    if (!$attrib['id'])
+        $attrib['id'] = 'rcmfolderframe';
+    
+    $attrib['name'] = $attrib['id'];
+
+    $OUTPUT->set_env('contentframe', $attrib['name']);
+    $OUTPUT->set_env('blankpage', $attrib['src'] ? $OUTPUT->abs_url($attrib['src']) : 'program/blank.gif');
+
+    return html::iframe($attrib);
+}
+
+function rcmail_rename_folder($oldname, $newname)
+{
+    global $RCMAIL;
+
+    $delimiter = $RCMAIL->imap->get_hierarchy_delimiter();
+    $rename    = $RCMAIL->imap->rename_mailbox($oldname, $newname);
+
+    // update per-folder options for modified folder and its subfolders
+    if ($rename !== false) {
+        $a_threaded = (array) $RCMAIL->config->get('message_threading', array());
+        $oldprefix  = '/^' . preg_quote($oldname . $delimiter, '/') . '/';
+
+        foreach ($a_threaded as $key => $val) {
+            if ($key == $oldname) {
+                unset($a_threaded[$key]);
+    	        $a_threaded[$newname] = true;
+            }
+            else if (preg_match($oldprefix, $key)) {
+                unset($a_threaded[$key]);
+	            $a_threaded[preg_replace($oldprefix, $newname.$delimiter, $key)] = true;
+            }
+        }
+        $RCMAIL->user->save_prefs(array('message_threading' => $a_threaded));
+
+        return true;
+    }
+
+    return false;
+}
+
+$OUTPUT->set_pagetitle(rcube_label('folders'));
+$OUTPUT->include_script('list.js');
+$OUTPUT->set_env('quota', $IMAP->get_capability('QUOTA'));
+
+// add some labels to client
+$OUTPUT->add_label('deletefolderconfirm', 'purgefolderconfirm', 'folderdeleting',
+    'foldermoving', 'foldersubscribing', 'folderunsubscribing', 'quota');
+
+// register UI objects
+$OUTPUT->add_handlers(array(
+    'foldersubscription' => 'rcube_subscription_form',
+    'folderframe' => 'rcmail_folder_frame',
+    'quotadisplay' => 'rcmail_quota_display',
+));
+
+$OUTPUT->send('folders');
+
diff --git a/program/steps/settings/manage_folders.inc b/program/steps/settings/manage_folders.inc
deleted file mode 100644
index 3a5d909..0000000
--- a/program/steps/settings/manage_folders.inc
+++ /dev/null
@@ -1,443 +0,0 @@
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | program/steps/settings/manage_folders.inc                             |
- |                                                                       |
- | This file is part of the Roundcube Webmail client                     |
- | Copyright (C) 2005-2009, Roundcube Dev. - Switzerland                 |
- | Licensed under the GNU GPL                                            |
- |                                                                       |
- | PURPOSE:                                                              |
- |   Provide functionality to create/delete/rename folders               |
- |                                                                       |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli <roundcube@gmail.com>                        |
- +-----------------------------------------------------------------------+
-
- $Id$
-
-*/
-
-// WARNING: folder names in UI are encoded with RCMAIL_CHARSET
-
-// init IMAP connection
-$RCMAIL->imap_connect();
-
-// subscribe to one or more mailboxes
-if ($RCMAIL->action=='subscribe')
-  {
-  $mbox = get_input_value('_mbox', RCUBE_INPUT_POST, true, 'UTF7-IMAP');
-  if (strlen($mbox))
-    $IMAP->subscribe(array($mbox));
-  }
-
-// unsubscribe one or more mailboxes
-else if ($RCMAIL->action=='unsubscribe')
-  {
-  $mbox = get_input_value('_mbox', RCUBE_INPUT_POST, true, 'UTF7-IMAP');
-  if (strlen($mbox))
-    $IMAP->unsubscribe(array($mbox));
-  }
-
-// enable threading for one or more mailboxes
-else if ($RCMAIL->action=='enable-threading')
-  {
-  $mbox = get_input_value('_mbox', RCUBE_INPUT_POST, true, 'UTF7-IMAP');
-  if (strlen($mbox))
-    rcube_set_threading($mbox, true);
-  }
-
-// enable threading for one or more mailboxes
-else if ($RCMAIL->action=='disable-threading')
-  {
-  $mbox = get_input_value('_mbox', RCUBE_INPUT_POST, true, 'UTF7-IMAP');
-  if (strlen($mbox))
-    rcube_set_threading($mbox, false);
-  }
-
-// create a new mailbox
-else if ($RCMAIL->action=='create-folder')
-  {
-  if (strlen(trim($_POST['_name'])))
-    {
-    $name = trim(get_input_value('_name', RCUBE_INPUT_POST, true, 'UTF7-IMAP'));
-    $create = $IMAP->create_mailbox($name, TRUE);
-    }
-  
-  if ($create && $OUTPUT->ajax_call)
-    {
-    $delimiter = $IMAP->get_hierarchy_delimiter();
-    $folderlist = $IMAP->list_unsubscribed();
-    $index = array_search($create, $folderlist);
-    $before = $index !== false && isset($folderlist[$index+1]) ? rcube_charset_convert($folderlist[$index+1], 'UTF7-IMAP') : false;
-
-    $create = rcube_charset_convert($create, 'UTF7-IMAP');
-    $foldersplit = explode($delimiter, $create);
-    $display_create = str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', substr_count($create, $delimiter))
-        . Q($foldersplit[count($foldersplit)-1]);
-
-    $OUTPUT->command('add_folder_row', $create, $display_create, false, $before);
-    }
-  else if (!$create)
-    {
-    $OUTPUT->show_message('errorsaving', 'error');
-    }
-  }
-
-// rename a mailbox
-else if ($RCMAIL->action=='rename-folder')
-  {
-  if (strlen(trim($_POST['_folder_oldname'])) && strlen(trim($_POST['_folder_newname'])))
-    {
-    $name_utf8 = trim(get_input_value('_folder_newname', RCUBE_INPUT_POST, true));
-    $oldname_utf8 = get_input_value('_folder_oldname', RCUBE_INPUT_POST, true);
-    $name = rcube_charset_convert($name_utf8, RCMAIL_CHARSET, 'UTF7-IMAP');
-    $oldname = rcube_charset_convert($oldname_utf8, RCMAIL_CHARSET, 'UTF7-IMAP');
-
-    $rename = $IMAP->rename_mailbox($oldname, $name);
-    }
-
-  // update per-folder options for modified folder and its subfolders
-  if ($rename) {
-    $a_threaded = $RCMAIL->config->get('message_threading', array()); 
-    $delimiter = $IMAP->get_hierarchy_delimiter();
-    $oldprefix = '/^' . preg_quote($oldname . $delimiter, '/') . '/';
-    foreach ($a_threaded as $key => $val)
-      if ($key == $oldname) {
-        unset($a_threaded[$key]);
-	    $a_threaded[$name] = true;
-        }
-      else if (preg_match($oldprefix, $key)) {
-        unset($a_threaded[$key]);
-	    $a_threaded[preg_replace($oldprefix, $name.$delimiter, $key)] = true;
-      }
-
-    $RCMAIL->user->save_prefs(array('message_threading' => $a_threaded));
-    }
-
-  if ($rename && $OUTPUT->ajax_call)
-    {
-    $folderlist = $IMAP->list_unsubscribed();
-    $delimiter = $IMAP->get_hierarchy_delimiter();
-
-    $regexp = '/^' . preg_quote($rename . $delimiter, '/') . '/';
-
-    // subfolders
-    for ($x=sizeof($folderlist)-1; $x>=0; $x--)
-      {
-      if (preg_match($regexp, $folderlist[$x]))
-        {
-        $oldfolder = $oldname . $delimiter . preg_replace($regexp, '', $folderlist[$x]);
-        $foldersplit = explode($delimiter, $folderlist[$x]);
-        $level = count($foldersplit) - 1;
-        $display_rename = str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', $level)
-          . Q(rcube_charset_convert($foldersplit[$level], 'UTF7-IMAP'));
-
-        $before = isset($folderlist[$x+1]) ? rcube_charset_convert($folderlist[$x+1], 'UTF7-IMAP') : false;
-        
-        $OUTPUT->command('replace_folder_row', rcube_charset_convert($oldfolder, 'UTF7-IMAP'),
-          rcube_charset_convert($folderlist[$x], 'UTF7-IMAP'), $display_rename, $before);
-        }
-      }
-
-    $foldersplit = explode($delimiter, $rename);
-    $level = count($foldersplit) - 1;
-    $display_rename = str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', $level) . Q(rcube_charset_convert($foldersplit[$level], 'UTF7-IMAP'));
-    $index = array_search($rename, $folderlist);
-    $before = $index !== false && isset($folderlist[$index+1]) ? rcube_charset_convert($folderlist[$index+1], 'UTF7-IMAP') : false;
-
-    $OUTPUT->command('replace_folder_row', $oldname_utf8, rcube_charset_convert($rename, 'UTF7-IMAP'), $display_rename, $before);
-    $OUTPUT->command('reset_folder_rename');
-    }
-  else if (!$rename && $OUTPUT->ajax_call)
-    {
-    $OUTPUT->command('reset_folder_rename');
-    $OUTPUT->show_message('errorsaving', 'error');
-    }
-  else if (!$rename)
-    $OUTPUT->show_message('errorsaving', 'error');
-  }
-
-// delete an existing IMAP mailbox
-else if ($RCMAIL->action=='delete-folder')
-  {
-  $a_mboxes = $IMAP->list_unsubscribed();
-  $delimiter = $IMAP->get_hierarchy_delimiter();
-  
-  $mboxes_utf8 = get_input_value('_mboxes', RCUBE_INPUT_POST, true);
-  $mboxes = rcube_charset_convert($mboxes_utf8, RCMAIL_CHARSET, 'UTF7-IMAP');
-
-  if (strlen($mboxes))
-    $deleted = $IMAP->delete_mailbox(array($mboxes));
-
-  if ($OUTPUT->ajax_call && $deleted)
-    {
-    $OUTPUT->command('remove_folder_row', $mboxes_utf8);
-    foreach ($a_mboxes as $mbox)
-      {
-      if (preg_match('/^'. preg_quote($mboxes.$delimiter, '/') .'/', $mbox))
-        {
-        $OUTPUT->command('remove_folder_row', rcube_charset_convert($mbox, 'UTF7-IMAP'));
-        }
-      }
-    $OUTPUT->show_message('folderdeleted', 'confirmation');
-    }
-  else if (!$deleted)
-    {
-    $OUTPUT->show_message('errorsaving', 'error');
-    }
-  }
-
-if ($OUTPUT->ajax_call)
-  $OUTPUT->send();
-
-
-// build table with all folders listed by server
-function rcube_subscription_form($attrib)
-  {
-  global $RCMAIL, $IMAP, $CONFIG, $OUTPUT;
-
-  $threading_supported = $IMAP->get_capability('thread=references')
-    || $IMAP->get_capability('thread=orderedsubject')
-    || $IMAP->get_capability('thread=refs');
-
-  list($form_start, $form_end) = get_form_tags($attrib, 'folders');
-  unset($attrib['form']);
-  
-  if (!$attrib['id'])
-    $attrib['id'] = 'rcmSubscriptionlist';
-
-  $table = new html_table();
-
-  // add table header
-  $table->add_header('name', rcube_label('foldername'));
-  $table->add_header('msgcount', rcube_label('messagecount'));
-  $table->add_header('subscribed', rcube_label('subscribed'));
-  if ($threading_supported)
-    $table->add_header('threaded', rcube_label('threaded'));
-  $table->add_header('rename', '&nbsp;');
-  $table->add_header('delete', '&nbsp;');
-
-  // get folders from server
-  $IMAP->clear_cache('mailboxes');
-
-  $a_unsubscribed = $IMAP->list_unsubscribed();
-  $a_subscribed = $IMAP->list_mailboxes();
-  $a_threaded = $a_threaded_copy = $RCMAIL->config->get('message_threading', array()); 
-  $delimiter = $IMAP->get_hierarchy_delimiter();
-  $a_js_folders = $seen = $list_folders = array();
-
-  // pre-process folders list
-  foreach ($a_unsubscribed as $i => $folder) {
-    $foldersplit = explode($delimiter, $folder);
-    $name = rcube_charset_convert(array_pop($foldersplit), 'UTF7-IMAP');
-    $parent_folder = join($delimiter, $foldersplit);
-    $level = count($foldersplit);
-
-    // add any necessary "virtual" parent folders
-    if ($parent_folder && !$seen[$parent_folder]) {
-      for ($i=1; $i<=$level; $i++) {
-	    $ancestor_folder = join($delimiter, array_slice($foldersplit, 0, $i));
-	    if ($ancestor_folder && !$seen[$ancestor_folder]++) {
-	      $ancestor_name = rcube_charset_convert($foldersplit[$i-1], 'UTF7-IMAP');
-	      $list_folders[] = array('id' => $ancestor_folder, 'name' => $ancestor_name, 'level' => $i-1, 'virtual' => true);
-	    }
-      }
-    }
-    
-    unset($a_threaded_copy[$folder]);
-    
-    $list_folders[] = array('id' => $folder, 'name' => $name, 'level' => $level);
-    $seen[$folder]++;
-  }
-
-  unset($seen);
-
-  // remove 'message_threading' option for not existing folders
-  if ($a_threaded_copy) {
-    foreach ($a_threaded_copy as $key => $val)
-      unset($a_threaded[$key]);
-    unset($a_threaded_copy);
-    $RCMAIL->user->save_prefs(array('message_threading' => $a_threaded));
-  }
-
-  $checkbox_subscribe = new html_checkbox(array(
-    'name' => '_subscribed[]',
-    'onclick' => JS_OBJECT_NAME.".command(this.checked?'subscribe':'unsubscribe',this.value)",
-  ));
-  $checkbox_threaded = new html_checkbox(array(
-    'name' => '_threaded[]',
-    'onclick' => JS_OBJECT_NAME.".command(this.checked?'enable-threading':'disable-threading',this.value)",
-  ));
-  
-  if (!empty($attrib['deleteicon']))
-    $del_button = html::img(array('src' => $CONFIG['skin_path'] . $attrib['deleteicon'], 'alt' => rcube_label('delete')));
-  else
-    $del_button = rcube_label('delete');
-
-  if (!empty($attrib['renameicon']))
-    $edit_button = html::img(array('src' => $CONFIG['skin_path'] . $attrib['renameicon'], 'alt' => rcube_label('rename')));
-  else
-    $edit_button = rcube_label('rename');
-    
-  // create list of available folders
-  foreach ($list_folders as $i => $folder) {
-    $idx = $i + 1;
-    $subscribed = in_array($folder['id'], $a_subscribed);
-    $threaded = $a_threaded[$folder['id']];
-    $protected = ($CONFIG['protect_default_folders'] == true && in_array($folder['id'], $CONFIG['default_imap_folders']));
-    $classes = array($i%2 ? 'even' : 'odd');
-    $folder_js = Q($folder['id']);
-    $display_folder = str_repeat('&nbsp;&nbsp;&nbsp;&nbsp;', $folder['level']) . Q($protected ? rcmail_localize_foldername($folder['id']) : $folder['name']);
-    $folder_utf8 = rcube_charset_convert($folder['id'], 'UTF7-IMAP');
-    
-    if ($folder['virtual']) {
-      $classes[] = 'virtual';
-    }
-
-    if (!$protected) {
-      $opts = $IMAP->mailbox_options($folder['id']);
-      $noselect = in_array('\\Noselect', $opts);
-    }
-
-    $table->add_row(array('id' => 'rcmrow'.$idx, 'class' => join(' ', $classes)));
-    
-    $table->add('name', $display_folder);
-    $table->add('msgcount', (($folder['virtual'] || $noselect) ? '' : $IMAP->messagecount($folder['id'], 'ALL', false, false)));
-    $table->add('subscribed', $checkbox_subscribe->show(($subscribed ? $folder_utf8 : ''),
-      array('value' => $folder_utf8, 'disabled' => ($protected || $noselect) ? 'disabled' : '')));
-    if ($threading_supported) {
-      $table->add('threaded', $folder['virtual'] ? '' :
-            $checkbox_threaded->show(($threaded ? $folder_utf8 : ''), array('value' => $folder_utf8)));
-    }
-    
-    // add rename and delete buttons
-    if (!$protected && !$folder['virtual']) {
-      $table->add('rename', html::a(array('href' => "#rename", 'title' => rcube_label('renamefolder')), $edit_button));
-      $table->add('delete', html::a(array('href' => "#delete", 'title' => rcube_label('deletefolder')), $del_button));
-    }
-    else {
-      $table->add('rename', '&nbsp;');
-      $table->add('delete', '&nbsp;');
-    }
-    
-    $a_js_folders['rcmrow'.$idx] = array($folder_utf8, Q($display_folder), $protected || $folder['virtual']);
-  }
-
-  rcmail::get_instance()->plugins->exec_hook('folders_list', array('table' => $table));
-
-  $OUTPUT->add_gui_object('subscriptionlist', $attrib['id']);
-  $OUTPUT->set_env('subscriptionrows', $a_js_folders);
-  $OUTPUT->set_env('defaultfolders', $CONFIG['default_imap_folders']);
-  $OUTPUT->set_env('delimiter', $delimiter);
-
-  return $form_start . $table->show($attrib) . $form_end;
-  }
-
-
-function rcube_create_folder_form($attrib)
-  {
-  global $OUTPUT;
-  
-  list($form_start, $form_end) = get_form_tags($attrib, 'create-folder');
-  unset($attrib['form']);
-
-  if ($attrib['hintbox'])
-    $OUTPUT->add_gui_object('createfolderhint', $attrib['hintbox']);
-
-  // return the complete edit form as table
-  $out = "$form_start\n";
-
-  $input = new html_inputfield(array('name' => '_folder_name'));
-  $out .= $input->show();
-  
-  if (get_boolean($attrib['button']))
-    {
-    $button = new html_inputfield(array('type' => 'button',
-                                    'value' => rcube_label('create'),
-                                    'onclick' => JS_OBJECT_NAME.".command('create-folder',this.form)"));
-    $out .= $button->show();
-    }
-
-  $out .= "\n$form_end";
-
-  return $out;
-  }
-
-function rcube_rename_folder_form($attrib)
-  {
-  global $CONFIG, $IMAP;
-
-  list($form_start, $form_end) = get_form_tags($attrib, 'rename-folder');
-  unset($attrib['form']);
-
-  // return the complete edit form as table
-  $out = "$form_start\n";
-
-  $a_unsubscribed = $IMAP->list_unsubscribed();
-  $select_folder = new html_select(array('name' => '_folder_oldname', 'id' => 'rcmfd_oldfolder'));
-
-  foreach ($a_unsubscribed as $i => $folder)
-    {
-    if ($CONFIG['protect_default_folders'] == TRUE && in_array($folder,$CONFIG['default_imap_folders'])) 
-      continue;
-
-    $select_folder->add($folder);
-    }
-
-  $out .= $select_folder->show();
-
-  $out .= " to ";
-  $inputtwo = new html_inputfield(array('name' => '_folder_newname'));
-  $out .= $inputtwo->show();
-
-  if (get_boolean($attrib['button']))
-    {
-    $button = new html_inputfield(array('type' => 'button',
-                                    'value' => rcube_label('rename'),
-                                    'onclick' => JS_OBJECT_NAME.".command('rename-folder',this.form)"));
-    $out .= $button->show();
-    }
-
-  $out .= "\n$form_end";
-  
-  return $out;
-  }
-
-
-// (un)set 'threading' for selected folder
-function rcube_set_threading($mbox, $state=true)
-  {
-  global $RCMAIL;
-  $mbox = (array)$mbox;
-  $a_prefs = (array)$RCMAIL->config->get('message_threading');
-
-  if ($state) {
-    foreach ($mbox as $box)
-      $a_prefs[$box] = true;
-    }
-  else {
-    foreach ($mbox as $box)
-      unset($a_prefs[$box]);
-    }
-
-  $RCMAIL->user->save_prefs(array('message_threading' => $a_prefs));
-  }
-
-
-$OUTPUT->set_pagetitle(rcube_label('folders'));
-$OUTPUT->include_script('list.js');
-
-// register UI objects
-$OUTPUT->add_handlers(array(
-  'foldersubscription' => 'rcube_subscription_form',
-  'createfolder' => 'rcube_create_folder_form',
-  'renamefolder' => 'rcube_rename_folder_form'
-));
-
-// add some labels to client
-$OUTPUT->add_label('deletefolderconfirm','addsubfolderhint','forbiddencharacter','folderdeleting','folderrenaming','foldercreating','foldermoving');
-
-$OUTPUT->send('managefolders');
-
diff --git a/program/steps/settings/save_folder.inc b/program/steps/settings/save_folder.inc
new file mode 100644
index 0000000..da646a5
--- /dev/null
+++ b/program/steps/settings/save_folder.inc
@@ -0,0 +1,176 @@
+<?php
+
+/*
+ +-----------------------------------------------------------------------+
+ | program/steps/settings/save_folder.inc                                |
+ |                                                                       |
+ | This file is part of the Roundcube Webmail client                     |
+ | Copyright (C) 2005-2009, Roundcube Dev. - Switzerland                 |
+ | Licensed under the GNU GPL                                            |
+ |                                                                       |
+ | PURPOSE:                                                              |
+ |   Provide functionality to create/edit a folder                       |
+ |                                                                       |
+ +-----------------------------------------------------------------------+
+ | Author: Aleksander Machniak <alec@alec.pl>                            |
+ +-----------------------------------------------------------------------+
+
+ $Id$
+
+*/
+
+// WARNING: folder names in UI are encoded with RCMAIL_CHARSET
+
+// init IMAP connection
+$RCMAIL->imap_connect();
+
+
+$name = trim(get_input_value('_name', RCUBE_INPUT_POST, true));
+$old  = trim(get_input_value('_mbox', RCUBE_INPUT_POST, true));
+$path = trim(get_input_value('_parent', RCUBE_INPUT_POST, true));
+
+$name_imap = rcube_charset_convert($name, RCMAIL_CHARSET, 'UTF7-IMAP');
+$old_imap  = rcube_charset_convert($old, RCMAIL_CHARSET, 'UTF7-IMAP');
+// $path is in UTF7-IMAP already
+
+$delimiter = $IMAP->get_hierarchy_delimiter();
+$special   = (strlen($old_imap) && in_array($old_imap, (array) $RCMAIL->config->get('default_imap_folders')));
+$protected = ($special && $RCMAIL->config->get('protect_default_folders'));
+
+
+// Folder name checks
+if ($protected) {
+}
+else if (!strlen($name)) {
+    $error = rcube_label('cannotbeempty');
+}
+else if (mb_strlen($name) > 128) {
+    $error = rcube_label('nametoolong');
+}
+else {
+    // these characters are problematic e.g. when used in LIST/LSUB
+    foreach (array($delimiter, '%', '*') as $char) {
+        if (strpos($name, $delimiter) !== false) {
+            $error = rcube_label('forbiddencharacter') . " ($char)";
+            break;
+        }
+    }
+}
+
+if ($error) {
+    $OUTPUT->command('display_message', $error, 'error');
+}
+else {
+    if ($protected) {
+        $name_imap = $old_imap;
+    }
+    else if (strlen($path)) {
+        $name_imap = $path . $delimiter . $name_imap;
+    }
+
+    $folder['name']     = $name_imap;
+    $folder['oldname']  = $old_imap;
+    $folder['settings'] = array(
+        // List view mode: 0-list, 1-threads
+        'view_mode'   => (int) get_input_value('_viewmode', RCUBE_INPUT_POST),
+        'sort_column' => get_input_value('_sortcol', RCUBE_INPUT_POST),
+        'sort_order'  => get_input_value('_sortord', RCUBE_INPUT_POST),
+    );
+}
+
+// create a new mailbox
+if (!$error && !strlen($old)) {
+
+    $plugin = $RCMAIL->plugins->exec_hook('folder_create', array('record' => $folder));
+
+    $folder = $plugin['record'];
+
+    if (!$plugin['abort']) {
+        $created = $IMAP->create_mailbox($folder['name'], TRUE);
+    }
+    else {
+        $created = $plugin['result'];
+    }
+
+    if ($created) {
+        // Save folder settings
+        if (isset($_POST['_viewmode'])) {
+            $a_threaded = (array) $RCMAIL->config->get('message_threading', array());
+
+            if ($_POST['_viewmode'])
+                $a_threaded[$folder['name']] = true;
+            else
+                unset($a_threaded[$folder['name']]);
+
+            $RCMAIL->user->save_prefs(array('message_threading' => $a_threaded));
+        }
+
+        $OUTPUT->show_message('foldercreated', 'confirmation');
+        $OUTPUT->command('reload', 250);
+        $OUTPUT->send('iframe');
+    }
+    else {
+        // show error message
+        $OUTPUT->show_message($plugin['message'] ? $plugin['message'] : 'errorsaving', 'error', null, false);
+    }
+}
+
+// update a mailbox
+else if (!$error) {
+    $plugin = $RCMAIL->plugins->exec_hook('folder_update', array('record' => $folder));
+
+    $folder = $plugin['record'];
+    $rename = ($folder['oldname'] != $folder['name']);
+
+    if (!$plugin['abort']) {
+        if ($rename) {
+            $updated = $RCMAIL->imap->rename_mailbox($folder['oldname'], $folder['name']);
+        }
+        else {
+            $updated = true;
+        }
+    }
+    else {
+        $updated = $plugin['result'];
+    }
+
+    if ($updated) {
+        // Update folder settings,
+        if (isset($_POST['_viewmode'])) {
+            $a_threaded = (array) $RCMAIL->config->get('message_threading', array());
+
+            // In case of name change update names of childrens in settings
+            if ($rename) {
+                $delimiter  = $RCMAIL->imap->get_hierarchy_delimiter();
+                $oldprefix  = '/^' . preg_quote($folder['oldname'] . $delimiter, '/') . '/';
+                foreach ($a_threaded as $key => $val) {
+                    if ($key == $folder['oldname']) {
+                        unset($a_threaded[$key]);
+                    }
+                    else if (preg_match($oldprefix, $key)) {
+                        unset($a_threaded[$key]);
+  	                    $a_threaded[preg_replace($oldprefix, $folder['name'].$delimiter, $key)] = true;
+                    }
+                }
+            }
+            if ($_POST['_viewmode'])
+                $a_threaded[$folder['name']] = true;
+            else
+                unset($a_threaded[$folder['name']]);
+
+            $RCMAIL->user->save_prefs(array('message_threading' => $a_threaded));
+        }
+
+        $OUTPUT->show_message('folderupdated', 'confirmation');
+        if ($rename) {
+            $OUTPUT->command('reload', 250);
+            $OUTPUT->send('iframe');
+        }
+    }
+    else {
+        // show error message
+        $OUTPUT->show_message($plugin['message'] ? $plugin['message'] : 'errorsaving', 'error', null, false);
+    }
+}
+
+rcmail_overwrite_action('edit-folder');
diff --git a/program/steps/utils/html2text.inc b/program/steps/utils/html2text.inc
index ef74ec4..15c6a52 100644
--- a/program/steps/utils/html2text.inc
+++ b/program/steps/utils/html2text.inc
@@ -19,7 +19,12 @@
 
 */
 
-$converter = new html2text($HTTP_RAW_POST_DATA);
+$html = $HTTP_RAW_POST_DATA;
+
+// Replace emoticon images with its text representation
+$html = rcmail_replace_emoticons($html);
+
+$converter = new html2text($html);
 
 header('Content-Type: text/plain; charset=UTF-8');
 print rtrim($converter->get_text());
diff --git a/skins/default/common.css b/skins/default/common.css
index 938c68a..622fba9 100644
--- a/skins/default/common.css
+++ b/skins/default/common.css
@@ -249,6 +249,11 @@
   background: url(images/listheader.gif) top left repeat-x #CCC;
 }
 
+.boxtitle .rightalign
+{
+  float: right;
+}
+
 .boxcontent
 {
   padding: 15px 10px 10px 10px;
@@ -861,3 +866,17 @@
   padding-top: 12px;
 }
 
+.quota_text {
+  text-align: center;
+  font-size: 10px;
+  color: #666;
+  border: 1px solid #999;
+  cursor: default;
+}
+.quota_bg { background-color: white; }
+.quota_high { background-color: #F33131; }
+.quota_mid { background-color: #F5AD3C; }
+.quota_low { background-color: #91E164; }
+.quota_text_high { color: white; }
+.quota_text_mid { color: #666; }
+.quota_text_low { color: #666; }
diff --git a/skins/default/functions.js b/skins/default/functions.js
index 3197c98..77cdeb8 100644
--- a/skins/default/functions.js
+++ b/skins/default/functions.js
@@ -353,7 +353,7 @@
 /* Message composing */
 init_compose_form: function()
 {
-  var f, field, fields = ['cc', 'bcc', 'replyto', 'mailreplyto', 'mailfollowupto'],
+  var f, field, fields = ['cc', 'bcc', 'replyto', 'followupto'],
     div = document.getElementById('compose-div'),
     headers_div = document.getElementById('compose-headers-div');
 
diff --git a/skins/default/iehacks.css b/skins/default/iehacks.css
index 2b2180f..29ab8cb 100644
--- a/skins/default/iehacks.css
+++ b/skins/default/iehacks.css
@@ -38,11 +38,6 @@
   height: expression((parseInt(document.documentElement.clientHeight)-105)+'px');
 }
 
-#folder-manager
-{
-  height: expression((parseInt(this.parentNode.offsetHeight)-105)+'px');
-}
-
 #messagetoolbar
 {
   width: expression((parseInt(document.documentElement.clientWidth)-215)+'px');
@@ -90,7 +85,8 @@
 #messageframe,
 #identity-details,
 #contacts-box,
-#prefs-box
+#prefs-box,
+#folder-box
 {
   height: expression(parseInt(this.parentNode.offsetHeight)+'px');
 }
diff --git a/skins/default/mail.css b/skins/default/mail.css
index ead0aa6..7bb308c 100644
--- a/skins/default/mail.css
+++ b/skins/default/mail.css
@@ -1337,8 +1337,7 @@
 #compose-cc,
 #compose-bcc,
 #compose-replyto,
-#compose-mailreplyto,
-#compose-mailfollowupto
+#compose-followupto
 {
   display: none;
 }
@@ -1435,9 +1434,6 @@
   margin-top: 4px;
 }
 
-
-/** quota indicator */
-
 #quota
 {
   position: absolute;
@@ -1453,19 +1449,3 @@
   right: 6px;
   z-index: 101;
 }
-
-.quota_text {
-  text-align: center;
-  font-size: 10px;
-  color: #666;
-  border: 1px solid #999;
-  cursor: default;
-}
-.quota_bg { background-color: white; }
-.quota_high { background-color: #F33131; }
-.quota_mid { background-color: #F5AD3C; }
-.quota_low { background-color: #91E164; }
-.quota_text_high { color: white; }
-.quota_text_mid { color: #666; }
-.quota_text_low { color: #666; }
-
diff --git a/skins/default/settings.css b/skins/default/settings.css
index c902740..5624f80 100644
--- a/skins/default/settings.css
+++ b/skins/default/settings.css
@@ -5,39 +5,18 @@
   width: 300px;
 }
 
-#folder-manager
-{
-  position: absolute;
-  width: 600px;
-  top: 0;
-  left: 0;
-  bottom: 105px;
-  overflow: auto;
-  border: 1px solid #999999;
-}
-
 #folder-manager.droptarget
 {
   border: 1px solid #CC3333;
   background-color: #FFFFA6;
 }
 
-#listbuttons
-{
-  position: absolute;
-  left: 20px;
-  bottom: 18px;
-}
-
-#identities-table
+#identities-table,
+#subscription-table,
+#sections-table
 {
   width: 100%;
   table-layout: fixed;
-}
-
-#subscription-table
-{
-  width: 100%;
 }
 
 #subscription-table input
@@ -50,14 +29,8 @@
 #sections-table tbody td
 {
   cursor: default;
-  overflow: hidden;
   text-overflow: ellipsis;
   -o-text-overflow: ellipsis;
-}
-
-#subscription-table tbody td
-{
-  height: 22px !important;
   height: 18px;
 }
 
@@ -66,49 +39,26 @@
   color: #666;
 }
 
-#subscription-table tr.selected td,
-#subscription-table tr.selected td a
+#subscription-table tr.selected td
 {
   color: #FFFFFF;
   background-color: #CC3333;
 }
 
-#subscription-table tr.droptarget td,
-#subscription-table tr.droptarget td a
+#subscription-table tr.droptarget td
 {
   background-color: #FFFFA6;
 }
 
-#subscription-table thead td.name
+#subscription-table td.name
 {
-  width: 95%;
+  width: auto;
 }
 
-#subscription-table thead td.msgcount,
-#subscription-table thead td.subscribed,
-#subscription-table thead td.threaded
+#subscription-table td.subscribed
 {
-  white-space: nowrap;
-  min-width: 50px;
-}
-
-#subscription-table tbody td.subscribed,
-#subscription-table tbody td.rename,
-#subscription-table tbody td.delete
-{
-  padding: 1px 4px;
-}
-
-#subscription-table thead td.rename,
-#subscription-table thead td.delete
-{
-  width: 30px;
-}
-
-#subscription-table td.name input
-{
-  font: inherit;
-  width: 90%;
+  text-align: right;
+  padding-right: 12px;
 }
 
 #identity-frame
@@ -118,7 +68,9 @@
   border: 1px solid #999999;
 }
 
-#identity-details
+#identity-details,
+#folder-box,
+#prefs-box
 {
   position: absolute;
   top: 0;
@@ -129,7 +81,8 @@
   background-color: #F2F2F2;
 }
 
-#identity-details table td.title
+#identity-details table td.title,
+#folder-details table td.title
 {
   font-weight: bold;
   text-align: right;
@@ -150,6 +103,7 @@
 }
 
 #identities-list,
+#folder-manager,
 #sectionslist
 {
   position: absolute;
@@ -161,24 +115,9 @@
   overflow: hidden;
 }
 
-#sections-table
-{
-  width: 100%;
-  table-layout: fixed;
-}
-
-#prefs-box
-{
-  position: absolute;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  border: 1px solid #999999;
-  overflow: hidden;
-}
-
 body.iframe,
-#prefs-frame
+#prefs-frame,
+#folder-frame
 {
   background-color: #F2F2F2;
   border: none;
@@ -203,3 +142,24 @@
   text-align: right;
   float: right;
 }
+
+#quota
+{
+  position: absolute;
+  top: 3px;
+  right: 8px;
+  width: 100px;
+}
+
+#quotaimg
+{
+  position: absolute;
+  top: 3px;
+  right: 6px;
+  z-index: 101;
+}
+
+#rcmfd_signature
+{
+  font-family: monospace;
+}
diff --git a/skins/default/splitter.js b/skins/default/splitter.js
index de228c5..e11f9fe 100644
--- a/skins/default/splitter.js
+++ b/skins/default/splitter.js
@@ -24,7 +24,7 @@
     // create and position the handle for this splitter
     this.p1pos = this.relative ? $(this.p1).position() : $(this.p1).offset();
     this.p2pos = this.relative ? $(this.p2).position() : $(this.p2).offset();
-    
+
     if (this.horizontal) {
       var top = this.p1pos.top + this.p1.offsetHeight;
       this.layer = new rcube_layer(this.id, {x: 0, y: top, height: 10, 
@@ -92,7 +92,7 @@
   this.onDragStart = function(e)
   {
     // disable text selection while dragging the splitter
-    if (window.webkit || bw.safari)
+    if (bw.konq || bw.chrome || bw.safari)
       document.body.style.webkitUserSelect = 'none';
 
     this.p1pos = this.relative ? $(this.p1).position() : $(this.p1).offset();
@@ -155,7 +155,7 @@
   this.onDragStop = function(e)
   {
     // resume the ability to highlight text
-    if (window.webkit || bw.safari)
+    if (bw.konq || bw.chrome || bw.safari)
       document.body.style.webkitUserSelect = 'auto';
 
     // cancel the listening for drag events
diff --git a/skins/default/templates/compose.html b/skins/default/templates/compose.html
index 99015ab..2dcf8b0 100644
--- a/skins/default/templates/compose.html
+++ b/skins/default/templates/compose.html
@@ -78,18 +78,12 @@
                 <label for="_replyto"><roundcube:label name="replyto" /></label>
             </td>
             <td class="editfield"><roundcube:object name="composeHeaders" part="replyto" form="form" id="_replyto" size="70" tabindex="5" /></td>
-        </tr><tr id="compose-mailreplyto">
+        </tr><tr id="compose-followupto">
             <td class="title top">
-                <a href="#mailreplyto" onclick="return rcmail_ui.hide_header_form('mailreplyto');"><img src="/images/icons/minus.gif" alt="" title="<roundcube:label name='delete' />" /></a>
-                <label for="_mailreplyto"><roundcube:label name="mailreplyto" /></label>
+                <a href="#followupto" onclick="return rcmail_ui.hide_header_form('followupto');"><img src="/images/icons/minus.gif" alt="" title="<roundcube:label name='delete' />" /></a>
+                <label for="_followupto"><roundcube:label name="followupto" /></label>
             </td>
-            <td class="editfield"><roundcube:object name="composeHeaders" part="mailreplyto" form="form" id="_mailreplyto" size="70" tabindex="6" /></td>
-        </tr><tr id="compose-mailfollowupto">
-            <td class="title top">
-                <a href="#mailfollowupto" onclick="return rcmail_ui.hide_header_form('mailfollowupto');"><img src="/images/icons/minus.gif" alt="" title="<roundcube:label name='delete' />" /></a>
-                <label for="_mailfollowupto"><roundcube:label name="mailfollowupto" /></label>
-            </td>
-            <td class="editfield"><roundcube:object name="composeHeaders" part="mailfollowupto" form="form" id="_mailfollowupto" size="70" tabindex="7" /></td>
+            <td class="editfield"><roundcube:object name="composeHeaders" part="followupto" form="form" id="_followupto" size="70" tabindex="7" /></td>
         </tr><tr>
             <td></td>
             <td class="formlinks">
@@ -99,9 +93,7 @@
                 <span class="separator">|</span>
                 <a href="#reply-to" onclick="return rcmail_ui.show_header_form('replyto')" id="replyto-link"><roundcube:label name="addreplyto" /></a>
                 <span class="separator">|</span>
-                <a href="#mailreply-to" onclick="return rcmail_ui.show_header_form('mailreplyto')" id="mailreplyto-link"><roundcube:label name="addmailreplyto" /></a>
-                <span class="separator">|</span>
-                <a href="#mailfollowup-to" onclick="return rcmail_ui.show_header_form('mailfollowupto')" id="mailfollowupto-link"><roundcube:label name="addmailfollowupto" /></a>
+                <a href="#followup-to" onclick="return rcmail_ui.show_header_form('followupto')" id="followupto-link"><roundcube:label name="addfollowupto" /></a>
             </td>
         </tr><tr>
             <td class="title"><label for="compose-subject"><roundcube:label name="subject" /></label></td>
diff --git a/skins/default/templates/folderedit.html b/skins/default/templates/folderedit.html
new file mode 100644
index 0000000..78ddd33
--- /dev/null
+++ b/skins/default/templates/folderedit.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+</head>
+<body class="iframe">
+
+<div id="folder-title" class="boxtitle"><roundcube:label name="folderproperties" /></div>
+
+<div id="folder-details" class="boxcontent">
+  <roundcube:object name="folderdetails" />
+  <p>
+    <roundcube:if condition="!strlen(request:_mbox)" />
+    <input type="button" value="<roundcube:label name="cancel" />" class="button" onclick="history.back()" />&nbsp;
+    <roundcube:endif />
+    <roundcube:button command="save" type="input" class="button mainaction" label="save" />
+  </p>
+</div>
+<script type="text/javascript">rcube_init_tabs('folder-details')</script>
+
+</body>
+</html>
diff --git a/skins/default/templates/folders.html b/skins/default/templates/folders.html
new file mode 100644
index 0000000..1710b8c
--- /dev/null
+++ b/skins/default/templates/folders.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title><roundcube:object name="pagetitle" /></title>
+<roundcube:include file="/includes/links.html" />
+<script type="text/javascript" src="/functions.js"></script>
+<script type="text/javascript" src="/splitter.js"></script>
+<style type="text/css">
+#folder-manager { width: <roundcube:exp expression="!empty(cookie:folderviewsplitter) ? cookie:folderviewsplitter-5 : 295" />px; }
+#folder-box { left: <roundcube:exp expression="!empty(cookie:folderviewsplitter) ? cookie:folderviewsplitter+5 : 305" />px;
+    <roundcube:exp expression="browser:ie ? ('width:expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:folderviewsplitter) ? cookie:folderviewsplitter+5 : 305).')+\\'px\\');') : ''" />
+}
+</style>
+</head>
+<body onload="rcube_init_mail_ui()">
+
+<roundcube:include file="/includes/taskbar.html" />
+<roundcube:include file="/includes/header.html" />
+<roundcube:include file="/includes/settingstabs.html" />
+
+<div id="mainscreen">
+
+<div id="folder-manager">
+<div id="folder-title" class="boxtitle"><roundcube:label name="folders" /><span class="rightalign"><roundcube:label name="subscribed" /></span></div>
+<div class="boxlistcontent">
+    <roundcube:object name="foldersubscription" form="subscriptionform" id="subscription-table" noheader="true"
+        cellpadding="1" cellspacing="0" summary="Folder subscription table" class="records-table" />
+</div>
+<div class="boxfooter">
+    <roundcube:button command="create-folder" type="link" title="createfolder" class="buttonPas addgroup" classAct="button addgroup" content=" " />
+    <roundcube:button name="mailboxmenulink" id="mailboxmenulink" type="link" title="folderactions" class="button groupactions" onclick="rcmail_ui.show_popup('mailboxmenu');return false" content=" " />
+
+    <roundcube:if condition="env:quota" />
+    <img id="quotaimg" src="/images/quota.gif" alt="" />
+    <div id="quota">
+        <roundcube:object name="quotaDisplay" display="image" width="100" height="14" id="quotadisplay" />
+    </div>
+    <roundcube:endif />
+</div>
+</div>
+
+<script type="text/javascript">
+    var folderviewsplit = new rcube_splitter({id:'folderviewsplitter', p1: 'folder-manager', p2: 'folder-box', orientation: 'v', relative: true, start: 300 });
+    rcmail.add_onload('folderviewsplit.init()');
+</script>
+
+<div id="folder-box">
+    <roundcube:object name="folderframe" id="folder-frame" width="100%" height="100%" frameborder="0" src="/watermark.html" />
+</div>
+
+</div>
+
+<div id="mailboxoptionsmenu" class="popupmenu">
+  <ul>
+    <li><roundcube:button command="delete-folder" label="delete" classAct="active" /></li>
+    <li><roundcube:button command="purge" type="link" label="empty" classAct="active" /></li>
+    <roundcube:container name="mailboxoptions" id="mailboxoptionsmenu" />
+  </ul>
+</div>
+
+</body>
+</html>
diff --git a/skins/default/templates/identityedit.html b/skins/default/templates/identityedit.html
index 24c37a6..45c68f1 100644
--- a/skins/default/templates/identityedit.html
+++ b/skins/default/templates/identityedit.html
@@ -40,7 +40,7 @@
 <div id="identity-title" class="boxtitle"><roundcube:object name="steptitle" /></div>
 
 <div class="boxcontent">
-<roundcube:object name="identityform" size="40" textareacols="60" textarearows="6" />
+<roundcube:object name="identityform" size="40" textareacols="70" textarearows="6" />
 <p>
 <roundcube:button command="delete" type="input" class="button" label="delete" condition="env:action=='edit-identity'" style="margin-right:0.5em" />
 <roundcube:button command="save" type="input" class="button mainaction" label="save" />
diff --git a/skins/default/templates/managefolders.html b/skins/default/templates/managefolders.html
deleted file mode 100644
index 164d56f..0000000
--- a/skins/default/templates/managefolders.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title><roundcube:object name="pagetitle" /></title>
-<roundcube:include file="/includes/links.html" />
-<script type="text/javascript" src="/functions.js"></script>
-</head>
-<body>
-
-<roundcube:include file="/includes/taskbar.html" />
-<roundcube:include file="/includes/header.html" />
-<roundcube:include file="/includes/settingstabs.html" />
-
-<form name="subscriptionform" action="./" onsubmit="rcmail.command('create-folder');return false;">
-
-<div id="mainscreen">
-
-<div id="folder-manager">
-<roundcube:object name="foldersubscription" form="subscriptionform" id="subscription-table"
-  cellpadding="1" cellspacing="0" summary="Folder subscription table" class="records-table"
-  deleteIcon="/images/icons/delete.png"
-  renameIcon="/images/icons/rename.png" />
-</div>
-
-<div id="bottomboxes" class="box">
-<div class="boxtitle"><roundcube:label name="createfolder" /></div>
-
-<div class="boxcontent">
-<roundcube:label name="foldername" />:&nbsp;
-<roundcube:object name="createfolder" form="subscriptionform" hintbox="rcmailaddfolderhint" />
-<roundcube:button command="create-folder" type="input" class="button" label="create" />
-<div id="rcmailaddfolderhint" class="hint" style="margin-top:1em; height:16px"></div>
-</div>
-</div>
-
-</div>
-
-</form>
-
-</body>
-</html>

--
Gitblit v1.9.1